From 9a9a80308c02f236520611df0e07958c0447efc0 Mon Sep 17 00:00:00 2001 From: Jhin Lee Date: Thu, 9 Jul 2026 09:17:02 -0400 Subject: [PATCH 1/3] ci: align bridge updater schedule and wait for checks --- .github/workflows/auto_llama_cpp_update.yml | 48 +++++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/.github/workflows/auto_llama_cpp_update.yml b/.github/workflows/auto_llama_cpp_update.yml index 3f57a8a..0b94306 100644 --- a/.github/workflows/auto_llama_cpp_update.yml +++ b/.github/workflows/auto_llama_cpp_update.yml @@ -2,8 +2,8 @@ name: Auto-update llama.cpp Pin on: schedule: - # Weekday morning UTC, after upstream llama.cpp usually publishes release tags. - - cron: '17 10 * * 1-5' + # Daily UTC, aligned with llamadart-native auto_native_release.yml. + - cron: '23 3 * * *' workflow_dispatch: permissions: @@ -13,7 +13,7 @@ permissions: concurrency: group: llama-cpp-auto-update - cancel-in-progress: true + cancel-in-progress: false env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" @@ -170,3 +170,45 @@ jobs: sleep $((attempt * 5)) done echo "Dispatched CI for #${{ steps.create-pr.outputs.pull-request-number }} on $UPDATE_BRANCH." + + - name: Wait for automation PR CI + if: steps.create-pr.outputs.pull-request-number != '' + timeout-minutes: 45 + env: + GH_TOKEN: ${{ github.token }} + PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }} + PR_HEAD_SHA: ${{ steps.create-pr.outputs.pull-request-head-sha }} + run: | + set -euo pipefail + + if [ -z "$PR_HEAD_SHA" ] || [ "$PR_HEAD_SHA" = "null" ]; then + PR_HEAD_SHA="$(gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json headRefOid --jq '.headRefOid')" + fi + if [ -z "$PR_HEAD_SHA" ] || [ "$PR_HEAD_SHA" = "null" ]; then + echo "error: could not resolve head SHA for automation PR #$PR_NUMBER" + exit 1 + fi + + run_id="" + for attempt in $(seq 1 30); do + run_id="$(gh run list \ + --repo "$GITHUB_REPOSITORY" \ + --workflow ci.yml \ + --branch "$UPDATE_BRANCH" \ + --commit "$PR_HEAD_SHA" \ + --event workflow_dispatch \ + --json databaseId \ + --jq '.[0].databaseId // ""')" + if [ -n "$run_id" ]; then + break + fi + sleep 10 + done + + if [ -z "$run_id" ]; then + echo "error: dispatched CI workflow_dispatch run for $PR_HEAD_SHA was not found" + exit 1 + fi + + echo "Watching CI run $run_id for automation PR #$PR_NUMBER at $PR_HEAD_SHA." + gh run watch "$run_id" --repo "$GITHUB_REPOSITORY" --exit-status --interval 30 From 0d742636e85b06282098467e40342788e049132d Mon Sep 17 00:00:00 2001 From: Jhin Lee Date: Thu, 9 Jul 2026 09:18:45 -0400 Subject: [PATCH 2/3] ci: satisfy workflow shell lint --- .github/workflows/auto_llama_cpp_update.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/auto_llama_cpp_update.yml b/.github/workflows/auto_llama_cpp_update.yml index 0b94306..03a5f35 100644 --- a/.github/workflows/auto_llama_cpp_update.yml +++ b/.github/workflows/auto_llama_cpp_update.yml @@ -34,6 +34,7 @@ jobs: env: GH_TOKEN: ${{ github.token }} run: | + # shellcheck disable=SC2016,SC2129 set -euo pipefail CURRENT_TAG="$(tr -d '[:space:]' < "$VERSION_FILE")" @@ -179,6 +180,7 @@ jobs: PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }} PR_HEAD_SHA: ${{ steps.create-pr.outputs.pull-request-head-sha }} run: | + # shellcheck disable=SC2016 set -euo pipefail if [ -z "$PR_HEAD_SHA" ] || [ "$PR_HEAD_SHA" = "null" ]; then @@ -202,6 +204,7 @@ jobs: if [ -n "$run_id" ]; then break fi + echo "Waiting for CI workflow_dispatch run for $PR_HEAD_SHA (attempt $attempt/30)." sleep 10 done From 14ba28387e65b4c7d5cf952bf36c765fa3c801e3 Mon Sep 17 00:00:00 2001 From: Jhin Lee Date: Thu, 9 Jul 2026 09:20:44 -0400 Subject: [PATCH 3/3] ci: clean up updater shell lint --- .github/workflows/auto_llama_cpp_update.yml | 40 ++++++++++++--------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/.github/workflows/auto_llama_cpp_update.yml b/.github/workflows/auto_llama_cpp_update.yml index 03a5f35..7995cbb 100644 --- a/.github/workflows/auto_llama_cpp_update.yml +++ b/.github/workflows/auto_llama_cpp_update.yml @@ -34,7 +34,6 @@ jobs: env: GH_TOKEN: ${{ github.token }} run: | - # shellcheck disable=SC2016,SC2129 set -euo pipefail CURRENT_TAG="$(tr -d '[:space:]' < "$VERSION_FILE")" @@ -43,40 +42,48 @@ jobs: exit 1 fi - LATEST_TAG="$(gh release list --repo ggml-org/llama.cpp --limit 1 --json tagName --jq '.[0].tagName')" + LATEST_TAG="$(gh release list --repo ggml-org/llama.cpp --limit 1 --json tagName --jq ".[0].tagName")" if [ -z "$LATEST_TAG" ] || [ "$LATEST_TAG" = "null" ]; then echo "error: could not resolve latest ggml-org/llama.cpp release tag" exit 1 fi - echo "current_tag=$CURRENT_TAG" >> "$GITHUB_OUTPUT" - echo "latest_tag=$LATEST_TAG" >> "$GITHUB_OUTPUT" + { + echo "current_tag=$CURRENT_TAG" + echo "latest_tag=$LATEST_TAG" + } >> "$GITHUB_OUTPUT" if [ "$CURRENT_TAG" = "$LATEST_TAG" ]; then - echo "update_needed=false" >> "$GITHUB_OUTPUT" - echo "skip_reason=$VERSION_FILE already points at $LATEST_TAG" >> "$GITHUB_OUTPUT" + { + echo "update_needed=false" + echo "skip_reason=$VERSION_FILE already points at $LATEST_TAG" + } >> "$GITHUB_OUTPUT" exit 0 fi for pr in $(gh pr list --repo "$GITHUB_REPOSITORY" --state open --json number,headRefName --jq ".[] | select(.headRefName != \"$UPDATE_BRANCH\") | .number"); do if gh pr diff "$pr" --repo "$GITHUB_REPOSITORY" --name-only | grep -qx "$VERSION_FILE"; then - echo "update_needed=false" >> "$GITHUB_OUTPUT" - echo "skip_reason=PR #$pr already changes $VERSION_FILE; not racing a non-automation PR" >> "$GITHUB_OUTPUT" + { + echo "update_needed=false" + echo "skip_reason=PR #$pr already changes $VERSION_FILE; not racing a non-automation PR" + } >> "$GITHUB_OUTPUT" exit 0 fi done printf '%s\n' "$LATEST_TAG" > "$VERSION_FILE" - RELEASE_URL="$(gh release view "$LATEST_TAG" --repo ggml-org/llama.cpp --json url --jq '.url')" + RELEASE_URL="$(gh release view "$LATEST_TAG" --repo ggml-org/llama.cpp --json url --jq ".url")" COMPARE_URL="https://github.com/ggml-org/llama.cpp/compare/${CURRENT_TAG}...${LATEST_TAG}" - echo "release_url=$RELEASE_URL" >> "$GITHUB_OUTPUT" - echo "compare_url=$COMPARE_URL" >> "$GITHUB_OUTPUT" - echo "update_needed=true" >> "$GITHUB_OUTPUT" + { + echo "release_url=$RELEASE_URL" + echo "compare_url=$COMPARE_URL" + echo "update_needed=true" + } >> "$GITHUB_OUTPUT" - gh release view "$LATEST_TAG" --repo ggml-org/llama.cpp --json body --jq '.body // ""' > /tmp/llama_cpp_release_notes.md + gh release view "$LATEST_TAG" --repo ggml-org/llama.cpp --json body --jq ".body // \"\"" > /tmp/llama_cpp_release_notes.md gh api "repos/ggml-org/llama.cpp/compare/${CURRENT_TAG}...${LATEST_TAG}" \ - --jq '.commits[:80][] | "- " + (.commit.message | split("\n")[0]) + " (`" + (.sha[0:7]) + "`)"' \ + --jq ".commits[:80][] | \"- \" + (.commit.message | split(\"\\n\")[0]) + \" (\`\" + (.sha[0:7]) + \"\`)\"" \ > /tmp/llama_cpp_commits.md || true { @@ -180,11 +187,10 @@ jobs: PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }} PR_HEAD_SHA: ${{ steps.create-pr.outputs.pull-request-head-sha }} run: | - # shellcheck disable=SC2016 set -euo pipefail if [ -z "$PR_HEAD_SHA" ] || [ "$PR_HEAD_SHA" = "null" ]; then - PR_HEAD_SHA="$(gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json headRefOid --jq '.headRefOid')" + PR_HEAD_SHA="$(gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json headRefOid --jq ".headRefOid")" fi if [ -z "$PR_HEAD_SHA" ] || [ "$PR_HEAD_SHA" = "null" ]; then echo "error: could not resolve head SHA for automation PR #$PR_NUMBER" @@ -200,7 +206,7 @@ jobs: --commit "$PR_HEAD_SHA" \ --event workflow_dispatch \ --json databaseId \ - --jq '.[0].databaseId // ""')" + --jq ".[0].databaseId // \"\"")" if [ -n "$run_id" ]; then break fi