Abstract build steps to externalize the build configuration#6866
Draft
alfonso-noriega wants to merge 1 commit intoproj-48450/asset-pipeline-for-hosted-appsfrom
Draft
Abstract build steps to externalize the build configuration#6866alfonso-noriega wants to merge 1 commit intoproj-48450/asset-pipeline-for-hosted-appsfrom
alfonso-noriega wants to merge 1 commit intoproj-48450/asset-pipeline-for-hosted-appsfrom
Conversation
This was referenced Feb 19, 2026
Contributor
Author
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
This was referenced Feb 19, 2026
Contributor
Coverage report
Test suite run success3809 tests passing in 1473 suites. Report generated by 🧪jest coverage report action from 34005f5 |
c4c3353 to
d2a2b21
Compare
510502e to
f9f6e10
Compare
feab6d2 to
27b8cfc
Compare
27b8cfc to
34005f5
Compare
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

WHY are these changes introduced?
Fixes #0000
Build steps pipeline infrastructure
Introduces a declarative, data-driven pipeline for executing extension build steps. This is the foundational layer that the next two PRs in the stack build on.
Problem
Previously, each extension's build logic was hardcoded imperatively inside
extension-instance.ts:build()via a largeswitchon the extension type. Adding a new extension type meant touchingcore infrastructure. Build behaviour was also untestable in isolation — you couldn't verify what an extension "would do" at build time without running the full build.
Solution
A typed pipeline where build logic is expressed as configuration, not code. Each extension declares an ordered list of
BuildStepobjects. The pipeline engine reads that config anddispatches to the right executor. Because steps are plain data, they are:
Architecture
The
BuildContextis threaded through every step — it carries the extension instance, build options (stdout/stderr), an abort signal, and astepResultsmap so later steps can read outputsfrom earlier ones.
Step configuration reference
copy_files— the most flexible stepSupports two strategies, selected via the
strategyfield.strategy: 'files'— explicit file listEach entry is one of:
{source: 'path'}{source: 'path', destination: 'out/file'}{tomlKey: 'static_root'}Dot-notation is supported for nested paths (
'nested.field'), and array-of-tables are automatically plucked across all entries.strategy: 'pattern'— glob-based selection from a source directorysourcestringpatternsstring[]**/*)ignorestring[]destinationstringpreserveStructurebooleantrue)Other step types
These wrap the existing build functions and require no additional config beyond
{}:build_themebuildThemeExtensionbundle_themebundleThemeExtensionbundle_uibuildUIExtensioncopy_static_assetsextension.copyStaticAssets()build_functionbuildFunctionExtensioncreate_tax_stub(()=>{})();output stubStep execution behaviour
BuildStepfieldcontinueOnErrorfalsetrue, a failed step is recorded but the pipeline continuesstopOnError(onBuildConfig)truefalse, all steps run regardless of failuresMeasuring impact
How do we know this change was effective? Please choose one:
Checklist