.github | ||
__tests__ | ||
dist | ||
src | ||
test | ||
.dockerignore | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.prettierrc.json | ||
action.yml | ||
CHANGELOG.md | ||
docker-bake.hcl | ||
Dockerfile | ||
jest.config.js | ||
LICENSE | ||
package.json | ||
README.md | ||
tsconfig.json | ||
yarn.lock |
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-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 only on push tag
event and resolves one of the following conditions:
- Git tag is a valid semver
- Provided
tag-coerce-tag
is valid
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 |
Templates available for 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.