Problem / why
With the component parser and component-major model in place, the components: block needs its
full field set wired so each component owns its complete pipeline: its paths, tag_prefix,
triggers, builds, and deploys. This makes trigger, build, and deploy scoping local to the
component.
Scope
This PR does:
- Complete
ComponentConfig (internal/config/types.go) to carry Paths []string,
TagPrefix string, Triggers []string, Builds []BuildConfig, Deploys []DeployConfig,
and an optional Environments []string placeholder (env subsets are implemented in X1).
- Add resolvers:
GetComponentTagPrefix(name) (component prefix, falling back to the
manifest-level prefix), ComponentNames(), ComponentTriggers(name).
- Extend the component validator (F2) to fully validate the nested ownership: each component's
builds and deploys are well-formed, paths are clean, and triggers resolve.
This PR does NOT:
- Implement per-component version math (V2) or per-component file generation (V3).
- Implement environment subsets (X1) beyond parsing the field.
- Touch the single-component path.
Files / areas touched
internal/config/types.go - full ComponentConfig, new resolvers.
internal/config/validate_components.go - full nested ownership validation.
Tests and coverage required
- Unit tests for a two-component manifest with full per-component pipelines.
- Validation tests: malformed per-component builds / deploys / paths rejected.
- A test that a manifest with no
components: block still loads as the single default
component identically.
Acceptance criteria
- A
components: block with nested paths / tag_prefix / triggers / builds / deploys
parses and validates.
- Per-component resolvers return the right scoped values.
- Single-component manifests are unaffected.
Dependencies
Blocked by the component-model foundation milestone (F1-F5).
Problem / why
With the component parser and component-major model in place, the
components:block needs itsfull field set wired so each component owns its complete pipeline: its
paths,tag_prefix,triggers,builds, anddeploys. This makes trigger, build, and deploy scoping local to thecomponent.
Scope
This PR does:
ComponentConfig(internal/config/types.go) to carryPaths []string,TagPrefix string,Triggers []string,Builds []BuildConfig,Deploys []DeployConfig,and an optional
Environments []stringplaceholder (env subsets are implemented in X1).GetComponentTagPrefix(name)(component prefix, falling back to themanifest-level prefix),
ComponentNames(),ComponentTriggers(name).builds and deploys are well-formed, paths are clean, and triggers resolve.
This PR does NOT:
Files / areas touched
internal/config/types.go- fullComponentConfig, new resolvers.internal/config/validate_components.go- full nested ownership validation.Tests and coverage required
components:block still loads as the singledefaultcomponent identically.
Acceptance criteria
components:block with nestedpaths/tag_prefix/triggers/builds/deploysparses and validates.
Dependencies
Blocked by the component-model foundation milestone (F1-F5).