Skip to content
Latchkey

GitHub Actions docker/metadata-action Produces Empty Tags

docker/metadata-action generated no tags or labels, so the subsequent build/push has nothing to tag. Usually the images input is missing or the tag rules do not match the current event.

What this error means

The metadata step succeeds but steps.meta.outputs.tags is empty, and docker/build-push-action either pushes an untagged image or fails because no tags were provided.

.github/workflows/ci.yml
# meta produced nothing because no images were given
- id: meta
  uses: docker/metadata-action@v5
# tags: ${{ steps.meta.outputs.tags }}  -> empty

Common causes

Missing images input

metadata-action needs the images input (the registry/repo) to construct tags. Without it, the tag list is empty even if tag rules are defined.

Tag rules do not match the event

The default and custom tag rules are event-sensitive (for example type=ref or type=semver). On an event none of the rules target, no tags are generated.

How to fix it

Provide images and explicit tag rules

.github/workflows/ci.yml
- id: meta
  uses: docker/metadata-action@v5
  with:
    images: ghcr.io/${{ github.repository }}
    tags: |
      type=ref,event=branch
      type=semver,pattern={{version}}
- uses: docker/build-push-action@v6
  with:
    tags: ${{ steps.meta.outputs.tags }}
    labels: ${{ steps.meta.outputs.labels }}

Match tag rules to the trigger

  1. Give the metadata step an id and read steps.<id>.outputs.tags.
  2. Add a type=sha or type=raw tag so something is always produced.
  3. Ensure semver rules only fire on tag events, and ref rules on branch/PR events.

How to prevent it

  • Always pass the images input to metadata-action.
  • Include a fallback tag rule (type=sha) so tags are never empty.
  • Read tags/labels via the step id outputs.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →