name: Build and Push Docker Image to GHCR on: push: branches: - main release: types: [published] env: REGISTRY: ghcr.io PLATFORMS: linux/amd64,linux/arm64 APP_IMAGE_NAME: jelly-music-app jobs: build-and-push-docker: runs-on: ubuntu-latest permissions: contents: read packages: write attestations: write id-token: write steps: - name: Checkout code 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: Set image name run: | OWNER_LC=$(echo "${GITHUB_REPOSITORY_OWNER}" | tr '[:upper:]' '[:lower:]') IMAGE_NAME="${OWNER_LC}/${APP_IMAGE_NAME}" echo "IMAGE_NAME=${IMAGE_NAME}" >> $GITHUB_ENV - name: Log in to GHCR uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set Docker image tags id: vars run: | if [[ "${GITHUB_EVENT_NAME}" == "release" ]]; then VERSION_TAG="${GITHUB_REF##*/}" TAGS="${REGISTRY}/${IMAGE_NAME}:${VERSION_TAG},${REGISTRY}/${IMAGE_NAME}:latest" else TAGS="${REGISTRY}/${IMAGE_NAME}:${GITHUB_REF_NAME}" fi echo "TAGS=${TAGS}" >> $GITHUB_ENV - name: Build and push Docker image if: env.TAGS != '' uses: docker/build-push-action@v6 with: context: . push: true tags: ${{ env.TAGS }} platforms: ${{ env.PLATFORMS }}