Skip to content

Docker Images

Docker Images #64

name: Docker Images
on:
workflow_dispatch:
inputs:
image:
description: "Image variant to build"
required: true
type: choice
options:
- cpp
- cpu
- cuda
- all
version:
description: "Optional image tag for manual runs"
required: false
push_image:
description: "Push to ghcr.io"
required: true
default: "true"
type: choice
options: ["true", "false"]
concurrency:
group: docker-images-${{ github.ref }}
cancel-in-progress: true
env:
REGISTRY: ghcr.io
IMAGE_PREFIX: ghcr.io/${{ github.repository_owner }}/quadtrix
jobs:
build-cpp-image:
name: Docker cpp
if: ${{ inputs.image == 'cpp' || inputs.image == 'all' }}
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- name: Set lowercase image prefix
run: echo "IMAGE_PREFIX=ghcr.io/${GITHUB_REPOSITORY_OWNER,,}/quadtrix" >> "$GITHUB_ENV"
- name: Login to GHCR
if: ${{ inputs.push_image == 'true' }}
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_PREFIX }}-cpp
tags: |
type=ref,event=tag
type=sha,prefix=sha-
type=raw,value=${{ inputs.version }},enable=${{ inputs.version != '' }}
type=raw,value=latest,enable=${{ inputs.push_image == 'true' }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: .devops/Dockerfile.cpp
platforms: linux/amd64,linux/arm64
push: ${{ inputs.push_image == 'true' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha,scope=cpp
cache-to: type=gha,mode=max,scope=cpp
build-cpu-image:
name: Docker cpu
if: ${{ inputs.image == 'cpu' || inputs.image == 'all' }}
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- name: Set lowercase image prefix
run: echo "IMAGE_PREFIX=ghcr.io/${GITHUB_REPOSITORY_OWNER,,}/quadtrix" >> "$GITHUB_ENV"
- name: Login to GHCR
if: ${{ inputs.push_image == 'true' }}
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_PREFIX }}-cpu
tags: |
type=ref,event=tag
type=sha,prefix=sha-
type=raw,value=${{ inputs.version }},enable=${{ inputs.version != '' }}
type=raw,value=latest,enable=${{ inputs.push_image == 'true' }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: .devops/Dockerfile
platforms: linux/amd64,linux/arm64
push: ${{ inputs.push_image == 'true' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha,scope=cpu
cache-to: type=gha,mode=max,scope=cpu
build-cuda-image:
name: Docker cuda
if: ${{ inputs.image == 'cuda' || inputs.image == 'all' }}
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- name: Set lowercase image prefix
run: echo "IMAGE_PREFIX=ghcr.io/${GITHUB_REPOSITORY_OWNER,,}/quadtrix" >> "$GITHUB_ENV"
- name: Login to GHCR
if: ${{ inputs.push_image == 'true' }}
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_PREFIX }}-cuda
tags: |
type=ref,event=tag
type=sha,prefix=sha-
type=raw,value=${{ inputs.version }},enable=${{ inputs.version != '' }}
type=raw,value=latest,enable=${{ inputs.push_image == 'true' }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: .devops/Dockerfile.backend
platforms: linux/amd64
push: ${{ inputs.push_image == 'true' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha,scope=cuda
cache-to: type=gha,mode=max,scope=cuda