From 0f51db6929689b3f0e7c2cd8d3991681ec23bf9d Mon Sep 17 00:00:00 2001 From: Ken VanDine Date: Sat, 30 May 2026 13:43:32 -0400 Subject: [PATCH 1/2] Validate the release build on pull requests Run the release build/pack jobs on PRs so packaging issues (missing runtime DLLs, RPATH problems, PowerShell quoting bugs, etc.) surface before merging instead of only on the scheduled/dispatched release runs. The existing release job is gated on schedule/create_release, so it is skipped on pull_request and nothing is published. To keep PR runs affordable: - Scope the pull_request trigger to .github/** paths. The build jobs clone llama.cpp source from upstream, so only changes to the release pipeline itself can affect the outcome. - Build a single representative CUDA arch (sm_89) on PRs; the packaging logic is identical across all sm_*. The full matrix still runs on schedule/dispatch. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/release.yml | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cf414f792995..0e55edd4e6b5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,6 +9,12 @@ on: description: 'Create new release' required: true type: boolean + pull_request: # validate the release build on PRs; the release job is skipped so nothing is published + paths: + # The build jobs clone llama.cpp source from upstream, so only changes to + # the release pipeline itself can affect the outcome. Scope PR runs to those. + - '.github/workflows/release.yml' + - '.github/actions/**' concurrency: group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} @@ -125,14 +131,9 @@ jobs: strategy: fail-fast: false matrix: - include: - - sm: sm_75 - - sm: sm_80 - - sm: sm_86 - - sm: sm_89 - - sm: sm_90 - - sm: sm_100 - - sm: sm_120 + # On PRs only build one representative arch (packaging logic is identical + # across all sm_*); build the full matrix on schedule/dispatch. + sm: ${{ github.event_name == 'pull_request' && fromJSON('["sm_89"]') || fromJSON('["sm_75", "sm_80", "sm_86", "sm_89", "sm_90", "sm_100", "sm_120"]') }} steps: - name: Clone @@ -443,14 +444,9 @@ jobs: strategy: fail-fast: false matrix: - include: - - sm: sm_75 - - sm: sm_80 - - sm: sm_86 - - sm: sm_89 - - sm: sm_90 - - sm: sm_100 - - sm: sm_120 + # On PRs only build one representative arch (packaging logic is identical + # across all sm_*); build the full matrix on schedule/dispatch. + sm: ${{ github.event_name == 'pull_request' && fromJSON('["sm_89"]') || fromJSON('["sm_75", "sm_80", "sm_86", "sm_89", "sm_90", "sm_100", "sm_120"]') }} steps: - name: Clone From 8cb5a00932d15c60e532d486ba686e3c58d31b9b Mon Sep 17 00:00:00 2001 From: Ken VanDine Date: Sun, 31 May 2026 14:44:08 -0400 Subject: [PATCH 2/2] Drop .github/actions/** from release PR path filter The release workflow consumes the get-tag-name composite action via a pinned remote ref (lemonade-sdk/llama.cpp/.github/actions/get-tag-name@lemonade), not a PR-local ./ path. A PR run therefore always uses the action from the lemonade branch, so triggering on .github/actions/** changes would run the old action version and falsely imply the change was validated. Scope the PR trigger to the workflow file itself, which is the only PR-controllable input that actually affects the outcome. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0e55edd4e6b5..4542398b0c0b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,10 +11,10 @@ on: type: boolean pull_request: # validate the release build on PRs; the release job is skipped so nothing is published paths: - # The build jobs clone llama.cpp source from upstream, so only changes to - # the release pipeline itself can affect the outcome. Scope PR runs to those. + # The build jobs clone llama.cpp source from upstream and the get-tag-name + # action is consumed via a pinned @lemonade ref, so only changes to this + # workflow itself can affect the outcome of a PR run. Scope PR runs to it. - '.github/workflows/release.yml' - - '.github/actions/**' concurrency: group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}