summaryrefslogtreecommitdiff
path: root/lib/gitlab/ci/templates/Terraform/Module-Base.gitlab-ci.yml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/ci/templates/Terraform/Module-Base.gitlab-ci.yml')
-rw-r--r--lib/gitlab/ci/templates/Terraform/Module-Base.gitlab-ci.yml39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/gitlab/ci/templates/Terraform/Module-Base.gitlab-ci.yml b/lib/gitlab/ci/templates/Terraform/Module-Base.gitlab-ci.yml
new file mode 100644
index 00000000000..e73e6194760
--- /dev/null
+++ b/lib/gitlab/ci/templates/Terraform/Module-Base.gitlab-ci.yml
@@ -0,0 +1,39 @@
+# Terraform/Module-Base
+#
+# The purpose of this template is to provide flexibility to the user so
+# they are able to only include the jobs that they find interesting.
+#
+# Therefore, this template is not supposed to run any jobs. The idea is to only
+# create hidden jobs. See: https://docs.gitlab.com/ee/ci/yaml/#hide-jobs
+#
+# There is a more opinionated template which we suggest the users to abide,
+# which is the lib/gitlab/ci/templates/Terraform-Module.gitlab-ci.yml
+
+# These variables may be overridden by the pipeline including it to control how the Terraform module is being deployed.
+variables:
+ TERRAFORM_MODULE_DIR: ${CI_PROJECT_DIR} # The relative path to the root directory of the Terraform project.
+ TERRAFORM_MODULE_NAME: ${CI_PROJECT_NAME} # The name of your Terraform module, must not have any spaces or underscores (will be translated to hyphens).
+ TERRAFORM_MODULE_SYSTEM: local # The system or provider your Terraform module targets (ex. local, aws, google).
+ TERRAFORM_MODULE_VERSION: ${CI_COMMIT_TAG} # The version - it's recommended to follow SemVer for Terraform Module Versioning.
+
+.terraform-module:fmt:
+ stage: validate
+ image: $CI_TEMPLATE_REGISTRY_HOST/gitlab-org/terraform-images/stable:latest
+ variables:
+ TF_ROOT: $TERRAFORM_MODULE_DIR
+ script:
+ - gitlab-terraform fmt
+ allow_failure: true
+
+.terraform-module:deploy:
+ stage: deploy
+ image: $CI_TEMPLATE_REGISTRY_HOST/gitlab-org/terraform-images/stable:latest
+ script:
+ - TERRAFORM_MODULE_NAME=$(echo "${TERRAFORM_MODULE_NAME}" | tr " _" -) # module-name must not have spaces or underscores, so translate them to hyphens
+ # Builds the Terraform module artifact: a gzipped tar archive with the contents from `$TERRAFORM_MODULE_DIR` without a `.git` directory.
+ - tar -vczf /tmp/${TERRAFORM_MODULE_NAME}-${TERRAFORM_MODULE_SYSTEM}-${TERRAFORM_MODULE_VERSION}.tgz -C ${TERRAFORM_MODULE_DIR} --exclude=./.git .
+ # Uploads the Terraform module artifact to the GitLab Terraform Module Registry, see
+ # docs/user/packages/terraform_module_registry/index.html#publish-a-terraform-module
+ - 'curl --fail-with-body --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}"
+ --upload-file /tmp/${TERRAFORM_MODULE_NAME}-${TERRAFORM_MODULE_SYSTEM}-${TERRAFORM_MODULE_VERSION}.tgz
+ ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/terraform/modules/${TERRAFORM_MODULE_NAME}/${TERRAFORM_MODULE_SYSTEM}/${TERRAFORM_MODULE_VERSION}/file'