[go: up one dir, main page]

Skip to content

Add reference to component context for interpolation

What does this MR do and why?

This change introduces the reference field to the component context, making it available for interpolation in CI/CD component templates.

The reference field represents the original version reference used when including a component (e.g., '1.0.0', '0.1', '~latest', or a SHA), while the existing version field continues to represent the resolved semantic version from the catalog resource.

This distinction is important because:

  • version is resolved to a catalog version (e.g., '0.1' resolves to '0.1.2')
  • reference preserves the original reference as specified (e.g., '0.1' stays '0.1')
  • For non-catalog projects or SHAs, version is nil while reference contains the value

This feature is behind the ci_component_context_interpolation feature flag.

References

Ref Link
Issue Components - Allow interpolation to use local c... (#438275)
Step 1 Prepare CI interpolation logic for component co... (!205999 - merged)
Step 2 Implement name and sha component context interp... (!206183 - merged)
Step 3 Implement version component context interpolation (!208965 - merged)
Step 4 <<-- HERE-->>
Step 5 Documentation

How to test

Create a catalog resource project with these files:

templates/component-1.yml:

spec:
  component: [name, sha, version, reference]
  inputs:
    compiler:
      default: gcc
    optimization_level:
      type: number
      default: 2
    job_name:
---
test-$[[ inputs.job_name ]]:
  script:
    - echo "Building with $[[ inputs.compiler ]] and optimization level $[[ inputs.optimization_level ]]"
    - echo "Component $[[ component.name ]] / $[[ component.sha ]] / $[[ component.version ]] / $[[ component.reference ]]"

Create .gitlab-ci.yml:

include:
  # Test with full version
  - component: gdk.test:3000/components/component-test-project-for-interpolation/component-1@1.0.0
    inputs:
      job_name: "full-version"
    rules:
      - if: $CI_COMMIT_TAG == null

  # Test with shorthand version (should resolve to 1.0.2)
  - component: gdk.test:3000/components/component-test-project-for-interpolation/component-1@1.0
    inputs:
      job_name: "partial-version"
    rules:
      - if: $CI_COMMIT_TAG == null

  # Test with ~latest (should resolve to latest version 1.0.2)
  - component: gdk.test:3000/components/component-test-project-for-interpolation/component-1@~latest
    inputs:
      job_name: "latest-version"
    rules:
      - if: $CI_COMMIT_TAG == null

  # Test with SHA (version should be nil)
  - component: gdk.test:3000/components/component-test-project-for-interpolation/component-1@$CI_COMMIT_SHA
    inputs:
      job_name: "sha-version"
    rules:
      - if: $CI_COMMIT_TAG == null

create-release:
  image: registry.gitlab.com/gitlab-org/cli:latest
  tags: [docker]
  script: echo "Creating release $CI_COMMIT_TAG"
  rules:
    - if: $CI_COMMIT_TAG
  release:
    tag_name: $CI_COMMIT_TAG
    description: "Release $CI_COMMIT_TAG of components repository $CI_PROJECT_PATH"

Create releases with tags 1.0.0 and 1.0.2.

Screenshot_2025-10-21_at_16.28.50

Screenshot_2025-10-21_at_16.28.58

Run a pipeline

Screenshot_2025-10-21_at_16.29.49

With FF ci_component_context_interpolation enabled

Screenshot_2025-10-21_at_16.50.28

Screenshot_2025-10-21_at_16.50.37

Screenshot_2025-10-21_at_16.50.45

Screenshot_2025-10-21_at_16.50.59

With FF ci_component_context_interpolation disabled

Screenshot_2025-10-21_at_16.52.22

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Merge request reports

Loading