GoogleContainerTools/skaffold · error
marshalling event: %w
Error message
marshalling event: %w
What it means
Each event in the handler's eventLog is serialized to JSON via a jsonpb.Marshaler before being written. If marshalling any event fails, the loop aborts with 'marshalling event: %w'. This indicates an event in the log cannot be converted to its protobuf JSON representation.
Source
Thrown at pkg/skaffold/event/event.go:848
// SaveEventsToFile saves the current event log to the filepath provided
func SaveEventsToFile(fp string) error {
handler.logLock.Lock()
// Ensure that the filepath provided has the directories available when attemping to save the file.
dir := filepath.Dir(fp)
if err := os.MkdirAll(dir, 0700); err != nil {
return fmt.Errorf("unable to create directory %q: %w", dir, err)
}
f, err := os.OpenFile(fp, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
if err != nil {
return fmt.Errorf("opening %s: %w", fp, err)
}
defer f.Close()
marshaller := jsonpb.Marshaler{}
for _, ev := range handler.eventLog {
contents := bytes.NewBuffer([]byte{})
if err := marshaller.Marshal(contents, ev); err != nil {
return fmt.Errorf("marshalling event: %w", err)
}
if _, err := f.WriteString(contents.String() + "\n"); err != nil {
return fmt.Errorf("writing string: %w", err)
}
}
handler.logLock.Unlock()
return nil
}
View on GitHub (pinned to a1189de023)
Solutions
- Report the wrapped inner error upstream — a valid event should always marshal; inspect which event index fails
- Restart the skaffold session to rebuild a clean event log
- Ensure all skaffold components (binary, plugins) are the same version
- If in a fork, verify custom event types are registered with the JSONPB marshaller
Defensive patterns
Strategy: try-catch
Validate before calling
for _, ev := range handler.eventLog {
if ev == nil {
return fmt.Errorf("nil event in log")
}
} Try / catch
if err := SaveEventsToFile(fp); err != nil {
if strings.Contains(err.Error(), "marshalling event") {
log.Warnf("event log contains unmarshallable events; skipping save: %v", err)
return nil
}
return err
} Prevention
- Keep all skaffold components on the same version to avoid proto mismatches
- Never insert nil or partially-initialized events into the log
- Add a debug dump of the failing event when marshalling fails
- Regenerate proto bindings after upgrading protobuf/gogo versions
When it happens
Trigger: An event proto in handler.eventLog fails jsonpb marshalling — typically due to a malformed or nil internal message, or a proto type mismatch after version mixing between event producers.
Common situations: Mixing skaffold versions/components that produce incompatible event protos in the same session; a nil sub-message registered in the event log; a nil event entry in the log.
Related errors
- marshalling event: %w
- marshalling configuration: %w
- marshaling new config: %w
- marshaling config: %w
- unable to create directory %q: %w
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/43d13348eb9f7485.
Report an issue: GitHub.