Dist-Zilla-Plugin-Docker-API
view release on metacpan or search on metacpan
0.104 2026-08-30 03:51:54Z
- "dockerfile = ..." in a dist.ini now takes effect; the deprecated
"file = ..." spelling still works and warns.
- The deprecated repository, push and load keys work as aliases for
image, release_push and build_load, with the canonical key winning
on collision. "phase" is warned about and discarded rather than
silently ignored as an unknown key.
- fail_if_tag_exists asks the registry whether a tag already exists,
through API::Docker 0.004's distribution->exists (GET
/distribution/{name}/json), with the credential resolved for the
reference or an anonymous request. An engine with no /distribution
route -- rootless Podman among them -- makes the release a fatal
error rather than a silent pass; set fail_if_tag_exists = 0 to
release without the check.
- New before_build precheck: dzil confirms the engine answers, naming
it in the build log, before assembling the distribution, and during
a release also verifies the registry credential the push will use
through the engine's POST /auth. A rejected credential or an
unreachable registry fails fast; a missing credential does not, an
anonymous push being legal. DZIL_DOCKER_API_SKIP_PRECHECK=1 skips
both checks.
- A failed release push is fatal. API::Docker 0.004 croaks on a push
failure rather than returning an errorDetail event, and the client
catches it and surfaces it through the same log_fatal, carrying the
engine's errorDetail message when the error is a stream error and
the exception itself otherwise.
- A failed build logs the complete build output, not just the failing
step: the client drains the exception's event list through the same
progress filter used for a live stream before re-raising.
- Every tag after the first now applies. The image reference is split
into repository and tag before reaching the engine's tag endpoint,
so a registry host:port is no longer mistaken for the tag separator
and %V/%v no longer vanish -- only "latest" survived the default tag
list before. A tag the engine refuses is left out of the result
instead of being reported as applied.
- New DZIL_DOCKER_API_SKIP=1 skips the image build for one run -- no
engine contact, no image -- for dzil build/install/test while the
image cannot build yet. dzil release refuses to run with it set.
- Document the container engine requirement in POD and README: any
engine serving the Docker Engine HTTP API works, no docker binary
needed, and target reaches it unchanged for multi-stage builds.
- New build_verbose attribute (default off): the build log normally
echoes only Dockerfile step headers -- "Step N/M : ..." (legacy),
"STEP N/M: ..." (Podman classic, verified against a live rootless
Podman 5.4.2 stream) and "#N [N/M] ..." (BuildKit) -- instead of the
full stream, which build_verbose = 1 restores; errors are always
surfaced. Verbose output shares concise mode's line-buffering, so
multi-line daemon chunks become one log entry per line with no blank
lines between them.
- Add "=encoding utf8" so the POD passes podchecker.
- cpanfile requires API::Docker 0.004 (where distribution->exists and
system->auth come from) and declares Moose,
Dist::Zilla::Role::BeforeBuild, namespace::autoclean, Carp,
Archive::Tar and Test::Warnings; Archive::Tar::Wrapper is no longer
a dependency.
0.103 2026-05-18 17:04:54Z
- New `%V` tag template token: the major version extracted from
`$zilla->version` (e.g. `0` for `0.402`). Pairs with `%v` (full
version) the way `%G` pairs with `%g`. `%vmaj` stays as an alias.
- Default tag list is now `['latest', '%V', '%v']` (was
`['latest', '%v']`). A fresh `[Docker::API]` with no `tag = ...`
lines will now push three tags by default â e.g. `latest`, `0`,
and `0.402` for a `0.402` release. Setting `tag` explicitly still
replaces the default; it does not append.
- Fix false "Source image '...' not found locally" failures during
`dzil release`. The release path used to call
`client->image_exists_locally($source)` as a pre-flight check; that
method wraps `images->inspect` in an `eval` and swallows ANY
exception (network blip, transient socket error, unrelated parse
issue) as "image is missing." If the swallowed error wasn't
actually a 404, the release aborted with a misleading message even
though the image was sitting in the daemon â we hit this on real
`raudssus/karr:latest` pushes. The pre-check is gone: the
subsequent `tag_image` call is the real verification, and its
Docker API error surfaces directly with a meaningful message.
- Promote `tag_image` failure from logged warning to `log_fatal`. A
failed tag in the release path used to be silently downgraded to
"Warning: failed to tag as ..." and then the push loop ran anyway,
pushing the wrong (or unchanged) image. Now it aborts the release.
- Skip the self-retag when the source ref is in the resolved tag
list (e.g. `latest` is both the source and a target tag). Previously
this caused a no-op `docker tag X X` per release.
- Fail the release if any `push_image` calls fail. Per-push errors
are still logged individually, but the release as a whole no
longer returns success when some tags failed to publish.
- Remove `Client->image_exists_locally` â it had a single caller
(the pre-check above) and the eval-swallow-exception pattern was
the root cause of the misleading "not found locally" errors.
0.102 2026-05-17 15:56:39Z
( run in 1.127 second using v1.01-cache-2.11-cpan-16aabcbfbcb )