name: Release Docker Image on: release: types: [ published ] schedule: - cron: "0 0 * * *" # every day at midnight concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: check-latest-run: runs-on: "ubuntu-latest" steps: - uses: octokit/request-action@v2.x id: check_last_run with: route: GET /repos/${{github.repository}}/actions/workflows/release-docker.yml/runs?per_page=1&status=completed env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} outputs: last_sha: ${{ fromJson(steps.check_last_run.outputs.data).workflow_runs[0].head_sha }} docker: name: Push Docker image to Docker Hub if: needs.check-latest-run.outputs.last_sha != github.sha runs-on: ubuntu-latest needs: [ check-latest-run ] steps: - name: Check out the repo uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to DockerHub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: ignitehq/cli # push to ignitehq/cli:latest on every push to master # push to ignitehq/cli:vx.x.x on every release published tags: | type=raw,value=latest type=semver,pattern=v{{version}} - name: Build and push uses: docker/build-push-action@v6 with: push: true context: . platforms: linux/amd64,linux/arm64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}