Added
-
Multi-registry publishing for releases (LP-7). Every tag is
now pushed to three OCI registries (when the corresponding
secrets are present on the repo):Registry Image How to consume ghcr.io (always) ghcr.io/airvzxf/ftp-deployment-action:<tag>uses: airvzxf/ftp-deployment-action@v2Docker Hub (opt-in) docker.io/airvzxf/ftp-deployment-action:<tag>uses: docker://docker.io/airvzxf/ftp-deployment-action@v2AWS ECR Public (opt-in, OIDC) public.ecr.aws/airvzxf/ftp-deployment-action:<tag>uses: docker://public.ecr.aws/airvzxf/ftp-deployment-action@v2The three registries receive the same image bytes from a
singledocker buildx build(identical OCI manifest digest),
the samecosignkeyless signature, and the same
CycloneDX SBOM attestation attached viaactions/attest.
Docker Hub and ECR Public are conditional on secrets
presence — ifDOCKERHUB_USERNAME/DOCKERHUB_TOKENor
AWS_ROLE_TO_ASSUMEare unset on the repo, the pipeline emits
a::notice::and skips that registry, preserving the v2.9.0
behaviour (ghcr.io only) bit-for-bit. The one-time setup for
Docker Hub (PAT) and ECR Public (OIDC IAM role + trust
policy) is documented in README §"Publishing targets".AWS auth uses OIDC role assumption (no static AWS access
keys are stored in the repo):aws-actions/configure-aws-credentials@v4
assumes the role fromAWS_ROLE_TO_ASSUME, and
aws-actions/amazon-ecr-login@v2performs the docker login
topublic.ecr.awsusing the resulting session credentials.
The IAM trust policy is pinned tosub: repo:airvzxf/ftp-deployment-action:ref:refs/tags/v*
so only signed-tag pushes from this repo can assume it.The release pipeline (
release.yml) changes are concentrated
in two steps: themetastep now resolvesall_tags,
dockerhub_enabled, andecr_enabledoutputs based on secret
presence, andcosign sign+actions/attestare now invoked
once per enabled registry (ghcr.io is unconditional). The
smoke test deliberately pulls from ghcr.io only — the three
registries share one OCI manifest, so a ghcr.io failure
implies the same failure on docker.io and public.ecr.aws.
Documentation
- README §"Publishing targets" — new section listing the
three registries, exampleuses:lines for each, and the
one-time maintainer setup for Docker Hub (PAT + 2 secrets)
and ECR Public (OIDC IAM role with a copy-pasteable trust
policy JSON and the minimum ECR Public permission set). - README troubleshooting note — a single new sentence
pointing users who explicitly want to consume from Docker Hub
or ECR Public at thedocker://prefix pattern.