Repository navigation
ci(release): revive packaging pipeline and slim crash symbols - #518
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughRelease packaging now separates symbols into GSYM or PDB archives, records executable bases in crash logs, and adds a CLI plus integration coverage for offline crash symbolization. ChangesRelease symbol separation
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant CrashHandler
participant CrashLog
participant SymbolizeCLI
participant GSYMTool
CrashHandler->>CrashLog: Write executable base and raw stack frames
SymbolizeCLI->>CrashLog: Read crash log
SymbolizeCLI->>GSYMTool: Resolve rebased frame offsets
GSYMTool-->>SymbolizeCLI: Return symbolized frames
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bcbe453fb7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CMakeLists.txt`:
- Around line 71-78: Update the MSVC and clang-cl branch of the linker flag
conditional to append /OPT:ICF directly instead of the -Wl,/OPT:ICF form. Leave
the APPLE and other compiler branches unchanged.
In `@scripts/symbolize.py`:
- Around line 61-76: Update the loop in the symbolization flow to detect each
BASE record as lines are scanned and replace the active base with that record’s
parsed hexadecimal value. Rebase each matching frame using the most recently
encountered base, while preserving the existing missing-base error behavior and
output handling.
In `@src/support/logging.cpp`:
- Around line 143-150: Update the executable-base logging branch in the
crash-log generation flow to always emit the “main executable base” line,
including when executable_base is zero. Remove the truthiness guard while
preserving the existing hexadecimal formatting and newline output.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 71a99694-ab3e-4a17-9cda-2e2782212474
⛔ Files ignored due to path filters (1)
pixi.lockis excluded by!**/*.lock
📒 Files selected for processing (11)
.github/workflows/publish-clice.ymlCMakeLists.txtcmake/archive.cmakecmake/release.cmakepixi.tomlscripts/symbolize.pysrc/support/logging.cppsrc/support/logging.htests/integration/lifecycle/test_anomaly.pytests/integration/lifecycle/test_symbolize.pytests/unit/support/logging_tests.cpp
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/release-check.yml:
- Around line 9-13: Add CMakeLists.txt to the paths list in the release-check
workflow so pull requests modifying release-packaging settings there also
trigger the dry-run validation. Preserve the existing workflow paths unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: b492a2cf-82bc-49fb-89e0-bdb544bdf51f
📒 Files selected for processing (1)
.github/workflows/release-check.yml
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d757e06fdd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e197ffa4bb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CMakeLists.txt`:
- Around line 73-74: Update the WIN32 linker-flag configuration to distinguish
GNU-style compiler frontends from native MSVC/clang-cl, applying the `-Wl,`
prefix only for GNU drivers and the direct `/OPT:ICF` form for native
MSVC-compatible drivers. Apply the same frontend-specific handling to any nearby
Debug `/OPT:NOICF` configuration if present.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 37509499-a70d-47ad-8a84-cde795772771
📒 Files selected for processing (2)
CMakeLists.txtcmake/archive.cmake
Depends on #518 (merged). ## Summary The VS Code extension no longer downloads the server at runtime. Each of the six packaging targets now produces a platform-specific vsix with the clice binary and clang resource directory bundled inside, published via `vsce publish --target`. This removes the download/extract logic entirely and makes air-gapped installs work: the binary arrives with the extension, whether from the Marketplace, a mirror, or a manually installed vsix. ## Changes ### Extension - `clice.executable` (and `CLICE_EXECUTABLE`) keep priority; otherwise the extension resolves the bundled server at `clice/bin/clice[.exe]` inside the extension directory, restoring the unix executable bit in case VSIX extraction dropped it. Universal builds without a bundled server show a clear error pointing at the setting. - `download.ts` and the `decompress` dependency are removed. ### Release pipeline - `publish-clice.yml` uploads each platform package as a workflow artifact. - `publish-vscode.yml` gains a `bundle` input: PR runs build one universal vsix (no binary) as a light check; release runs fan out over six `vsce --target` platforms, staging the matching package into the extension before packaging. Marketplace publish and release-asset upload stay tag-gated; the publish step passes an absolute `--packagePath`. - `release-check.yml` extends the plumbing-PR dry run to cover the six bundled extension packages. ### Tests - The vscode e2e suite gains a `bundled-hello_world` variant: the harness stages the freshly built server into `clice/` in the exact release layout, clears `CLICE_EXECUTABLE`, and runs the standard assertions through the bundled-resolution path every release actually takes. Staging happens before VS Code launches because the extension activates on startup. - `editor-test.yml` now also runs the VS Code e2e suite on macOS (no xvfb needed there); Neovim steps stay Linux-only. ## Validation - Extension compiles (webpack + tsc) with the bundling changes; a local `vsce package --target linux-x64` produced a 14.6 MB vsix containing the binary and clang resources. - The bundled e2e variant could not run locally (no display server); it is exercised by the editor-test CI job on both Linux and macOS in this PR.
Summary
The release packaging workflow had not run since v0.1.0-alpha.4. This PR makes it verifiable without tagging, trims the shipped artifacts, and makes stripped-binary crash logs offline-symbolizable — verified by three green six-target packaging runs and a new always-on CI round-trip test.
Changes
Workflow
publish-clice.ymlgainsworkflow_dispatch, so the full six-target packaging matrix can be exercised from any branch; release uploads stay tag-gated..tar.xz; full DWARF debug info is uploaded as a per-run CI artifact (90-day retention) instead of bloating the release page.Release binaries
--icf=safeon ELF/Mach-O,/OPT:ICFon Windows) and lld-O2in release builds.co_awaitllvm/llvm-project#105595 (clang < 21 drops coroutine promise policy writes under-O3), silently breaking cancellation — six cancellation unit tests fail deterministically on any ThinLTO build of current main. Re-enable together with the clang 21 toolchain upgrade.Crash symbolization
main executable base), making PIE crash logs rebasable offline. Without it, ASLR-shifted raw addresses are unrecoverable — and embedding debug info in the shipped binary would not help, since in-process symbolization needs llvm-symbolizer on the user machine.scripts/symbolize.pyturns a user crash log plus the symbol file into a symbolized stack.Tests
symbolize.pyrecovers source locations from the raw-address log. It runs in every normal CI, so crash-log actionability cannot silently regress.Validation
workflow_dispatchruns of the packaging matrix: all six targets green, the last on the final no-LTO configuration.Summary by CodeRabbit
.tar.xzfor non-Windows (Windows uses ZIP) as part of the release flow.Follow-ups in this PR
release-check.yml: dry-runs the full packaging matrix automatically on PRs that touch release plumbing (and viaworkflow_dispatchfrom any branch), so the pipeline cannot silently rot again.--merged-functions); the crash handler records the executable base unconditionally (a zero macOS slide is valid);symbolize.pytracks the most recent base when a log contains crash sections from several process generations.