mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-10-03 02:21:44 +00:00
* chore(ci): reduce CI runner-minutes by consolidating parity and narrowing cross-platform
Scope-resolution parity previously spawned 9 separate GitHub Actions jobs
(one per migrated language), each doing full checkout + npm ci + build for
a single test file. Consolidate into one job running scripts/run-parity.ts
which loops through all migrated languages sequentially — same coverage,
~45 fewer runner-minutes of redundant setup per PR.
Cross-platform (Windows/macOS) previously ran the full 373-file test suite.
Narrow to 45 platform-sensitive files (native LadybugDB, process spawning,
path separators, worker threads, filesystem behavior). Full suite still runs
on Ubuntu with coverage.
Also adds 2 missing lbug integration tests (lbug-orphan-sidecar-recovery,
lbug-readonly-init) to the sequential lbug-db vitest project where they
belong, and rewrites TESTING.md to document all test lanes.
* fix: address code review findings on parity and cross-platform scripts
- Capture stderr in run-parity.ts (vitest writes diagnostics to stderr)
- Lower per-invocation timeout from 5min to 60s to stay within CI job limit
- Add --language flag validation (error on missing value)
- Add timeout diagnostic to run-cross-platform.ts catch block
- Add analyze-wal-checkpoint-failure.test.ts to lbug-db sequential project
- Expand cross-platform list: parser-loader, pipeline, pipeline-graph-golden,
setup-skills, cli/tool-no-index-stderr (51 files, was 45)
* fix: add shell:true for Windows npx resolution and simplify fs import
execFileSync('npx', ...) fails with ENOENT on Windows because npx is
npx.cmd — shell:true resolves this. Also replaces dynamic await
import('fs') with static import, and fixes timeout detection to use
err.killed instead of err.code.
* fix(ci): raise parity per-invocation timeout to 120s and job timeout to 30min
TypeScript and C++ resolver tests take 60-90s on CI runners, exceeding
the 60s per-invocation timeout. Raise to 120s. Also bump the job-level
timeout from 25 to 30 minutes for margin (realistic total is ~11 min).
* fix(ci): raise parity per-invocation timeout to 180s for C++ resolver
C++ resolver tests take 130-150s on CI runners due to template
metaprogramming, ADL, and SFINAE fixture volume. 120s was still too
tight. Realistic total across all 9 languages is ~12 min, well under
the 30-min job timeout.
* fix(ci): use stdio inherit for parity — no per-invocation timeout
Switch from piped stdio with per-invocation timeouts to stdio: 'inherit'.
Vitest output streams to CI console in real time, making failures
immediately visible. The CI job-level timeout (30 min) is the only
guard — no more artificial per-invocation timeouts that cut off slow
resolver tests like C++ (which genuinely takes 3+ minutes).
---------
Co-authored-by: Test <test@example.com>
87 lines
3.5 KiB
YAML
87 lines
3.5 KiB
YAML
name: Scope Resolution Parity
|
||
|
||
# Reusable workflow — called from ci.yml. Does NOT declare concurrency;
|
||
# it inherits the caller's concurrency group per the convention documented
|
||
# in CONTRIBUTING.md → "GitHub Actions — Concurrency Convention".
|
||
#
|
||
# ── Purpose (RFC #909 Ring 3, §6.4 "Observability gates") ──────────────
|
||
# For every language in `MIGRATED_LANGUAGES` (exported from
|
||
# `gitnexus/src/core/ingestion/registry-primary-flag.ts`), run the
|
||
# resolver integration test at `test/integration/resolvers/<slug>.test.ts`
|
||
# TWICE on every PR:
|
||
#
|
||
# 1. `REGISTRY_PRIMARY_<LANG>=0` — legacy DAG path (guarantees we haven't
|
||
# broken the old path while migrating). Known legacy gaps may be skipped
|
||
# through the resolver test helper's expected-failure list.
|
||
# 2. `REGISTRY_PRIMARY_<LANG>=1` — registry-primary path (guarantees the
|
||
# new path carries the same behavior — the parity gate).
|
||
#
|
||
# BOTH must pass. The source of truth is the TypeScript constant — adding
|
||
# a language to that `Set` is the ONLY contributor action; CI auto-
|
||
# discovers it, runs parity, and the language's default production path
|
||
# flips to registry-primary in the same change.
|
||
#
|
||
# When the set is empty (e.g. mid-Ring-3 for every language), the parity
|
||
# matrix is skipped and the workflow reports success — no-op until a
|
||
# language is explicitly claimed migrated.
|
||
#
|
||
# ── Consolidation (chore/vitest-speed-strategy) ────────────────────────
|
||
# Previously each language was a separate GitHub Actions matrix job,
|
||
# meaning N languages × 1 checkout+install+build per shard. The build
|
||
# cost dwarfed the test cost (~5 min setup for ~15 sec test execution).
|
||
#
|
||
# Now a single job runs `scripts/run-parity.ts` which loops through all
|
||
# migrated languages sequentially (2 vitest invocations per language:
|
||
# legacy + registry-primary). All failures are collected and reported
|
||
# at the end (equivalent to the old fail-fast: false behavior).
|
||
#
|
||
# Adding a new language to MIGRATED_LANGUAGES still requires no workflow
|
||
# edit — the script auto-discovers the set at runtime.
|
||
|
||
on:
|
||
workflow_call:
|
||
|
||
permissions:
|
||
contents: read
|
||
|
||
jobs:
|
||
discover:
|
||
name: Discover migrated languages
|
||
runs-on: ubuntu-latest
|
||
timeout-minutes: 5
|
||
outputs:
|
||
has-any: ${{ steps.read.outputs.has-any }}
|
||
steps:
|
||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||
- uses: ./.github/actions/setup-gitnexus
|
||
|
||
- name: Extract MIGRATED_LANGUAGES from registry-primary-flag.ts
|
||
id: read
|
||
shell: bash
|
||
working-directory: gitnexus
|
||
run: |
|
||
set -euo pipefail
|
||
LANGS=$(npx tsx scripts/ci-list-migrated-languages.ts)
|
||
COUNT=$(printf '%s' "$LANGS" | jq 'length')
|
||
HAS_ANY="false"
|
||
if [[ "$COUNT" -gt 0 ]]; then HAS_ANY="true"; fi
|
||
echo "has-any=$HAS_ANY" >> "$GITHUB_OUTPUT"
|
||
echo "Discovered $COUNT migrated language(s): $LANGS"
|
||
echo "Parity will run: $HAS_ANY"
|
||
|
||
parity:
|
||
name: scope-resolution parity
|
||
needs: discover
|
||
if: needs.discover.outputs.has-any == 'true'
|
||
runs-on: ubuntu-latest
|
||
timeout-minutes: 30
|
||
steps:
|
||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||
- uses: ./.github/actions/setup-gitnexus
|
||
with:
|
||
build: 'true'
|
||
|
||
- name: Run parity for all migrated languages
|
||
shell: bash
|
||
working-directory: gitnexus
|
||
run: npx tsx scripts/run-parity.ts
|