Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
f41b2d6
fix: bug-fix + test-harness sweep across CLI, crawlers, setup and CI
mikolalysenko Jul 28, 2026
6efe9b1
fix(scan,crawler): surface the pre-failure vendor reconcile in JSON; …
mikolalysenko Aug 10, 2026
8aa9a22
refactor(core): promote patch/vendor to a top-level vendor module
mikolalysenko Aug 10, 2026
be8f631
refactor(core): repoint internal imports to the canonical moved-modul…
mikolalysenko Aug 10, 2026
d439d07
refactor(core): extract shared TOML helpers into utils::toml_edit_ext
mikolalysenko Aug 10, 2026
e84bda3
refactor(core): dissolve the utils/ misfiles into their domains
mikolalysenko Aug 10, 2026
639e3f0
refactor(core): unify the per-ecosystem setup backends under setup/
mikolalysenko Aug 10, 2026
3822626
refactor(npm): single-source the npm-family file-name knowledge with …
mikolalysenko Aug 10, 2026
1afb04f
ci: stop counting docker-e2e/setup-e2e soft-skips as passing tests
mikolalysenko Aug 10, 2026
882cdb7
fix(setup,scan): fail closed on corrupt manifests, JSON envelopes on …
mikolalysenko Aug 10, 2026
9b0c9c6
fix(ci,test): hermetic composer scans; repair template-lint paths bro…
mikolalysenko Aug 11, 2026
20d35b5
build: cap dev-profile debuginfo at line tables (macOS target/ bloat)
mikolalysenko Aug 11, 2026
5ca6b1f
fix(scan,vendor): deterministic twin updates, honest carried-envelope…
mikolalysenko Aug 11, 2026
73768f4
fix(setup): skipped --exclude persistence is now machine-visible
mikolalysenko Aug 11, 2026
6b83ba1
refactor(npm): drop dead BUN_MIGRATE_CMD, wire the Rush message, brea…
mikolalysenko Aug 11, 2026
af749cd
fix(vex,setup): vex telemetry uses the layered credential chain; scri…
mikolalysenko Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 80 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,17 @@ on:
permissions:
contents: read

# Supersede stale runs on force-push / rapid PR updates. The `main` guard is
# load-bearing: main runs are the ONLY rust-cache writers (save-if), so they
# must never be cancelled mid-save.
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
clippy:
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down Expand Up @@ -47,6 +55,24 @@ jobs:

- name: Run clippy
run: cargo clippy --workspace --all-features -- -D warnings
# Moved-module aliases (patch::vendor → vendor, patch::go_mod_edit →
# vendor::go_mod_edit, patch::go_redirect → patch::redirect::golang_local)
# exist only for external consumers of the published core crate.
# #[deprecated] on a `pub use` re-export emits no warnings
# (rust-lang/rust#30827), so the compiler cannot pressure internal code
# off the old paths — this grep is the guard instead.
- name: Reject internal uses of moved-module alias paths
run: |
if grep -rn --include='*.rs' \
-e 'patch::vendor' -e 'patch::go_mod_edit' \
-e 'patch::go_redirect' -e 'patch::bun_lock_text' \
-e 'utils::telemetry' -e 'utils::cleanup_blobs' \
-e 'utils::date' -e 'utils::fuzzy_match' \
-e 'gem_setup::' -e 'composer_setup::' -e 'pth_hook::' \
crates; then
echo '::error::use the canonical module paths (crate::vendor, patch::redirect::golang_local, crate::telemetry, manifest::cleanup_blobs, api::date, crawlers::fuzzy_match); the old-path aliases exist only for external consumers'
exit 1
fi

# Lint the out-of-workspace packaging artifacts for the ecosystems whose setup
# / CLI-distribution we added: the RubyGems CLI launcher gem + the Bundler
Expand All @@ -56,6 +82,7 @@ jobs:
# ubuntu-latest runner.
lint-ecosystems:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand All @@ -67,8 +94,8 @@ jobs:
( cd gem/socket-patch && ruby -c lib/socket_patch/launcher.rb && ruby -c exe/socket-patch && gem build socket-patch.gemspec )
( cd gem/socket-patch-bundler && ruby -c plugins.rb && gem build socket-patch-bundler.gemspec )
# The generated-plugin templates are pure Ruby — keep them parseable.
ruby -c crates/socket-patch-core/src/gem_setup/templates/plugins.rb.tmpl
ruby -c crates/socket-patch-core/src/gem_setup/templates/gemspec.tmpl
ruby -c crates/socket-patch-core/src/setup/gem/templates/plugins.rb.tmpl
ruby -c crates/socket-patch-core/src/setup/gem/templates/gemspec.tmpl

- name: PHP — lint the Composer launcher + validate composer.json
# composer.json lives at the repo root (Packagist requires the
Expand Down Expand Up @@ -140,6 +167,7 @@ jobs:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
timeout-minutes: 35
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down Expand Up @@ -194,10 +222,22 @@ jobs:
echo "$(go env GOPATH)/bin" >> "$GITHUB_PATH"

- name: Run tests
run: cargo test --workspace --all-features
# `--all-features` would also RUN the docker-e2e / setup-e2e suites,
# which soft-skip as "ok" in this job (no images are built here, and
# macOS/Windows have no Docker at all) — dozens of fake greens per OS
# that would hide a broken skip-guard behind a passing checkmark.
# Build them with --all-features (compile rot is real coverage), but
# run only the default-feature suites; the dedicated e2e-docker and
# setup-matrix jobs run the gated suites for real.
shell: bash
run: |
set -euo pipefail
cargo test --workspace --all-features --no-run
cargo test --workspace

test-release:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand All @@ -224,7 +264,16 @@ jobs:
save-if: ${{ github.ref == 'refs/heads/main' }}

- name: Run tests (release)
run: cargo test --workspace --all-features --release
# `ci-release` = [profile.release] minus the full-LTO link (see the
# profile's comment in Cargo.toml). Same opt-level/debug-assertion
# semantics this job exists to validate; ~23m of LTO relinking gone.
# Build/run split for the same reason as the `test` job: the gated
# docker-e2e / setup-e2e suites only soft-skip here — compile them,
# don't count their skips as passes.
run: |
set -euo pipefail
cargo test --workspace --all-features --profile ci-release --no-run
cargo test --workspace --profile ci-release

coverage:
# Code coverage via cargo-llvm-cov (LLVM source-based instrumentation).
Expand All @@ -233,6 +282,7 @@ jobs:
# report-only so contributors get visibility without flaky CI when
# coverage shifts naturally with test edits.
runs-on: ubuntu-latest
timeout-minutes: 35
permissions:
contents: read
steps:
Expand Down Expand Up @@ -328,6 +378,7 @@ jobs:
# container ships fails to load. ubuntu-22.04's older glibc is
# the highest base that's forward-compatible with debian:12.
runs-on: ubuntu-22.04
timeout-minutes: 30
permissions:
contents: read
strategy:
Expand Down Expand Up @@ -442,6 +493,7 @@ jobs:
# summed line-by-line so a line covered by ANY test counts.
needs: [coverage, coverage-docker]
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
steps:
Expand Down Expand Up @@ -495,6 +547,7 @@ jobs:

dispatch-tests:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down Expand Up @@ -589,7 +642,28 @@ jobs:
# `windows-sys`).
- os: windows-latest
suite: e2e_safety_pnpm
# Wall-bound real-package-manager redirect capstones (~150s and
# ~70s of network installs + bootstrap resolutions — profile-
# insensitive, measured identical in debug and release). They ran
# inside the serial `test` job on every OS; #[ignore]-gated out of
# it and relocated here so they still run on every PR and every
# OS, but in parallel off the critical path. They use the runner's
# default node/corepack, exactly as they did inside `test` — no
# setup-node step, no version change.
- os: ubuntu-latest
suite: e2e_redirect_npm_build
- os: macos-latest
suite: e2e_redirect_npm_build
- os: windows-latest
suite: e2e_redirect_npm_build
- os: ubuntu-latest
suite: e2e_redirect_rush_sim
- os: macos-latest
suite: e2e_redirect_rush_sim
- os: windows-latest
suite: e2e_redirect_rush_sim
runs-on: ${{ matrix.os }}
timeout-minutes: 25
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down Expand Up @@ -684,6 +758,7 @@ jobs:
# ----------------------------------------------------------------------
e2e-docker:
runs-on: ubuntu-latest
timeout-minutes: 35
permissions:
contents: read
strategy:
Expand Down Expand Up @@ -754,6 +829,7 @@ jobs:
# ----------------------------------------------------------------------
setup-matrix:
runs-on: ubuntu-latest
timeout-minutes: 45
continue-on-error: true
permissions:
contents: read
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -639,7 +639,7 @@ jobs:
# Phase 2 scaffolding (CLI_CONTRACT "gem" support matrix): publish the
# `socket-patch-bundler` gem — the published form of the Bundler plugin
# that `socket-patch setup` currently wires via an in-tree `git:`
# reference. This gem is NOT yet the active mechanism (gem_setup still
# reference. This gem is NOT yet the active mechanism (setup::gem still
# emits the in-tree plugin), so the push is **non-blocking**
# (`continue-on-error`). A follow-up switches the generated Gemfile
# directive to `plugin "socket-patch-bundler"` and drops
Expand Down
Loading
Loading