name: Release on: push: tags: - "v*" permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true jobs: build: name: Build (${{ matrix.arch }}) strategy: matrix: include: - runner: ubuntu-24.04 platform: linux/amd64 arch: amd64 - runner: ubuntu-24.04-arm platform: linux/arm64 arch: arm64 runs-on: ${{ matrix.runner }} steps: - name: Checkout uses: actions/checkout@v6 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 - name: Extract version from tag id: version run: echo "tag=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT" - name: Get build date id: date run: echo "timestamp=$(git log -1 --pretty=%cI)" >> "$GITHUB_OUTPUT" - name: Warm cache (${{ matrix.platform }}) uses: docker/build-push-action@v7 with: context: . platforms: ${{ matrix.platform }} push: false build-args: | COMMIT_TAG=${{ steps.version.outputs.tag }} BUILD_DATE=${{ steps.date.outputs.timestamp }} cache-from: type=gha,scope=${{ matrix.platform }} cache-to: type=gha,mode=max,scope=${{ matrix.platform }} provenance: false publish: name: Publish multi-arch image needs: build runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout uses: actions/checkout@v6 - name: Set up QEMU uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 - name: Log in to ghcr.io uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Log in to Docker Hub uses: docker/login-action@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Extract version from tag id: version run: echo "tag=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT" - name: Get build date id: date run: echo "timestamp=$(git log -1 --pretty=%cI)" >> "$GITHUB_OUTPUT" - name: Set image name env: OWNER: ${{ github.repository_owner }} run: echo "IMAGE=ghcr.io/$(echo "$OWNER" | tr '[:upper:]' '[:lower:]')/musicseerr" >> $GITHUB_ENV - name: Build and push (multi-arch) uses: docker/build-push-action@v7 with: context: . platforms: linux/amd64,linux/arm64 push: true tags: | ${{ env.IMAGE }}:${{ steps.version.outputs.tag }} habirabbu/musicseerr:${{ steps.version.outputs.tag }} build-args: | COMMIT_TAG=${{ steps.version.outputs.tag }} BUILD_DATE=${{ steps.date.outputs.timestamp }} cache-from: | type=gha,scope=linux/amd64 type=gha,scope=linux/arm64 provenance: false - name: Tag latest (stable releases only) if: ${{ !contains(steps.version.outputs.tag, '-') }} env: TAG: ${{ steps.version.outputs.tag }} run: | docker buildx imagetools create \ -t "${IMAGE}:latest" \ -t "habirabbu/musicseerr:latest" \ "${IMAGE}:${TAG}"