Skip to content

Commit 08df05a

Browse files
author
jgstern-agent
committed
fix(ci): install hypergumbo-lang-rust-analyzer in nightly/release/full-suite
Only ci.yml (per-PR gate) had the new package on its install lines. Other workflows that iterate over packages/*/tests/ for collection (nightly.yml test-matrix, release.yml integration-tests) collection- errored with `ModuleNotFoundError: No module named 'hypergumbo_lang_rust_analyzer'`, and full-suite.yml silently never exercised rust-analyzer tests at all. - nightly.yml: add `-e packages/hypergumbo-lang-rust-analyzer` to all three install blocks (lines 49, 168, 245) and `--cov=packages/hypergumbo-lang-rust-analyzer/src` to both COV_PATHS lines (75, 197). - release.yml: same kinds of additions at four install blocks (91, 327, 448, 525) and two COV_PATHS lines (353, 477). Preemptive — would have failed identically on the next tag-push. - full-suite.yml: dedicated `test-rust-analyzer` job mirroring the `test-common` / `test-extended` small-package pattern (no retry variant — rust-analyzer has ~25 tests across 5 files, well under Codeberg's 5-min timeout). Extended the `aggregate` job to include it in the `needs` list, per-job echo, success-gate, coverage roll-up (divisor 5 → 6), record-run-result JSON, and the all-100% badge gate. YAML syntactically validated. Yamllint line-length errors on modified COV_PATHS lines are preexisting on dev — my additions marginally lengthen already-violating lines without introducing new violators. Signed-off-by: jgstern-agent <josh-agent@iterabloom.com>
1 parent 7484e9d commit 08df05a

5 files changed

Lines changed: 98 additions & 121 deletions

File tree

.ci/affected-tests.txt

Lines changed: 6 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,118 +1,11 @@
11
# Test selection manifest
2-
# Generated by smart-test at 2026-04-20T23:11:24-04:00
2+
# Generated by smart-test at 2026-04-21T00:22:39-04:00
33
# Mode: targeted
4-
# Baseline: e82d3803685a1f005db6b87ba33d3b16e11b9178
5-
# Changed files: 84
6-
# Changed source files: 17
7-
# Selected tests: 91
4+
# Baseline: 7484e9d523ac1b77f43a4fe71a90c54c5aa6864d
5+
# Reason: no Python source files changed
6+
# Changed files: 6
7+
# Changed source files: 0
8+
# Selected tests: 0
89
#
910
# === CHANGED_SOURCE_FILES ===
10-
packages/hypergumbo-core/src/hypergumbo_core/cli.py
11-
packages/hypergumbo-core/src/hypergumbo_core/entrypoints.py
12-
packages/hypergumbo-core/src/hypergumbo_core/linkers/http.py
13-
packages/hypergumbo-core/src/hypergumbo_core/linkers/kafka_streams_dispatch.py
14-
packages/hypergumbo-core/src/hypergumbo_core/rust_analyzer_install.py
15-
packages/hypergumbo-lang-mainstream/src/hypergumbo_lang_mainstream/csharp.py
16-
packages/hypergumbo-lang-rust-analyzer/src/hypergumbo_lang_rust_analyzer/analyzer.py
17-
packages/hypergumbo-lang-rust-analyzer/src/hypergumbo_lang_rust_analyzer/gate.py
18-
packages/hypergumbo-lang-rust-analyzer/src/hypergumbo_lang_rust_analyzer/graceful_degrade.py
19-
packages/hypergumbo-lang-rust-analyzer/src/hypergumbo_lang_rust_analyzer/__init__.py
20-
packages/hypergumbo-lang-rust-analyzer/src/hypergumbo_lang_rust_analyzer/invoke.py
21-
packages/hypergumbo-lang-rust-analyzer/src/hypergumbo_lang_rust_analyzer/translate.py
22-
packages/hypergumbo-tracker/src/hypergumbo_tracker/hotspot_markup.py
23-
packages/hypergumbo-tracker/src/hypergumbo_tracker/id_matching.py
24-
packages/hypergumbo-tracker/src/hypergumbo_tracker/item_nav_render.py
25-
packages/hypergumbo-tracker/src/hypergumbo_tracker/nav_history.py
26-
packages/hypergumbo-tracker/src/hypergumbo_tracker/tui.py
2711
# === SELECTED_TESTS ===
28-
packages/hypergumbo-core/tests/BRANCHES_test_http.py
29-
packages/hypergumbo-core/tests/test_analyzer_registry.py
30-
packages/hypergumbo-core/tests/test_annotation_convention_linker.py
31-
packages/hypergumbo-core/tests/test_backend_cli_flag.py
32-
packages/hypergumbo-core/tests/test_build_grammars.py
33-
packages/hypergumbo-core/tests/test_cli_basic.py
34-
packages/hypergumbo-core/tests/test_cli_cache.py
35-
packages/hypergumbo-core/tests/test_cli_commands.py
36-
packages/hypergumbo-core/tests/test_cli_config.py
37-
packages/hypergumbo-core/tests/test_cli_dead_code.py
38-
packages/hypergumbo-core/tests/test_cli_explain.py
39-
packages/hypergumbo-core/tests/test_cli_io_boundaries.py
40-
packages/hypergumbo-core/tests/test_cli_relativize_paths.py
41-
packages/hypergumbo-core/tests/test_cli_routes.py
42-
packages/hypergumbo-core/tests/test_cli_run_behavior_map.py
43-
packages/hypergumbo-core/tests/test_cli_search.py
44-
packages/hypergumbo-core/tests/test_cli_symbols.py
45-
packages/hypergumbo-core/tests/test_cli_test_coverage.py
46-
packages/hypergumbo-core/tests/test_cli_verify_claims.py
47-
packages/hypergumbo-core/tests/test_crypto_flow_linker.py
48-
packages/hypergumbo-core/tests/test_entrypoints.py
49-
packages/hypergumbo-core/tests/test_file_excludes.py
50-
packages/hypergumbo-core/tests/test_frameworks_flag.py
51-
packages/hypergumbo-core/tests/test_gitleaks.py
52-
packages/hypergumbo-core/tests/test_handler_slices.py
53-
packages/hypergumbo-core/tests/test_http_linker.py
54-
packages/hypergumbo-core/tests/test_install_extras.py
55-
packages/hypergumbo-core/tests/test_kafka_streams_dispatch_linker.py
56-
packages/hypergumbo-core/tests/test_linker_filtering.py
57-
packages/hypergumbo-core/tests/test_linker_registry.py
58-
packages/hypergumbo-core/tests/test_locale.py
59-
packages/hypergumbo-core/tests/test_max_tier.py
60-
packages/hypergumbo-core/tests/test_message_dispatch_linker.py
61-
packages/hypergumbo-core/tests/test_no_first_party_priority.py
62-
packages/hypergumbo-core/tests/test_profile.py
63-
packages/hypergumbo-core/tests/test_run_behavior_map.py
64-
packages/hypergumbo-core/tests/test_rust_analyzer_install.py
65-
packages/hypergumbo-core/tests/test_schema_compliance.py
66-
packages/hypergumbo-core/tests/test_sketch.py
67-
packages/hypergumbo-core/tests/test_sketch_sanity.py
68-
packages/hypergumbo-core/tests/test_slice_tier_filter.py
69-
packages/hypergumbo-core/tests/test_stable_shape_ids.py
70-
packages/hypergumbo-core/tests/test_supply_chain.py
71-
packages/hypergumbo-core/tests/test_tree_sitter_analyzer.py
72-
packages/hypergumbo-core/tests/test_yjs_crdt_linker.py
73-
packages/hypergumbo-lang-common/tests/BRANCHES_test_dart.py
74-
packages/hypergumbo-lang-common/tests/BRANCHES_test_elixir.py
75-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_cpp.py
76-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_c.py
77-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_csharp.py
78-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_go.py
79-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_java.py
80-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_js_ts.py
81-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_kotlin.py
82-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_php.py
83-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_python_ast_analysis.py
84-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_ruby.py
85-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_rust.py
86-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_scala.py
87-
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_swift.py
88-
packages/hypergumbo-lang-mainstream/tests/test_csharp_attribute_edges.py
89-
packages/hypergumbo-lang-mainstream/tests/test_csharp.py
90-
packages/hypergumbo-lang-mainstream/tests/test_html_analysis.py
91-
packages/hypergumbo-lang-mainstream/tests/test_python_ast_analysis.py
92-
packages/hypergumbo-lang-mainstream/tests/test_rust.py
93-
packages/hypergumbo-lang-rust-analyzer/tests/test_analyzer.py
94-
packages/hypergumbo-lang-rust-analyzer/tests/test_gate.py
95-
packages/hypergumbo-lang-rust-analyzer/tests/test_graceful_degrade.py
96-
packages/hypergumbo-lang-rust-analyzer/tests/test_invoke.py
97-
packages/hypergumbo-lang-rust-analyzer/tests/test_translate.py
98-
packages/hypergumbo-tracker/tests/test_cli.py
99-
packages/hypergumbo-tracker/tests/test_configure.py
100-
packages/hypergumbo-tracker/tests/test_fork_workflow.py
101-
packages/hypergumbo-tracker/tests/test_hotspot_markup.py
102-
packages/hypergumbo-tracker/tests/test_id_matching.py
103-
packages/hypergumbo-tracker/tests/test_item_nav_modal.py
104-
packages/hypergumbo-tracker/tests/test_item_nav_render.py
105-
packages/hypergumbo-tracker/tests/test_migration.py
106-
packages/hypergumbo-tracker/tests/test_nav_history.py
107-
packages/hypergumbo-tracker/tests/test_serve.py
108-
packages/hypergumbo-tracker/tests/test_setup.py
109-
packages/hypergumbo-tracker/tests/test_store.py
110-
packages/hypergumbo-tracker/tests/test_sync.py
111-
packages/hypergumbo-tracker/tests/test_tui_annotation.py
112-
packages/hypergumbo-tracker/tests/test_tui_item_nav_integration.py
113-
packages/hypergumbo-tracker/tests/test_tui.py
114-
packages/hypergumbo-tracker/tests/test_tui_snapshots.py
115-
tests/test_awaits_bakeoff_nudge.py
116-
tests/test_bakeoff_deep_reflect.py
117-
tests/test_top_level_test_map.py
118-
tests/test_watched_process.py

.github/workflows/full-suite.yml

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,74 @@ jobs:
577577
COV=$(grep "^TOTAL" coverage-output.txt | awk '{print $NF}' | tr -d '%')
578578
echo "coverage=${COV:-0}" >> "$GITHUB_OUTPUT"
579579
580+
# Small package (~25 tests, 5 files); no retry variant — matches the
581+
# test-common / test-extended pattern rather than the test-core /
582+
# test-mainstream / test-tracker "heavy, retry-eligible" pattern.
583+
test-rust-analyzer:
584+
needs: [changes, prep]
585+
if: needs.changes.outputs.code == 'true'
586+
runs-on: self-hosted
587+
outputs:
588+
coverage: ${{ steps.tests.outputs.coverage }}
589+
steps:
590+
- uses: actions/checkout@v4
591+
- name: Set up Python
592+
uses: actions/setup-python@v5
593+
with:
594+
python-version: "3.11"
595+
- name: Restore grammar wheels
596+
uses: actions/cache@v3
597+
with:
598+
path: /tmp/grammar-wheels
599+
key: grammar-wheels-${{ hashFiles('scripts/build-source-grammars') }}
600+
- name: Restore pip packages
601+
uses: actions/cache@v3
602+
with:
603+
path: ~/.local/lib/python3.11/site-packages
604+
key: pip-packages-${{ hashFiles('packages/*/pyproject.toml') }}
605+
- name: Install dependencies
606+
run: |
607+
pip install --upgrade pip
608+
pip install pytest pytest-cov pytest-xdist jsonschema
609+
pip install -e packages/hypergumbo-core \
610+
-e packages/hypergumbo-lang-mainstream \
611+
-e packages/hypergumbo-lang-common \
612+
-e packages/hypergumbo-lang-extended1 \
613+
-e packages/hypergumbo-lang-rust-analyzer \
614+
-e "packages/hypergumbo-tracker[dev]"
615+
./scripts/build-source-grammars --wheels-dir /tmp/grammar-wheels
616+
- name: Check for sentence-transformers
617+
run: |
618+
if python -c "import sentence_transformers" 2>/dev/null; then
619+
echo "sentence-transformers available"
620+
echo "EMBEDDINGS_AVAILABLE=true" >> "$GITHUB_ENV"
621+
else
622+
echo "sentence-transformers not installed, using no-embeddings coverage config"
623+
echo "EMBEDDINGS_AVAILABLE=false" >> "$GITHUB_ENV"
624+
fi
625+
- name: Run tests
626+
id: tests
627+
run: |
628+
COV_CONFIG=""
629+
if [ "$EMBEDDINGS_AVAILABLE" = "false" ]; then
630+
COV_CONFIG="--cov-config=.coveragerc.no-embeddings"
631+
fi
632+
if [ -f /sys/fs/cgroup/cpu.max ]; then
633+
read quota period < /sys/fs/cgroup/cpu.max
634+
if [ "$quota" != "max" ]; then
635+
WORKERS=$((quota / period))
636+
else
637+
WORKERS=$(nproc)
638+
fi
639+
else
640+
WORKERS=$(nproc)
641+
fi
642+
643+
pytest packages/hypergumbo-lang-rust-analyzer/tests/ -n "$WORKERS" --tb=short \
644+
--cov=packages/hypergumbo-lang-rust-analyzer/src $COV_CONFIG --cov-report=term | tee coverage-output.txt
645+
COV=$(grep "^TOTAL" coverage-output.txt | awk '{print $NF}' | tr -d '%')
646+
echo "coverage=${COV:-0}" >> "$GITHUB_OUTPUT"
647+
580648
test-tracker:
581649
needs: [changes, prep]
582650
if: needs.changes.outputs.code == 'true'
@@ -736,7 +804,8 @@ jobs:
736804
# Aggregate results after all test jobs complete
737805
aggregate:
738806
needs: [changes, test-core, test-core-retry, test-mainstream, test-mainstream-retry,
739-
test-common, test-extended, test-tracker, test-tracker-retry, test-agent-infra]
807+
test-common, test-extended, test-rust-analyzer, test-tracker, test-tracker-retry,
808+
test-agent-infra]
740809
if: always()
741810
runs-on: self-hosted
742811
steps:
@@ -763,6 +832,7 @@ jobs:
763832
echo " test-mainstream-retry: ${{ needs.test-mainstream-retry.result }} (coverage: ${{ needs.test-mainstream-retry.outputs.coverage }}%)"
764833
echo " test-common: ${{ needs.test-common.result }} (coverage: ${{ needs.test-common.outputs.coverage }}%)"
765834
echo " test-extended: ${{ needs.test-extended.result }} (coverage: ${{ needs.test-extended.outputs.coverage }}%)"
835+
echo " test-rust-analyzer: ${{ needs.test-rust-analyzer.result }} (coverage: ${{ needs.test-rust-analyzer.outputs.coverage }}%)"
766836
echo " test-tracker: ${{ needs.test-tracker.result }} (coverage: ${{ needs.test-tracker.outputs.coverage }}%)"
767837
echo " test-tracker-retry: ${{ needs.test-tracker-retry.result }} (coverage: ${{ needs.test-tracker-retry.outputs.coverage }}%)"
768838
echo " test-agent-infra: ${{ needs.test-agent-infra.result }}"
@@ -784,6 +854,7 @@ jobs:
784854
[[ "$mainstream_ok" == "true" ]] && \
785855
[[ "${{ needs.test-common.result }}" == "success" ]] && \
786856
[[ "${{ needs.test-extended.result }}" == "success" ]] && \
857+
[[ "${{ needs.test-rust-analyzer.result }}" == "success" ]] && \
787858
[[ "$tracker_ok" == "true" ]] && \
788859
[[ "${{ needs.test-agent-infra.result }}" == "success" ]]; then
789860
echo "conclusion=success" >> "$GITHUB_OUTPUT"
@@ -808,6 +879,7 @@ jobs:
808879
809880
COV_COMMON="${{ needs.test-common.outputs.coverage }}"
810881
COV_EXTENDED="${{ needs.test-extended.outputs.coverage }}"
882+
COV_RUST_ANALYZER="${{ needs.test-rust-analyzer.outputs.coverage }}"
811883
COV_TRACKER="${{ needs.test-tracker.outputs.coverage }}"
812884
if [[ -z "$COV_TRACKER" || "$COV_TRACKER" == "0" ]] && \
813885
[[ "${{ needs.test-tracker-retry.result }}" == "success" ]]; then
@@ -819,10 +891,11 @@ jobs:
819891
COV_MAINSTREAM="${COV_MAINSTREAM:-0}"
820892
COV_COMMON="${COV_COMMON:-0}"
821893
COV_EXTENDED="${COV_EXTENDED:-0}"
894+
COV_RUST_ANALYZER="${COV_RUST_ANALYZER:-0}"
822895
COV_TRACKER="${COV_TRACKER:-0}"
823896
824897
# Calculate average (integer math)
825-
AVG=$(( (COV_CORE + COV_MAINSTREAM + COV_COMMON + COV_EXTENDED + COV_TRACKER) / 5 ))
898+
AVG=$(( (COV_CORE + COV_MAINSTREAM + COV_COMMON + COV_EXTENDED + COV_RUST_ANALYZER + COV_TRACKER) / 6 ))
826899
echo "coverage=$AVG" >> "$GITHUB_OUTPUT"
827900
echo "Average coverage: $AVG%"
828901
@@ -844,6 +917,7 @@ jobs:
844917
\"mainstream-retry\": \"${{ needs.test-mainstream-retry.result }}\",
845918
\"common\": \"${{ needs.test-common.result }}\",
846919
\"extended\": \"${{ needs.test-extended.result }}\",
920+
\"rust-analyzer\": \"${{ needs.test-rust-analyzer.result }}\",
847921
\"tracker\": \"${{ needs.test-tracker.result }}\",
848922
\"tracker-retry\": \"${{ needs.test-tracker-retry.result }}\"
849923
}
@@ -869,6 +943,7 @@ jobs:
869943
870944
COV_COMMON="${{ needs.test-common.outputs.coverage }}"
871945
COV_EXTENDED="${{ needs.test-extended.outputs.coverage }}"
946+
COV_RUST_ANALYZER="${{ needs.test-rust-analyzer.outputs.coverage }}"
872947
COV_TRACKER="${{ needs.test-tracker.outputs.coverage }}"
873948
if [ -z "$COV_TRACKER" ] || [ "$COV_TRACKER" = "0" ]; then
874949
RETRY_COV="${{ needs.test-tracker-retry.outputs.coverage }}"
@@ -890,12 +965,12 @@ jobs:
890965
ALL_100="false"
891966
if [ "$COV_CORE" = "100" ] && [ "$COV_MAINSTREAM" = "100" ] && \
892967
[ "$COV_COMMON" = "100" ] && [ "$COV_EXTENDED" = "100" ] && \
893-
[ "$COV_TRACKER" = "100" ]; then
968+
[ "$COV_RUST_ANALYZER" = "100" ] && [ "$COV_TRACKER" = "100" ]; then
894969
ALL_100="true"
895970
echo "All packages at 100% coverage - updating last-green-sha marker"
896971
echo "${{ github.sha }}" > /tmp/last-green-sha.txt
897972
else
898-
echo "Not all packages at 100%: core=$COV_CORE, mainstream=$COV_MAINSTREAM, common=$COV_COMMON, extended=$COV_EXTENDED, tracker=$COV_TRACKER"
973+
echo "Not all packages at 100%: core=$COV_CORE, mainstream=$COV_MAINSTREAM, common=$COV_COMMON, extended=$COV_EXTENDED, rust-analyzer=$COV_RUST_ANALYZER, tracker=$COV_TRACKER"
899974
fi
900975
901976
git config user.name "CI Bot"

.github/workflows/nightly.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ jobs:
4949
-e packages/hypergumbo-lang-mainstream \
5050
-e packages/hypergumbo-lang-common \
5151
-e packages/hypergumbo-lang-extended1 \
52+
-e packages/hypergumbo-lang-rust-analyzer \
5253
-e "packages/hypergumbo-tracker[dev,tui]" \
5354
-e packages/hypergumbo \
5455
jsonschema
@@ -72,7 +73,7 @@ jobs:
7273
- name: Run tests with coverage
7374
run: |
7475
if [ -d "packages/hypergumbo-core" ]; then
75-
COV_PATHS="--cov=packages/hypergumbo-core/src --cov=packages/hypergumbo-lang-mainstream/src --cov=packages/hypergumbo-lang-common/src --cov=packages/hypergumbo-lang-extended1/src --cov=packages/hypergumbo-tracker/src"
76+
COV_PATHS="--cov=packages/hypergumbo-core/src --cov=packages/hypergumbo-lang-mainstream/src --cov=packages/hypergumbo-lang-common/src --cov=packages/hypergumbo-lang-extended1/src --cov=packages/hypergumbo-lang-rust-analyzer/src --cov=packages/hypergumbo-tracker/src"
7677
TEST_PATHS="packages/*/tests/"
7778
else
7879
COV_PATHS="--cov=src"
@@ -168,6 +169,7 @@ jobs:
168169
-e packages/hypergumbo-lang-mainstream \
169170
-e packages/hypergumbo-lang-common \
170171
-e packages/hypergumbo-lang-extended1 \
172+
-e packages/hypergumbo-lang-rust-analyzer \
171173
-e "packages/hypergumbo-tracker[dev,tui]" \
172174
-e packages/hypergumbo \
173175
jsonschema
@@ -194,7 +196,7 @@ jobs:
194196
if: steps.skip-check.outputs.should_skip != 'true'
195197
run: |
196198
if [ -d "packages/hypergumbo-core" ]; then
197-
COV_PATHS="--cov=packages/hypergumbo-core/src --cov=packages/hypergumbo-lang-mainstream/src --cov=packages/hypergumbo-lang-common/src --cov=packages/hypergumbo-lang-extended1/src --cov=packages/hypergumbo-tracker/src"
199+
COV_PATHS="--cov=packages/hypergumbo-core/src --cov=packages/hypergumbo-lang-mainstream/src --cov=packages/hypergumbo-lang-common/src --cov=packages/hypergumbo-lang-extended1/src --cov=packages/hypergumbo-lang-rust-analyzer/src --cov=packages/hypergumbo-tracker/src"
198200
TEST_PATHS="packages/*/tests/"
199201
else
200202
COV_PATHS="--cov=src"
@@ -245,6 +247,7 @@ jobs:
245247
-e packages/hypergumbo-lang-mainstream \
246248
-e packages/hypergumbo-lang-common \
247249
-e packages/hypergumbo-lang-extended1 \
250+
-e packages/hypergumbo-lang-rust-analyzer \
248251
-e packages/hypergumbo
249252
else
250253
pip install -e .[dev]

0 commit comments

Comments
 (0)