release: Implement environment isolation via dependency vendoring#314
Merged
release: Implement environment isolation via dependency vendoring#314
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #314 +/- ##
=======================================
Coverage 64.23% 64.23%
=======================================
Files 40 40
Lines 4214 4214
=======================================
Hits 2707 2707
Misses 1507 1507 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
c428b7a to
3eef3fe
Compare
Owner
Author
|
See https://github.com/aviatesk/JETLS.jl/tree/release for the release branch using the proposed release method here. |
3eef3fe to
b87e2fc
Compare
This was referenced Nov 22, 2025
Merged
Merged
01bf854 to
1e11fe2
Compare
This commit introduces a release process that isolates JETLS's dependencies from packages being analyzed by vendoring them with rewritten UUIDs. The vendor-deps.jl script automates the entire release process: 1. Fetches clean Project.toml from the development branch 2. Updates and vendors all non-stdlib, non-JLL dependencies 3. Rewrites UUIDs deterministically using uuid5 4. Updates Project.toml with vendored dependencies and `[sources]` entries This approach ensures JETLS's dependencies never conflict with packages users are analyzing, resolving issues where version conflicts between JETLS and analyzed packages would prevent analysis. --- The following describes the current release process using the above script (at least until JETLS has an official release process). Fow now, we employ the following branch strategy: - Development branch (`master`): Regular development with normal UUIDs - Release branch (`release`): Vendored dependencies with rewritten UUIDs Then the `release` branch is managed as follows: 1. Check out the `release` branch 2. Merge (not rebase) changes from the development branch: `git merge -X theirs master` [^merge-strategy] 3. Vendor dependency packages: `julia vendor-deps.jl --source-branch=master` 4. Commit changes 5. Push to remote `release` [^merge-strategy]: The `-X theirs` option automatically resolves merge conflicts by preferring the `master` branch version. This is necessary because `Project.toml` files are always modified on the `release` branch (with vendored UUIDs), causing conflicts when merging. Since `vendor-deps.jl` fetches and overwrites `Project.toml` from `master` anyway in step 3, these conflicts can be safely resolved by taking the `master` version. Using `git merge` (rather than `git rebase`) keeps the commit history linear for users who update via `git pull`. This means users would manually run `git pull origin release` followed by `Pkg.update()` to install and update JETLS (this is almost the same as the current process, except that we're pulling from `master`). However, I may change this distribution method to make it easier using Pkg apps. For detailed consideration of this vendor approach and release process, refer to: - https://publish.obsidian.md/jetls/work/JETLS/JETLS+release+process - https://publish.obsidian.md/jetls/work/JETLS/LS+environment+isolation
1e11fe2 to
6310fce
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This commit introduces a release process that isolates JETLS's dependencies from packages being analyzed by vendoring them with rewritten UUIDs.
The vendor-deps.jl script automates the entire release process:
[sources]entriesThis approach ensures JETLS's dependencies never conflict with packages users are analyzing, resolving issues where version conflicts between JETLS and analyzed packages would prevent analysis.
The following describes the current release process using the above script (at least until JETLS has an official release process).
Fow now, we employ the following branch strategy:
master): Regular development with normal UUIDsrelease): Vendored dependencies with rewritten UUIDsThen the
releasebranch is managed as follows:releasebranchgit merge -X theirs master1julia vendor-deps.jl --source-branch=masterreleaseThis means users would manually run
git pull origin releasefollowed byPkg.update()to install and update JETLS (this is almost the same as the current process, except that we're pulling frommaster). However, I may change this distribution method to make it easier using Pkg apps.For detailed consideration of this vendor approach and release process, refer to:
Footnotes
The
-X theirsoption automatically resolves merge conflicts by preferring themasterbranch version. This is necessary becauseProject.tomlfiles are always modified on thereleasebranch (with vendored UUIDs), causing conflicts when merging. Sincevendor-deps.jlfetches and overwritesProject.tomlfrommasteranyway in step 3, these conflicts can be safely resolved by taking themasterversion. Usinggit merge(rather thangit rebase) keeps the commit history linear for users who update viagit pull. ↩