## Summary Add LSP trace recording and replay-based smoke testing infrastructure. ### clice changes (`src/clice.cc`) - Add `--log-level` CLI option with validation (rejects unknown levels instead of silently defaulting to off) - Add `--record <path>` CLI option that wraps the transport with `RecordingTransport` to capture client→server messages as timestamped JSONL - Works in both pipe and socket modes - Fix exit code: `loop.run()` returns non-zero after `uv_stop()`, explicitly return 0 after clean shutdown ### Compile logging (`src/compile/compilation.cpp`) - Print compile commands at debug log level ### Replay script (`tests/replay.py`) - Timestamp-based pacing: sleeps between messages based on recorded intervals, faithful to original editor session - Automatic workspace path rewriting: infers repo root from script location, rewrites absolute paths in trace so CI replay works without extra arguments - Handles server→client requests (workDoneProgress/create, registerCapability, etc.) with default responses - Waits for all pending responses before sending shutdown/exit - Detects server exit mid-replay and fails pending futures immediately instead of hanging - Reports PASS/FAIL/SKIP with stderr tail on failure ### CI & config - Add `smoke-test` pixi task and CI workflow step (runs after integration tests) - `.gitattributes`: mark `tests/smoke/*.jsonl` as `linguist-generated binary` to suppress diffs - Add sample trace file `tests/smoke/session.jsonl` ### VSCode extension - Add restart command (`clice.restart`) - Support `CLICE_MODE` env var to override mode setting (for debug launch configs) - Split launch configs into socket/pipe variants with `--disable-extensions` ## Test plan - [x] `python tests/replay.py tests/smoke/session.jsonl --clice ./build/RelWithDebInfo/bin/clice` passes locally - [ ] CI smoke test passes on Linux/macOS/Windows 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
70 lines
1.9 KiB
YAML
70 lines
1.9 KiB
YAML
name: cmake
|
|
|
|
on:
|
|
workflow_call:
|
|
|
|
env:
|
|
CCACHE_DIR: ${{ github.workspace }}/.cache/ccache
|
|
SCCACHE_DIR: ${{ github.workspace }}/.cache/sccache
|
|
CCACHE_BASEDIR: ${{ github.workspace }}
|
|
SCCACHE_BASEDIRS: ${{ github.workspace }}
|
|
CCACHE_COMPILERCHECK: content
|
|
CCACHE_MAXSIZE: 2G
|
|
SCCACHE_CACHE_SIZE: 2G
|
|
|
|
jobs:
|
|
build:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [windows-2025, ubuntu-24.04, macos-15]
|
|
build_type: [Debug, RelWithDebInfo]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- uses: ./.github/actions/setup-pixi
|
|
|
|
- name: Restore compiler cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ${{ runner.os == 'Windows' && '.cache/sccache' || '.cache/ccache' }}
|
|
key: ${{ runner.os }}-${{ matrix.build_type }}-ccache-${{ github.sha }}
|
|
restore-keys: |
|
|
${{ runner.os }}-${{ matrix.build_type }}-ccache-
|
|
|
|
- name: Zero cache stats
|
|
run: |
|
|
if [ "$RUNNER_OS" = "Windows" ]; then
|
|
pixi run -- sccache --stop-server || true
|
|
pixi run -- sccache --zero-stats || true
|
|
else
|
|
pixi run -- ccache --zero-stats || true
|
|
fi
|
|
shell: bash
|
|
|
|
- name: Build
|
|
run: pixi run build ${{ matrix.build_type }} ON
|
|
|
|
- name: Unit Test
|
|
run: pixi run unit-test ${{ matrix.build_type }}
|
|
|
|
- name: Integration Test
|
|
run: pixi run integration-test ${{ matrix.build_type }}
|
|
|
|
- name: Smoke Test
|
|
if: success() || failure()
|
|
run: pixi run smoke-test ${{ matrix.build_type }}
|
|
|
|
- name: Print cache stats and stop server
|
|
if: always()
|
|
run: |
|
|
if [ "$RUNNER_OS" = "Windows" ]; then
|
|
pixi run -- sccache --show-stats
|
|
pixi run -- sccache --stop-server || true
|
|
else
|
|
pixi run -- ccache --show-stats
|
|
fi
|
|
shell: bash
|