name: Build & Push Docker Images on: push: branches: - master - canary release: types: [published] jobs: build-amd64: runs-on: ubuntu-latest strategy: matrix: variant: - name: full dockerfile: Dockerfile - name: standalone dockerfile: Dockerfile.standalone steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: install: true - name: Log in to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Extract version from release tag if: github.event_name == 'release' id: version run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - name: Build and push AMD64 Docker image (master) if: github.ref == 'refs/heads/master' && github.event_name == 'push' run: | DOCKERFILE=${{ matrix.variant.dockerfile }} VARIANT=${{ matrix.variant.name }} docker buildx build --platform linux/amd64 \ --cache-from=type=registry,ref=itzcrazykns1337/perplexica:${VARIANT}-amd64 \ --cache-to=type=inline \ --provenance false \ -f $DOCKERFILE \ -t itzcrazykns1337/perplexica:${VARIANT}-amd64 \ --push . - name: Build and push AMD64 Canary Docker image if: github.ref == 'refs/heads/canary' && github.event_name == 'push' run: | DOCKERFILE=${{ matrix.variant.dockerfile }} VARIANT=${{ matrix.variant.name }} docker buildx build --platform linux/amd64 \ --cache-from=type=registry,ref=itzcrazykns1337/perplexica:${VARIANT}-canary-amd64 \ --cache-to=type=inline \ --provenance false \ -f $DOCKERFILE \ -t itzcrazykns1337/perplexica:${VARIANT}-canary-amd64 \ --push . - name: Build and push AMD64 release Docker image if: github.event_name == 'release' run: | DOCKERFILE=${{ matrix.variant.dockerfile }} VARIANT=${{ matrix.variant.name }} docker buildx build --platform linux/amd64 \ --cache-from=type=registry,ref=itzcrazykns1337/perplexica:${VARIANT}-${{ env.RELEASE_VERSION }}-amd64 \ --cache-to=type=inline \ --provenance false \ -f $DOCKERFILE \ -t itzcrazykns1337/perplexica:${VARIANT}-${{ env.RELEASE_VERSION }}-amd64 \ --push . build-arm64: runs-on: ubuntu-24.04-arm strategy: matrix: variant: - name: full dockerfile: Dockerfile - name: standalone dockerfile: Dockerfile.standalone steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: install: true - name: Log in to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Extract version from release tag if: github.event_name == 'release' id: version run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - name: Build and push ARM64 Docker image (master) if: github.ref == 'refs/heads/master' && github.event_name == 'push' run: | DOCKERFILE=${{ matrix.variant.dockerfile }} VARIANT=${{ matrix.variant.name }} docker buildx build --platform linux/arm64 \ --cache-from=type=registry,ref=itzcrazykns1337/perplexica:${VARIANT}-arm64 \ --cache-to=type=inline \ --provenance false \ -f $DOCKERFILE \ -t itzcrazykns1337/perplexica:${VARIANT}-arm64 \ --push . - name: Build and push ARM64 Canary Docker image if: github.ref == 'refs/heads/canary' && github.event_name == 'push' run: | DOCKERFILE=${{ matrix.variant.dockerfile }} VARIANT=${{ matrix.variant.name }} docker buildx build --platform linux/arm64 \ --cache-from=type=registry,ref=itzcrazykns1337/perplexica:${VARIANT}-canary-arm64 \ --cache-to=type=inline \ --provenance false \ -f $DOCKERFILE \ -t itzcrazykns1337/perplexica:${VARIANT}-canary-arm64 \ --push . - name: Build and push ARM64 release Docker image if: github.event_name == 'release' run: | DOCKERFILE=${{ matrix.variant.dockerfile }} VARIANT=${{ matrix.variant.name }} docker buildx build --platform linux/arm64 \ --cache-from=type=registry,ref=itzcrazykns1337/perplexica:${VARIANT}-${{ env.RELEASE_VERSION }}-arm64 \ --cache-to=type=inline \ --provenance false \ -f $DOCKERFILE \ -t itzcrazykns1337/perplexica:${VARIANT}-${{ env.RELEASE_VERSION }}-arm64 \ --push . manifest: needs: [build-amd64, build-arm64] runs-on: ubuntu-latest strategy: matrix: variant: [full, standalone] steps: - name: Log in to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Extract version from release tag if: github.event_name == 'release' id: version run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - name: Create and push manifest for main if: github.ref == 'refs/heads/master' && github.event_name == 'push' run: | VARIANT=${{ matrix.variant }} docker manifest create itzcrazykns1337/perplexica:${VARIANT}-latest \ --amend itzcrazykns1337/perplexica:${VARIANT}-amd64 \ --amend itzcrazykns1337/perplexica:${VARIANT}-arm64 docker manifest push itzcrazykns1337/perplexica:${VARIANT}-latest if [ "$VARIANT" = "full" ]; then docker manifest create itzcrazykns1337/perplexica:latest \ --amend itzcrazykns1337/perplexica:${VARIANT}-amd64 \ --amend itzcrazykns1337/perplexica:${VARIANT}-arm64 docker manifest push itzcrazykns1337/perplexica:latest docker manifest create itzcrazykns1337/perplexica:main \ --amend itzcrazykns1337/perplexica:${VARIANT}-amd64 \ --amend itzcrazykns1337/perplexica:${VARIANT}-arm64 docker manifest push itzcrazykns1337/perplexica:main fi - name: Create and push manifest for canary if: github.ref == 'refs/heads/canary' && github.event_name == 'push' run: | VARIANT=${{ matrix.variant }} docker manifest create itzcrazykns1337/perplexica:${VARIANT}-canary \ --amend itzcrazykns1337/perplexica:${VARIANT}-canary-amd64 \ --amend itzcrazykns1337/perplexica:${VARIANT}-canary-arm64 docker manifest push itzcrazykns1337/perplexica:${VARIANT}-canary if [ "$VARIANT" = "full" ]; then docker manifest create itzcrazykns1337/perplexica:canary \ --amend itzcrazykns1337/perplexica:${VARIANT}-canary-amd64 \ --amend itzcrazykns1337/perplexica:${VARIANT}-canary-arm64 docker manifest push itzcrazykns1337/perplexica:canary fi - name: Create and push manifest for releases if: github.event_name == 'release' run: | VARIANT=${{ matrix.variant }} docker manifest create itzcrazykns1337/perplexica:${VARIANT}-${{ env.RELEASE_VERSION }} \ --amend itzcrazykns1337/perplexica:${VARIANT}-${{ env.RELEASE_VERSION }}-amd64 \ --amend itzcrazykns1337/perplexica:${VARIANT}-${{ env.RELEASE_VERSION }}-arm64 docker manifest push itzcrazykns1337/perplexica:${VARIANT}-${{ env.RELEASE_VERSION }} if [ "$VARIANT" = "full" ]; then docker manifest create itzcrazykns1337/perplexica:${{ env.RELEASE_VERSION }} \ --amend itzcrazykns1337/perplexica:${VARIANT}-${{ env.RELEASE_VERSION }}-amd64 \ --amend itzcrazykns1337/perplexica:${VARIANT}-${{ env.RELEASE_VERSION }}-arm64 docker manifest push itzcrazykns1337/perplexica:${{ env.RELEASE_VERSION }} fi