Skip to content

declare multiple components in one manifest #286

Description

@joshua-temple

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions