Skip to content

Read inputs from a file

Related issue #34202

Problem

Users would like to run a pipeline that reads values from an interface as inputs

Requirements

  • The users is responsible for the API endpoint being updated with the an up to date values.
  • GitLab should be able to hit that endpoint and receives that information to be used as part of our inputs interpolation so if the endpoint returns {"id": "my_params", "my_value": "fgh", "another_one": "ijk", }. Then $[[ parameters.my_params.my_value ]] will evaluate to fgh.

Proposal

Allow users to read inputs from a file in the following manner.

spec:
  include: # just like our standard include syntax
    - remote: https://example.com/inputs.yml
  inputs:
    # standard inputs
spec:
  include: # just like our standard include syntax
    - local: ci/config/inputs.yml
  inputs:
    # standard inputs

The included file would look like this:

inputs:
  job-prefix:
    description: "Define a prefix for the job name"
  job-stage:
    default: test
  environment:
    options: ['test', 'staging', 'production']

We will allow a mix and match between multiple input files and existing spec: input configuration

spec:
  include: # just like our standard include syntax
    - remote: https://example.com/inputs.yml
    - local: ci/config/inputs.yml
  inputs:
    # standard inputs
    job-prefix:
      description: "Define a prefix for the job name"
    job-stage:
      default: test
    environment:
      options: ['test', 'staging', 'production']
WIP Proposal (not final)
# components/my_component:

spec:
  inputs:
    my_static_value:
    my_dynamic_value_1:
    my_dynamic_value_2:
---   
test:
  script:
    - echo $[[ inputs.my_static_value ]]
    - echo $[[ inputs.my_dynamic_value_1 ]]
    - echo $[[ inputs.my_dynamic_value_2 ]]

# my .gitlab-ci.yml

include:
  - local: 'components/my_component'
    inputs:
      my_static_value: 1234 
      my_dynamic_value_1: $[[ repository.file('inputs.abc.yaml').my_dynamic_value ]] # Read input from a file
      my_dynamic_value_2: $[[ parameters.json('somewhere').something ]] # read input from JSON
Edited by Dov Hershkovitch