Skip to content

Add GraphQL types

What does this MR do and why?

Final part of #563376

  • Add ConditionType, RuleType GraphQL types
  • Add rules field to SpecType
  • Add BaseInput#rules accessor
  • RuleType converts expressionz to json via RulesConverter

References

#563376

MR Status Description
Input lexeme !206891 (merged) Parse $[[ inputs.X ]] syntax in expressions
Rules converter In review: !209135 (merged) Convert expression AST to JSON
Semantic validation In review: !209496 Validate input references and circular dependencies, error handlin
GraphQL API 👈 You are here Expose rules with condition trees

How to set up and validate locally

query:

  query {
    project(fullPath: "root/house-of-1000-pipelines") {
      ciPipelineCreationInputs(ref: "main") {
        name
        type
        options
        rules {
          if                    
          conditionTree {       
            operator
            field
            value
            children {
              operator
              field
              value
            }
          }
          options
          default
        }
      }
    }
  }
response will be something like:
{
  "data": {
    "project": {
      "ciPipelineCreationInputs": [
        {
          "name": "deployment_type",
          "type": "STRING",
          "options": [
            "rolling",
            "blue_green",
            "canary"
          ],
          "rules": null
        },
        {
          "name": "target_environment",
          "type": "STRING",
          "options": [
            "development",
            "staging",
            "production"
          ],
          "rules": null
        },
        {
          "name": "resource_tier",
          "type": "STRING",
          "options": null,
          "rules": [
            {
              "if": "$[[ inputs.target_environment ]] == \"development\"",
              "conditionTree": {
                "operator": "equals",
                "field": "target_environment",
                "value": "development",
                "children": null
              },
              "options": [
                "small",
                "medium"
              ],
              "default": "small"
            },
            {
              "if": "$[[ inputs.target_environment ]] == \"staging\"",
              "conditionTree": {
                "operator": "equals",
                "field": "target_environment",
                "value": "staging",
                "children": null
              },
              "options": [
                "medium",
                "large"
              ],
              "default": "medium"
            },
            {
              "if": "$[[ inputs.target_environment ]] == \"production\" && $[[ inputs.deployment_type ]] == \"canary\"",
              "conditionTree": {
                "operator": "AND",
                "field": null,
                "value": null,
                "children": [
                  {
                    "operator": "equals",
                    "field": "target_environment",
                    "value": "production"
                  },
                  {
                    "operator": "equals",
                    "field": "deployment_type",
                    "value": "canary"
                  }
                ]
              },
              "options": [
                "large",
                "xlarge",
                "xxlarge"
              ],
              "default": "large"
            },
            {
              "if": "$[[ inputs.target_environment ]] == \"production\"",
              "conditionTree": {
                "operator": "equals",
                "field": "target_environment",
                "value": "production",
                "children": null
              },
              "options": [
                "large",
                "xlarge"
              ],
              "default": "xlarge"
            },
            {
              "if": null,
              "conditionTree": null,
              "options": [
                "small"
              ],
              "default": null
            }
          ]
        }
      ]
    }
  },
  "correlationId": "01K8AXA1M0NV1RHVAD4TFT5X80"
}

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.

Edited by Laura Montemayor

Merge request reports

Loading