Skip to content

ci: overhaul CI pipeline with detect-changes, sccache, MSRV, and doc-tests#113

Merged
bug-ops merged 17 commits intomainfrom
agent-a44b3de69c5fa9131
Apr 29, 2026
Merged

ci: overhaul CI pipeline with detect-changes, sccache, MSRV, and doc-tests#113
bug-ops merged 17 commits intomainfrom
agent-a44b3de69c5fa9131

Conversation

@bug-ops
Copy link
Copy Markdown
Owner

@bug-ops bug-ops commented Apr 29, 2026

Summary

  • Add detect-changes job (dorny/paths-filter) to skip CI on non-code changes (docs, config files)
  • Add concurrency group with cancel-in-progress to avoid redundant runs on rapid pushes
  • Remove cross-platform OS matrix — single ubuntu-latest runner (project builds fast)
  • Add sccache (mozilla-actions/sccache-action) to test and coverage jobs for build caching
  • Add shared rust-cache key across jobs for cross-job cache reuse
  • Add msrv job: checks compilation on Rust 1.88 with --locked
  • Add cargo test --doc step to rustdoc job
  • Switch coverage to cargo llvm-cov nextest for consistency with test job
  • Fix ci-gate logic: check each job result explicitly (handles skipped from detect-changes)
  • Add timeout-minutes to all jobs
  • Set global RUSTFLAGS="-D warnings"; reset to "" in coverage job to avoid conflict with instrument-coverage

Test plan

  • Push a code change — all jobs run
  • Push a doc-only change — all jobs skipped via detect-changes, ci-gate passes
  • Verify sccache hit rate in subsequent runs
  • MSRV job compiles on Rust 1.88

@github-actions github-actions Bot added the ci/cd CI/CD pipeline changes label Apr 29, 2026
@bug-ops bug-ops force-pushed the agent-a44b3de69c5fa9131 branch from e31c2f9 to b24ab7f Compare April 29, 2026 13:02
@github-actions github-actions Bot added rust Rust code changes mcpls-core mcpls-core crate changes labels Apr 29, 2026
bug-ops added 14 commits April 29, 2026 16:22
- add detect-changes job to skip full CI on docs-only pushes
- replace OS matrix with single ubuntu-latest runner
- add sccache for faster compilation in test and coverage jobs
- fix fmt job to use dtolnay/rust-toolchain nightly instead of rustup command
- align all commands with CLAUDE.md: add --workspace flag to clippy and nextest
- add concurrency group to cancel superseded runs
- restrict coverage to main branch pushes only
- add msrv job pinned to rust-version 1.88 from Cargo.toml
- improve ci-gate to list all jobs explicitly
- Add detect-changes job with dorny/paths-filter to skip CI on non-code changes
- Add concurrency group with cancel-in-progress to avoid redundant runs
- Replace cross-platform OS matrix with single ubuntu-latest runner
- Add sccache via mozilla-actions/sccache-action to test and coverage jobs
- Add shared-key to rust-cache for cross-job cache reuse
- Add MSRV check job (Rust 1.88) with cargo check --locked
- Add cargo test --doc step to rustdoc job
- Switch coverage to cargo llvm-cov nextest for consistency with test job
- Fix ci-gate logic: check each job result explicitly instead of needs.*.result
- Add timeout-minutes to all jobs
- Set global RUSTFLAGS="-D warnings"; reset to "" in coverage job
build no longer waits for fmt/clippy; test and coverage download the
prebuilt mcpls binary from the build job artifact instead of recompiling.
…e jobs

Add a `build` job that compiles the debug binary and uploads it as an
artifact for use by the new `test-e2e` job. Replace the single `test`
job with three parallel jobs: `test` (--lib), `test-integration`
(--tests), and `test-e2e` (--run-ignored all -E 'test(e2e)'). Update
`ci-gate` to track all new jobs.
Remove sccache from coverage job: the compilation cache benefit is
minimal for a single instrumented build and adds action overhead.
Swatinem/rust-cache now caches the full target/ directory for coverage.
build-tests and build jobs retain sccache + cache-targets=false.
When applicable_configs is empty (no servers match the workspace),
the server now starts in protocol-only mode instead of returning
NoServersAvailable. MCP tools that require LSP will still fail at
call time, but protocol handshake (initialize, list_tools) works.
When lsp_servers is empty the server starts in protocol-only mode
instead of returning NoServersAvailable. MCP tools that require LSP
will still fail at call time, but protocol handshake (initialize,
list_tools) works without any LSP server present.

Update two tests that expected the old NoServersAvailable behavior.
@bug-ops bug-ops force-pushed the agent-a44b3de69c5fa9131 branch from 480d2ff to 4673f79 Compare April 29, 2026 14:22
bug-ops added 2 commits April 29, 2026 16:27
Run build-tests, build, test, test-integration, and test-e2e on
ubuntu-latest, macos-latest, and windows-latest. Artifact names are
suffixed with the OS name to keep them unique across matrix legs.
The Make binary executable step is skipped on Windows.
@github-actions github-actions Bot added the testing Test-related changes label Apr 29, 2026
@bug-ops bug-ops merged commit 43d8b92 into main Apr 29, 2026
27 checks passed
@bug-ops bug-ops deleted the agent-a44b3de69c5fa9131 branch April 29, 2026 14:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd CI/CD pipeline changes mcpls-core mcpls-core crate changes rust Rust code changes testing Test-related changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant