Skip to content

Flatten the core installer API - #4276

Merged
thomhurst merged 1 commit into
mainfrom
issue-4237-installers
Aug 28, 2026
Merged

Flatten the core installer API#4276
thomhurst merged 1 commit into
mainfrom
issue-4237-installers

Conversation

@thomhurst

Copy link
Copy Markdown
Owner

Summary

  • expose generic local and web installation directly on IInstallersContext
  • remove platform package-manager and predefined installer wrappers from core
  • remove obsolete option types and document dedicated tool-package migration

Validation

  • strict core build: 0 warnings, 0 errors
  • focused TUnit tests: 10 passed, 1 OS-specific skip
  • public API baselines: 61 package projects verified

Closes #4237

Drop platform and predefined installer wrappers in favor of dedicated tool integrations. Keep generic local and web installation directly on IInstallersContext.
@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 3 minutes.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 1fb18676-426d-4dfc-ab15-885c2733c63e

📥 Commits

Reviewing files that changed from the base of the PR and between 7f836c4 and 6502e27.

📒 Files selected for processing (43)
  • RELEASE_NOTES_V4.md
  • docs/architecture/interface-audit.md
  • docs/architecture/interface-hierarchy.md
  • src/ModularPipelines/Context/Domains/IInstallersContext.cs
  • src/ModularPipelines/Context/Domains/Implementations/InstallersContext.cs
  • src/ModularPipelines/Context/Domains/Installers/ILinuxInstallerContext.cs
  • src/ModularPipelines/Context/Domains/Installers/IMacInstallerContext.cs
  • src/ModularPipelines/Context/Domains/Installers/IPredefinedInstallersContext.cs
  • src/ModularPipelines/Context/Domains/Installers/IWindowsInstallerContext.cs
  • src/ModularPipelines/Context/FileInstaller.cs
  • src/ModularPipelines/Context/IFileInstaller.cs
  • src/ModularPipelines/Context/Linux/AptGet.cs
  • src/ModularPipelines/Context/Linux/IAptGet.cs
  • src/ModularPipelines/Context/LinuxInstaller.cs
  • src/ModularPipelines/Context/MacInstaller.cs
  • src/ModularPipelines/Context/PredefinedInstallers.cs
  • src/ModularPipelines/Context/WindowsInstaller.cs
  • src/ModularPipelines/DependencyInjection/DependencyInjectionSetup.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetAutocleanOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetBuildDepOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetCheckOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetCleanOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetDistUpgradeOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetInstallOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetPackageOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetRemoveOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetSourceOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetUpdateOptions.cs
  • src/ModularPipelines/Options/Linux/AptGet/AptGetUpgradeOptions.cs
  • src/ModularPipelines/Options/Linux/DpkgInstallOptions.cs
  • src/ModularPipelines/Options/Mac/MacBrewOptions.cs
  • src/ModularPipelines/Options/Windows/ExeInstallerOptions.cs
  • src/ModularPipelines/Options/Windows/MsiInstallerOptions.cs
  • src/ModularPipelines/Options/Windows/WindowsInstallerOptionsBase.cs
  • src/ModularPipelines/PublicAPI.Shipped.txt
  • src/ModularPipelines/PublicAPI.Unshipped.txt
  • test/ModularPipelines.UnitTests/Api/PublicSurfaceLeakageTests.cs
  • test/ModularPipelines.UnitTests/Attributes/CliAttributeTests.cs
  • test/ModularPipelines.UnitTests/Context/InterfaceVisibilityTests.cs
  • test/ModularPipelines.UnitTests/Helpers/FileInstallerTests.cs
  • test/ModularPipelines.UnitTests/Helpers/InstallerTests.cs
  • test/ModularPipelines.UnitTests/Helpers/PredefinedInstallersTests.cs

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.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 28, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-08-28T22:36:34.273453Z 6502e27 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Aug 28, 2026

Copy link
Copy Markdown

Greptile Summary

The PR flattens the core installer API by exposing generic local and web installation directly through IInstallersContext, while removing platform package-manager and predefined installer wrappers.

  • Moves the existing file-installer behavior into InstallersContext.
  • Removes obsolete platform interfaces, implementations, options, and DI registrations.
  • Updates public API baselines, focused tests, architecture documentation, and v4 migration notes.

Confidence Score: 5/5

The PR appears safe to merge, with the flattened installer service resolving correctly and no changed-code regression identified.

The generic installer implementation preserves the prior execution flow, its command, downloader, and Bash dependencies are registered with compatible lifetimes, and no surviving source consumer depends on the deleted wrappers.

Important Files Changed

Filename Overview
src/ModularPipelines/Context/Domains/IInstallersContext.cs Replaces nested platform installer properties with direct generic local and web installation methods.
src/ModularPipelines/Context/Domains/Implementations/InstallersContext.cs Relocates the existing file-installer execution and download flow without introducing a changed runtime failure.
src/ModularPipelines/DependencyInjection/DependencyInjectionSetup.cs Removes obsolete wrapper registrations while retaining compatible scoped registrations for the flattened installer and its dependencies.
src/ModularPipelines/PublicAPI.Shipped.txt Records the intentional removal of platform-specific installer contracts and option types from the v4 public surface.
RELEASE_NOTES_V4.md Documents the flattened API and directs consumers toward dedicated tool integrations for removed package-manager functionality.
test/ModularPipelines.UnitTests/Helpers/FileInstallerTests.cs Updates focused installer tests to exercise the flattened context API and web-to-local delegation.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    M[Pipeline or module context] --> I[IInstallersContext]
    I --> L[InstallAsync]
    I --> W[InstallFromWebAsync]
    W --> D[IDownloaderContext]
    D --> L
    L --> O{Operating system}
    O -->|Windows| C[ICommandContext]
    O -->|Linux or macOS| X[chmod via IBashContext]
    X --> B[Run Bash file]
Loading

Reviews (1): Last reviewed commit: "refactor(installers)!: flatten core API" | Re-trigger Greptile

@claude claude 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.

Code Review

Reviewed this PR flattening the installer API (IInstallersContext.InstallAsync/InstallFromWebAsync) and removing the platform-specific installer wrappers (ILinuxInstallerContext, IMacInstallerContext, IWindowsInstallerContext, IPredefinedInstallersContext, AptGet, etc.).

Findings:

  • InstallersContext is a faithful, direct move of the previous FileInstaller logic — the execution flow (download → chmod on Linux/macOS via Bash, run via Command on Windows) is preserved with no behavioral regressions.
  • All call sites, DI registrations, and public API tracking files (PublicAPI.Shipped.txt / PublicAPI.Unshipped.txt) were updated consistently with the removed surface.
  • Test coverage was moved rather than dropped — FileInstallerTests now exercises the flattened API, and entries were correctly relocated between the relevant test lists (no coverage gap introduced).
  • RELEASE_NOTES_V4.md documents the breaking change and points consumers with a need for package-manager-specific installers (apt/brew/msi/exe) toward dedicated tool integrations, which is a reasonable migration story for a v4 breaking change.

No architectural or design concerns beyond what's already noted in the release notes as an intentional flattening. This is a clean, well-scoped removal — no actionable issues found.

@thomhurst
thomhurst merged commit 26af9b1 into main Aug 28, 2026
16 checks passed
@thomhurst
thomhurst deleted the issue-4237-installers branch August 28, 2026 23:07
@claude claude Bot mentioned this pull request Aug 28, 2026
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.

v4: installers domain — move platform package managers out of core; context.Installers.File is a property named File

1 participant