name: build container image on: push: branches: - 'main' paths: - 'pyproject.toml' - '.dockerignore' - 'invokeai/**' - 'docker/Dockerfile' - 'docker/docker-entrypoint.sh' - 'workflows/build-container.yml' tags: - 'v*' workflow_dispatch: permissions: contents: write packages: write jobs: docker: if: github.event.pull_request.draft == false strategy: fail-fast: false matrix: gpu-driver: - cuda - cpu - rocm runs-on: ubuntu-latest name: ${{ matrix.gpu-driver }} env: # torch/arm64 does not support GPU currently, so arm64 builds # would not be GPU-accelerated. # re-enable arm64 if there is sufficient demand. # PLATFORMS: 'linux/amd64,linux/arm64' PLATFORMS: 'linux/amd64' steps: - name: Free up more disk space on the runner # https://github.com/actions/runner-images/issues/2840#issuecomment-1284059930 run: | sudo rm -rf /usr/share/dotnet sudo rm -rf "$AGENT_TOOLSDIRECTORY" sudo swapoff /mnt/swapfile sudo rm -rf /mnt/swapfile - name: Checkout uses: actions/checkout@v3 - name: Docker meta id: meta uses: docker/metadata-action@v4 with: github-token: ${{ secrets.GITHUB_TOKEN }} images: | ghcr.io/${{ github.repository }} ${{ env.DOCKERHUB_REPOSITORY }} tags: | type=ref,event=branch type=ref,event=tag type=pep440,pattern={{version}} type=pep440,pattern={{major}}.{{minor}} type=pep440,pattern={{major}} type=sha,enable=true,prefix=sha-,format=short flavor: | latest=${{ matrix.gpu-driver == 'cuda' && github.ref == 'refs/heads/main' }} suffix=-${{ matrix.gpu-driver }},onlatest=false - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: platforms: ${{ env.PLATFORMS }} - name: Login to GitHub Container Registry if: github.event_name != 'pull_request' uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} # - name: Login to Docker Hub # if: github.event_name != 'pull_request' && vars.DOCKERHUB_REPOSITORY != '' # uses: docker/login-action@v2 # with: # username: ${{ secrets.DOCKERHUB_USERNAME }} # password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build container id: docker_build uses: docker/build-push-action@v4 with: context: . file: docker/Dockerfile platforms: ${{ env.PLATFORMS }} push: ${{ github.ref == 'refs/heads/main' || github.ref_type == 'tag' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: | type=gha,scope=${{ github.ref_name }}-${{ matrix.gpu-driver }} type=gha,scope=main-${{ matrix.gpu-driver }} cache-to: type=gha,mode=max,scope=${{ github.ref_name }}-${{ matrix.gpu-driver }} # - name: Docker Hub Description # if: github.ref == 'refs/heads/main' || github.ref == 'refs/tags/*' && vars.DOCKERHUB_REPOSITORY != '' # uses: peter-evans/dockerhub-description@v3 # with: # username: ${{ secrets.DOCKERHUB_USERNAME }} # password: ${{ secrets.DOCKERHUB_TOKEN }} # repository: ${{ vars.DOCKERHUB_REPOSITORY }} # short-description: ${{ github.event.repository.description }}