Skip to content

Refactor macOS build workflow for arm64 architecture #330

Refactor macOS build workflow for arm64 architecture

Refactor macOS build workflow for arm64 architecture #330

Workflow file for this run

name: CI
on:
push:
branches: [master]
workflow_dispatch:
inputs:
image:
description: "Which image to build? (cpp=C++ engine, cpu=PyTorch CPU, cuda=PyTorch CUDA, all=all three)"
required: true
type: choice
options:
- cpp
- cpu
- cuda
- all
push_image:
description: "Push to ghcr.io?"
required: true
default: "true"
type: choice
options: ["true", "false"]
env:
REGISTRY: ghcr.io
jobs:
file-integrity:
name: File integrity
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check required files exist
run: |
files=(
"main.cpp"
"engine/main.py"
"requirements.txt"
)
failed=0
for f in "${files[@]}"; do
if [ -f "$f" ]; then
echo "PASS: $f"
else
echo "FAIL: $f -- MISSING"
failed=1
fi
done
exit $failed
lint-python:
name: Python lint
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Lint engine/ (ruff)
uses: chartboost/ruff-action@v1
with:
args: "check engine/ --ignore E501 --exit-zero"
build-binary-linux:
name: Binary (ubuntu-latest)
if: github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install g++
run: sudo apt-get update && sudo apt-get install -y g++
- name: Compile main.cpp
run: |
g++ -std=c++17 -O3 \
-I. -Iinclude \
-o quadtrix main.cpp
- name: Smoke test
run: ./quadtrix --help || true
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: quadtrix-linux-amd64
path: quadtrix
retention-days: 7
build-binary-macos:
name: Binary (macos-14)
if: github.event_name == 'push'
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- name: Compile main.cpp
run: |
g++ -std=c++17 -O3 \
-I. -Iinclude \
-o quadtrix main.cpp
- name: Smoke test
run: ./quadtrix --help || true
- name: Package binary
run: tar -czf quadtrix-macos-arm64.tar.gz quadtrix
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: quadtrix-macos-arm64
path: quadtrix-macos-arm64.tar.gz
retention-days: 7
build-cpp-image:
name: "Build -- cpp (C++ engine - linux/amd64 + arm64)"
if: ${{ github.event_name == 'workflow_dispatch' && (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=branch
type=sha,prefix=sha-
type=raw,value=latest,enable={{is_default_branch}}
- name: Build & 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: "Build -- cpu (PyTorch CPU - linux/amd64 + arm64)"
if: ${{ github.event_name == 'workflow_dispatch' && (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=branch
type=sha,prefix=sha-
type=raw,value=latest,enable={{is_default_branch}}
- name: Build & 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: "Build -- cuda (PyTorch CUDA - linux/amd64 only)"
if: ${{ github.event_name == 'workflow_dispatch' && (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=branch
type=sha,prefix=sha-
type=raw,value=latest,enable={{is_default_branch}}
- name: Build & 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