Repository navigation
ci: add engine version watch and nightly failure triage automation #1973
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,166 @@ | ||||||||||||||||||||||||||||||||||||||||||||||
| name: Engine Version Watch | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| # Every 3 days: detect newer engine releases and have Claude file one | ||||||||||||||||||||||||||||||||||||||||||||||
| # researched upgrade issue per engine (deduped against open issues, so a | ||||||||||||||||||||||||||||||||||||||||||||||
| # version is only reported once). | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| on: | ||||||||||||||||||||||||||||||||||||||||||||||
| schedule: | ||||||||||||||||||||||||||||||||||||||||||||||
| - cron: '23 8 */3 * *' | ||||||||||||||||||||||||||||||||||||||||||||||
| workflow_dispatch: | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
|
coderabbitai[bot] marked this conversation as resolved.
|
||||||||||||||||||||||||||||||||||||||||||||||
| permissions: | ||||||||||||||||||||||||||||||||||||||||||||||
| contents: read | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| concurrency: | ||||||||||||||||||||||||||||||||||||||||||||||
| group: engine-version-watch | ||||||||||||||||||||||||||||||||||||||||||||||
| cancel-in-progress: false | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| jobs: | ||||||||||||||||||||||||||||||||||||||||||||||
| detect: | ||||||||||||||||||||||||||||||||||||||||||||||
| runs-on: k8s-runner-cpu | ||||||||||||||||||||||||||||||||||||||||||||||
| timeout-minutes: 10 | ||||||||||||||||||||||||||||||||||||||||||||||
| permissions: | ||||||||||||||||||||||||||||||||||||||||||||||
| contents: read | ||||||||||||||||||||||||||||||||||||||||||||||
| issues: write | ||||||||||||||||||||||||||||||||||||||||||||||
| outputs: | ||||||||||||||||||||||||||||||||||||||||||||||
| pending: ${{ steps.dedup.outputs.pending }} | ||||||||||||||||||||||||||||||||||||||||||||||
| has_pending: ${{ steps.dedup.outputs.has_pending }} | ||||||||||||||||||||||||||||||||||||||||||||||
| steps: | ||||||||||||||||||||||||||||||||||||||||||||||
| - name: Checkout | ||||||||||||||||||||||||||||||||||||||||||||||
| uses: actions/checkout@v7 | ||||||||||||||||||||||||||||||||||||||||||||||
|
coderabbitai[bot] marked this conversation as resolved.
|
||||||||||||||||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||||||||||||||||
| persist-credentials: false | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| - name: Install gh CLI | ||||||||||||||||||||||||||||||||||||||||||||||
| run: | | ||||||||||||||||||||||||||||||||||||||||||||||
| if ! command -v gh &>/dev/null; then | ||||||||||||||||||||||||||||||||||||||||||||||
| mkdir -p "$HOME/.local/bin" | ||||||||||||||||||||||||||||||||||||||||||||||
| GH_VERSION="2.74.0" | ||||||||||||||||||||||||||||||||||||||||||||||
| GH_SHA256="e55c9d49dc49c0b0fef0a9acd3510482fd9e27ff52ae80f8a6e838cd25b4cd89" | ||||||||||||||||||||||||||||||||||||||||||||||
| curl -fsSL --connect-timeout 10 --max-time 120 -o /tmp/gh.tgz \ | ||||||||||||||||||||||||||||||||||||||||||||||
| "https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_linux_amd64.tar.gz" | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "${GH_SHA256} /tmp/gh.tgz" | sha256sum --check --quiet | ||||||||||||||||||||||||||||||||||||||||||||||
| tar xzf /tmp/gh.tgz --strip-components=2 -C "$HOME/.local/bin" "gh_${GH_VERSION}_linux_amd64/bin/gh" | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "$HOME/.local/bin" >> "$GITHUB_PATH" | ||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+35
to
+46
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
file=".github/workflows/engine-version-watch.yml"
echo "== outline =="
ast-grep outline "$file" --view expanded || true
echo
echo "== lines 1-170 =="
nl -ba "$file" | sed -n '1,170p'Repository: lightseekorg/smg Length of output: 285 🏁 Script executed: #!/bin/bash
set -euo pipefail
file=".github/workflows/engine-version-watch.yml"
echo "== lines 1-170 =="
sed -n '1,170p' "$file" | cat -n
echo
echo "== gh occurrences =="
rg -n '\bgh\b|GH_TOKEN|PATH|Install gh CLI|command -v gh' "$file"Repository: lightseekorg/smg Length of output: 9753 Force the pinned 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| - name: Check versions | ||||||||||||||||||||||||||||||||||||||||||||||
| id: check | ||||||||||||||||||||||||||||||||||||||||||||||
| env: | ||||||||||||||||||||||||||||||||||||||||||||||
| GH_TOKEN: ${{ github.token }} | ||||||||||||||||||||||||||||||||||||||||||||||
| run: | | ||||||||||||||||||||||||||||||||||||||||||||||
| bash scripts/check_engine_versions.sh | tee versions.jsonl | ||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
When any upstream lookup in Useful? React with 👍 / 👎. |
||||||||||||||||||||||||||||||||||||||||||||||
| jq -cs '[.[] | select(.update)]' versions.jsonl > updates.json | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "updates=$(cat updates.json)" >> "$GITHUB_OUTPUT" | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| - name: Drop engines that already have an open issue | ||||||||||||||||||||||||||||||||||||||||||||||
| id: dedup | ||||||||||||||||||||||||||||||||||||||||||||||
| env: | ||||||||||||||||||||||||||||||||||||||||||||||
| GH_TOKEN: ${{ github.token }} | ||||||||||||||||||||||||||||||||||||||||||||||
| run: | | ||||||||||||||||||||||||||||||||||||||||||||||
| gh label create engine-watch --repo "$GITHUB_REPOSITORY" \ | ||||||||||||||||||||||||||||||||||||||||||||||
| --description "Automated engine release tracking" --color 0e8a16 --force | ||||||||||||||||||||||||||||||||||||||||||||||
| gh label create enhancement --repo "$GITHUB_REPOSITORY" \ | ||||||||||||||||||||||||||||||||||||||||||||||
| --description "New feature or request" --color a2eeef --force | ||||||||||||||||||||||||||||||||||||||||||||||
| # Exact substring match on fetched titles: GitHub's in:title search | ||||||||||||||||||||||||||||||||||||||||||||||
| # normalizes dots/hyphens, so "sglang 0.5.16" can match unrelated | ||||||||||||||||||||||||||||||||||||||||||||||
| # issues (or miss). | ||||||||||||||||||||||||||||||||||||||||||||||
| titles=$(gh issue list --repo "$GITHUB_REPOSITORY" --state open \ | ||||||||||||||||||||||||||||||||||||||||||||||
| --label engine-watch --limit 200 --json title --jq '[.[].title]') | ||||||||||||||||||||||||||||||||||||||||||||||
| pending='[]' | ||||||||||||||||||||||||||||||||||||||||||||||
| while IFS= read -r row; do | ||||||||||||||||||||||||||||||||||||||||||||||
| engine=$(jq -r .engine <<<"$row") | ||||||||||||||||||||||||||||||||||||||||||||||
| latest=$(jq -r .latest <<<"$row") | ||||||||||||||||||||||||||||||||||||||||||||||
| existing=$(jq --arg t "$engine $latest" '[.[] | select(contains($t))] | length' <<<"$titles") | ||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+72
to
+78
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
# Inspect the workflow around the cited lines
FILE=".github/workflows/engine-version-watch.yml"
wc -l "$FILE"
sed -n '1,160p' "$FILE"
# Locate all uses of `gh issue list` and related dedup logic
rg -n "gh issue list|engine-watch|pending='\\[\\]'" .github/workflows -SRepository: lightseekorg/smg Length of output: 7832 🏁 Script executed: #!/bin/bash
set -euo pipefail
# Read the gh CLI docs from the installed help text if available
gh issue list --help | sed -n '1,220p'Repository: lightseekorg/smg Length of output: 2785 🏁 Script executed: #!/bin/bash
set -euo pipefail
# Probe whether gh issue list defaults imply pagination limits or whether --limit is only a display cap
python3 - <<'PY'
print("noop")
PYRepository: lightseekorg/smg Length of output: 159 Fetch all open 🤖 Prompt for AI AgentsThere was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔴 Important: Concrete scenario: an open issue is titled Same class of bug for minor-version prefixes: Fix: construct and match the full expected title prefix instead of a bare substring:
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||
| if [ "$existing" = "0" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||
| pending=$(jq -c --argjson r "$row" '. + [$r]' <<<"$pending") | ||||||||||||||||||||||||||||||||||||||||||||||
| else | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "Skipping $engine $latest: open issue exists" | ||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||
| done < <(jq -c '.[]' updates.json) | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "pending=$pending" >> "$GITHUB_OUTPUT" | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "has_pending=$(jq 'length > 0' <<<"$pending")" >> "$GITHUB_OUTPUT" | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+57
to
+84
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🌐 Web query:
💡 Result: No, GitHub's issue search does not reliably match quoted phrases containing dots or hyphens as exact literal substrings [1]. While GitHub issue search supports double quotes for multi-word phrases [2][3], the underlying search mechanism typically processes queries by normalizing text, which often involves treating punctuation marks like dots and hyphens as noise or delimiters [1]. Consequently, a search for a phrase such as "item-name" or "version.1" frequently results in the search engine treating those characters as separators rather than literal parts of the string, causing the search to return matches for the individual words (e.g., "item" and "name") rather than the specific, combined string [4][1]. This limitation is a known point of frustration for users searching for identifiers, function names, or version strings that rely on these characters [1]. It is distinct from GitHub's separate Code Search functionality, which does support more advanced exact matching and special character handling [5][6]. For issue search, no native syntax currently guarantees that these special characters will be treated as part of an immutable, literal substring [1]. Citations:
🌐 Web query:
💡 Result: When searching for issues and pull requests on GitHub, the search engine does not support exact string matching for punctuation, including dots and hyphens [1][2]. While you can use quotation marks to group multi-word terms (e.g., "in progress") to ensure those specific words appear in the result [1][2], GitHub's standard search behavior treats punctuation marks as delimiters or ignores them entirely [3][4]. Consequently, a search for a phrase containing punctuation will typically return results that match the words themselves, regardless of the punctuation [3][4]. For searching source code on GitHub, the experience differs due to GitHub's specialized Code Search engine [5]. GitHub Code Search supports exact string matching by surrounding the string in quotes [5]. It also allows for more advanced pattern matching using regular expressions enclosed in forward slashes (e.g., /my-exact-string/) [5][6]. Unlike the standard issue/pull request search, this code-specific engine is designed to handle non-alphanumeric characters more effectively [5]. In summary: - For issues and pull requests: Use quotes to group words, but be aware that punctuation like hyphens and dots will not be treated as part of an exact string match [1][2][3]. - For code: Use quotes for exact string matching or regular expressions (between slashes) to include specific punctuation marks in your search criteria [5][6]. Citations:
Avoid relying on quoted title search for dedup 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||
| research-and-file: | ||||||||||||||||||||||||||||||||||||||||||||||
| needs: detect | ||||||||||||||||||||||||||||||||||||||||||||||
| if: needs.detect.outputs.has_pending == 'true' | ||||||||||||||||||||||||||||||||||||||||||||||
| runs-on: k8s-runner-cpu | ||||||||||||||||||||||||||||||||||||||||||||||
| timeout-minutes: 30 | ||||||||||||||||||||||||||||||||||||||||||||||
| permissions: | ||||||||||||||||||||||||||||||||||||||||||||||
| contents: read | ||||||||||||||||||||||||||||||||||||||||||||||
| issues: write | ||||||||||||||||||||||||||||||||||||||||||||||
| id-token: write | ||||||||||||||||||||||||||||||||||||||||||||||
| steps: | ||||||||||||||||||||||||||||||||||||||||||||||
| - name: Checkout | ||||||||||||||||||||||||||||||||||||||||||||||
| uses: actions/checkout@v7 | ||||||||||||||||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||||||||||||||||
| persist-credentials: false | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| - name: Export API key from pod env | ||||||||||||||||||||||||||||||||||||||||||||||
| run: | | ||||||||||||||||||||||||||||||||||||||||||||||
| if [ -z "${ANTHROPIC_API_KEY:-}" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "::error::ANTHROPIC_API_KEY is not present in the runner pod environment" | ||||||||||||||||||||||||||||||||||||||||||||||
| exit 1 | ||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "::add-mask::${ANTHROPIC_API_KEY}" | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}" >> "$GITHUB_ENV" | ||||||||||||||||||||||||||||||||||||||||||||||
|
coderabbitai[bot] marked this conversation as resolved.
|
||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| - name: Install gh CLI | ||||||||||||||||||||||||||||||||||||||||||||||
| run: | | ||||||||||||||||||||||||||||||||||||||||||||||
| if ! command -v gh &>/dev/null; then | ||||||||||||||||||||||||||||||||||||||||||||||
| mkdir -p "$HOME/.local/bin" | ||||||||||||||||||||||||||||||||||||||||||||||
| GH_VERSION="2.74.0" | ||||||||||||||||||||||||||||||||||||||||||||||
| GH_SHA256="e55c9d49dc49c0b0fef0a9acd3510482fd9e27ff52ae80f8a6e838cd25b4cd89" | ||||||||||||||||||||||||||||||||||||||||||||||
| curl -fsSL --connect-timeout 10 --max-time 120 -o /tmp/gh.tgz \ | ||||||||||||||||||||||||||||||||||||||||||||||
| "https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_linux_amd64.tar.gz" | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "${GH_SHA256} /tmp/gh.tgz" | sha256sum --check --quiet | ||||||||||||||||||||||||||||||||||||||||||||||
| tar xzf /tmp/gh.tgz --strip-components=2 -C "$HOME/.local/bin" "gh_${GH_VERSION}_linux_amd64/bin/gh" | ||||||||||||||||||||||||||||||||||||||||||||||
| echo "$HOME/.local/bin" >> "$GITHUB_PATH" | ||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+109
to
+120
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win Duplicated gh CLI install block across both jobs. Lines 109-120 are byte-identical to lines 35-46 in the 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| - uses: anthropics/claude-code-action@v1 | ||||||||||||||||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||||||||||||||||
| anthropic_api_key: ${{ env.ANTHROPIC_API_KEY }} | ||||||||||||||||||||||||||||||||||||||||||||||
| prompt: | | ||||||||||||||||||||||||||||||||||||||||||||||
| REPO: ${{ github.repository }} | ||||||||||||||||||||||||||||||||||||||||||||||
| PENDING ENGINE UPDATES (JSON): ${{ needs.detect.outputs.pending }} | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| For EACH entry, research the upgrade and create ONE GitHub issue. | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| Research per engine: | ||||||||||||||||||||||||||||||||||||||||||||||
| 1. Locate every pin of the current version in this repo | ||||||||||||||||||||||||||||||||||||||||||||||
| (scripts/ci_install_<engine>.sh, .github/workflows/release-*-docker.yml, | ||||||||||||||||||||||||||||||||||||||||||||||
| grpc_servicer/pyproject.toml, docker/engine.Dockerfile). | ||||||||||||||||||||||||||||||||||||||||||||||
| 2. Check whether nearby workaround comments are tied to the pinned | ||||||||||||||||||||||||||||||||||||||||||||||
| version (e.g. dependency band pins, forced reinstalls) and | ||||||||||||||||||||||||||||||||||||||||||||||
| whether the new release's dependency metadata makes them | ||||||||||||||||||||||||||||||||||||||||||||||
| obsolete — for PyPI packages fetch | ||||||||||||||||||||||||||||||||||||||||||||||
| https://pypi.org/pypi/<pkg>/<version>/json and inspect | ||||||||||||||||||||||||||||||||||||||||||||||
| requires_dist. For tensorrt-llm use https://pypi.nvidia.com. | ||||||||||||||||||||||||||||||||||||||||||||||
| For tokenspeed, `current`/`latest` are commit SHAs — summarize | ||||||||||||||||||||||||||||||||||||||||||||||
| `gh api repos/lightseekorg/tokenspeed/compare/<current>...<latest>` | ||||||||||||||||||||||||||||||||||||||||||||||
| (commit subjects only) and note that the torch pin in | ||||||||||||||||||||||||||||||||||||||||||||||
| ci_install_tokenspeed.sh must be re-checked against upstream. | ||||||||||||||||||||||||||||||||||||||||||||||
| 3. Verify the release image/wheel actually exists (Docker Hub tag, | ||||||||||||||||||||||||||||||||||||||||||||||
| NGC wheel listing) before recommending it. | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| Then create the issue: | ||||||||||||||||||||||||||||||||||||||||||||||
| gh issue create --repo ${{ github.repository }} \ | ||||||||||||||||||||||||||||||||||||||||||||||
| --label engine-watch --label enhancement \ | ||||||||||||||||||||||||||||||||||||||||||||||
| --title "[engine-watch] <engine> <latest> available (pinned: <current>)" \ | ||||||||||||||||||||||||||||||||||||||||||||||
| --body <researched body> | ||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+143
to
+154
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win Keep the Claude prompt declarative. The embedded Proposed fix- `gh api repos/lightseekorg/tokenspeed/compare/<current>...<latest>`
- (commit subjects only) and note that the torch pin in
+ compare the current and latest commits through the GitHub API,
+ summarize commit subjects only, and note that the torch pin in
ci_install_tokenspeed.sh must be re-checked against upstream.
@@
- Then create the issue:
- gh issue create --repo ${{ github.repository }} \
- --label engine-watch --label enhancement \
- --title "[engine-watch] <engine> <latest> available (pinned: <current>)" \
- --body <researched body>
+ Then create an issue in the repository with the `engine-watch`
+ and `enhancement` labels. Its title must be:
+ `[engine-watch] <engine> <latest> available (pinned: <current>)`.Based on learnings, 📝 Committable suggestion
Suggested change
🤖 Prompt for AI AgentsSource: Learnings |
||||||||||||||||||||||||||||||||||||||||||||||
| Body sections: current pin locations (file:line), what the new | ||||||||||||||||||||||||||||||||||||||||||||||
| release changes for us (workarounds now obsolete / new pins | ||||||||||||||||||||||||||||||||||||||||||||||
| required, with evidence), an upgrade checklist mirroring the | ||||||||||||||||||||||||||||||||||||||||||||||
| files above, and which e2e legs validate the bump. Keep it | ||||||||||||||||||||||||||||||||||||||||||||||
| factual and short; no speculation beyond the metadata checked. | ||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| Do NOT open pull requests. Do NOT edit repository files. | ||||||||||||||||||||||||||||||||||||||||||||||
| One issue per engine, nothing else. | ||||||||||||||||||||||||||||||||||||||||||||||
|
coderabbitai[bot] marked this conversation as resolved.
|
||||||||||||||||||||||||||||||||||||||||||||||
| claude_args: | | ||||||||||||||||||||||||||||||||||||||||||||||
| --model claude-opus-4-6 | ||||||||||||||||||||||||||||||||||||||||||||||
| --max-turns 40 | ||||||||||||||||||||||||||||||||||||||||||||||
| --allowedTools "Read,Glob,Grep,Bash,WebFetch,WebSearch,TaskCreate,TaskUpdate,TaskGet" | ||||||||||||||||||||||||||||||||||||||||||||||
| env: | ||||||||||||||||||||||||||||||||||||||||||||||
| GH_TOKEN: ${{ github.token }} | ||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+161
to
+166
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
# Inspect the workflow around the referenced lines
sed -n '130,190p' .github/workflows/engine-version-watch.yml
# Find references to claude-code-action and any related docs/config in the repo
rg -n "claude-code-action|allowedTools|ANTHROPIC_API_KEY|GH_TOKEN|Bash,WebFetch|Do not edit|engine-version-watch" .github/workflows . -g '!**/node_modules/**' -g '!**/dist/**' -g '!**/build/**'Repository: lightseekorg/smg Length of output: 8132 🌐 Web query:
💡 Result: In the Citations:
🏁 Script executed: #!/bin/bash
set -euo pipefail
# Show the workflow file with line numbers around the referenced section
nl -ba .github/workflows/engine-version-watch.yml | sed -n '145,180p'
# Locate any job-level env/permissions near this workflow
rg -n -C 3 "permissions:|ANTHROPIC_API_KEY|GH_TOKEN|allowedTools|claude_args" .github/workflows/engine-version-watch.ymlRepository: lightseekorg/smg Length of output: 194 Restrict Claude’s shell access. 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,161 @@ | ||||||
| name: Nightly Triage | ||||||
|
|
||||||
| # Daily: collect recent nightly benchmark/eval failures and have Claude | ||||||
| # triage them — classify each (regression vs infra/upstream flake vs | ||||||
| # config), rerun clear one-off flakes once, and keep one rolling issue per | ||||||
| # workflow so failures stop landing in a void. Runs after the ~7h bfcl/tau2 | ||||||
| # windows finish. | ||||||
|
|
||||||
| on: | ||||||
| schedule: | ||||||
| - cron: '30 15 * * *' | ||||||
| workflow_dispatch: | ||||||
|
coderabbitai[bot] marked this conversation as resolved.
|
||||||
|
|
||||||
| permissions: | ||||||
| contents: read | ||||||
|
|
||||||
| concurrency: | ||||||
| group: nightly-triage | ||||||
| cancel-in-progress: false | ||||||
|
|
||||||
| env: | ||||||
| WATCHED_WORKFLOWS: nightly-bfcl.yml nightly-tau2.yml nightly-benchmark.yml nightly-docker.yml nightly-engine-docker.yml nightly-mlx-bench.yml | ||||||
|
|
||||||
| jobs: | ||||||
| collect: | ||||||
| runs-on: k8s-runner-cpu | ||||||
| timeout-minutes: 10 | ||||||
| permissions: | ||||||
| actions: read | ||||||
| outputs: | ||||||
| failures: ${{ steps.gather.outputs.failures }} | ||||||
| has_failures: ${{ steps.gather.outputs.has_failures }} | ||||||
| steps: | ||||||
| - name: Install gh CLI | ||||||
| run: | | ||||||
| if ! command -v gh &>/dev/null; then | ||||||
| mkdir -p "$HOME/.local/bin" | ||||||
| GH_VERSION="2.74.0" | ||||||
| GH_SHA256="e55c9d49dc49c0b0fef0a9acd3510482fd9e27ff52ae80f8a6e838cd25b4cd89" | ||||||
| curl -fsSL --connect-timeout 10 --max-time 120 -o /tmp/gh.tgz \ | ||||||
| "https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_linux_amd64.tar.gz" | ||||||
| echo "${GH_SHA256} /tmp/gh.tgz" | sha256sum --check --quiet | ||||||
| tar xzf /tmp/gh.tgz --strip-components=2 -C "$HOME/.local/bin" "gh_${GH_VERSION}_linux_amd64/bin/gh" | ||||||
| echo "$HOME/.local/bin" >> "$GITHUB_PATH" | ||||||
| fi | ||||||
|
Comment on lines
+34
to
+45
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value Duplicated The checksum-verified Also applies to: 94-105 🤖 Prompt for AI Agents |
||||||
|
|
||||||
| - name: Gather failed nightly runs | ||||||
| id: gather | ||||||
| env: | ||||||
| GH_TOKEN: ${{ github.token }} | ||||||
| run: | | ||||||
| # 48h lookback: a run still in progress at collection time (e.g. | ||||||
| # nightly-benchmark allows 24h) is picked up the next day; Claude | ||||||
| # dedups already-triaged run ids against the rolling issue. | ||||||
| since=$(date -u -d '48 hours ago' +%Y-%m-%dT%H:%M:%SZ) | ||||||
| failures='[]' | ||||||
| for wf in $WATCHED_WORKFLOWS; do | ||||||
| rows=$(gh run list --repo "$GITHUB_REPOSITORY" --workflow "$wf" \ | ||||||
| --created ">=$since" --limit 10 \ | ||||||
| --json databaseId,conclusion,status,url,attempt,workflowName \ | ||||||
| --jq '[.[] | select(.status == "completed" and (.conclusion | IN("success", "cancelled", "skipped") | not)) | ||||||
| | {workflow: .workflowName, run_id: .databaseId, attempt: .attempt, conclusion: .conclusion, url: .url}]') | ||||||
| failures=$(jq -c --argjson r "$rows" '. + $r' <<<"$failures") | ||||||
|
coderabbitai[bot] marked this conversation as resolved.
|
||||||
| done | ||||||
| echo "failures=$failures" >> "$GITHUB_OUTPUT" | ||||||
| echo "has_failures=$(jq 'length > 0' <<<"$failures")" >> "$GITHUB_OUTPUT" | ||||||
| jq . <<<"$failures" | ||||||
|
|
||||||
| triage: | ||||||
| needs: collect | ||||||
| if: needs.collect.outputs.has_failures == 'true' | ||||||
| runs-on: k8s-runner-cpu | ||||||
| timeout-minutes: 45 | ||||||
| permissions: | ||||||
| contents: read | ||||||
| actions: write | ||||||
| issues: write | ||||||
| id-token: write | ||||||
| steps: | ||||||
| - name: Checkout | ||||||
| uses: actions/checkout@v7 | ||||||
| with: | ||||||
| persist-credentials: false | ||||||
|
|
||||||
| - name: Export API key from pod env | ||||||
| run: | | ||||||
| if [ -z "${ANTHROPIC_API_KEY:-}" ]; then | ||||||
| echo "::error::ANTHROPIC_API_KEY is not present in the runner pod environment" | ||||||
| exit 1 | ||||||
| fi | ||||||
| echo "::add-mask::${ANTHROPIC_API_KEY}" | ||||||
| echo "ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}" >> "$GITHUB_ENV" | ||||||
|
|
||||||
| - name: Install gh CLI | ||||||
| run: | | ||||||
| if ! command -v gh &>/dev/null; then | ||||||
| mkdir -p "$HOME/.local/bin" | ||||||
| GH_VERSION="2.74.0" | ||||||
| GH_SHA256="e55c9d49dc49c0b0fef0a9acd3510482fd9e27ff52ae80f8a6e838cd25b4cd89" | ||||||
| curl -fsSL --connect-timeout 10 --max-time 120 -o /tmp/gh.tgz \ | ||||||
| "https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_linux_amd64.tar.gz" | ||||||
| echo "${GH_SHA256} /tmp/gh.tgz" | sha256sum --check --quiet | ||||||
| tar xzf /tmp/gh.tgz --strip-components=2 -C "$HOME/.local/bin" "gh_${GH_VERSION}_linux_amd64/bin/gh" | ||||||
| echo "$HOME/.local/bin" >> "$GITHUB_PATH" | ||||||
| fi | ||||||
|
|
||||||
| - name: Ensure label | ||||||
| env: | ||||||
| GH_TOKEN: ${{ github.token }} | ||||||
| run: | | ||||||
| gh label create nightly-triage --repo "$GITHUB_REPOSITORY" \ | ||||||
| --description "Automated nightly failure triage" --color d93f0b --force | ||||||
|
|
||||||
| - uses: anthropics/claude-code-action@v1 | ||||||
| with: | ||||||
| anthropic_api_key: ${{ env.ANTHROPIC_API_KEY }} | ||||||
| prompt: | | ||||||
| REPO: ${{ github.repository }} | ||||||
| FAILED NIGHTLY RUNS (last 48h, JSON): ${{ needs.collect.outputs.failures }} | ||||||
|
|
||||||
| Triage every run listed. For each: | ||||||
| 1. Find the rolling issue first: | ||||||
| gh issue list --repo ${{ github.repository }} --state open | ||||||
| --label nightly-triage --json number,title | ||||||
| and pick the exact title "[nightly-triage] <workflow name>". | ||||||
| If that issue already mentions this run_id in its body or | ||||||
| comments, the run was triaged on a previous day — skip it. | ||||||
|
Comment on lines
+126
to
+127
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
When Claude reruns a clear flake and that second attempt also fails, GitHub keeps it as another attempt of the same workflow run (the collector already carries Useful? React with 👍 / 👎. |
||||||
| 2. Fetch evidence: | ||||||
| `gh run view <run_id> --repo ${{ github.repository }} --log-failed | tail -300` | ||||||
| (fall back to `gh api .../jobs` for job names/conclusions if | ||||||
| logs are unavailable). Read the workflow file and the scripts | ||||||
| it calls when the failure points into them. | ||||||
| 3. Classify with the log lines as evidence: | ||||||
| - infra/flake: runner lost, OOM-killed runner, network timeout, | ||||||
| registry/HF download failure, upstream API 5xx | ||||||
| - regression: assertion/score threshold failures (bfcl/tau2 | ||||||
| score drops, benchmark deltas), build breaks in our code | ||||||
| - config/env: version conflicts, missing secrets, disk full | ||||||
| 4. Rerun policy (conservative): if AND ONLY IF the failure is a | ||||||
| clear infra/flake and the run's attempt == 1, rerun it once: | ||||||
| `gh run rerun <run_id> --repo ${{ github.repository }} --failed`. | ||||||
| Never rerun regressions or second attempts. | ||||||
| 5. Report per workflow in the rolling issue: | ||||||
| - If it exists, add a comment titled with today's date holding | ||||||
| the day's triage (classification, key log lines, action | ||||||
| taken, run links — always include the run_id). If the same | ||||||
| failure signature already appears in recent comments, say | ||||||
| so — recurring failures are the signal these issues exist | ||||||
| to surface. | ||||||
| - Else create it: | ||||||
| gh issue create --label nightly-triage | ||||||
| --title "[nightly-triage] <workflow name>" | ||||||
| --body <first day's triage> | ||||||
| Keep each day's entry short: verdict first, then evidence. | ||||||
| Do NOT edit repository files or open pull requests. | ||||||
|
Comment on lines
+117
to
+155
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win Keep the Claude prompt declarative. Replace embedded 🤖 Prompt for AI AgentsSource: Learnings |
||||||
| claude_args: | | ||||||
| --model claude-opus-4-6 | ||||||
| --max-turns 60 | ||||||
| --allowedTools "Read,Glob,Grep,Bash,WebFetch,WebSearch,TaskCreate,TaskUpdate,TaskGet" | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
curl -fsSL \
https://raw.githubusercontent.com/anthropics/claude-code-action/v1/docs/configuration.md |
grep -nE 'Bash\(|allowedTools'Repository: lightseekorg/smg Length of output: 871 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
# Show the relevant section of the workflow.
sed -n '120,190p' .github/workflows/nightly-triage.yml | cat -n
# Also show the job permissions block if present.
rg -n "permissions:|actions: write|issues: write|allowedTools|claude" .github/workflows/nightly-triage.ymlRepository: lightseekorg/smg Length of output: 3483 Restrict Claude’s Bash access to the gh commands this job needs.
Suggested restriction- --allowedTools "Read,Glob,Grep,Bash,WebFetch,WebSearch,TaskCreate,TaskUpdate,TaskGet"
+ --allowedTools "Read,Glob,Grep,Bash(gh run view:*),Bash(gh run rerun:*),Bash(gh issue list:*),Bash(gh issue create:*),Bash(gh issue comment:*),Bash(gh api:*),TaskCreate,TaskUpdate,TaskGet"📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents
Comment on lines
+156
to
+159
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win Claude retains unrestricted Carried over from the prior review: this job can rerun workflows and write issues, yet Suggested restriction- --allowedTools "Read,Glob,Grep,Bash,WebFetch,WebSearch,TaskCreate,TaskUpdate,TaskGet"
+ --allowedTools "Read,Glob,Grep,Bash(gh run view:*),Bash(gh run rerun:*),Bash(gh issue list:*),Bash(gh issue create:*),Bash(gh issue comment:*),Bash(gh api:*),TaskCreate,TaskUpdate,TaskGet"🤖 Prompt for AI Agents |
||||||
| env: | ||||||
| GH_TOKEN: ${{ github.token }} | ||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,64 @@ | ||||||||||||||||||||||||||
| #!/bin/bash | ||||||||||||||||||||||||||
| # Compare pinned engine versions against the latest upstream releases. | ||||||||||||||||||||||||||
| # | ||||||||||||||||||||||||||
| # Emits one JSON object per line: {"engine","current","latest","update"}. | ||||||||||||||||||||||||||
| # Pins are read from the same files the upgrade PRs edit, so a bump lands | ||||||||||||||||||||||||||
| # here automatically. TokenSpeed is a source build pinned to a commit, so | ||||||||||||||||||||||||||
| # its "versions" are SHAs and any divergence from upstream main counts as | ||||||||||||||||||||||||||
| # an update. | ||||||||||||||||||||||||||
| # | ||||||||||||||||||||||||||
| # Requires: curl, jq; GH_TOKEN for the TokenSpeed upstream lookup. | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| set -euo pipefail | ||||||||||||||||||||||||||
| cd "$(dirname "$0")/.." | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| CURL=(curl -fsS --connect-timeout 10 --max-time 60) | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| require() { # name value | ||||||||||||||||||||||||||
| if [ -z "$2" ]; then | ||||||||||||||||||||||||||
| echo "ERROR: could not determine $1 (pin or upstream format changed?)" >&2 | ||||||||||||||||||||||||||
| exit 1 | ||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
|
Comment on lines
+17
to
+22
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win Reject literal
Proposed fix require() { # name value
- if [ -z "$2" ]; then
+ if [ -z "$2" ] || [ "$2" = "null" ]; then
echo "ERROR: could not determine $1 (pin or upstream format changed?)" >&2
exit 1
fi
}📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| # Newest of two versions under PEP 440 pre-release ordering: rcN sorts | ||||||||||||||||||||||||||
| # before its final release (GNU sort -V treats '~' as lowest). | ||||||||||||||||||||||||||
| vmax() { | ||||||||||||||||||||||||||
| printf '%s\n%s\n' "$1" "$2" | sed 's/rc/~rc/' | sort -V | tail -1 | sed 's/~rc/rc/' | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
|
Comment on lines
+24
to
+28
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
# Inspect the referenced file and surrounding lines.
git ls-files scripts/check_engine_versions.sh
wc -l scripts/check_engine_versions.sh
cat -n scripts/check_engine_versions.sh | sed -n '1,120p'
# Probe whether the repo mentions the same version selection logic elsewhere.
rg -n "sort -V|rc/~rc|PEP 440|vmax\(\)" scripts . || true
# Run a small read-only Python probe comparing the current vmax logic on representative PEP 440-like inputs.
python3 - <<'PY'
from itertools import product
import subprocess, textwrap, os, tempfile, shlex, sys
def vmax(a, b):
script = f"printf '%s\\n%s\\n' {shlex.quote(a)} {shlex.quote(b)} | sed 's/rc/~rc/' | sort -V | tail -1 | sed 's/~rc/rc/'"
out = subprocess.check_output(["bash", "-lc", script], text=True).strip()
return out
cases = [
("1.0a1", "1.0"),
("1.0b1", "1.0a1"),
("1.0rc1", "1.0b1"),
("1.0.dev1", "1.0a1"),
("1.0.post1", "1.0"),
("1!1.0", "2.0"),
("1.0", "1.0+local"),
("1.0rc1", "1.0"),
("1.0.post1", "1.0rc1"),
]
try:
from packaging.version import Version
except Exception as e:
print("packaging unavailable:", e)
Version = None
for a,b in cases:
got = vmax(a,b)
py = None
if Version is not None:
py = a if Version(a) >= Version(b) else b
print(f"{a:12} vs {b:12} -> vmax={got:12} python={py}")
PYRepository: lightseekorg/smg Length of output: 5063 🏁 Script executed: #!/bin/bash
set -euo pipefail
# Focus on the exact file if it exists.
if [ -f scripts/check_engine_versions.sh ]; then
cat -n scripts/check_engine_versions.sh | sed -n '1,120p'
fi
python3 - <<'PY'
try:
from packaging.version import Version
except Exception as e:
print("packaging unavailable:", e)
raise SystemExit(0)
def vmax(a, b):
import subprocess, shlex
script = f"printf '%s\\n%s\\n' {shlex.quote(a)} {shlex.quote(b)} | sed 's/rc/~rc/' | sort -V | tail -1 | sed 's/~rc/rc/'"
return subprocess.check_output(["bash", "-lc", script], text=True).strip()
cases = [
("1.0a1", "1.0"),
("1.0b1", "1.0a1"),
("1.0rc1", "1.0b1"),
("1.0.dev1", "1.0a1"),
("1.0.post1", "1.0"),
("1!1.0", "2.0"),
("1.0", "1.0+local"),
("1.0rc1", "1.0"),
("1.0.post1", "1.0rc1"),
]
for a,b in cases:
got = vmax(a,b)
py = a if Version(a) >= Version(b) else b
print(f"{a:12} vs {b:12} -> vmax={got:12} python={py}")
PYRepository: lightseekorg/smg Length of output: 3372 Use a real PEP 440 comparator. 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| emit() { # engine current latest | ||||||||||||||||||||||||||
| local update=false | ||||||||||||||||||||||||||
| if [ "$1" = "tokenspeed" ]; then | ||||||||||||||||||||||||||
| [ "$2" != "$3" ] && update=true | ||||||||||||||||||||||||||
| else | ||||||||||||||||||||||||||
| [ "$(vmax "$2" "$3")" != "$2" ] && update=true | ||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||
| jq -cn --arg e "$1" --arg c "$2" --arg l "$3" --argjson u "$update" \ | ||||||||||||||||||||||||||
| '{engine: $e, current: $c, latest: $l, update: $u}' | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| sglang_current=$(sed -n 's/.*"sglang\[all\]==\([^"]*\)".*/\1/p' scripts/ci_install_sglang.sh | head -1) | ||||||||||||||||||||||||||
| require "sglang pin" "$sglang_current" | ||||||||||||||||||||||||||
| sglang_latest=$("${CURL[@]}" https://pypi.org/pypi/sglang/json | jq -r .info.version) | ||||||||||||||||||||||||||
| require "sglang latest" "$sglang_latest" | ||||||||||||||||||||||||||
| emit sglang "$sglang_current" "$sglang_latest" | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| vllm_current=$(sed -n "s/.*default: 'vllm\/vllm-openai:v\([0-9.]*\)'.*/\1/p" .github/workflows/release-vllm-docker.yml | head -1) | ||||||||||||||||||||||||||
| require "vllm pin" "$vllm_current" | ||||||||||||||||||||||||||
| vllm_latest=$("${CURL[@]}" https://pypi.org/pypi/vllm/json | jq -r .info.version) | ||||||||||||||||||||||||||
| require "vllm latest" "$vllm_latest" | ||||||||||||||||||||||||||
| emit vllm "$vllm_current" "$vllm_latest" | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| trtllm_current=$(sed -n 's/^TRTLLM_VERSION="\(.*\)"$/\1/p' scripts/ci_install_trtllm.sh | head -1) | ||||||||||||||||||||||||||
| require "tensorrt-llm pin" "$trtllm_current" | ||||||||||||||||||||||||||
| trtllm_latest=$("${CURL[@]}" https://pypi.nvidia.com/tensorrt-llm/ \ | ||||||||||||||||||||||||||
| | grep -o 'tensorrt_llm-[0-9][^-]*' | sed 's/tensorrt_llm-//;s/rc/~rc/' | sort -uV | tail -1 | sed 's/~rc/rc/') | ||||||||||||||||||||||||||
| require "tensorrt-llm latest" "$trtllm_latest" | ||||||||||||||||||||||||||
| emit tensorrt-llm "$trtllm_current" "$trtllm_latest" | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| tokenspeed_current=$(sed -n 's/.*TOKENSPEED_REF:-\([0-9a-f]*\)}.*/\1/p' scripts/ci_install_tokenspeed.sh | head -1) | ||||||||||||||||||||||||||
| require "tokenspeed pin" "$tokenspeed_current" | ||||||||||||||||||||||||||
| tokenspeed_latest=$(gh api repos/lightseekorg/tokenspeed/commits/main --jq .sha) | ||||||||||||||||||||||||||
| require "tokenspeed latest" "$tokenspeed_latest" | ||||||||||||||||||||||||||
| emit tokenspeed "$tokenspeed_current" "$tokenspeed_latest" | ||||||||||||||||||||||||||
|
Comment on lines
+45
to
+64
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 Nit: The Consider guarding each extraction, e.g.: sglang_current=$(sed -n 's/.*"sglang\[all\]==\([^"]*\)".*/\1/p' scripts/ci_install_sglang.sh | head -1)
if [ -z "$sglang_current" ]; then
echo "WARNING: failed to extract sglang pin" >&2
else
sglang_latest=$(curl -fsS https://pypi.org/pypi/sglang/json | jq -r .info.version)
emit sglang "$sglang_current" "$sglang_latest"
fiThis way a changed file format fails visibly in the Actions log rather than producing a bogus issue. Separately: the TRT-LLM extraction uses
coderabbitai[bot] marked this conversation as resolved.
|
||||||||||||||||||||||||||
Uh oh!
There was an error while loading. Please reload this page.