Skip to content

feat: TransportProvider abstraction and DeployPipeline scaffolding @W-24222968@ - #1840

Draft
WillieRuemmele wants to merge 4 commits into
mainfrom
wr/transport-scaffolding
Draft

WillieRuemmele wants to merge 4 commits into
mainfrom
wr/transport-scaffolding

Conversation

@WillieRuemmele

@WillieRuemmele WillieRuemmele commented Sep 24, 2026 •

Copy link
Copy Markdown
Member

Summary

@W-24222968@
Introduces a first-class transport layer in SDR so componentSet.deploy() can route metadata types through secondary endpoints (Connect API, presigned URLs, DataKit) alongside the standard Metadata API — without changing the public API signature.

  • TransportProvider interface — handles(), deploy(), retrieve(), describe() contract for secondary endpoints
  • DeployPipeline — groups components by transport, orchestrates before-metadata / metadata-api / after-metadata phases, merges results into DeployResult
  • DeployResult extensions — addTransportResults() and getAsyncTransportHandles() for transport result merging with cache invalidation
  • componentSet.deploy() — delegates to deployWithPipeline() when transports are registered; no public API signature change
  • Registry — transport strategy hint on MetadataType.strategies for future concrete types

This is the scaffolding branch — concrete transport implementations (e.g., Heroku ConnectApi) will follow in a branch off this one.

Test plan

  • 11 DeployPipeline unit tests (groupByTransport, hasTransports, explain, runBeforeMetadata, runAfterMetadata, async handles)
  • 5 DeployResult transport integration tests (addTransportResults, cache invalidation, merge with metadata responses, async handles)
  • Full existing test suite passes (30582 passing, 2 pre-existing failures unrelated to this change)
  • Build + lint clean

@WillieRuemmele
WillieRuemmele force-pushed the wr/transport-scaffolding branch 2 times, most recently from db6e08b to 6acaf55 Compare September 24, 2026 19:51
Introduces a first-class transport layer so `componentSet.deploy()` can
route metadata types through secondary endpoints (Connect API, presigned
URLs, DataKit) alongside the standard Metadata API.

- TransportProvider interface: handles(), deploy(), retrieve(), describe()
- DeployPipeline: groups components by transport, runs before/after
  metadata phases, merges results into DeployResult
- DeployResult: addTransportResults() + getAsyncTransportHandles()
- componentSet.deploy() delegates to deployWithPipeline when transports
  are registered — no public API signature change
- Registry: transport strategy hint on MetadataType.strategies
@WillieRuemmele
WillieRuemmele force-pushed the wr/transport-scaffolding branch from 6acaf55 to 5114116 Compare September 24, 2026 19:57
The pipeline orchestrates both deploy and retrieve operations, so the
name should not imply deploy-only semantics.
@WillieRuemmele WillieRuemmele changed the title feat: TransportProvider abstraction and DeployPipeline scaffolding feat: TransportProvider abstraction and DeployPipeline scaffolding @W-24222968@ Sep 25, 2026
…ts option

- Add skipTransports option to MetadataApiDeployOptions and MetadataApiRetrieveOptions
- Wire retrieve pipeline with both before-metadata and after-metadata phases
- Guard deploy post() after-metadata transports on RequestStatus.Succeeded
- Deduplicate transport file responses in RetrieveResult (matches DeployResult)
- Extract runPendingAfterMetadataTransports helper in MetadataApiDeploy
- Add retrieveWithPipeline in ComponentSet mirroring deployWithPipeline
- Add tests for retrieve transport phases, skipTransports, error handling, dedup

This branch has not been deployed

No deployments
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.

2 participants