Output Controls

drydock keeps stdout machine-parseable for structured output. Diagnostics and failure summaries go to stderr unless status text is the primary output.

Formats

Use -o or --output to select the format supported by each command:

Command area Output formats
build apps, build app yaml, json
get apps, get images table, name, json, yaml
test apps, test app text, json, yaml
diff apps, diff app diff, dyff, markdown, json, yaml
diff images diff, markdown, json, yaml, name
diag text, json, yaml

-o name is intended for list-style output. It is not supported for manifest diffs, and removed-only image changes print no names while still counting as a diff for exit-code behavior.

Diagnostics remain on stderr for unified, JSON, YAML, and name output so stdout stays parseable. Markdown diff output embeds successful diagnostics in the generated report because the markdown document is the review surface: errors are listed openly above the diffs, warnings collapse inside an expandable block rendered below the diffs, and repeated diagnostic codes aggregate into one entry with a count. Text diagnostics carry their stable code (error plugin.unsupported: …) so the same identifier appears in text, JSON, YAML, and markdown output.

test apps text output prints PASS, FAIL, or SKIPPED status lines. When stdout and stderr are terminals, status lines stream as Applications complete and stderr shows an in-place progress counter. Redirected text output stays plain and buffered.

Diff Controls

Unified and dyff manifest diffs and unified image diffs support terminal color with --color=auto|always|never. The default auto colors only when stdout is a terminal. JSON and YAML outputs never include ANSI color.

-o dyff renders each changed resource as a structural, path-based report using the dyff library, which runs in-process (no dyff binary is needed). It is available for diff apps and diff app, not diff images. Secret values stay redacted, and --raw-output-file and --html-output-file still write the unified form.

drydock diff apps --repo . --ref HEAD --ref-orig origin/main -o dyff

For pull request comments, --markdown-diff-style dyff keeps -o markdown but writes each Application’s changes as dyff’s GitHub-style report (the dyff between -o github format) inside the diff fence, so GitHub colors the path, change type, and added and removed values. The default is unified. Unlike the dyff CLI, drydock compares values exactly (no inline-JSON or number normalization), does not inspect certificates, and falls back to the unified diff for a resource whose values contain control characters. Both dyff styles report a Kustomize configMapGenerator hash change (for example common-env-745mg7f9mk to common-env-8f59fckt76) as one renamed ConfigMap that lists only the changed values, instead of a removed and an added ConfigMap. Pairing happens inside one Application source and namespace, and only when exactly one removed and one added ConfigMap share the same name before the hash. If dyff does not consider the two ConfigMaps a rename, for example because most keys changed, they are reported separately. Secrets are never paired, because their values are redacted. The summary counts, size budget, --raw-output-file, and --html-output-file still use the unified diff.

drydock diff apps --repo . --ref HEAD --ref-orig origin/main -o markdown --markdown-diff-style dyff
@@ spec.template.spec.containers.app.image @@
# apps/v1/Deployment/default/app
! ± value change
- registry.example/app:v1
+ registry.example/app:v2

Use markdown output when the result will be read in a pull request comment:

drydock diff apps --repo . --ref HEAD --ref-orig origin/main -o markdown
drydock diff images --repo . --ref HEAD --ref-orig origin/main -o markdown

--markdown-diagnostics controls how much of the diagnostics list the markdown report embeds. The default all lists errors openly above the diffs and collapses warnings inside an expandable block below them; errors omits warnings entirely; none omits the whole diagnostics section. Summary warning and error counts stay in the report in every mode, and the flag never changes stderr, JSON, or YAML diagnostics:

drydock diff apps --repo . --ref HEAD --ref-orig origin/main -o markdown --markdown-diagnostics errors

For local browser review, manifest diff commands can also write the standalone Full Rendered Diff View used by the PR action artifact:

drydock diff apps \
  --repo . \
  --ref HEAD \
  --ref-orig origin/main \
  -o markdown \
  --html-output-file rendered-diff.html

Markdown remains the PR-comment stdout format. --html-output-file writes an additional HTML file with the same standalone review view.

Manifest markdown includes a summary plus expandable per-Application rendered manifest patches. A single Application is expanded. Several Applications stay collapsed unless --force-open-details is set. Image markdown is a companion view for scanning rendered image reference changes and omits unchanged images by default.

Exit Codes

Diff commands use fixed exit codes:

Code Meaning
0 Success, no diff
1 Success, diff found
2 Runtime, config, or render error

Use --exit-code=false for local inspection when a diff should not fail the command.

For related operator guides, see the reference hub . For action outputs and PR comment controls, see the GitHub Actions guide .