Skip to content
unit.gitlab-ci.yml 7.68 KiB
Newer Older
Timo Furrer's avatar
Timo Furrer committed
.gitlab-tofu-test-base:
Timo Furrer's avatar
Timo Furrer committed
  image: "$GITLAB_OPENTOFU_IMAGE_NAME"
  variables:
    TF_STATE_NAME: ci-unit-$CI_JOB_ID
  cache:
    key: "$OPENTOFU_VERSION-$CI_COMMIT_REF_SLUG"
    paths:
      - tests/terraform/.terraform/
  before_script:
    - gitlab-tofu version
    - jq --version
  after_script:
    - curl --request DELETE -u "gitlab-ci-token:$CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/terraform/state/$TF_STATE_NAME"
Timo Furrer's avatar
Timo Furrer committed

Timo Furrer's avatar
Timo Furrer committed
.gitlab-tofu-test:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test-base
Timo Furrer's avatar
Timo Furrer committed
  before_script:
Timo Furrer's avatar
Timo Furrer committed
    - !reference [.gitlab-tofu-test-base, before_script]
Timo Furrer's avatar
Timo Furrer committed
    - cd tests/terraform

Timo Furrer's avatar
Timo Furrer committed
.test-gitlab-tofu-root:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test-base
Timo Furrer's avatar
Timo Furrer committed
  variables:
    TF_ROOT: tests/terraform

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - export DEBUG_OUTPUT=true
    - gitlab-tofu init

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-with-args:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - export DEBUG_OUTPUT=true
    - gitlab-tofu init -get=true -no-color

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-with-flags:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - export DEBUG_OUTPUT=true
    - export TF_INIT_FLAGS="-get=true -no-color"
    - gitlab-tofu init

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-with-flags-and-args:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - export DEBUG_OUTPUT=true
    - export TF_INIT_FLAGS="-get=true"
    - gitlab-tofu init -no-color

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-tf-root:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .test-gitlab-tofu-root
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - export DEBUG_OUTPUT=true
    - gitlab-tofu init

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-tf-root-with-cd:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .test-gitlab-tofu-root
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - cd tests/terraform
    - export DEBUG_OUTPUT=true
    - gitlab-tofu init

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-tf-root-with-args:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .test-gitlab-tofu-root
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - export DEBUG_OUTPUT=true
    - gitlab-tofu init -get=true -no-color

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-tf-root-with-flags:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .test-gitlab-tofu-root
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - export DEBUG_OUTPUT=true
    - export TF_INIT_FLAGS="-get=true -no-color"
    - gitlab-tofu init

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-tf-root-with-flags-and-args:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .test-gitlab-tofu-root
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - export DEBUG_OUTPUT=true
    - export TF_INIT_FLAGS="-get=true"
    - gitlab-tofu init -no-color

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-without-reconfigure:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .test-gitlab-tofu-root
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - gitlab-tofu init
    - |
      cat <<EOF > $TF_ROOT/backend_override.tf
      terraform {
        backend "local" {}
      }
      EOF
    - export TF_INIT_NO_RECONFIGURE=true
    - FAILED=false
    - gitlab-tofu init -no-color >/tmp/output.txt 2>&1 || FAILED=true
    - cat /tmp/output.txt
    - test $FAILED = true
    - 'cat /tmp/output.txt | grep "Error: Backend configuration changed"'

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-with-reconfigure:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .test-gitlab-tofu-root
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - gitlab-tofu init
    - |
      cat <<EOF > $TF_ROOT/backend_override.tf
      terraform {
        backend "local" {}
      }
      EOF
    - gitlab-tofu init

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-with-prepared-registry-token:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
  stage: test
  variables:
Timo Furrer's avatar
Timo Furrer committed
    OPENTOFU_VERSION: $LATEST_OPENTOFU_VERSION
Timo Furrer's avatar
Timo Furrer committed
  script:
    - apk add --update $PKG
    - |
      cat <<'EOF' > test.sh
      set -x
      export TF_TOKEN_gitlab_com=mysecrettoken
      . $(which gitlab-tofu)
      terraform_authenticate_private_registry
      test "$TF_TOKEN_gitlab_com" = "mysecrettoken"
      EOF
    - $SHELL test.sh
  parallel:
    matrix:
      - SHELL: "bash"
        PKG: "bash"
      - SHELL: "zsh"
        PKG: "zsh"
      - SHELL: "ksh"
        PKG: "loksh"

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-init-without-prepared-registry-token:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
  stage: test
  variables:
Timo Furrer's avatar
Timo Furrer committed
    OPENTOFU_VERSION: $LATEST_OPENTOFU_VERSION
Timo Furrer's avatar
Timo Furrer committed
  script:
    - apk add --update $PKG
    - |
      cat <<'EOF' > test.sh
      set -x
      . $(which gitlab-tofu)
      terraform_authenticate_private_registry
      test -n "$TF_TOKEN_gitlab_com"
      EOF
    - $SHELL test.sh
  parallel:
    matrix:
      - SHELL: "bash"
        PKG: "bash"
      - SHELL: "zsh"
        PKG: "zsh"
      - SHELL: "ksh"
        PKG: "loksh"

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-fmt:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - gitlab-tofu fmt

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-validate:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  script:
    - gitlab-tofu validate

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-plan:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  variables:
    TF_PLAN_CACHE: $OPENTOFU_VERSION-plan.cache
  script:
    - gitlab-tofu plan
    - if [[ ! -f "$OPENTOFU_VERSION-plan.cache" ]]; then echo "expected to find a plan.cache file"; exit 1; fi
    - gitlab-tofu plan-json
    - if [[ ! -f "plan.json" ]]; then echo "expected to find a plan.json file"; exit 1; fi
  artifacts:
    paths:
      - "tests/terraform/*-plan.cache"

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-apply:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
  variables:
    TF_PLAN_CACHE: $OPENTOFU_VERSION-plan.cache
Timo Furrer's avatar
Timo Furrer committed
  before_script:
    - !reference [.gitlab-tofu-test, before_script]
    - gitlab-tofu plan
Timo Furrer's avatar
Timo Furrer committed
  script:
    - gitlab-tofu apply

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-destroy:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
    - .opentofu-versions
  stage: test
Timo Furrer's avatar
Timo Furrer committed
  before_script:
    - !reference [.gitlab-tofu-test, before_script]
    - gitlab-tofu plan
    - gitlab-tofu apply
Timo Furrer's avatar
Timo Furrer committed
  script:
    - gitlab-tofu destroy

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-source-script:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
  stage: test
  variables:
Timo Furrer's avatar
Timo Furrer committed
    OPENTOFU_VERSION: $LATEST_OPENTOFU_VERSION
Timo Furrer's avatar
Timo Furrer committed
  before_script:
Timo Furrer's avatar
Timo Furrer committed
    - !reference [.gitlab-tofu-test-base, before_script]
Timo Furrer's avatar
Timo Furrer committed
    - apk add --update $PKG
  script:
    - |
      cat <<'EOF' > test.sh
      set -x
      test -z "$TF_GITLAB_SOURCED"
      . $(which gitlab-tofu)
      test $TF_GITLAB_SOURCED
      EOF
    - |
      mkdir /usr/local/sbin
      cat <<'EOF' > /usr/local/sbin/terraform
      #/!usr/bin/env sh -e
      echo "Called Terraform, but shouldn't have!!"
      false
      EOF
      chmod +x /usr/local/sbin/terraform
    - $SHELL test.sh
  parallel:
    matrix:
      - SHELL: "bash"
        PKG: "bash"
      - SHELL: "zsh"
        PKG: "zsh"
      - SHELL: "ksh"
        PKG: "loksh"

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-without-implicit-init:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
  stage: test
  cache:
  variables:
Timo Furrer's avatar
Timo Furrer committed
    OPENTOFU_VERSION: $LATEST_OPENTOFU_VERSION
Timo Furrer's avatar
Timo Furrer committed
    STATE_NAME: $CI_JOB_NAME
  script:
    - export TF_IMPLICIT_INIT=false
    - FAILED=false
    - gitlab-tofu $CMD -no-color >/tmp/output.txt 2>&1 || FAILED=true
    - cat /tmp/output.txt
    - test $FAILED = true
    - 'cat /tmp/output.txt | grep "$ERROR"'
  parallel:
    matrix:
      - CMD: apply
        ERROR: 'Error: Failed to load "plan.cache" as a plan'
      - CMD: destroy
        ERROR: 'Error: Backend initialization required, please run "tofu init"'
      - CMD: plan
        ERROR: 'Error: Backend initialization required, please run "tofu init"'
      - CMD: validate
Timo Furrer's avatar
Timo Furrer committed
        ERROR: 'Error: Missing required provider'
Timo Furrer's avatar
Timo Furrer committed

Timo Furrer's avatar
Timo Furrer committed
gitlab-tofu-no-wrapper:
Timo Furrer's avatar
Timo Furrer committed
  extends:
Timo Furrer's avatar
Timo Furrer committed
    - .gitlab-tofu-test
Timo Furrer's avatar
Timo Furrer committed
  stage: test
  cache:
  variables:
Timo Furrer's avatar
Timo Furrer committed
    OPENTOFU_VERSION: $LATEST_OPENTOFU_VERSION
Timo Furrer's avatar
Timo Furrer committed
    STATE_NAME: $CI_JOB_NAME
  script:
    # NOTE: running `gitlab-tofu apply` wouldn't fail
    #       because of the implicit `terraform init`.
    - FAILED=false
    - gitlab-tofu -- apply -no-color >/tmp/output.txt 2>&1 || FAILED=true
    - cat /tmp/output.txt
    - test $FAILED = true
    - 'cat /tmp/output.txt | grep "Error: Backend initialization required, please run \"tofu init\""'