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

  1. Report the wrapped inner error upstream — a valid event should always marshal; inspect which event index fails
  2. Restart the skaffold session to rebuild a clean event log
  3. Ensure all skaffold components (binary, plugins) are the same version
  4. 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

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


AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05). Data as JSON: /api/errors/43d13348eb9f7485. Report an issue: GitHub.