name: Publish Docker image on: push: branches: - main paths-ignore: - "./**/*.md" - "LICENSE" - 'social/' - '.gitignore' - 'docker-compose.yml' - 'Makefile' release: types: - published env: IMAGE_NAME: cdalvaro/docker-salt-master PLATFORMS: linux/amd64,linux/arm64,linux/arm/v7 CACHE_PATH: ${{ github.workspace }}/.buildx-cache EXTRA_REGISTRIES: ghcr.io quay.io jobs: metadata: name: Metadata runs-on: ubuntu-latest steps: - name: Image Tags run: | IMAGE_TAG="${{ github.event.release.tag_name }}" [ -z "${IMAGE_TAG}" ] && IMAGE_TAG='latest' DOCKER_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" TAGS="${DOCKER_IMAGE}" for registry in ${EXTRA_REGISTRIES}; do TAGS="${TAGS},${registry}/${DOCKER_IMAGE}" done echo "Image Tag: '${IMAGE_TAG}'" echo "Docker image: '${DOCKER_IMAGE}'" echo "Tags: ${TAGS}" echo "TAGS=${TAGS}" >> $GITHUB_ENV - name: VCS ref run: | VCS_REF="${GITHUB_SHA::8}" echo "VCS ref: ${VCS_REF}" echo "VCS_REF=${VCS_REF}" >> $GITHUB_ENV - name: Created On run: | CREATED_ON="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" echo "Created on: ${CREATED_ON}" echo "CREATED_ON=${CREATED_ON}" >> $GITHUB_ENV - name: Dump environment if: contains(toJSON(github.event.commits.*.message), 'ci(debug)') == true run: env | sort - name: Dump GitHub context if: contains(toJSON(github.event.commits.*.message), 'ci(debug)') == true env: GITHUB_CONTEXT: ${{ toJson(github) }} run: echo "${GITHUB_CONTEXT}" publish: name: Publish runs-on: ubuntu-latest needs: metadata if: contains(toJSON(github.event.commits.*.message), 'ci(debug)') == false steps: - name: Checkout repository uses: actions/checkout@v3 - name: Set up QEMU uses: docker/setup-qemu-action@v2.1.0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2.2.1 - name: Cache Docker layers id: cache-docker-layers uses: actions/cache@v3 with: path: ${{ env.CACHE_PATH }} key: ${{ runner.os }}-buildx-${{ github.sha }} restore-keys: | ${{ runner.os }}-buildx- - name: Cache hit continue-on-error: true env: CACHE_HIT: ${{ steps.cache-docker-layers.outputs.cache-hit }} run: | if [[ "${CACHE_HIT}" != 'true' ]]; then echo "No cache hit" >&2 exit 1 fi echo "Cache contents available at: ${CACHE_PATH}" - name: Login to Docker Container Registry uses: docker/login-action@v2.1.0 with: username: ${{ github.repository_owner }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GitHub Container Registry uses: docker/login-action@v2.1.0 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.CR_PAT }} - name: Login to Quay.io Container Registry uses: docker/login-action@v2.1.0 with: registry: quay.io username: ${{ secrets.QUAYIO_USERNAME }} password: ${{ secrets.QUAYIO_PASSWORD }} - name: Build uses: docker/build-push-action@v3.2.0 with: context: . file: ./Dockerfile platforms: ${{ env.PLATFORMS }} build-args: | VCS_REF=${{ env.VCS_REF }} BUILD_DATE=${{ env.CREATED_ON }} cache-from: | type=local,src=${{ env.CACHE_PATH }} ghcr.io/cdalvaro/docker-salt-master:latest cache-to: type=local,dest=${{ env.CACHE_PATH }} pull: true push: true tags: ${{ env.TAGS }}