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 <noreply@anthropic.com>
This commit is contained in:
@@ -6,13 +6,15 @@ on:
|
|||||||
paths-ignore:
|
paths-ignore:
|
||||||
- "**.md"
|
- "**.md"
|
||||||
- "docs/**"
|
- "docs/**"
|
||||||
- "CONTRIBUTING.md"
|
|
||||||
- "SECURITY.md"
|
|
||||||
- ".github/ISSUE_TEMPLATE/**"
|
- ".github/ISSUE_TEMPLATE/**"
|
||||||
- ".github/PULL_REQUEST_TEMPLATE.md"
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
||||||
- ".github/workflows/release.yml"
|
- ".github/workflows/release.yml"
|
||||||
- ".github/workflows/lint.yml"
|
- ".github/workflows/lint.yml"
|
||||||
- ".github/dependabot.yml"
|
- ".github/dependabot.yml"
|
||||||
|
- "uv.lock"
|
||||||
|
- "uv-cpu.lock"
|
||||||
|
- "uv-rocm.lock"
|
||||||
|
- "uv-intel.lock"
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: docker-${{ github.ref }}
|
group: docker-${{ github.ref }}
|
||||||
@@ -143,7 +145,7 @@ jobs:
|
|||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
build-cpu:
|
build-cpu:
|
||||||
name: Build CPU-only (amd64)
|
name: Build CPU (amd64 + arm64)
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@@ -161,6 +163,9 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v4
|
uses: docker/setup-buildx-action@v4
|
||||||
|
|
||||||
@@ -185,7 +190,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64,linux/arm64
|
||||||
build-args: VARIANT=cpu
|
build-args: VARIANT=cpu
|
||||||
cache-from: type=gha,scope=linux/amd64-cpu
|
cache-from: type=gha,scope=linux/amd64-cpu
|
||||||
cache-to: type=gha,mode=max,scope=linux/amd64-cpu
|
cache-to: type=gha,mode=max,scope=linux/amd64-cpu
|
||||||
|
|||||||
@@ -37,8 +37,25 @@ jobs:
|
|||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@v7
|
uses: astral-sh/setup-uv@v7
|
||||||
|
|
||||||
- name: Ensure uv.lock is current
|
- name: Verify release branch
|
||||||
run: uv lock
|
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
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ on:
|
|||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'pyproject.toml'
|
- 'pyproject.toml'
|
||||||
|
- 'pyproject-cpu.toml'
|
||||||
|
- 'pyproject-rocm.toml'
|
||||||
|
- 'pyproject-intel.toml'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -30,24 +33,32 @@ jobs:
|
|||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
run: uv python install 3.13
|
run: uv python install 3.13
|
||||||
|
|
||||||
- name: Regenerate lockfile
|
- name: Regenerate all lockfiles
|
||||||
run: uv lock
|
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
|
- name: Check for changes
|
||||||
id: diff
|
id: diff
|
||||||
run: |
|
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"
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
||||||
else
|
else
|
||||||
echo "changed=true" >> "$GITHUB_OUTPUT"
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Commit and push updated lockfile
|
- name: Commit and push updated lockfiles
|
||||||
if: steps.diff.outputs.changed == 'true'
|
if: steps.diff.outputs.changed == 'true'
|
||||||
run: |
|
run: |
|
||||||
git config user.name "github-actions[bot]"
|
git config user.name "github-actions[bot]"
|
||||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||||
git add uv.lock
|
git add uv.lock uv-cpu.lock uv-rocm.lock uv-intel.lock
|
||||||
git commit -m "chore: update uv.lock"
|
git commit -m "chore: update lockfiles"
|
||||||
git push
|
git push
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user