Skip to content

ci: fix v0.74 release GPU builds (sccache disk-only + force_hosted_runners) - #1086

Merged
michaelneale merged 2 commits into
mainfrom
ci/fix-v074-release-gpu-builds
Jul 26, 2026
Merged

ci: fix v0.74 release GPU builds (sccache disk-only + force_hosted_runners)#1086
michaelneale merged 2 commits into
mainfrom
ci/fix-v074-release-gpu-builds

Conversation

@michaelneale

@michaelneale michaelneale commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

What this fixes

Restores the ability to cut a v0.74.0 release with GPU bundles. RC attempts (rc1–rc3) failed on the CUDA/ROCm/Vulkan lanes for two independent, non-code reasons:

  1. sccache token expiry — long GPU builds outlive the ephemeral GitHub Actions cache token; a late sccache server probes the gha tier at startup, that read fails permanently (HTTP 400), and the build aborts.
  2. node24 missing on the self-hosted ARC pods — x86_64 CUDA ran on ARC pods whose image lacks /__e/node24, so container jobs died instantly at checkout.

Both are addressed here, scoped so nothing else in CI changes.

1. sccache disk-only for GPU lanes

configure-sccache-gha unconditionally forced SCCACHE_MULTILEVEL_CHAIN=disk,gha and SCCACHE_GHA_ENABLED=true, overriding the SCCACHE_GHA_ENABLED=false the CUDA/ROCm/Vulkan jobs already declare. Keeping gha in the chain leaves a startup storage probe that hard-fails once the token expires — which is why #1079's fail-open policies didn't help (they don't cover the startup read probe; confirmed against sccache 0.16 internals).

This PR makes the action honor a job-level SCCACHE_GHA_ENABLED=false: those lanes run disk-only, and the cache URL/token are cleared so no residual gha config re-enables the remote tier. Fast lanes keep the best-effort disk,gha behavior unchanged.

2. force_hosted_runners release input (node24, scoped to one run)

Adds an opt-in workflow_dispatch input, force_hosted_runners (default false). When set, it routes the self-hosted release lanes (x86_64 CUDA, ARM64 smoke) to GitHub-hosted ubuntu-24.04 runners for that run only, without touching the repo-wide USE_SELF_HOSTED variable.

On hosted runners /__e/node24 is mounted from the host runner (verified in the docker create line of the last successful GPU release, v0.72.0-rc6 Jun 29), independent of the container image — so the node24 failure disappears with no digest bump or image republish. This leaves CI and PR-build self-hosted routing (and @ndizazzo's #1075 direction) untouched.

To cut rc4: dispatch release with force_hosted_runners=true.

Validation

  • actionlint -config-file .github/actionlint.yaml — pass
  • git diff --check — clean
  • cargo run -p xtask -- repo-consistency release-targets — pass

Rollback

  • Revert either commit independently; both default to prior behavior.
  • No repo variables changed, no images published, no digests bumped.

Summary by CodeRabbit

  • New Features

    • Added a job-level opt-out for GitHub Actions-backed compiler caching via SCCACHE_GHA_ENABLED=false (disk-only mode).
    • Updated the release workflow to support a manual force_hosted_runners input to route selected release runs to GitHub-hosted runners for that execution.
  • Bug Fixes

    • When disk-only caching is enabled, remote cache services are no longer used.
    • If disk-only cache startup fails, the job now fails immediately and stops further cache setup.

Long CUDA/ROCm/Vulkan release builds run past the lifetime of the
ephemeral GitHub Actions cache token. When an sccache server starts after
the token expires it probes the gha tier of the multilevel chain, that
storage read fails permanently (HTTP 400), and the build aborts before any
fail-open policy applies.

Honor a job-level SCCACHE_GHA_ENABLED=false in configure-sccache-gha by
running those lanes disk-only and clearing the cache URL/token so no
residual gha configuration re-enables the remote tier. Fast lanes keep the
best-effort disk,gha behavior.
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The GitHub Actions changes add an explicit disk-only sccache mode and a manual release-workflow option that routes selected lanes to GitHub-hosted runners.

Changes

sccache disk-only opt-out

Layer / File(s) Summary
Disk-only startup and early exit
.github/actions/configure-sccache-gha/action.yml
SCCACHE_GHA_ENABLED=false clears Actions cache variables, sets the chain to disk, restarts sccache in disk-only mode, fails on startup errors, and skips remote-cache logic.

Hosted runner routing

Layer / File(s) Summary
Runner override input and propagation
.github/workflows/release.yml
Adds the force_hosted_runners dispatch input, passes it through metadata outputs, and applies it to three release jobs’ runs-on selections.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Suggested reviewers: ndizazzo, i386

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main CI fix: restoring v0.74 GPU release builds via disk-only sccache and force_hosted_runners.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci/fix-v074-release-gpu-builds

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

This pull request is currently a draft. Reviews will not take place until the PR is marked as ready for review.

@michaelneale
michaelneale marked this pull request as ready for review July 26, 2026 10:28
@github-actions
github-actions Bot requested a review from ndizazzo July 26, 2026 10:29

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/actions/configure-sccache-gha/action.yml:
- Around line 26-28: In the SCCACHE_GHA_ENABLED=false branch, extend the
existing environment-variable reset alongside ACTIONS_CACHE_URL,
ACTIONS_RESULTS_URL, and ACTIONS_RUNTIME_TOKEN to also clear
SCCACHE_GHA_CACHE_URL and SCCACHE_GHA_RUNTIME_TOKEN, preventing inherited GHA
configuration from reactivating the remote backend.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 5d9f31b9-d0ec-4990-9000-04459eea8497

📥 Commits

Reviewing files that changed from the base of the PR and between 465cbc1 and c5905cc.

📒 Files selected for processing (1)
  • .github/actions/configure-sccache-gha/action.yml

Comment on lines +26 to +28
core.exportVariable('ACTIONS_CACHE_URL', '');
core.exportVariable('ACTIONS_RESULTS_URL', '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', '');

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== candidate files =="
git ls-files | grep -E '^(\.github/actions/configure-sccache-gha/action\.ya?ml|\.agents/skills/manage-ci/SKILL\.md|^ci/ci\.md)$' || true

echo
echo "== action.yml context =="
if [ -f .github/actions/configure-sccache-gha/action.yml ]; then
  nl -ba .github/actions/configure-sccache-gha/action.yml | sed -n '1,140p'
fi

echo
echo "== manage-ci docs =="
if [ -f .agents/skills/manage-ci/SKILL.md ]; then
  nl -ba .agents/skills/manage-ci/SKILL.md | sed -n '1,220p'
fi

echo
echo "== relevant search =="
rg -n "sccache|SCCACHE|sccache_gha|ACTIONS_CACHE_URL|SCCACHE_GHA" .github .agents ci 2>/dev/null || true

Repository: Mesh-LLM/mesh-llm

Length of output: 336


🌐 Web query:

Mozilla sccache configuration SCCACHE_GHA_CACHE_URL SCCACHE_GHA_RUNTIME_TOKEN

💡 Result:

To configure sccache to use the GitHub Actions (GHA) cache, you must set specific environment variables that provide access to the GitHub Actions cache service [1][2]. Configuration Details: - SCCACHE_GHA_CACHE_URL: Specifies the GitHub Actions cache API URL [1][3]. This variable is used interchangeably or alongside ACTIONS_RESULTS_URL (which has replaced older legacy endpoints) [1][4]. - SCCACHE_GHA_RUNTIME_TOKEN: Provides the GitHub Actions access token required to authenticate with the cache service [1][5]. This works in conjunction with or as an override to the ACTIONS_RUNTIME_TOKEN environment variable [1][6]. Key Setup Requirements: - Enable the backend: You must set SCCACHE_GHA_ENABLED to on [2]. - RW Mode: You can optionally set SCCACHE_GHA_RW_MODE to READ_ONLY if you wish to restrict the cache backend from writing data [1][7]. - Cache Keys: Use SCCACHE_GHA_CACHE_TO to specify the cache key for writing and SCCACHE_GHA_CACHE_FROM to provide a comma-separated list of cache key prefixes for reading [1][6]. Note on Environment Variables: The variables prefixed with SCCACHE_GHA_ take precedence over the standard ACTIONS_ prefixed variables [6][8]. When running in a GitHub Actions workflow, these tokens and URLs are typically dynamically exported using the GitHub Actions runtime environment [2][4]. Ensure you are using current documentation, as some older guides may reference deprecated endpoint variables [4].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== tool checks =="
(command -v sed || true)
(command -v ast-grep || true)

echo
echo "== action.yml context =="
sed -n '1,140p' .github/actions/configure-sccache-gha/action.yml

echo
echo "== manage-ci inventory/docs snippets =="
echo "--- SKILL.md relevant lines ---"
grep -n -i -E "ci/ci\.md|configure-sccache-gha|sccache|ACTIONS_CACHE_URL|ACTIONS_RUNTIME_TOKEN|SCCACHE|inventory|CI" .agents/skills/manage-ci/SKILL.md || true
echo "--- ci/ci.md relevant lines ---"
grep -n -i -E "configure-sccache-gha|sccache|ACTIONS_CACHE_URL|ACTIONS_RUNTIME_TOKEN|SCCACHE|github" ci/ci.md || true

echo
echo "== repo-wide SCCACHE/GHA references =="
grep -Rn -i -E "SCCACHE|configure-sccache-gha|ACTIONS_CACHE_URL|ACTIONS_RUNTIME_TOKEN|ACTIONS_RESULTS_URL|SCCACHE_GHA|MULTILEVEL_CHAIN" .github .agents ci 2>/dev/null || true

Repository: Mesh-LLM/mesh-llm

Length of output: 24728


Clear sccache’s canonical GHA variables during opt-out.

This branch resets the ACTIONS_* aliases, but sccache also accepts SCCACHE_GHA_CACHE_URL and SCCACHE_GHA_RUNTIME_TOKEN, which can take precedence over the cleared values. Clear them in the SCCACHE_GHA_ENABLED=false path so inherited gha configuration cannot reactivate the remote backend if the chain changes later.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/actions/configure-sccache-gha/action.yml around lines 26 - 28, In
the SCCACHE_GHA_ENABLED=false branch, extend the existing environment-variable
reset alongside ACTIONS_CACHE_URL, ACTIONS_RESULTS_URL, and
ACTIONS_RUNTIME_TOKEN to also clear SCCACHE_GHA_CACHE_URL and
SCCACHE_GHA_RUNTIME_TOKEN, preventing inherited GHA configuration from
reactivating the remote backend.

Adds an opt-in workflow_dispatch input that routes the self-hosted release
lanes (x86_64 CUDA, ARM64 smoke) to GitHub-hosted runners for a single run,
without changing the repo-wide USE_SELF_HOSTED variable. This lets a release
run on hosted runners (which provide /__e/node24) when the self-hosted ARC
pods lack node24, while leaving CI and PR-build self-hosted routing intact.

Defaults to false, so existing behavior is unchanged unless explicitly set.
@michaelneale michaelneale changed the title ci: fix v0.74 release GPU builds (sccache disk-only; node24 digests TODO) ci: fix v0.74 release GPU builds (sccache disk-only + force_hosted_runners) Jul 26, 2026
@michaelneale
michaelneale merged commit 8d49450 into main Jul 26, 2026
22 checks passed
@michaelneale
michaelneale deleted the ci/fix-v074-release-gpu-builds branch July 26, 2026 10:41
michaelneale added a commit that referenced this pull request Jul 27, 2026
* origin/main:
  Fix Metal small-batch matmul parity for GLM verification (#1078)
  Handle K-only transposed KV page import and export (#1084)
  Refresh llama.cpp upstream patch queue (#1085)
  chore: improve embedded native-runtime compatibility guidance (#1043)
  fix(console-ui): chat transcript snapping during live status updates (#1083)
  ci: bump Linux CUDA slim container to gha-convention base runner image
  fix: record activation cache prefix identities (#1041)
  fix: read-only model download caches (#1042)
  ci: disable sccache for Windows ROCm native runtime build (#1087)
  ci: fix v0.74 release GPU builds (sccache disk-only + force_hosted_runners) (#1086)
  Make release sccache failures non-fatal (#1079)
  Keep client-only nodes out of model election (#1074)

# Conflicts:
#	crates/mesh-llm-host-runtime/src/runtime/auto_join.rs
#	crates/mesh-llm-host-runtime/src/runtime/tests/auto_join.rs
#	third_party/llama.cpp/patches/0004-Add-lanes-external-media-and-chat-grammar-support.patch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant