Repository navigation
Conversation
Summary by CodeRabbit
WalkthroughAdds Scoop manifests for ASP.NET Core Runtime versions 8.0.31, 9.0.20, and 10.0.12. Each manifest defines downloads for x64, x86, and ARM64, shared runtime installation behavior, environment settings, version detection, and automatic updates. ChangesASP.NET Core Runtime manifests
Priority: ➖ Normal Merge Risk: 🟡 Moderate · up to
|
… side-by-side installation DOTNET_ROOT was set to each package's own $dir, so installing or removing one package changed or wiped it for the others. The .NET host only resolves frameworks located under a single DOTNET_ROOT. Expose the runtime in a common root, <scoop root>\shared\dotnet, shared by all .NET runtime packages. Each package keeps its files in its own versioned directory and only links into the root. - post_install: junction host\fxr\<ver> and shared\<framework>\<ver>, keeping an existing valid link (the ASP.NET Core zip also bundles the .NET runtime, so it can overlap with dotnetN-runtime); copy dotnet.exe if missing or older. - pre_uninstall: unlink only this package's junctions, re-link them to another installed package providing the same runtime, remove the root when empty. - post_uninstall: restore DOTNET_ROOT while the root still exists.
2556b71 to
e092f38
Compare
…ide-by-side install and uninstall edge cases - Compare the full dotnet.exe file version instead of the major only - Find replacement runtimes in installed version dirs when NO_JUNCTION is set - Stop recursively deleting the shared dotnet root; remove only empty dirs
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
- Configuration used: Organization UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
bb26b0ba-384f-49a3-9771-b8b33782299d
📒 Files selected for processing (3)
bucket/aspnetcore10-runtime.jsonbucket/aspnetcore8-runtime.jsonbucket/aspnetcore9-runtime.json
Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 0 remain after this review.
| "env_add_path": "dotnet-root", | ||
| "env_set": { | ||
| "DOTNET_ROOT": "$(basedir $global)\\shared\\dotnet" | ||
| }, |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift
🔎 Supported by static analysis
🏁 Script executed:
set -eu
printf '%s\n' '--- PR diff ---'
git diff --stat c83dad2632f5aef48c5ea67406bd69f74218911a1 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0
git diff --unified=80 c83dad2632f5aef48c5ea67406bd69f74218911a1 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0 -- \
bucket/aspnetcore8-runtime.json bucket/aspnetcore9-runtime.json bucket/aspnetcore10-runtime.json \
bucket/dotnet8-sdk.json bucket/dotnet9-sdk.json bucket/dotnet10-sdk.json
printf '%s\n' '--- runtime manifests at reviewed head ---'
for f in bucket/aspnetcore8-runtime.json bucket/aspnetcore9-runtime.json bucket/aspnetcore10-runtime.json; do
printf '\n### %s\n' "$f"
git show 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0:"$f"
done
printf '%s\n' '--- SDK environment and uninstall declarations ---'
for f in bucket/dotnet8-sdk.json bucket/dotnet9-sdk.json bucket/dotnet10-sdk.json; do
if git cat-file -e 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0:"$f" 2>/dev/null; then
printf '\n### %s\n' "$f"
git show 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0:"$f" | rg -n -C 12 -e '"env_add_path"' -e '"env_set"' -e '"post_uninstall"' -e '"pre_uninstall"'
fi
done
printf '%s\n' '--- relevant manifest references ---'
rg -n -F --glob '*.json' -e '"DOTNET_ROOT"' -e '"dotnet-root"' -e '"shared\\dotnet"' -e '"post_uninstall"' bucket | head -240Repository: ScoopInstaller/Versions
Length of output: 42590
🏁 Script executed:
set -eu
for f in bucket/aspnetcore8-runtime.json bucket/aspnetcore9-runtime.json bucket/aspnetcore10-runtime.json bucket/dotnet8-sdk.json bucket/dotnet9-sdk.json bucket/dotnet10-sdk.json; do
printf '\n### %s\n' "$f"
git show 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0:"$f" 2>/dev/null || true
done
printf '\n### diff\n'
git diff --unified=30 c83dad2632f5aef48c5ea67406bd69f74218911a1 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0 -- bucket/aspnetcore8-runtime.json bucket/aspnetcore9-runtime.json bucket/aspnetcore10-runtime.jsonRepository: ScoopInstaller/Versions
Length of output: 42807
🌐 Web query:
official Scoop manifest documentation env_set environment variables uninstall behavior
💡 Result:
**Official Scoop manifest docs** are the [App Manifests wiki](https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests). It says `env_set` sets environment variables for the user, or system-wide with `--global`; `uninstaller` runs during both `scoop uninstall` and `scoop update`. ([github.com](https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests))
**Uninstall behavior:** Scoop’s current `master` implementation removes the variable names declared under `env_set` during uninstall—clearing the user or system variable according to install scope, and removing it from the current PowerShell process. ([github.com](https://github.com/ScoopInstaller/Scoop/blob/master/lib/install.ps1))
So `env_set` is not just an install-time setting: Scoop’s implementation also cleans up those variables on uninstall. **Caveat:** cleanup removes the named variables rather than restoring any prior values. The docs describe `env_set`’s purpose, while that cleanup detail is established by the implementation; this source is `master`, not a version-pinned release. ([github.com](https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests))
Citations:
- 1: https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests
- 2: https://github.com/ScoopInstaller/Scoop/blob/master/lib/install.ps1
- 3: https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests
Preserve the SDK-owned DOTNET_ROOT.
The runtime manifests overwrite the SDK manifests' $dir value during installation. During uninstall, post_uninstall also overwrites the value with the shared root when another runtime keeps that root present. The guard only checks whether the shared root exists; it does not check whether an SDK owns DOTNET_ROOT.
The unconditional overwrite can make SDK-only runtimes or apphosts resolve against a shared root without the SDK contents. Make ownership mutually exclusive across installation and uninstall: preserve the SDK's $dir while an SDK is installed, and use the shared runtime root only when no SDK owns DOTNET_ROOT. Apply this policy to all three runtime manifests.
📍 Affects 3 files
bucket/aspnetcore10-runtime.json#L40-L43(this comment)bucket/aspnetcore8-runtime.json#L40-L43bucket/aspnetcore9-runtime.json#L40-L43
Relates to ScoopInstaller/Extras#18999
Adds portable ASP.NET Core Runtime manifests for the pinned channels 8.0, 9.0 and 10.0, installed from the official ZIP archive (no admin rights required).
aspnetcore8-runtimeaspnetcore9-runtimeaspnetcore10-runtimedotnet.exe,Microsoft.NETCore.AppandMicrosoft.AspNetCore.App, so it is self-contained.DOTNET_ROOTis set to$dirand$diris added toPATH.64bit,32bitandarm64.checkveris pinned per channel (channel-version == 'X.0'), andautoupdatetakes the sha512 from the officialreleases.json.aspnetcore-runtime) is proposed in ScoopInstaller/Extras:Checked with
checkver.ps1 -Update -ForceUpdate: the regenerated manifests are identical.<manifest-name[@version]|chore>: <general summary of the pull request>