Skip to content
full-pipeline.yml 5.51 KiB
Newer Older
Timo Furrer's avatar
Timo Furrer committed
    # Stages
    stage_validate:
      default: 'validate'
      description: 'Defines the validate stage. This stage includes the `fmt` and `validate` jobs.'
Timo Furrer's avatar
Timo Furrer committed
    stage_test:
      default: 'test'
      description: 'Defines the test stage. This stage includes the `test` job.'
    stage_build:
      default: 'build'
Timo Furrer's avatar
Timo Furrer committed
      description: 'Defines the build stage. This stage includes the `plan` job.'
    stage_deploy:
      default: 'deploy'
Timo Furrer's avatar
Timo Furrer committed
      description: 'Defines the deploy stage. This stage includes the `apply` job.'
    stage_cleanup:
      default: 'cleanup'
Timo Furrer's avatar
Timo Furrer committed
      description: 'Defines the cleanup stage. This stage includes the `destroy` and `delete-state` jobs.'
Timo Furrer's avatar
Timo Furrer committed

    # Versions
Timo Furrer's avatar
Timo Furrer committed
    # This version is only required, because we cannot access the context of the component,
    # see https://gitlab.com/gitlab-org/gitlab/-/issues/438275
    version:
      default: 'latest'
Timo Furrer's avatar
Timo Furrer committed
      description: 'Version of this component. Has to be the same as the one in the component include entry.'
Timo Furrer's avatar
Timo Furrer committed
    opentofu_version:
Timo Furrer's avatar
Timo Furrer committed
      default: '1.7.1'
Timo Furrer's avatar
Timo Furrer committed
      options:
        - '$OPENTOFU_VERSION'
Timo Furrer's avatar
Timo Furrer committed
        - '1.7.1'
Ben Brown's avatar
Ben Brown committed
        - '1.7.0'
        - '1.7.0-alpha1'
Timo Furrer's avatar
Timo Furrer committed
        - '1.6.2'
Timo Furrer's avatar
Timo Furrer committed
        - '1.6.1'
Timo Furrer's avatar
Timo Furrer committed
        - '1.6.0'
Timo Furrer's avatar
Timo Furrer committed
      description: 'OpenTofu version that should be used.'
Timo Furrer's avatar
Timo Furrer committed

    # Images
    image_registry_base:
Timo Furrer's avatar
Timo Furrer committed
      default: '$CI_REGISTRY/components/opentofu'
      description: 'Host URI to the job images. Will be combined with `image_name` to construct the actual image URI.'
Timo Furrer's avatar
Timo Furrer committed
    # FIXME: not yet possible because of https://gitlab.com/gitlab-org/gitlab/-/issues/438722
    # gitlab_opentofu_image:
    #   # FIXME: This should reference the component tag that is used.
    #   #        Currently, blocked by https://gitlab.com/gitlab-org/gitlab/-/issues/438275
    #   # default: '$CI_REGISTRY/components/opentofu/gitlab-opentofu:$[[ inputs.opentofu_version ]]'
    #   default: '$CI_REGISTRY/components/opentofu/gitlab-opentofu:$[[ inputs.version ]]-opentofu$[[ inputs.opentofu_version ]]'
    #   description: 'Tag of the gitlab-opentofu image.'
    image_name:
      default: 'gitlab-opentofu'
      description: 'Image name for the job images. Hosted under `image_registry_base`.'

Timo Furrer's avatar
Timo Furrer committed
    # Configuration
    root_dir:
Timo Furrer's avatar
Timo Furrer committed
      default: ${CI_PROJECT_DIR}
Timo Furrer's avatar
Timo Furrer committed
      description: 'Root directory for the OpenTofu project.'
Timo Furrer's avatar
Timo Furrer committed
    state_name:
      default: default
Timo Furrer's avatar
Timo Furrer committed
      description: 'Remote OpenTofu state name.'
    auto_apply:
      default: false
      type: boolean
Timo Furrer's avatar
Timo Furrer committed
      description: 'Whether the apply job is manual or automatically run.'
    auto_destroy:
      default: false
      type: boolean
Timo Furrer's avatar
Timo Furrer committed
      description: 'Whether the destroy job is manual or automatically run.'
    plan_artifacts_access:
      default: 'none'
      description: 'Access level for the plan artifact. See https://docs.gitlab.com/ee/ci/yaml/#artifactsaccess for possible values.'
Timo Furrer's avatar
Timo Furrer committed

Timo Furrer's avatar
Timo Furrer committed
include:
  - local: '/templates/fmt.yml'
    inputs:
      as: 'fmt'
      stage: $[[ inputs.stage_validate ]]
      version: $[[ inputs.version ]]
      opentofu_version: $[[ inputs.opentofu_version ]]
      image_registry_base: $[[ inputs.image_registry_base ]]
      image_name: $[[ inputs.image_name ]]
Timo Furrer's avatar
Timo Furrer committed
      root_dir: $[[ inputs.root_dir ]]
  - local: '/templates/validate.yml'
    inputs:
      as: 'validate'
      stage: $[[ inputs.stage_validate ]]
      version: $[[ inputs.version ]]
      opentofu_version: $[[ inputs.opentofu_version ]]
      image_registry_base: $[[ inputs.image_registry_base ]]
      image_name: $[[ inputs.image_name ]]
Timo Furrer's avatar
Timo Furrer committed
      root_dir: $[[ inputs.root_dir ]]
      state_name: $[[ inputs.state_name ]]
Timo Furrer's avatar
Timo Furrer committed
  - local: '/templates/test.yml'
    inputs:
      as: 'test'
      stage: $[[ inputs.stage_test ]]
      version: $[[ inputs.version ]]
      opentofu_version: $[[ inputs.opentofu_version ]]
      image_registry_base: $[[ inputs.image_registry_base ]]
      image_name: $[[ inputs.image_name ]]
      root_dir: $[[ inputs.root_dir ]]
      state_name: $[[ inputs.state_name ]]
    rules:
      - exists:
Timo Furrer's avatar
Timo Furrer committed
          - $[[ inputs.root_dir ]]/**/*.tftest.hcl
Timo Furrer's avatar
Timo Furrer committed
  - local: '/templates/plan.yml'
    inputs:
      as: 'plan'
      stage: $[[ inputs.stage_build ]]
      version: $[[ inputs.version ]]
      opentofu_version: $[[ inputs.opentofu_version ]]
      image_registry_base: $[[ inputs.image_registry_base ]]
      image_name: $[[ inputs.image_name ]]
Timo Furrer's avatar
Timo Furrer committed
      root_dir: $[[ inputs.root_dir ]]
      state_name: $[[ inputs.state_name ]]
      artifacts_access: $[[ inputs.plan_artifacts_access ]]
Timo Furrer's avatar
Timo Furrer committed
  - local: '/templates/apply.yml'
    inputs:
      as: 'apply'
      stage: $[[ inputs.stage_deploy ]]
      version: $[[ inputs.version ]]
      opentofu_version: $[[ inputs.opentofu_version ]]
      image_registry_base: $[[ inputs.image_registry_base ]]
      image_name: $[[ inputs.image_name ]]
Timo Furrer's avatar
Timo Furrer committed
      root_dir: $[[ inputs.root_dir ]]
      state_name: $[[ inputs.state_name ]]
      auto_apply: $[[ inputs.auto_apply ]]
  - local: '/templates/destroy.yml'
    inputs:
      as: 'destroy'
      stage: $[[ inputs.stage_cleanup ]]
      version: $[[ inputs.version ]]
      opentofu_version: $[[ inputs.opentofu_version ]]
      image_registry_base: $[[ inputs.image_registry_base ]]
      image_name: $[[ inputs.image_name ]]
Timo Furrer's avatar
Timo Furrer committed
      root_dir: $[[ inputs.root_dir ]]
      state_name: $[[ inputs.state_name ]]
      auto_destroy: $[[ inputs.auto_destroy ]]
Timo Furrer's avatar
Timo Furrer committed
  - local: '/templates/delete-state.yml'
    inputs:
      as: 'delete-state'
      stage: $[[ inputs.stage_cleanup ]]
      state_name: $[[ inputs.state_name ]]
Timo Furrer's avatar
Timo Furrer committed
# NOTE: we have to define this `needs` here, because inputs don't support arrays, yet.
Timo Furrer's avatar
Timo Furrer committed
delete-state:
  needs: [destroy]