Skip to content

chore: introduce asdf to manage tool versions - #1505

Closed
mainred wants to merge 5 commits into
masterfrom
asdf
Closed

mainred wants to merge 5 commits into
masterfrom
asdf

Conversation

@mainred

@mainred mainred commented Feb 6, 2026 •

Copy link
Copy Markdown
Collaborator

This PR introduces asdf and asdf-vm/actions/install github action to manage the tool versions synced in both local dev env and github action env.

Besides the PR triggered check-ins, I have also triggered Publish to PyPI and Build and Release, but please forget the build error caused by the wrong merge request file name

@github-actions

github-actions Bot commented Feb 6, 2026 •

Copy link
Copy Markdown
Contributor

📂 Previous Runs

📜 Run @ 46fb701 (#22390682808)

✅ Results of HolmesGPT evals

Automatically triggered by commit 46fb701 on branch asdf

View workflow logs

Results of HolmesGPT evals

  • ask_holmes: 9/9 test cases were successful, 0 regressions
Status Test case Time Turns Tools Cost
✅ 09_crashpod 31.3s 4 10 $0.2198
✅ 101_loki_historical_logs_pod_deleted 47.2s 6 11 $0.2714
✅ 111_pod_names_contain_service 29.3s 4 10 $0.2121
✅ 112_find_pvcs_by_uuid 26.2s 5 5 $0.2017
✅ 12_job_crashing 37.2s 5 12 $0.2454
✅ 176_network_policy_blocking_traffic_no_runbooks 48.9s 7 15 $0.2991
✅ 24_misconfigured_pvc 39.1s 6 15 $0.2600
✅ 43_current_datetime_from_prompt 5.1s 1 — $0.1118
✅ 61_exact_match_counting 19.6s 4 4 $0.1719
Total 31.5s avg 4.7 avg 10.2 avg $1.9933
📜 Run @ b49d93f (#22390629266)

✅ Results of HolmesGPT evals

Automatically triggered by commit b49d93f on branch asdf

View workflow logs

Results of HolmesGPT evals

  • ask_holmes: 9/9 test cases were successful, 0 regressions
Status Test case Time Turns Tools Cost
✅ 09_crashpod 33.2s 5 12 $0.2471
✅ 101_loki_historical_logs_pod_deleted 41.9s 5 10 $0.2529
✅ 111_pod_names_contain_service 30.3s 5 10 $0.2212
✅ 112_find_pvcs_by_uuid 35.4s 7 6 $0.2524
✅ 12_job_crashing 31.9s 5 12 $0.2467
✅ 176_network_policy_blocking_traffic_no_runbooks 42.8s 6 17 $0.2902
✅ 24_misconfigured_pvc 32.6s 5 12 $0.2273
✅ 43_current_datetime_from_prompt 5.2s 1 — $0.0128
✅ 61_exact_match_counting 14.1s 3 2 $0.1517
Total 29.7s avg 4.7 avg 10.1 avg $1.9024
📜 Run @ 11e989b (#22390350645)

✅ Results of HolmesGPT evals

Automatically triggered by commit 11e989b on branch asdf

View workflow logs

Results of HolmesGPT evals

  • ask_holmes: 9/9 test cases were successful, 0 regressions
Status Test case Time Turns Tools Cost
✅ 09_crashpod 39.6s 5 11 $0.2382
✅ 101_loki_historical_logs_pod_deleted 48.8s 6 11 $0.2665
✅ 111_pod_names_contain_service 37.2s 5 11 $0.2308
✅ 112_find_pvcs_by_uuid 37.3s 5 7 $0.2427
✅ 12_job_crashing 29.8s 4 7 $0.2112
✅ 176_network_policy_blocking_traffic_no_runbooks 48.3s 7 16 $0.2857
✅ 24_misconfigured_pvc 38.2s 5 13 $0.2347
✅ 43_current_datetime_from_prompt 5.3s 1 — $0.1116
✅ 61_exact_match_counting 20.3s 4 4 $0.1676
Total 33.9s avg 4.7 avg 10.0 avg $1.9889
📜 Run @ 6e3feb9 (#22105928410)

✅ Results of HolmesGPT evals

Automatically triggered by commit 6e3feb9 on branch asdf

View workflow logs

Results of HolmesGPT evals

  • ask_holmes: 9/9 test cases were successful, 0 regressions
Status Test case Time Turns Tools Cost
✅ 09_crashpod 33.8s 5 11 $0.2291
✅ 101_loki_historical_logs_pod_deleted 43.3s 5 9 $0.2439
✅ 111_pod_names_contain_service 30.5s 4 10 $0.2045
✅ 112_find_pvcs_by_uuid 40.3s 7 9 $0.2730
✅ 12_job_crashing 79.0s 6 15 $0.4143
✅ 176_network_policy_blocking_traffic_no_runbooks 45.4s 6 16 $0.2752
✅ 24_misconfigured_pvc 38.3s 6 15 $0.2435
✅ 43_current_datetime_from_prompt 7.1s 1 — $0.1061
✅ 61_exact_match_counting 47.9s 4 4 $0.2689
Total 40.6s avg 4.9 avg 11.1 avg $2.2584
📜 Run @ 2c269f9 (#21819218454)

✅ Results of HolmesGPT evals

Automatically triggered by commit 2c269f9 on branch asdf

View workflow logs

Results of HolmesGPT evals

  • ask_holmes: 9/9 test cases were successful, 0 regressions
Status Test case Time Turns Tools Cost
✅ 09_crashpod 34.5s 5 11 $0.2297
✅ 101_loki_historical_logs_pod_deleted 48.9s 6 11 $0.2660
✅ 111_pod_names_contain_service 32.1s 5 10 $0.2118
✅ 112_find_pvcs_by_uuid 35.5s 6 7 $0.2285
✅ 12_job_crashing 36.1s 5 12 $0.2474
✅ 176_network_policy_blocking_traffic_no_runbooks 45.2s 6 16 $0.2847
✅ 24_misconfigured_pvc 36.5s 6 13 $0.2363
✅ 43_current_datetime_from_prompt 5.8s 1 — $0.1048
✅ 61_exact_match_counting 19.5s 4 4 $0.1599
Total 32.7s avg 4.9 avg 10.5 avg $1.9693

✅ Results of HolmesGPT evals

Automatically triggered by commit 1cdde30 on branch asdf

View workflow logs

Results of HolmesGPT evals

  • ask_holmes: 9/9 test cases were successful, 0 regressions
Status Test case Time Turns Tools Cost
✅ 09_crashpod 34.8s 7 11 $0.2563
✅ 101_loki_historical_logs_pod_deleted 44.5s 6 11 $0.2820
✅ 111_pod_names_contain_service 27.7s 4 11 $0.2163
✅ 112_find_pvcs_by_uuid 31.4s 7 6 $0.2309
✅ 12_job_crashing 32.8s 5 12 $0.2544
✅ 176_network_policy_blocking_traffic_no_runbooks 46.4s 7 18 $0.3248
✅ 24_misconfigured_pvc 40.7s 7 17 $0.2831
✅ 43_current_datetime_from_prompt 4.8s 1 — $0.1119
✅ 61_exact_match_counting 15.9s 4 4 $0.1684
Total 31.0s avg 5.3 avg 11.2 avg $2.1281
📖 Legend
Icon Meaning
✅ The test was successful
➖ The test was skipped
⚠️ The test failed but is known to be flaky or known to fail
🚧 The test had a setup failure (not a code regression)
🔧 The test failed due to mock data issues (not a code regression)
🚫 The test was throttled by API rate limits/overload
❌ The test failed and should be fixed before merging the PR
🔄 Re-run evals manually

⚠️ Warning: /eval comments always run using the workflow from master, not from this PR branch. If you modified the GitHub Action (e.g., added secrets or env vars), those changes won't take effect.

To test workflow changes, use the GitHub CLI or Actions UI instead:

gh workflow run eval-regression.yaml --repo HolmesGPT/holmesgpt --ref asdf -f markers=regression -f filter=

Option 1: Comment on this PR with /eval:

/eval
tags: regression

Or with more options (one per line):

/eval
model: gpt-4o
tags: regression
filter: 09_crashpod
iterations: 5

Run evals on a different branch (e.g., master) for comparison:

/eval
branch: master
tags: regression
Option Description
model Model(s) to test (default: same as automatic runs)
tags Pytest tags / markers (no default - runs all tests!)
filter Pytest -k filter (use /list to see valid eval names)
iterations Number of runs, max 10
branch Run evals on a different branch (for cross-branch comparison)

Quick re-run: Use /rerun to re-run the most recent /eval on this PR with the same parameters.

Option 2: Trigger via GitHub Actions UI → "Run workflow"

Option 3: Add PR labels to include extra evals in automatic regression runs:

Label Effect
evals-tag-<name> Run tests with tag <name> alongside regression
evals-id-<name> Run a specific eval by test ID

Examples: evals-tag-easy, evals-id-09_crashpod

🏷️ Valid tags

benchmark, chain-of-causation, compaction, confluence, context_window, coralogix, counting, database, datadog, datetime, db-connectors, easy, elasticsearch, embeds, fast, frontend, grafana-dashboard, hard, integration, kafka, kubernetes, leaked-information, logs, loki, medium, metrics, network, newrelic, no-cicd, numerical, one-test, port-forward, prometheus, question-answer, regression, runbooks, slackbot, storage, toolset-limitation, traces, transparency


Commands: /eval · /rerun · /list

CLI: gh workflow run eval-regression.yaml --repo HolmesGPT/holmesgpt --ref asdf -f markers=regression -f filter=

@github-actions

github-actions Bot commented Feb 6, 2026 •

Copy link
Copy Markdown
Contributor

✅ Docker images ready for 27f69856 (built in 6m 33s)

⚠️ Warning: does not support ARM (ARM images are built on release only - not on every PR)

Use these tags to pull the images for testing.

📋 Copy commands

⚠️ Temporary images are deleted after 30 days. Copy to a permanent registry before using them:

gcloud auth configure-docker us-central1-docker.pkg.dev
docker pull us-central1-docker.pkg.dev/robusta-development/temporary-builds/holmes:27f69856
docker tag us-central1-docker.pkg.dev/robusta-development/temporary-builds/holmes:27f69856 me-west1-docker.pkg.dev/robusta-development/development/holmes-dev:27f69856
docker push me-west1-docker.pkg.dev/robusta-development/development/holmes-dev:27f69856
docker pull us-central1-docker.pkg.dev/robusta-development/temporary-builds/holmes-operator:27f69856
docker tag us-central1-docker.pkg.dev/robusta-development/temporary-builds/holmes-operator:27f69856 me-west1-docker.pkg.dev/robusta-development/development/holmes-operator-dev:27f69856
docker push me-west1-docker.pkg.dev/robusta-development/development/holmes-operator-dev:27f69856

Patch Helm values in one line (choose the chart you use):

HolmesGPT chart:

helm upgrade --install holmesgpt ./helm/holmes \
  --set registry=me-west1-docker.pkg.dev/robusta-development/development \
  --set image=holmes-dev:27f69856 \
  --set operator.registry=me-west1-docker.pkg.dev/robusta-development/development \
  --set operator.image=holmes-operator-dev:27f69856

Robusta wrapper chart:

helm upgrade --install robusta robusta/robusta \
  --reuse-values \
  --set holmes.registry=me-west1-docker.pkg.dev/robusta-development/development \
  --set holmes.image=holmes-dev:27f69856 \
  --set holmes.operator.registry=me-west1-docker.pkg.dev/robusta-development/development \
  --set holmes.operator.image=holmes-operator-dev:27f69856

@coderabbitai

coderabbitai Bot commented Feb 6, 2026 •

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Split Poetry installation out from combined steps across CI workflows and a composite setup action; switched installs to read version from .tool-versions (asdf/script-based), added explicit Poetry configure/install steps, added TODOs/commented publish/deploy steps, and documented asdf usage in CONTRIBUTING.md.

Changes

Cohort / File(s) Summary
Setup Action
.github/actions/setup-holmes-env/action.yml
Separated Python vs. Poetry setup into distinct steps, switched Poetry install to asdf/script-based installer, added poetry config virtualenvs.create false, and added an ls ../../.. observational command.
CI Workflows — docs/test/publish/cli
.github/workflows/build-and-deploy-docs.yaml, .github/workflows/build-and-test.yaml, .github/workflows/publish-pypi.yaml, .github/workflows/cli-performance.yaml
Replaced inlined/curl Poetry installs with dedicated Install Poetry steps (version sourced from .tool-versions), added Poetry configure/install steps (poetry install --with dev or equivalent), added/adjusted pull_request triggers and inserted commented TODOs to defer deploy/publish actions.
Binaries & Homebrew workflow
.github/workflows/build-binaries-and-brew.yaml
Introduced unified Unix/macOS and updated Windows Poetry install flows (read from .tool-versions), removed/placeholdered large release/upload/formula-update blocks, and reformatted PyInstaller/build steps.
Tooling & Docs
.tool-versions, CONTRIBUTING.md
Added .tool-versions with poetry 2.3.2; CONTRIBUTING.md updated to document asdf usage and removed the hardcoded Poetry-version note.
Minor CI edits
.github/workflows/... (other workflow files)
Whitespace/step reflows, reordered steps, and small adjustments to PATH/ordering semantics across workflows to integrate the new Poetry install/configuration flow.

Sequence Diagram(s)

(omitted — CI/workflow configuration changes do not introduce a new multi-component runtime control flow requiring visualization)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Suggested reviewers

  • RoiGlinik
  • arikalon1
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The title 'chore: introduce asdf to manage tool versions' directly and concisely summarizes the main change: introducing asdf as a tool version manager across the project's CI/CD workflows and documentation.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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 and usage tips.

@netlify

netlify Bot commented Feb 6, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for holmes-docs ready!

Name Link
🔨 Latest commit 1cdde30
🔍 Latest deploy log https://app.netlify.com/projects/holmes-docs/deploys/69a4e91b922e9600086b5023
😎 Deploy Preview https://deploy-preview-1505--holmes-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@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: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
.github/workflows/build-binaries-and-brew.yaml (2)

19-24: ⚠️ Potential issue | 🟠 Major

Outdated action versions in the build job.

actions/checkout@v2 (line 19) and actions/setup-python@v2 (line 22) are flagged by actionlint as too old. Other workflows in this PR use @v4/@v5. Update these for consistency.


148-174: ⚠️ Potential issue | 🟠 Major

Outdated actions and deprecated set-output commands in downstream jobs.

Static analysis flags several issues in the mac-hash, linux-hash, and update-formula jobs:

  1. actions/checkout@v2 on lines 149, 167, 183 — update to @v4.
  2. ::set-output on lines 156 and 174 is deprecated — use echo "{name}={value}" >> $GITHUB_OUTPUT instead.
Proposed fix for set-output (lines 156, 174)
-      run: echo "::set-output name=MAC_BUILD_HASH::$(sha256sum holmes-macos-latest-${{ github.ref_name }}.zip | awk '{print $1}')"
+      run: echo "MAC_BUILD_HASH=$(sha256sum holmes-macos-latest-${{ github.ref_name }}.zip | awk '{print $1}')" >> $GITHUB_OUTPUT
-      run: echo "::set-output name=LINUX_BUILD_HASH::$(sha256sum holmes-ubuntu-22.04-${{ github.ref_name }}.zip | awk '{print $1}')"
+      run: echo "LINUX_BUILD_HASH=$(sha256sum holmes-ubuntu-22.04-${{ github.ref_name }}.zip | awk '{print $1}')" >> $GITHUB_OUTPUT
🤖 Fix all issues with AI agents
In @.github/workflows/build-and-test.yaml:
- Around line 22-27: Update the GitHub Actions step versions: replace the uses
reference for the checkout action (actions/checkout@v2) with the newer major
(actions/checkout@v4) and replace the setup-python action
(actions/setup-python@v2) with the newer major (actions/setup-python@v5) so they
match other workflows; keep the existing step names and the
matrix.python-version input unchanged (the steps referencing actions/checkout
and actions/setup-python should be edited to use the `@v4` and `@v5` tags
respectively).

In @.github/workflows/cli-performance.yaml:
- Around line 74-95: The workflow fails because asdf reads .tool-versions which
isn't present on master; modify the steps around "Checkout benchmark script from
PR" / "Copy benchmark script" so that the PR's .tool-versions is also retrieved
and placed at the repository root before the "Install asdf and Poetry"
step—either add .tool-versions to the sparse-checkout in the checkout step or
add a new copy step to copy pr-scripts/.tool-versions to ./ (root) so that the
asdf-vm/actions/install@v4 step can find it.

In `@CONTRIBUTING.md`:
- Around line 10-20: Update the Python requirement text that currently states
"Python `3.11`" in CONTRIBUTING.md to match the CI and setup action: either
change it to the recommended version `3.12` (used by setup-holmes-env) or
replace the single-version line with a note that multiple versions are supported
(e.g., 3.10–3.12) to align with build-and-test.yaml; ensure the updated wording
explicitly mentions compatibility with the setup-holmes-env action and the
build-and-test.yaml matrix so readers know which versions are supported.
🧹 Nitpick comments (5)
.github/actions/setup-holmes-env/action.yml (1)

9-12: Poetry version default duplicates .tool-versions — risk of drift.

The default 2.3.2 here and the value in .tool-versions must be kept in sync manually. If one is updated without the other, workflows using this composite action directly vs. those relying on .tool-versions will diverge. Consider reading the version from .tool-versions at runtime or adding a comment warning maintainers to update both locations.

.github/workflows/publish-pypi.yaml (1)

19-23: Relies on .tool-versions file (unlike the composite action which inlines the version).

This is fine since checkout happens before asdf install, but note the inconsistency: setup-holmes-env/action.yml passes tool_versions inline while this workflow reads from the file. Both approaches work, but maintainers should be aware that updating Poetry version requires changes in multiple places (.tool-versions, the composite action default, and build-binaries-and-brew.yaml Windows step).

.github/workflows/build-and-test.yaml (1)

58-61: poetry run with virtualenvs.create false — works but is redundant.

Since line 37 disables virtualenv creation, poetry run pytest just delegates to the system Python where packages are already installed. Using pytest directly would be equivalent and clearer. This is minor and optional.

.github/workflows/build-binaries-and-brew.yaml (1)

37-43: Hardcoded Poetry version on Windows — third location to maintain.

pip install poetry==2.3.2 is now a third place where the Poetry version is specified (alongside .tool-versions and the setup-holmes-env action default). If any one is updated without the others, Windows builds will use a different Poetry version.

Consider extracting this into a workflow-level env variable or reading it from .tool-versions at runtime:

Example: parse from .tool-versions
     - name: Install dependencies (Windows)
       if: matrix.os == 'windows-latest'
       run: |
         python -m pip install --upgrade pip setuptools pyinstaller
-        pip install poetry==2.3.2
+        POETRY_VERSION=$(grep '^poetry ' .tool-versions | awk '{print $2}')
+        pip install poetry==$POETRY_VERSION
         poetry config virtualenvs.create false
         poetry install --no-root

Note: This would need PowerShell syntax since it's Windows, or add shell: bash to use Git Bash.

.github/workflows/cli-performance.yaml (1)

128-212: Consider extracting the inline Python comparison script into a committed file.

The inline Python heredoc spanning ~75 lines is functional but hard to test, lint, and maintain. Since you already commit scripts/cli_performance_benchmark.py, a companion scripts/cli_performance_compare.py would allow local testing, linting, and reuse.

Comment thread .github/workflows/build-and-test.yaml Outdated
Comment thread .github/workflows/cli-performance.yaml Outdated
Comment thread CONTRIBUTING.md Outdated

@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: 4

🤖 Fix all issues with AI agents
In @.github/workflows/build-binaries-and-brew.yaml:
- Around line 148-156: Update the deprecated actions/checkout@v2 step to use
actions/checkout@v4 and replace the deprecated ::set-output usage in the
calc-hash step (id: calc-hash) by writing the MAC_BUILD_HASH to the
$GITHUB_OUTPUT file (e.g., echo "MAC_BUILD_HASH=$(sha256sum ... | awk '{print
$1}')" >> $GITHUB_OUTPUT) instead of using ::set-output; ensure the Download
MacOS artifact step name remains unchanged and the filename interpolation
holmes-macos-latest-${{ github.ref_name }}.zip is preserved.
- Around line 182-201: The commit step uses a shell variable TAG_NAME that was
defined only inside the "Update holmesgpt.rb formula" run block and therefore is
empty in the separate "Commit and push changes" step; also actions/checkout@v2
is deprecated. Fix by either merging the two run blocks so TAG_NAME (and
MAC_BUILD_HASH/LINUX_BUILD_HASH) remain in scope for the git commit, or replace
TAG_NAME in the commit command with the expression ${{ github.ref_name }}; and
update the checkout action to a supported version (e.g., actions/checkout@v4).
Update references in the "Update holmesgpt.rb formula" and "Commit and push
changes" steps accordingly.
- Around line 166-174: The linux-hash job uses deprecated patterns: replace the
checkout step's uses: actions/checkout@v2 with actions/checkout@v4, and stop
using the deprecated ::set-output in the Calculate hash step (id=calc-hash);
instead compute the SHA256 and write the output into GITHUB_OUTPUT (e.g. echo
"LINUX_BUILD_HASH=$(sha256sum holmes-ubuntu-22.04-${{ github.ref_name }}.zip |
awk '{print $1}')" >> $GITHUB_OUTPUT). Keep the existing Download Linux artifact
step (actions/download-artifact@v4) as-is and ensure the Calculate hash step
uses the calc-hash id so downstream steps can reference the job output.

In @.github/workflows/cli-performance.yaml:
- Around line 128-212: The script assumes pr_startup/master_startup are non-null
and calls format_benchmark_table(pr_startup, master_startup) which will crash if
load_json returned None; update the logic around load_json,
format_benchmark_table, report_lines and status computation to guard those
values: check pr_startup and master_startup before calling
format_benchmark_table (similar to the existing pr_llm/master_llm guard), append
a clear "Skipped - startup benchmark missing" block to report_lines when either
is missing, set startup_diff to 0 or a neutral sentinel in that case and compute
status accordingly, and when writing the final summary line only reference
git_sha/iterations if pr_startup/master_startup are present (otherwise include a
safe placeholder) so the script never accesses dict keys on None and exits
cleanly.
🧹 Nitpick comments (3)
.github/workflows/build-and-test.yaml (1)

37-38: Inconsistent virtualenv configuration across workflows.

This workflow uses virtualenvs.create false, while cli-performance.yaml uses virtualenvs.create true + virtualenvs.in-project true. Consider standardizing the approach across workflows to reduce maintenance burden and confusion. If there's a reason for the difference (e.g., benchmarking needs isolation), a brief comment in the workflow would help.

.github/workflows/cli-performance.yaml (1)

245-251: Regression check doesn't handle the potential error status.

If the compare step outputs status=error (e.g., due to missing data or a script failure), this check would pass silently since it only tests for "regression". Consider also failing on unexpected statuses.

.github/workflows/build-binaries-and-brew.yaml (1)

37-43: Poetry version on Windows is duplicated and can drift from .tool-versions.

The Windows step hardcodes poetry==2.3.2 while Unix/Mac gets the version from .tool-versions. If the version is updated in .tool-versions, this line can easily be missed. Consider extracting it into a workflow-level env variable or reading it from .tool-versions at runtime.

Example: read from `.tool-versions`
     - name: Install dependencies (Windows)
       if: matrix.os == 'windows-latest'
       run: |
         python -m pip install --upgrade pip setuptools pyinstaller
-        pip install poetry==2.3.2
+        $poetryVersion = (Select-String -Path .tool-versions -Pattern '^poetry\s+(.+)$').Matches.Groups[1].Value
+        pip install "poetry==$poetryVersion"
         poetry config virtualenvs.create false
         poetry install --no-root

Comment thread .github/workflows/build-binaries-and-brew.yaml Outdated
Comment thread .github/workflows/build-binaries-and-brew.yaml Outdated
Comment thread .github/workflows/build-binaries-and-brew.yaml Outdated
Comment thread .github/workflows/cli-performance.yaml Outdated
@mainred

mainred commented Feb 6, 2026

Copy link
Copy Markdown
Collaborator Author

CLI Performance Benchmark is expected to fail because it checks out master branch which does include .tool-versions

@github-actions

github-actions Bot commented Feb 6, 2026 •

Copy link
Copy Markdown
Contributor

🔬 CLI Performance Benchmark

🟡 Startup Time (no LLM)

Measures holmes version execution time (imports + initialization)

Metric PR Master Change
Cold Start 10.89s 11.36s -4.1%
Warm Mean 4.98s 5.13s -2.9%
Warm Min 4.94s 5.00s
Warm Max 5.03s 5.21s

🟡 Full CLI with LLM

Measures holmes ask execution time (OpenRouter + Haiku 4.5)

Metric PR Master Change
Cold Start 27.69s 25.10s +10.3%
Warm Mean 7.76s 7.42s +4.5%
Warm Min 7.47s 7.14s
Warm Max 8.08s 7.70s

PR: 27f69856 | Master: 663bf960 | Iterations: 5

@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: 4

🤖 Fix all issues with AI agents
In @.github/workflows/build-and-deploy-docs.yaml:
- Around line 6-7: Remove the temporary pull_request workflow trigger by
deleting the pull_request key (and the accompanying TODO comment "#
TODO(mainred): to be deleted") from the workflow YAML so the workflow no longer
runs on PRs; ensure only the intended triggers remain in the file and validate
the YAML after removal.
- Around line 29-36: Uncomment the deployment step so docs are pushed on merges:
restore the previously commented run line containing "poetry run mkdocs
gh-deploy --force" and remove the comment markers so the job executes; also fix
the TODO comment text by replacing the full-width parenthesis with ASCII "(" and
correct "uncoment" to "uncomment" (the modified lines reference the commented
run step with "poetry run mkdocs gh-deploy --force" and the TODO comment above
it).

In @.github/workflows/build-binaries-and-brew.yaml:
- Around line 6-7: Remove the temporary pull_request trigger (the
"pull_request:" key and the TODO(mainred) comment) from the workflow so the job
only runs on the intended release event; locate and delete the "pull_request:"
entry in the workflow file (and the associated comment TODO(mainred)) leaving
the release: [created] trigger as the sole trigger.
- Around line 28-43: The workflow currently runs the "Install asdf and Poetry"
step using asdf-vm/actions/install@v4 on all OSes and then uses a hardcoded
Poetry path in the Windows "Install dependencies" step; add a conditional to the
asdf step (e.g., if: matrix.os != 'windows-latest') so asdf is not executed on
Windows, and update the Windows branch of the "Install dependencies" step to
install Poetry via a Windows-compatible method (pipx or the official Windows
installer) instead of referencing
C:\Users\runneradmin\AppData\Roaming\Python\Scripts\poetry; ensure the step
names "Install asdf and Poetry" and both "Install dependencies" branches reflect
these conditionals and the alternative Poetry install so the Windows job no
longer depends on asdf or the hardcoded path.
🧹 Nitpick comments (1)
.github/workflows/cli-performance.yaml (1)

31-34: Inconsistent Poetry virtualenv configuration across workflows.

These jobs use virtualenvs.create true + virtualenvs.in-project true, while the shared setup-holmes-env action (used by other workflows) sets virtualenvs.create false. This means:

  • Here: Poetry creates a .venv inside the project directory.
  • Other workflows: Poetry installs directly into the system Python.

This inconsistency can lead to different dependency resolution behavior and subtle bugs. If there's a specific reason for in-project virtualenvs here (e.g., benchmark isolation), add a comment explaining it. Otherwise, align with the shared action's approach.

Also applies to: 92-95

Comment thread .github/workflows/build-and-deploy-docs.yaml Outdated
Comment thread .github/workflows/build-and-deploy-docs.yaml Outdated
Comment thread .github/workflows/build-binaries-and-brew.yaml Outdated
Comment thread .github/workflows/build-binaries-and-brew.yaml Outdated

@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: 2

🤖 Fix all issues with AI agents
In @.github/workflows/build-binaries-and-brew.yaml:
- Line 121: The release workflow has had the release upload, hash calculation,
and Homebrew formula update jobs removed (replaced by a TODO); restore the
original jobs (e.g., the release upload job, hash calculation job, and
update_homebrew/Homebrew formula job) or block merging until this TODO is
resolved: reintroduce the job definitions and their artifacts/outputs, ensure
they still run on the release trigger (release: [created]), wire the
dependencies between them (upload -> calc_hashes -> update_homebrew), and
include any necessary secrets/permissions and artifact upload/download steps so
the release pipeline behaves as before.
- Around line 88-104: In the pyinstaller invocation block (the "pyinstaller
holmes_cli.py" command), fix the indentation of the "ls dist" line so it uses
the same 8-space indent as the rest of the command block, and add the missing
flag --hidden-import=backports to the pyinstaller flags (alongside existing
--hidden-import entries like --hidden-import=tiktoken_ext.openai_public and
--hidden-import=tiktoken_ext) to keep this workflow in sync with the other
workflow.
🧹 Nitpick comments (2)
.github/actions/setup-holmes-env/action.yml (1)

31-37: Add error handling for Poetry version extraction.

If .tool-versions is missing or doesn't contain a poetry line, POETRY_VERSION will be empty and the installer will be invoked with --version "", likely producing a confusing failure. This is especially relevant since this is a reusable composite action that could be called from contexts where .tool-versions might not be present (e.g., if the checkout step failed or the file was excluded via sparse-checkout).

Proposed fix
   - name: Install Poetry
     shell: bash
     run: |
       POETRY_VERSION=$(grep '^poetry ' .tool-versions | awk '{print $2}')
+      if [ -z "$POETRY_VERSION" ]; then
+        echo "::error::Could not determine Poetry version from .tool-versions"
+        exit 1
+      fi
       echo "Installing Poetry version: $POETRY_VERSION"
       curl -sSL https://install.python-poetry.org | python3 - --version "$POETRY_VERSION"
       echo "$HOME/.local/bin" >> $GITHUB_PATH
.github/workflows/build-and-test.yaml (1)

28-33: Same missing guard on POETRY_VERSION extraction as the composite action.

If the grep doesn't match, the install will proceed with an empty --version argument. Consider adding the same guard suggested for setup-holmes-env/action.yml. Also, the duplicated Poetry install snippet across multiple workflows is a good candidate for consolidation — this workflow could potentially use the setup-holmes-env composite action instead of inlining these steps.

Comment thread .github/workflows/build-binaries-and-brew.yaml Outdated
Comment thread .github/workflows/build-binaries-and-brew.yaml Outdated

@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

🤖 Fix all issues with AI agents
In @.github/actions/setup-holmes-env/action.yml:
- Around line 26-30: In the "Install Python dependencies" workflow step remove
the debug artifact by deleting the stray `ls ../../..` command from the run
block so the step only runs the intended Python install commands (the block
under the step name "Install Python dependencies" that currently contains `ls
../../..` and `python -m pip install --upgrade pip setuptools pyinstaller`
should be left with only the python install line).
🧹 Nitpick comments (2)
.github/workflows/build-and-deploy-docs.yaml (2)

19-21: Python version is hardcoded — consider reading from .tool-versions for consistency.

Other workflows in this PR are moving toward asdf-managed versions. The Python version 3.11 is hardcoded here while the broader initiative is to centralize tool versions in .tool-versions. If Python is later added to that file, this will drift silently.

Low priority since .tool-versions currently only tracks Poetry.


29-30: Step name "Install Poetry" is accurate for current state but will mislead if .tool-versions grows.

Currently, .tool-versions contains only poetry 2.3.2, so the step name is correct. However, if .tool-versions is extended later (e.g., with Python or other tools), asdf-vm/actions/install@v4 will install all listed tools, making the step name misleading. Consider either:

  • Renaming the step to reflect what it actually does (e.g., "Install tools via asdf"), or
  • Using the tool_versions input to be explicit about what gets installed, overriding .tool-versions entirely for that job.

Note: The action does not support selective tool filtering—the tool_versions input requires specifying the complete list of tools to install.

Comment thread .github/actions/setup-holmes-env/action.yml Outdated

@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: 4

🤖 Fix all issues with AI agents
In @.github/workflows/build-binaries-and-brew.yaml:
- Line 21: Update the GitHub Actions runner label in the workflow by replacing
the deprecated os: macos-13 entry with a supported runner (e.g., os: macos-14 or
os: macos-15); if you need Intel builds use os: macos-15-intel or choose os:
macos-latest. Locate the os: macos-13 line in the build-binaries-and-brew.yaml
workflow and change it to the appropriate supported label so jobs targeting
macOS no longer fail.

In @.github/workflows/cli-performance.yaml:
- Around line 74-76: Restore the master checkout in the benchmark workflow:
re-enable the commented `ref: master` under the `benchmark-master` job so it
actually checks out the master branch (instead of the PR), and ensure the
workflow copies `.tool-versions` from the PR checkout into the master checkout
before running benchmarks; specifically modify the `benchmark-master` job to
perform a checkout of master (use `ref: master`) and then add a step to copy
`.tool-versions` from the PR workspace into the master workspace prior to
running the benchmark commands.

In @.github/workflows/publish-pypi.yaml:
- Line 6: Remove the temporary pull_request trigger from the workflow by
deleting the top-level "pull_request:" key so the publish job no longer runs on
every PR; ensure the workflow only includes the intended triggers (e.g., "push:"
or "workflow_dispatch:") and matches the patterns used in other publish
workflows to avoid accidental PR-triggered publishes.
- Around line 30-41: Restore the two commented steps "Update package version"
and "Publish to PyPI": re-enable the step that runs the two sed commands
updating __version__ in holmes/__init__.py and version in pyproject.toml and the
step that runs `poetry publish --build -u __token__ -p ${{ secrets.PYPI_TOKEN
}}`; while restoring, fix the YAML indentation under each `run: |` so the sed
lines and publish command are indented two spaces (not one) and validate the
workflow parses, and optionally gate the merge by adding a check or comment to
ensure PYPI_TOKEN secret exists before merging.
🧹 Nitpick comments (2)
.github/workflows/build-and-deploy-docs.yaml (1)

29-34: Inconsistent Poetry installation method compared to other workflows.

This workflow uses asdf-vm/actions/install@v4 while build-and-test.yaml, publish-pypi.yaml, cli-performance.yaml, and build-binaries-and-brew.yaml all use a script-based curl + grep .tool-versions approach. Pick one method and use it consistently across all workflows to reduce maintenance burden.

.github/workflows/cli-performance.yaml (1)

34-38: Virtualenv configuration differs from other workflows.

This workflow uses virtualenvs.create true + virtualenvs.in-project true, while other workflows (docs, build-and-test, publish-pypi, setup action) use virtualenvs.create false. The inconsistency may be intentional for benchmark isolation, but if not, it adds confusion.

Comment thread .github/workflows/build-binaries-and-brew.yaml Outdated
Comment thread .github/workflows/cli-performance.yaml Outdated
Comment thread .github/workflows/publish-pypi.yaml Outdated
Comment thread .github/workflows/publish-pypi.yaml Outdated
@mainred
mainred force-pushed the asdf branch 8 times, most recently from ab83a9a to 6ee3c7e Compare February 9, 2026 09:08
Signed-off-by: Qingchuan Hao <qingchuan.hao@microsoft.com>
@mainred mainred changed the title WIP: chore: introduce asdf to manage tool versions chore: introduce asdf to manage tool versions Feb 9, 2026
@mainred

mainred commented Feb 11, 2026

Copy link
Copy Markdown
Collaborator Author

@moshemorad could you please take a look? Not sure you are working on the same task.

@mainred

mainred commented Feb 25, 2026

Copy link
Copy Markdown
Collaborator Author

@moshemorad could you please take a look? Thanks. I just resolved several code conflicts. If it's not planned, I can close this PR.

@mainred

mainred commented Feb 25, 2026

Copy link
Copy Markdown
Collaborator Author

cc @arikalon1

@mainred

mainred commented Mar 7, 2026

Copy link
Copy Markdown
Collaborator Author

Close for not plannned

@mainred mainred closed this Mar 7, 2026
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.

2 participants