Skip to content

Rename pipeline builder shortcut to RunAsync - #4252

Merged
thomhurst merged 2 commits into
mainfrom
issue-4222-run-builder
Aug 28, 2026
Merged

Rename pipeline builder shortcut to RunAsync#4252
thomhurst merged 2 commits into
mainfrom
issue-4222-run-builder

Conversation

@thomhurst

@thomhurst thomhurst commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary

  • rename the one-call PipelineBuilder.ExecutePipelineAsync() extension to RunAsync()
  • migrate active C#, F#, templates, tests, README content, and current documentation to the new name
  • preserve historical v3 release notes, migration guidance, and versioned v3 docs

Breaking change

PipelineBuilder.ExecutePipelineAsync() is removed. Call PipelineBuilder.RunAsync() instead. Module implementations continue to use ExecuteAsync().

Validation

  • TDD red: golden-path compile fixture failed with CS1061 before RunAsync() existed
  • focused RunAsync_ValidatesBeforeRunning test (1 passed)
  • focused DocumentationSnippetTests (4 passed)
  • guarded Release build: ModularPipelines.slnx
  • guarded Release build: documentation snippets project
  • guarded Release build: templates solution
  • guarded Release build: GitHub integration solution
  • npm run build --prefix docs
  • no unexpected ExecutePipelineAsync references outside preserved v3 history
  • git diff --check

dotnet format whitespace --verify-no-changes reports pre-existing formatting debt in unchanged portions of ScaleTests.cs; this token-only migration introduces no whitespace diff.

Closes #4222

Summary by CodeRabbit

  • Breaking Changes

    • Renamed the pipeline execution method from ExecutePipelineAsync() to RunAsync().
    • Update applications and scripts to use RunAsync() when starting pipelines.
  • Documentation

    • Updated quick starts, guides, examples, templates, and API samples to reflect the current method name.
  • Tests

    • Updated automated coverage and documentation checks to use RunAsync() while preserving existing scenarios and validations.

Align the one-call builder path with IPipeline and host naming while
preserving module ExecuteAsync terminology.

BREAKING CHANGE: PipelineBuilder.ExecutePipelineAsync is removed.
Use PipelineBuilder.RunAsync.

Refs #4222
@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6a6fa560-52f1-4884-9b79-0f385edefc0f

📥 Commits

Reviewing files that changed from the base of the PR and between e3deee5 and 62a40b8.

📒 Files selected for processing (86)
  • .github/copilot-instructions.md
  • README.md
  • README_Template.md
  • docs/docs/distributed/getting-started.md
  • docs/docs/distributed/github-actions.md
  • docs/docs/examples/dotnet-test-build-publish.md
  • docs/docs/examples/single-file-csharp.md
  • docs/docs/fundamentals.md
  • docs/docs/getting-started.md
  • docs/docs/how-to/categories.md
  • docs/docs/how-to/command-line.md
  • docs/docs/how-to/execution-and-dependencies.md
  • docs/docs/how-to/fsharp.md
  • docs/docs/how-to/logging.md
  • docs/docs/how-to/native-aot.md
  • docs/docs/how-to/pipeline-host.md
  • docs/docs/how-to/pipeline-modes.md
  • docs/docs/how-to/retry-policy.md
  • docs/docs/how-to/storing-and-retrieving-results.md
  • docs/docs/how-to/time-estimator.md
  • docs/docs/mp-packages/github.md
  • src/ModularPipelines.Development.Analyzers/Readme.md
  • src/ModularPipelines.Templates/templates/modularpipeline/Program.cs
  • src/ModularPipelines/Exceptions/PluginInitializationException.cs
  • src/ModularPipelines/Extensions/PipelineBuilderExtensions.cs
  • src/ModularPipelines/Options/SecretMaskingOptions.cs
  • src/ModularPipelines/Requirements/MacOSRequirement.cs
  • src/ModularPipelines/Requirements/WindowsAdminRequirement.cs
  • test/ModularPipelines.DocumentationSnippets/CurrentApiSnippets.cs
  • test/ModularPipelines.DocumentationSnippets/GettingStartedSnippets.cs
  • test/ModularPipelines.FSharp.TestFixtures/PipelineModules.fs
  • test/ModularPipelines.GitHub.UnitTests/Engine/DistributedPipelineWriterTests.cs
  • test/ModularPipelines.GitHub.UnitTests/Engine/PipelineWriterTests.cs
  • test/ModularPipelines.GitHub.UnitTests/GitHubMarkdownSummaryGeneratorTests.cs
  • test/ModularPipelines.UnitTests/Api/RootNamespaceGoldenPathCompileFixture.cs
  • test/ModularPipelines.UnitTests/Artifacts/ArtifactContractTests.cs
  • test/ModularPipelines.UnitTests/Attributes/DynamicDependencyIntegrationTests.cs
  • test/ModularPipelines.UnitTests/Attributes/LifecycleEventIntegrationTests.cs
  • test/ModularPipelines.UnitTests/Attributes/MetadataCrossPhaseIntegrationTests.cs
  • test/ModularPipelines.UnitTests/Attributes/ModuleReadyEventTests.cs
  • test/ModularPipelines.UnitTests/Caching/ModuleCacheTests.cs
  • test/ModularPipelines.UnitTests/CommandLine/PipelineCommandLineTests.cs
  • test/ModularPipelines.UnitTests/Configuration/UnifiedModuleConfigurationIntegrationTests.cs
  • test/ModularPipelines.UnitTests/Console/ConsoleWriterTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/CategoryFilterDependencyTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/DependsOnTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/DirectCollisionTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/FlexibleDependencyIntegrationTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/FluentDependencyConfigurationTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/ModuleNotRegisteredExceptionTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/NestedCollisionTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/OneWayDependenciesNonCollisionTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/SingleTypeParameterGetModuleTests.cs
  • test/ModularPipelines.UnitTests/Documentation/DocumentationSnippetTests.cs
  • test/ModularPipelines.UnitTests/Engine/FailedModuleNotificationTests.cs
  • test/ModularPipelines.UnitTests/Engine/MetricsCollectorTests.cs
  • test/ModularPipelines.UnitTests/Engine/PipelineProgressTests.cs
  • test/ModularPipelines.UnitTests/Engine/PipelineRequirementTests.cs
  • test/ModularPipelines.UnitTests/Engine/RunReportTests.cs
  • test/ModularPipelines.UnitTests/Execution/AsyncDisposableModuleTests.cs
  • test/ModularPipelines.UnitTests/Execution/ComposableModuleTests.cs
  • test/ModularPipelines.UnitTests/Execution/ConcurrencyOptionsTests.cs
  • test/ModularPipelines.UnitTests/Execution/DisposableModuleTests.cs
  • test/ModularPipelines.UnitTests/Execution/EngineCancellationTokenTests.cs
  • test/ModularPipelines.UnitTests/Execution/ExecutionHintTests.cs
  • test/ModularPipelines.UnitTests/Execution/FailedPipelineTests.cs
  • test/ModularPipelines.UnitTests/Execution/ModuleTimeoutTests.cs
  • test/ModularPipelines.UnitTests/Execution/NewRunConditionAttributeTests.cs
  • test/ModularPipelines.UnitTests/Execution/NotInParallelTests.cs
  • test/ModularPipelines.UnitTests/Execution/NotInParallelTestsWithConstraintKeys.cs
  • test/ModularPipelines.UnitTests/Execution/NotInParallelTestsWithMultipleConstraintKeys.cs
  • test/ModularPipelines.UnitTests/Execution/ParallelLimiterTests.cs
  • test/ModularPipelines.UnitTests/Execution/PrioritySchedulingTests.cs
  • test/ModularPipelines.UnitTests/Execution/SubModuleTests.cs
  • test/ModularPipelines.UnitTests/FileSystem/FolderTests.cs
  • test/ModularPipelines.UnitTests/FileSystem/MockedFileSystemTests.cs
  • test/ModularPipelines.UnitTests/Logging/ConfigurationSectionSecretMaskingTests.cs
  • test/ModularPipelines.UnitTests/Logging/LoggingSecretTests.cs
  • test/ModularPipelines.UnitTests/Logging/SecretMaskingTests.cs
  • test/ModularPipelines.UnitTests/Logging/SecretObfuscatorTests.cs
  • test/ModularPipelines.UnitTests/Registration/PipelineBuilderRegistrationTests.cs
  • test/ModularPipelines.UnitTests/Registration/PipelineWorkingDirectoryTests.cs
  • test/ModularPipelines.UnitTests/Requirements/PipelineRequirementBaseClassTests.cs
  • test/ModularPipelines.UnitTests/Requirements/RequireFactoryTests.cs
  • test/ModularPipelines.UnitTests/ScaleTests.cs
  • test/ModularPipelines.UnitTests/Tracing/TelemetryIntegrationTests.cs

Included review availability: Your plan provides up to 4 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The public pipeline builder method was renamed from ExecutePipelineAsync to RunAsync. Documentation, templates, examples, fixtures, and tests now use the new method name. The method signature and implementation remain unchanged.

Changes

Pipeline API and documentation

Layer / File(s) Summary
Pipeline API rename
src/ModularPipelines/Extensions/PipelineBuilderExtensions.cs
Renames ExecutePipelineAsync to RunAsync and updates its XML documentation.
Documentation and templates
.github/copilot-instructions.md, README.md, README_Template.md, docs/docs/..., src/ModularPipelines.Templates/..., src/ModularPipelines.Development.Analyzers/Readme.md, src/ModularPipelines/Exceptions/..., src/ModularPipelines/Options/..., src/ModularPipelines/Requirements/...
Updates pipeline execution examples to call RunAsync.
Fixtures and tests
test/...
Updates pipeline invocations and related helper names to use RunAsync. Existing test logic and assertions remain unchanged.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 62a40

This change renames the public pipeline builder shortcut while preserving pipeline execution behavior; consumers must update source references, but no actionable merge-blocking risk remains after normal checks and review.

Poem

A rabbit found an old pipeline name,
And changed its sign without changing its game.
RunAsync now leads the way,
Through docs and tests in neat array.
The builder hops on, steady and bright.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 1.01% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 199 functions across 50 files. (36 skipped… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the primary change: renaming the pipeline builder shortcut to RunAsync.
Linked Issues check ✅ Passed The implementation renames PipelineBuilder.ExecutePipelineAsync() to RunAsync(), removes the former call sites, and updates active C#, F#, template, test, README, and documentation examples. Module Ex…
Out of Scope Changes check ✅ Passed The changes are limited to the API rename and the required updates to documentation, examples, templates, tests, and development instructions. No unrelated code changes are present.
Full details: Linked Issues check

Explanation

The implementation renames PipelineBuilder.ExecutePipelineAsync() to RunAsync(), removes the former call sites, and updates active C#, F#, template, test, README, and documentation examples. Module ExecuteAsync() usage remains unchanged, matching issue #4222.

Full details: Docstring Coverage

Explanation

Docstring coverage is 1.01% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 199 functions across 50 files. (36 skipped: 23 unsupported, 13 over the file limit.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-4222-run-builder

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.

@greptile-apps

greptile-apps Bot commented Aug 28, 2026

Copy link
Copy Markdown

Greptile Summary

The PR renames the one-call pipeline-builder shortcut from ExecutePipelineAsync() to RunAsync() while preserving its build, run, cancellation, and disposal behavior.

  • Migrates current C#, F#, templates, tests, README content, and documentation to RunAsync().
  • Preserves version-specific V3 guidance, including the F# interactive example’s use of ExecutePipelineAsync().

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
src/ModularPipelines/Extensions/PipelineBuilderExtensions.cs Renames the public builder convenience extension to RunAsync without changing its build-run-dispose implementation or cancellation forwarding.
docs/docs/examples/fsharp-interactive.md Current HEAD preserves ExecutePipelineAsync for the example’s explicitly referenced V3 packages, resolving the previous compatibility finding.
test/ModularPipelines.UnitTests/Api/RootNamespaceGoldenPathCompileFixture.cs Updates the root-namespace compile fixture to exercise the renamed RunAsync extension.
test/ModularPipelines.FSharp.TestFixtures/PipelineModules.fs Migrates active F# fixtures to the current RunAsync builder API.

Reviews (2): Last reviewed commit: "docs: keep v3 F# example compatible" | Re-trigger Greptile

Comment thread docs/docs/examples/fsharp-interactive.md Outdated

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

Review: #4252 — Rename ExecutePipelineAsyncRunAsync

This is a clean, mechanical rename with balanced diff stats (290/290) across 87 files — no logic changes. Verified that PipelineBuilderExtensions.RunAsync(this PipelineBuilder ...) calls IPipeline.RunAsync(cancellationToken), a distinct member on a distinct type, so there's no recursive/naming collision. Call sites (C#, F# fixtures, templates, doc snippets) were updated consistently and remaining ExecutePipelineAsync references are confined to the intentionally-preserved v3 history docs (RELEASE_NOTES_V3.md, docs/docs/migrating-to-v3.md).

Actionable finding

docs/docs/examples/fsharp-interactive.md (line 62) pins the script to the v3 NuGet package (#r "nuget: ModularPipelines.DotNet, 3.*" at line 25, with an explicit comment "retain compatibility with the v3 package above" at line 43) but was migrated to call builder.RunAsync(). RunAsync() doesn't exist on v3's PipelineBuilder — that name is introduced by this very PR — so the example now instructs readers to write code that won't compile against the pinned v3 package. This is the one doc in the migrated set that explicitly targets an old package version; every other touched doc (getting-started.md, fundamentals.md, categories.md, single-file-csharp.md) implicitly targets the current package and is fine as RunAsync().

Fix: either revert this specific call site back to builder.ExecutePipelineAsync() (consistent with the v3 package pin, mirroring how the other v3-history docs were left alone), or bump the pinned version in this example to the current major and keep RunAsync(). The former is simpler and matches the PR's stated intent of leaving v3-targeted content alone.

No other correctness, architectural, or maintainability concerns found — this is a pure rename otherwise.

Use the API available in the documented 3.x package. Refs #4222.

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

Review: #4252 — Rename ExecutePipelineAsyncRunAsync

Re-reviewed at head 62a40b8566f5577b1a31278e90de45ad38e7d3c0. This is a clean, purely mechanical rename with no logic changes:

  • PipelineBuilderExtensions.RunAsync(this PipelineBuilder ...) in src/ModularPipelines/Extensions/PipelineBuilderExtensions.cs delegates to IPipeline.RunAsync(cancellationToken) — a distinct member on a distinct type, so there's no recursive call or naming collision.
  • Every other changed line across the ~88 touched files (docs, README, templates, XML doc comments, C#/F# call sites) is a 1:1 token replacement of ExecutePipelineAsyncRunAsync.
  • Historical v3 docs (RELEASE_NOTES_V3.md, docs/docs/migrating-to-v3.md, docs/versioned_docs/version-3.x/**) were correctly left untouched, matching the PR's stated goal of preserving historical migration guidance.

Previous finding — now resolved

My prior review (at commit e6dd02164acaf89792f9332b28b24c7c360eb85c) flagged that docs/docs/examples/fsharp-interactive.md pins the script to the v3 NuGet package but had been migrated to call builder.RunAsync(), which doesn't exist on v3's PipelineBuilder. The follow-up commit "docs: keep v3 F# example compatible" reverts that call site back to builder.ExecutePipelineAsync() (confirmed at line 62 of the current head), consistent with the nuget: ModularPipelines.DotNet, 3.* pin in the same file. This is exactly the fix I suggested.

No other correctness, architectural, or maintainability concerns. The RunAsync extension naming is fine since it lives on PipelineBuilder, distinct from the module-level ExecuteAsync() convention, so there's no ambiguity for readers.

@thomhurst
thomhurst merged commit a331d66 into main Aug 28, 2026
16 checks passed
@thomhurst
thomhurst deleted the issue-4222-run-builder branch August 28, 2026 14:15
thomhurst added a commit that referenced this pull request Aug 28, 2026
Record API changes merged by #4252 and #4253. Refs #4249.
thomhurst added a commit that referenced this pull request Aug 28, 2026
Record API changes merged by #4252 and #4253. Refs #4249.
thomhurst added a commit that referenced this pull request Aug 28, 2026
Record API changes merged by #4252 and #4253. Refs #4249.
thomhurst added a commit that referenced this pull request Aug 28, 2026
Record API changes merged by #4252 and #4253. Refs #4249.
thomhurst added a commit that referenced this pull request Aug 28, 2026
Record API changes merged by #4252 and #4253. Refs #4249.
thomhurst added a commit that referenced this pull request Aug 28, 2026
Record API changes merged by #4252 and #4253. Refs #4249.
thomhurst added a commit that referenced this pull request Aug 28, 2026
* build(api): baseline shipped package surfaces

Make every public API addition or removal explicit through RS0016 and RS0017 across all release packages.

Refs #4249

* fix(ci): enforce integration API baselines

Run API analyzers in ordinary CI tool builds. Refs #4249.

* fix(api): cover all package baselines

Baseline every package-shaped integration and fail CI when a package lacks PublicApiAnalyzers files.\n\nRefs #4249

* fix(api): refresh DotNet baseline

Record the generated API merged by #4246 so the CI public API gate passes. Refs #4249.

* fix(api): refresh rebased baselines

Record public APIs added by #4246 and keep ordinary CI baseline checks lean. Refs #4249.

* fix(api): refresh merged core baseline

Record API changes merged by #4252 and #4253. Refs #4249.

* fix(api): baseline repeat option terminator

* fix(api): complete CI baselines

Record declarations missed by memory-limited local captures, exempt generated-option verification until compatibility checks run, and cover the baseline assertion script.

* fix(api): refresh context baseline

Track the context API consolidation merged in #4248 after rebasing the public API gate.

* fix(api): baseline Azure tool accessors

* fix(api): refresh merged core surface

* fix(ci): baseline generated API changes

* fix(ci): restore API baseline updates

Refresh the linked OptionsGenerator baseline, restore PublicApiAnalyzers before applying code fixes, and allow only manifest-authorized baseline files to exceed the generated-file size cap.

* fix(ci): isolate public API analyzers

* fix(api): refresh merged core baseline

* fix(api): refresh cmd baseline

* fix(ci): gate public API analyzers

Keep ordinary local builds lean while enforcing API baselines in GitHub Actions and explicit analyzer runs.

* fix(api): refresh merged core baseline

Record main's latest v4 surface changes so CI analyzer enforcement remains exact after rebase.

* fix(ci): restore tool analyzer coverage

* fix(api): refresh merged public surfaces
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: rename PipelineBuilder.ExecutePipelineAsync() to RunAsync()

1 participant