8.4 KiB
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!
- Features
- Overview
- Usage
- Customizing
- Notes
- Keep up-to-date with GitHub Dependabot
- How can I help?
- License
Features
- Docker tags generated from GitHub action event and Git metadata
- OCI Image Format Specification used to generate Docker labels
- Handlebars template to apply to schedule tag
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.