Commit b87e2fc
committed
release: Implement environment isolation via dependency vendoring
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+isolation1 parent 1e82106 commit b87e2fc
4 files changed
+502
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
0 commit comments