Skip to content

Add #expand_variable_collection to Variables::Collection

What does this MR do?

This is the sixth MR in a Russian-doll style chain of 8 MRs culminating with !48627 (merged). It:

  1. introduces the actual expansion logic for a Collection, in the form of the new ExpandVariables#expand_variables_collection. The method takes a Collection and returns an array of hashes, containing the expanded variable values. If an error is detected, a new Collection containing a populated #errors property is returns, and the values will be unexpanded;
  2. Modifies the transform_variables/match_or_blank_value private functions to work with a hash of variables, instead of hash of variable values. This allows us to check for the Item::raw flag to make a decision on whether to expand the variable.
  3. Adds a #merge method to Item, so that we can update the value. Come to think of it, should we just replace that with a value= setter? It was previously used to also preserve the #depends_on value;
  4. Adds a comparison operator #== to Collection, so that we can compare a collection to another collection or to an array of variables without caring about the type (being used in test cases).

List of MRs

  • MR 1: Make Collection::Sorted class take and output a Variables::Collection;
  • MR 2: Add #sorted_collection method and #errors property to Variables::Collection;
  • MR 3: Add indexing/lookup of variables to Variables::Collection;
  • MR 4: Add support for depends_on property to Variables::Collection::Item;
  • MR 5: Add support for raw property to Variables::Collection::Item;
  • MR 6: Add an #expand_variables_collection function to ExpandVariables to perform a full expansion of a Variables::Collection, gated by the new project-scoped :variable_inside_variable feature flag. It will return the original object if a cyclic reference is detected;
  • MR 7: Add error reporting to Gitlab::Ci::Pipeline::Seed::Build to let the user know when a problem occurs with variable expansion;
  • MR 7.5: Implement expression parser to be able to handle escaping in strings;
  • MR 8: Change Ci::BuildRunnerPresenter#variables to leverage ExpandVariables#expand_variables_collection so that variables sent in the job response are expanded;

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team

Part of gitlab-runner#26345 (closed)

Edited by Kamil Trzciński

Merge request reports