argoproj/argo-workflows · error

error converting

Error message

error converting %s: %w

What it means

runConvert wraps any error returned by convertDocument for a JSON document with `error converting <path>` before propagating it out of the WalkManifests callback. The inner error (e.g. a parse failure) is preserved via %w. This is the JSON-document variant of the convert command's per-file error envelope.

Solutions

  1. Read the wrapped inner error to see which field failed to parse, and fix the JSON at that path
  2. Validate the manifest with `argo lint` before converting to catch structural issues with clearer messages
  3. Ensure the document is a single API object with correct apiVersion/kind, not an array or wrapper
  4. Split multi-object JSON (e.g. a List with items[]) into individual objects before converting

Example fix

// before (nested object unsupported)
{"items":[{"apiVersion":"argoproj.io/v1alpha1","kind":"Workflow",...}]}
// after (single object per file)
{"apiVersion":"argoproj.io/v1alpha1","kind":"Workflow","metadata":{...},"spec":{...}}
Defensive patterns

Strategy: validation

Validate before calling

jq -e 'type == "object" and (.kind | type == "string") and (.apiVersion | type == "string")' file.json \
  || { echo 'not a single k8s manifest object'; exit 1; }

Try / catch

if ! argo convert "$f" -o json 2>conv.err; then
  cat conv.err >&2   # envelope 'error converting <path>' + inner parse detail
fi

Prevention

When it happens

Trigger: `argo convert file.json` (or a JSON manifest inside a walked directory) where the document is valid JSON but fails during conversion — e.g. TypeMeta parse error, or a malformed Workflow/CronWorkflow/WorkflowTemplate/ClusterWorkflowTemplate structure that yaml.Unmarshal rejects.

Common situations: JSON manifests exported with legacy singular `schedule`/`mutex`/`semaphore` fields and additional structural problems; hand-edited JSON with wrong nesting for the typed legacy structs; piping a JSON document that is actually a list/envelope rather than a single object.

Related errors


AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03). Data as JSON: /api/errors/5209c38396b25332. Report an issue: GitHub.

Appendix: source

Thrown at cmd/argo/commands/convert.go:66

			return runConvert(cmd.Context(), args, output.String())
		},
	}

	command.Flags().VarP(&output, "output", "o", "Output format. "+output.Usage())
	command.Flags().BoolVar(&common.NoColor, "no-color", false, "Disable colorized output")

	return command
}

var yamlSeparator = regexp.MustCompile(`\n---`)

func runConvert(ctx context.Context, args []string, output string) error {
	for _, file := range args {
		err := fileutil.WalkManifests(ctx, file, func(path string, data []byte) error {
			if jsonpkg.IsJSON(data) {
				// Parse single JSON document
				if err := convertDocument(data, output, true); err != nil {
					return fmt.Errorf("error converting %s: %w", path, err)
				}
			} else {
				// Split YAML documents
				for _, doc := range yamlSeparator.Split(string(data), -1) {
					doc = strings.TrimSpace(doc)
					if doc == "" {
						continue
					}
					if err := convertDocument([]byte(doc), output, false); err != nil {
						return fmt.Errorf("error converting %s: %w", path, err)
					}
				}
			}
			return nil
		})
		if err != nil {
			return err
		}

View on GitHub (pinned to 35bff19146)