Complete reference for all wfctl commands added or updated in v0.14.0.
Top-level build orchestrator. Chains go → ui → image → push based on config.
wfctl build [flags]
wfctl build <subcommand> [flags]
| Flag | Default | Description |
|---|---|---|
--config, -c |
workflow.yaml |
Config file path |
--dry-run |
false | Print planned actions without executing |
--only <name> |
— | Build only targets matching this name (comma-separated) |
--skip <name> |
— | Skip targets matching this name |
--tag <tag> |
— | Override image tag for all container targets |
--format <fmt> |
table |
Output format: table, json, yaml |
--no-push |
false | Build images but do not push |
--push |
true | Push images after build (explicit form; --push=false is equivalent to --no-push) |
--env <name> |
— | Apply environment overrides from environments.<name>.build |
--security-audit |
— | Run security linting; exit 1 on critical findings |
| Subcommand | Description |
|---|---|
wfctl build go |
Build all type: go targets |
wfctl build ui |
Build all type: nodejs targets |
wfctl build image |
Build all container images |
wfctl build push |
Push built images to declared registries |
wfctl build custom |
Run all type: custom targets |
| Variable | Effect |
|---|---|
WFCTL_BUILD_DRY_RUN=1 |
Equivalent to --dry-run |
wfctl build go [--config <file>] [--target <name>]
| Flag | Description |
|---|---|
--config |
Config file (default: workflow.yaml) |
--target |
Build only the named go target |
wfctl build ui [--config <file>] [--target <name>]
Wraps the nodejs builder plugin.
wfctl build image [--config <file>] [--dry-run] [--tag <tag>] [--only <names>] [--skip <names>] [--push]
Builds matching ci.build.containers[] entries. External containers are resolved (not built).
--only and --skip accept comma-separated container names.
When --push is passed and ci.build.security.hardened: true, buildx pushes directly to
every registry in push_to[] via multiple --tag flags in a single invocation (no separate
docker push step needed). Without --push, a single-platform hardened build loads the
image into the local daemon (--load); multi-platform hardened builds leave the result in
the buildkit cache.
wfctl build push [--config <file>] [--tag <tag>] [--only <names>] [--skip <names>]
Pushes each matching container's image to every registry listed in push_to[].
--only and --skip accept comma-separated container names.
wfctl build custom [--config <file>] [--target <name>]
Wraps the custom builder plugin.
Container registry commands. (Plugin catalog commands moved to wfctl plugin-registry.)
wfctl registry login [--config <file>] [--registry <name>] [--dry-run]
Logs into all declared registries (or the named one). DO provider uses doctl registry login; GitHub provider uses docker login ghcr.io.
wfctl registry push [--config <file>] [--image <ref>]
Pushes image refs to all declared registries.
wfctl registry prune [--config <file>] [--registry <name>] [--dry-run]
Runs garbage collection and prunes tags beyond retention.keep_latest. Preserves latest.
wfctl plugin install [flags] [<name>[@<version>]]
Use --quiet with wfctl plugin install or wfctl plugin update in CI to
suppress per-download progress lines while keeping install status, checksum,
and error output. WFCTL_PLUGIN_INSTALL_QUIET=1 applies the same suppression
without changing command arguments.
wfctl plugin install --from-config <workflow.yaml> [--plugin-dir <dir>]
Reads requires.plugins[] from the workflow config and installs each plugin that is not already installed. Skips already-installed plugins.
Auth blocks are supported for private repos:
requires:
plugins:
- name: workflow-plugin-payments
source: github.com/MyOrg/workflow-plugin-payments
auth:
env: RELEASES_TOKENwfctl ci init [--config <file>] [--platform github-actions|gitlab-ci] [--output <path>]
For GitHub Actions, now emits three files:
| File | Description |
|---|---|
.github/workflows/ci.yml |
Build + test pipeline (unchanged) |
.github/workflows/deploy.yml |
Minimal deploy pipeline (new in v0.14.0) |
.github/workflows/registry-retention.yml |
Prune cron (emitted only if registries have retention.schedule) |
Renamed from wfctl registry (v0.13.0 and earlier). The old wfctl registry subcommand now refers to container registries. The plugin catalog is at wfctl plugin-registry.
wfctl plugin-registry list
wfctl plugin-registry search <query>
wfctl plugin-registry info <name>
A deprecation alias wfctl registry (routing to wfctl plugin-registry) is kept until v1.0.
See also: Tutorial · 07 — Security Hardening