spec: inputs: # Stages stage_validate: default: 'validate' description: 'Defines the validate stage. This stage includes the `fmt` and `validate` jobs.' stage_build: default: 'build' description: 'Defines the build stage. This stage includes the `plan` job.' stage_deploy: default: 'deploy' description: 'Defines the deploy stage. This stage includes the `apply` job.' stage_cleanup: default: 'cleanup' description: 'Defines the cleanup stage. This stage includes the `destroy` and `delete-state` jobs.' # Versions # 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' description: 'Version of this component. Has to be the same as the one in the component include entry.' opentofu_version: default: '1.6.0' options: - '$OPENTOFU_VERSION' - '1.6.0' - '1.6.0-rc1' description: 'OpenTofu version that should be used.' # Images image_registry_base: default: '$CI_REGISTRY/components/opentofu' # 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.' # Configuration root_dir: default: ${CI_PROJECT_DIR} description: 'Root directory for the OpenTofu project.' state_name: default: default description: 'Remote OpenTofu state name.' auto_apply: default: 'false' description: 'Whether the apply job is manual or automatically run.' auto_destroy: default: 'false' description: 'Whether the destroy job is manual or automatically run.' create_destroy_job: default: 'false' description: 'Wheather the destroy job should be created or not.' create_delete_state_job: default: 'false' description: 'Wheather the delete-state job should be created or not.' --- 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 ]] 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 ]] root_dir: $[[ inputs.root_dir ]] state_name: $[[ inputs.state_name ]] - 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 ]] root_dir: $[[ inputs.root_dir ]] state_name: $[[ inputs.state_name ]] - 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 ]] 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 ]] root_dir: $[[ inputs.root_dir ]] state_name: $[[ inputs.state_name ]] auto_destroy: $[[ inputs.auto_apply ]] create_destroy_job: $[[ inputs.create_destroy_job ]] - local: '/templates/delete-state.yml' inputs: as: 'delete-state' stage: $[[ inputs.stage_cleanup ]] state_name: $[[ inputs.state_name ]] create_delete_state_job: $[[ inputs.create_delete_state_job ]] # NOTE: we have to define this `needs` here, because inputs don't support arrays, yet. delete-state: needs: [destroy]