validate.yml 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. ---
  2. spec:
  3. inputs:
  4. as:
  5. default: validate-terraform
  6. stage:
  7. default: test
  8. root_dir:
  9. default: ${CI_PROJECT_DIR}/terraform
  10. description: 'Root directory for the OpenTofu project.'
  11. state_name:
  12. default: default
  13. description: 'Remote OpenTofu state name.'
  14. ---
  15. variables:
  16. TF_ROOT: "$[[ inputs.root_dir ]]"
  17. TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/$[[ inputs.state_name ]]
  18. TF_USERNAME: gitlab-ci-token
  19. TF_PASSWORD: ${CI_JOB_TOKEN}
  20. '$[[ inputs.as ]]':
  21. stage: '$[[ inputs.stage ]]'
  22. image:
  23. name: ghcr.io/opentofu/opentofu:latest
  24. entrypoint: [""]
  25. before_script: |
  26. echo "Before → Executing..."
  27. echo "Before → Enter TF root directory"
  28. cd ${TF_ROOT}
  29. script: |
  30. echo "Script → Executing..."
  31. echo "Script → Initialize Terraform backend"
  32. tofu init \
  33. -backend-config=address=${TF_ADDRESS} \
  34. -backend-config=lock_address=${TF_ADDRESS}/lock \
  35. -backend-config=unlock_address=${TF_ADDRESS}/lock \
  36. -backend-config=username=${TF_USERNAME} \
  37. -backend-config=password=${TF_PASSWORD} \
  38. -backend-config=lock_method=POST \
  39. -backend-config=unlock_method=DELETE \
  40. -backend-config=retry_wait_min=5
  41. echo "Script → Validate Terraform"
  42. tofu validate
  43. rules:
  44. - if: |
  45. $CI_PIPELINE_SOURCE == "push" ||
  46. $CI_PIPELINE_SOURCE == "merge_request_event"
  47. changes:
  48. - '$[[ inputs.root_dir ]]/**'