ci #6822
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: ci | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
on: | |
schedule: | |
- cron: '0 10 * * *' | |
push: | |
branches: | |
- 'master' | |
- 'releases/v*' | |
tags: | |
- 'v*.*.*' | |
pull_request: | |
env: | |
DOCKER_IMAGE: localhost:5000/name/app | |
BUILDX_VERSION: latest | |
jobs: | |
multi-images: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
tags: | | |
type=schedule | |
type=ref,event=branch | |
type=ref,event=tag | |
type=ref,event=pr | |
type=sha | |
- | |
name: Print envs | |
run: env|sort | |
tag-schedule: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
tag-schedule: | |
- "" | |
- "cron-{{date 'YYYYMMDD'}}" | |
- "{{date 'YYYYMMDD-HHmmss'}}" | |
- "schedule" | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
tags: | | |
type=schedule,pattern=${{ matrix.tag-schedule }} | |
type=ref,event=branch | |
type=ref,event=tag | |
type=ref,event=pr | |
type=sha | |
tag-match: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- tag-match: '\d.\d.\d' | |
tag-match-group: '0' | |
- tag-match: '\d.\d' | |
tag-match-group: '0' | |
- tag-match: 'v(.*)' | |
tag-match-group: '1' | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
tags: | | |
type=schedule | |
type=ref,event=branch | |
type=ref,event=tag | |
type=ref,event=pr | |
type=match,"pattern=${{ matrix.tag-match }}",group=${{ matrix.tag-match-group }} | |
type=sha | |
tag-semver: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
flavor-latest: | |
- "auto" | |
- "true" | |
- "false" | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
tags: | | |
type=schedule | |
type=ref,event=branch | |
type=ref,event=tag | |
type=ref,event=pr | |
type=semver,pattern={{raw}} | |
type=semver,pattern={{version}} | |
type=semver,pattern={{major}}.{{minor}}.{{patch}} | |
type=sha | |
flavor: | | |
latest=${{ matrix.flavor-latest }} | |
flavor: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
flavor: | | |
prefix=foo- | |
suffix=-bar | |
images: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
uses: ./ | |
with: | |
images: | | |
name=${{ env.DOCKER_IMAGE }} | |
name=ghcr.io/name/app,enable=${{ github.event_name == 'pull_request' }} | |
name=ghcr.io/name/release,enable=${{ startsWith(github.ref, 'refs/tags/') }} | |
custom-labels-annotations: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
labels: | | |
maintainer=CrazyMax | |
org.opencontainers.image.title=MyCustomTitle | |
org.opencontainers.image.description=this is a "good" example | |
org.opencontainers.image.vendor=MyCompany | |
annotations: | | |
maintainer=Foo | |
org.opencontainers.image.title=MyFooTitle | |
org.opencontainers.image.description=this is a "foo" example | |
org.opencontainers.image.vendor=MyFooCompany | |
global-exps: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
tags: | | |
type=sha | |
type=raw,value=gexp-branch-{{branch}} | |
type=raw,value=gexp-date-{{date 'YYYYMMDD'}} | |
type=raw,value=gexp-tag-{{tag}} | |
type=raw,value=gexp-baseref-{{base_ref}} | |
type=raw,value=gexp-defbranch,enable={{is_default_branch}} | |
json: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
id: meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
labels: | | |
maintainer=CrazyMax | |
- | |
name: JSON output | |
run: | | |
echo "maintainer=${{ fromJSON(steps.meta.outputs.json).labels['maintainer'] }}" | |
echo "version=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}" | |
echo "revision=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}" | |
echo "created=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}" | |
docker-push: | |
runs-on: ubuntu-latest | |
services: | |
registry: | |
image: registry:2 | |
ports: | |
- 5000:5000 | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver-opts: network=host | |
- | |
name: Docker meta | |
id: docker_meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
tags: | | |
type=schedule | |
type=ref,event=branch | |
type=ref,event=tag | |
type=ref,event=pr | |
type=semver,pattern=v{{version}} | |
type=semver,pattern=v{{major}}.{{minor}} | |
type=semver,pattern=v{{major}} | |
type=sha | |
- | |
name: Build and push to local registry | |
uses: docker/build-push-action@v6 | |
with: | |
context: ./test | |
file: ./test/Dockerfile | |
platforms: linux/amd64,linux/arm64,linux/386 | |
push: true | |
tags: ${{ steps.docker_meta.outputs.tags }} | |
labels: ${{ steps.docker_meta.outputs.labels }} | |
- | |
name: Inspect image | |
run: | | |
docker pull ${{ env.DOCKER_IMAGE }}:${{ steps.docker_meta.outputs.version }} | |
docker image inspect ${{ env.DOCKER_IMAGE }}:${{ steps.docker_meta.outputs.version }} | |
- | |
name: Check manifest | |
run: | | |
docker buildx imagetools inspect ${{ env.DOCKER_IMAGE }}:${{ steps.docker_meta.outputs.version }} | |
- | |
name: Dump context | |
if: always() | |
uses: crazy-max/ghaction-dump-context@v2 | |
bake: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
- | |
name: Docker meta | |
id: docker_meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
tags: | | |
type=schedule | |
type=ref,event=branch | |
type=ref,event=tag | |
type=ref,event=pr | |
type=semver,pattern={{version}} | |
type=semver,pattern={{major}}.{{minor}} | |
type=semver,pattern={{major}} | |
type=sha | |
- | |
name: Build | |
uses: docker/bake-action@v5 | |
with: | |
files: | | |
./test/docker-bake.hcl | |
${{ steps.docker_meta.outputs.bake-file-tags }} | |
${{ steps.docker_meta.outputs.bake-file-labels }} | |
targets: | | |
release | |
sep-tags: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
sep: | |
- " " | |
- "," | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
id: meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
sep-tags: ${{ matrix.sep }} | |
- | |
name: Tags | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
console.log(`${{ steps.meta.outputs.tags }}`); | |
output-env: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
id: meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
labels: | | |
maintainer=CrazyMax | |
annotations: | | |
maintainer=Foo | |
- | |
name: Build | |
uses: docker/build-push-action@v6 | |
with: | |
context: ./test | |
file: ./test/output.Dockerfile | |
build-args: | | |
DOCKER_METADATA_OUTPUT_VERSION | |
DOCKER_METADATA_OUTPUT_TAGS | |
DOCKER_METADATA_OUTPUT_LABELS | |
DOCKER_METADATA_OUTPUT_ANNOTATIONS | |
DOCKER_METADATA_OUTPUT_JSON | |
bake-annotations: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
- | |
name: Docker meta | |
id: docker_meta | |
uses: ./ | |
with: | |
images: | | |
${{ env.DOCKER_IMAGE }} | |
ghcr.io/name/app | |
tags: | | |
type=schedule | |
type=ref,event=branch | |
type=ref,event=tag | |
type=ref,event=pr | |
type=semver,pattern={{version}} | |
type=semver,pattern={{major}}.{{minor}} | |
type=semver,pattern={{major}} | |
type=sha | |
env: | |
DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index | |
- | |
name: Build | |
uses: docker/bake-action@v5 | |
with: | |
files: | | |
./test/docker-bake.hcl | |
${{ steps.docker_meta.outputs.bake-file-tags }} | |
${{ steps.docker_meta.outputs.bake-file-annotations }} | |
targets: | | |
release | |
no-images: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: ${{ env.BUILDX_VERSION }} | |
driver: docker | |
- | |
name: Docker meta | |
uses: ./ | |
with: | |
tags: | | |
type=schedule | |
type=ref,event=branch | |
type=ref,event=tag | |
type=ref,event=pr | |
type=sha | |
- | |
name: Print envs | |
run: env|sort | |
bake-cwd: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Checkout | |
uses: actions/checkout@v4 | |
- | |
name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
version: latest | |
- | |
name: Docker meta | |
id: docker_meta | |
uses: ./ | |
- | |
name: Build | |
uses: docker/bake-action@v5 | |
with: | |
source: "{{defaultContext}}" | |
files: | | |
./test/docker-bake.hcl | |
cwd://${{ steps.docker_meta.outputs.bake-file-tags }} | |
cwd://${{ steps.docker_meta.outputs.bake-file-labels }} | |
targets: | | |
release |