Skip to content

dotnet8-runtime, dotnet9-runtime, dotnet10-runtime: Add manifests - #3094

Open
jycr wants to merge 4 commits into
ScoopInstaller:masterfrom
jycr:dotnet-runtime
Open

jycr wants to merge 4 commits into
ScoopInstaller:masterfrom
jycr:dotnet-runtime

Conversation

@jycr

@jycr jycr commented Oct 12, 2026

Copy link
Copy Markdown

Relates to ScoopInstaller/Extras#18998

Adds portable (ZIP-based, no admin rights) .NET Runtime manifests pinned to a channel, consistent with the existing dotnetN-sdk manifests:

  • dotnet8-runtime 8.0.31
  • dotnet9-runtime 9.0.20
  • dotnet10-runtime 10.0.12

Each manifest installs the official ZIP archives (x64, x86, arm64), sets DOTNET_ROOT, and uses checkver/autoupdate on its own channel-version with sha512 hashes from the official releases.json.

  • Use conventional PR title: <manifest-name[@version]|chore>: <general summary of the pull request>
  • I have read the Contributing Guide

@coderabbitai

coderabbitai Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Summary by CodeRabbit

  • New Features
    • Added .NET Runtime packages for versions 8.0.31, 9.0.20, and 10.0.12.
    • Packages are available for x64, x86, and ARM64 Windows.
    • Installations configure shared .NET paths and environment settings, allowing applications to use the runtimes.
    • Multiple runtime packages can coexist; shared paths are maintained as packages are installed or uninstalled, so remaining runtimes stay available.
    • Package version and download details are configured for automatic updates.

Walkthrough

Adds Scoop manifests for .NET 8.0.31, .NET 9.0.20, and .NET 10.0.12. Each manifest defines architecture-specific ZIP downloads and hashes, installation and removal steps, environment settings, runtime version checks, and autoupdate rules.

Changes

.NET Runtime Manifests

Layer / File(s) Summary
Runtime manifest lifecycle
bucket/dotnet8-runtime.json, bucket/dotnet9-runtime.json, bucket/dotnet10-runtime.json
Defines architecture-specific ZIP downloads and hashes, links runtime directories into a shared root, configures environment settings, and removes package-owned links while preserving links provided by other installed packages. Each manifest also defines version checks and autoupdate rules.

Priority: ⬇️ Low

Merge Risk: 🔵 Low · up to d89b3

The new .NET runtime manifests share one runtime root for side-by-side versions, which works for the common single-architecture setup. Users who install these runtimes with different architectures can get a mixed root that some apps cannot load. This is a narrow follow-up item and does not block merging.

Pre-merge checks · Passed 5
Passed Passed checks (5 passed)
Check name Status Explanation
Title check Passed The title clearly identifies all three manifests and states the primary change: adding the manifests. It is concise and follows the repository's conventional title format.
Description check Passed The description summarizes the changes, identifies the package versions, references the related issue, and confirms both required checklist items. It provides the required information for this pull re…
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 100f3e91-69a7-4ad9-bba2-95791b4d8a4d
📥 Commits

Reviewing files that changed from the base of the PR and between 0377c44 and 08fa584.

📒 Files selected for processing (3)
  • bucket/dotnet10-runtime.json
  • bucket/dotnet8-runtime.json
  • bucket/dotnet9-runtime.json

Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 1 remain after this review.

Comment thread bucket/dotnet8-runtime.json Resolved
jycr added 3 commits October 13, 2026 12:46
…e installation

Each manifest set DOTNET_ROOT to its own $dir, so installing several runtimes
left only the last one visible, and updating or uninstalling one removed
DOTNET_ROOT for all of them.

Expose every runtime in a common root, <scoop root>\shared\dotnet, built from
junctions to each package's own files. The root is derived from basedir, so it
works with portable and global Scoop installs.
- post_install: link host\fxr\<ver> and shared\<framework>\<ver>, copy dotnet.exe
- env_set: DOTNET_ROOT points to the common root
- pre_uninstall: remove only the junctions of the package, delete the root when empty
- post_uninstall: restore DOTNET_ROOT while another runtime remains
…red with aspnetcoreN-runtime

The ASP.NET Core zip also bundles host\fxr and Microsoft.NETCore.App for the
same version, so both packages can provide the same junction in the shared
root.

- post_install: keep an existing valid junction (first owner wins).
- pre_uninstall: re-link each junction owned by this package to another
  installed package providing the same runtime before removing the root.
…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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 2df79a22-aea3-4347-a99b-02009febb070
📥 Commits

Reviewing files that changed from the base of the PR and between b6e83b8 and d89b301.

📒 Files selected for processing (3)
  • bucket/dotnet10-runtime.json
  • bucket/dotnet8-runtime.json
  • bucket/dotnet9-runtime.json

Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 1 remain after this review.

},
"post_install": [
"# Link this runtime into the root shared by all .NET packages (side-by-side)",
"$root = Join-Path (basedir $global) 'shared\\dotnet'",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use a separate shared root for each architecture. All three manifests use one root, shared\dotnet, and one DOTNET_ROOT for every architecture. Scoop lets a user pick the architecture for each app with --arch. For example, an x86 dotnet8-runtime next to an x64 dotnet10-runtime puts x86 8.0 runtime junctions and an x64 dotnet.exe in the same root. A 64-bit app that targets 8.0 then fails to load the x86 runtime. The dotnet.exe version check in post_install compares only file versions, so it does not catch this.

  • bucket/dotnet8-runtime.json#L25-L25: change the root to shared\dotnet-$architecture in post_install, pre_uninstall, post_uninstall and env_set. For 32-bit installs, set DOTNET_ROOT(x86) through an env_set inside each architecture block.
  • bucket/dotnet9-runtime.json#L25-L25: make the same change to the root path and env_set.
  • bucket/dotnet10-runtime.json#L25-L25: make the same change to the root path and env_set.
📍 Affects 3 files
  • bucket/dotnet8-runtime.json#L25-L25 (this comment)
  • bucket/dotnet9-runtime.json#L25-L25
  • bucket/dotnet10-runtime.json#L25-L25

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant