Refactor macOS build workflow for arm64 architecture #330
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |