|
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: |
|
inputs: |
|
push-to-registry: |
|
description: Push the built image to the container registry |
|
required: false |
|
type: boolean |
|
default: false |
|
|
|
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: |
|
|
|
|
|
|
|
|
|
PLATFORMS: 'linux/amd64' |
|
steps: |
|
- name: Free up more disk space on the runner |
|
|
|
run: | |
|
echo "----- Free space before cleanup" |
|
df -h |
|
sudo rm -rf /usr/share/dotnet |
|
sudo rm -rf "$AGENT_TOOLSDIRECTORY" |
|
sudo swapoff /mnt/swapfile |
|
sudo rm -rf /mnt/swapfile |
|
echo "----- Free space after cleanup" |
|
df -h |
|
|
|
- name: Checkout |
|
uses: actions/checkout@v4 |
|
|
|
- name: Docker meta |
|
id: meta |
|
uses: docker/metadata-action@v5 |
|
with: |
|
github-token: ${{ secrets.GITHUB_TOKEN }} |
|
images: | |
|
ghcr.io/${{ github.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@v3 |
|
|
|
- name: Set up Docker Buildx |
|
uses: docker/setup-buildx-action@v3 |
|
with: |
|
platforms: ${{ env.PLATFORMS }} |
|
|
|
- name: Login to GitHub Container Registry |
|
if: github.event_name != 'pull_request' |
|
uses: docker/login-action@v3 |
|
with: |
|
registry: ghcr.io |
|
username: ${{ github.repository_owner }} |
|
password: ${{ secrets.GITHUB_TOKEN }} |
|
|
|
- name: Build container |
|
timeout-minutes: 40 |
|
id: docker_build |
|
uses: docker/build-push-action@v6 |
|
with: |
|
context: . |
|
file: docker/Dockerfile |
|
platforms: ${{ env.PLATFORMS }} |
|
push: ${{ github.ref == 'refs/heads/main' || github.ref_type == 'tag' || github.event.inputs.push-to-registry }} |
|
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 }} |
|
|