GitHub Action to extract metadata (tags, labels) from Git reference and GitHub events for Docker
Go to file
2020-10-26 17:53:34 +01:00
.github Bump codecov/codecov-action from v1.0.13 to v1.0.14 (#4) 2020-10-26 11:37:33 +00:00
__tests__ Set latest tag only if matches with a pattern 2020-10-26 17:51:00 +01:00
dist Set latest tag only if matches with a pattern 2020-10-26 17:51:00 +01:00
src Set latest tag only if matches with a pattern 2020-10-26 17:51:00 +01:00
test Initial commit 2020-10-25 02:25:23 +01:00
.dockerignore Initial commit 2020-10-25 02:25:23 +01:00
.editorconfig Initial commit 2020-10-25 02:25:23 +01:00
.gitattributes Initial commit 2020-10-25 02:25:23 +01:00
.gitignore Initial commit 2020-10-25 02:25:23 +01:00
.prettierrc.json Initial commit 2020-10-25 02:25:23 +01:00
action.yml Set latest tag only if matches with a pattern 2020-10-26 17:51:00 +01:00
CHANGELOG.md Update CHANGELOG 2020-10-26 17:53:34 +01:00
docker-bake.hcl Initial commit 2020-10-25 02:25:23 +01:00
Dockerfile Add workflows 2020-10-25 03:21:51 +01:00
jest.config.js Initial commit 2020-10-25 02:25:23 +01:00
LICENSE Initial commit 2020-10-25 02:25:23 +01:00
package.json Allow to templatize schedule tag (#1) 2020-10-25 14:13:43 +00:00
README.md Set latest tag only if matches with a pattern 2020-10-26 17:51:00 +01:00
tsconfig.json Initial commit 2020-10-25 02:25:23 +01:00
yarn.lock Allow to templatize schedule tag (#1) 2020-10-25 14:13:43 +00:00

GitHub release GitHub marketplace Test workflow Codecov Become a sponsor Paypal Donate

About

GitHub Action to extract metadata (tags, labels) for Docker. This action is particularly useful if used with Docker Build Push action.

If you are interested, check out my other :octocat: GitHub Actions!

Screenshot


Features

Overview

Event Ref Commit SHA Docker Tags
schedule refs/heads/master 45f132a sha-45f132a, nightly
pull_request refs/pull/2/merge a123b57 sha-a123b57, pr-2
push refs/heads/<default_branch> 676cae2 sha-676cae2, edge
push refs/heads/dev cf20257 sha-cf20257, dev
push refs/heads/my/branch a5df687 sha-a5df687, my-branch
push tag refs/tags/v1.2.3 bf4565b sha-bf4565b, 1.2.3, latest
push tag refs/tags/mytag afb7833 sha-afb7833, mytag

Usage

name: ci

on:
  schedule:
    - cron: '0 10 * * *' # everyday at 10am
  push:
    branches:
      - '**'
    tags:
      - 'v*.*.*'
  pull_request:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2
      -
        name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          images: |
            name/app
            ghcr.io/name/app            
          tag-sha: true
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      -
        name: Login to DockerHub
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v1 
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      -
        name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./Dockerfile
          platforms: linux/amd64,linux/arm64,linux/386
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.docker_meta.outputs.tags }}
          labels: ${{ steps.docker_meta.outputs.labels }}

Customizing

inputs

Following inputs can be used as step.with keys

Name Type Description
images List/CSV List of Docker images to use as base name for tags
tag-sha Bool Add git short SHA as Docker tag (default false)
tag-edge Bool Enable edge branch tagging (default false)
tag-edge-branch String Branch that will be tagged as edge (default repo.default_branch)
tag-coerce-tag String Coerces Git tag to semver if possible using Handlebars template
tag-latest-match String Set latest tag only if matches with a pattern
tag-schedule String Handlebars template to apply to schedule tag (default nightly)
sep-tags String Separator to use for tags output (default \n)
sep-labels String Separator to use for labels output (default \n)

List/CSV type can be a newline or comma delimited string

outputs

Following outputs are available

Name Type Description
version String Generated Docker image version
tags String Generated Docker tags
labels String Generated Docker labels

Notes

Latest tag

latest tag is created with the following conditions:

  • Git tag is a valid semver
  • Provided tag-coerce-tag is valid

If tag-latest-match is filled, then it has priority over the creation of the tag.

Coerces Git tag

Provides a very forgiving translation of a non-semver tag to semver. For more information see Coercion section. tag-coerce-tag supports Handlebars template with the following inputs:

tag-coerce-tag Git tag Version
{{raw}} v1.2.3 1.2.3
{{major}}.{{minor}} v1.2.3 1.2
{{major}} v1.2.3 1
{{minor}} v1.2.3 2
{{patch}} v1.2.3 3

Schedule tag

tag-schedule is specially crafted input to support Handlebars template with the following expressions:

Expression Example Description
{{date 'format'}} {{date 'YYYYMMDD'}} > 20200110 Render date by its moment format

You can find more examples in the CI workflow.

Keep up-to-date with GitHub Dependabot

Since Dependabot has native GitHub Actions support, to enable it on your GitHub repo all you need to do is add the .github/dependabot.yml file:

version: 2
updates:
  # Maintain dependencies for GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "daily"

How can I help?

All kinds of contributions are welcome 🙌! The most basic way to show your support is to star 🌟 the project, or to raise issues 💬 You can also support this project by becoming a sponsor on GitHub 👏 or by making a Paypal donation to ensure this journey continues indefinitely! 🚀

Thanks again for your support, it is much appreciated! 🙏

License

MIT. See LICENSE for more details.