From cf760df930bca1c3cae985b1b4de850915c3c795 Mon Sep 17 00:00:00 2001 From: Holden Date: Sat, 13 Jun 2026 06:30:14 +0000 Subject: [PATCH] Fix build flow: lockfile bot, CPU multi-arch, paths-ignore, release guard - update-lockfile.yml: regenerate all four lockfiles (main + cpu/rocm/intel variants) on any pyproject change; add variant pyproject files to trigger - docker-publish.yml: add lockfiles to paths-ignore so the bot commit does not trigger a second Docker build; remove redundant CONTRIBUTING/SECURITY entries already covered by **.md; add QEMU to build-cpu; set CPU image to linux/amd64,linux/arm64 to match release - release.yml: inline lockfile generation now covers all variants; add workflow_dispatch guard that fails if not dispatched from main Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/docker-publish.yml | 13 +++++++++---- .github/workflows/release.yml | 21 +++++++++++++++++++-- .github/workflows/update-lockfile.yml | 25 ++++++++++++++++++------- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index eb743f5..3bc2c26 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -6,13 +6,15 @@ on: paths-ignore: - "**.md" - "docs/**" - - "CONTRIBUTING.md" - - "SECURITY.md" - ".github/ISSUE_TEMPLATE/**" - ".github/PULL_REQUEST_TEMPLATE.md" - ".github/workflows/release.yml" - ".github/workflows/lint.yml" - ".github/dependabot.yml" + - "uv.lock" + - "uv-cpu.lock" + - "uv-rocm.lock" + - "uv-intel.lock" concurrency: group: docker-${{ github.ref }} @@ -143,7 +145,7 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} build-cpu: - name: Build CPU-only (amd64) + name: Build CPU (amd64 + arm64) runs-on: ubuntu-latest permissions: contents: read @@ -161,6 +163,9 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 @@ -185,7 +190,7 @@ jobs: with: context: . file: ./Dockerfile - platforms: linux/amd64 + platforms: linux/amd64,linux/arm64 build-args: VARIANT=cpu cache-from: type=gha,scope=linux/amd64-cpu cache-to: type=gha,mode=max,scope=linux/amd64-cpu diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae1308c..a166c67 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,8 +37,25 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v7 - - name: Ensure uv.lock is current - run: uv lock + - name: Verify release branch + if: github.event_name == 'workflow_dispatch' + run: | + if [ "${{ github.ref_name }}" != "main" ]; then + echo "::error::Releases must be dispatched from main (current: ${{ github.ref_name }})" + exit 1 + fi + + - name: Ensure lockfiles are current + run: | + cp pyproject.toml _pyproject_orig.toml + for variant in cpu rocm intel; do + cp pyproject-${variant}.toml pyproject.toml + uv lock + cp uv.lock uv-${variant}.lock + done + cp _pyproject_orig.toml pyproject.toml + uv lock + rm _pyproject_orig.toml - name: Set up QEMU uses: docker/setup-qemu-action@v3 diff --git a/.github/workflows/update-lockfile.yml b/.github/workflows/update-lockfile.yml index 49895e0..ac48c06 100644 --- a/.github/workflows/update-lockfile.yml +++ b/.github/workflows/update-lockfile.yml @@ -5,6 +5,9 @@ on: push: paths: - 'pyproject.toml' + - 'pyproject-cpu.toml' + - 'pyproject-rocm.toml' + - 'pyproject-intel.toml' workflow_dispatch: jobs: @@ -30,24 +33,32 @@ jobs: - name: Set up Python run: uv python install 3.13 - - name: Regenerate lockfile - run: uv lock + - name: Regenerate all lockfiles + run: | + cp pyproject.toml _pyproject_orig.toml + for variant in cpu rocm intel; do + cp pyproject-${variant}.toml pyproject.toml + uv lock + cp uv.lock uv-${variant}.lock + done + cp _pyproject_orig.toml pyproject.toml + uv lock + rm _pyproject_orig.toml - name: Check for changes id: diff run: | - if git diff --quiet uv.lock; then + if git diff --quiet uv.lock uv-cpu.lock uv-rocm.lock uv-intel.lock; then echo "changed=false" >> "$GITHUB_OUTPUT" else echo "changed=true" >> "$GITHUB_OUTPUT" fi - - name: Commit and push updated lockfile + - name: Commit and push updated lockfiles if: steps.diff.outputs.changed == 'true' run: | git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add uv.lock - git commit -m "chore: update uv.lock" + git add uv.lock uv-cpu.lock uv-rocm.lock uv-intel.lock + git commit -m "chore: update lockfiles" git push -