name: Acceptance Testing description: "Acceptance Testing pipeline" inputs: test_timeout_string: description: "string that determines the timeout (default: 45m)" default: '45m' required: true go-version: description: "go version to install" default: '1.25' required: true project_id: description: "STACKIT project ID for tests" required: true project_user_email: required: true description: "project user email for acc testing" tf_acc_kek_key_id: description: "KEK key ID" required: true tf_acc_kek_key_ring_id: description: "KEK key ring ID" required: true tf_acc_kek_key_version: description: "KEK key version" required: true tf_acc_kek_service_account: description: "KEK service account email" required: true region: description: "STACKIT region for tests" default: 'eu01' required: true service_account_json_content: description: "STACKIT service account JSON file contents" required: true default: "" service_account_json_content_b64: description: "STACKIT service account JSON file contents" required: true default: "" service_account_json_file_path: description: "STACKIT service account JSON file contents" required: true default: 'service_account.json' test_file: description: "testfile to run" default: '' #outputs: # random-number: # description: "Random number" # value: ${{ steps.random-number-generator.outputs.random-number }} runs: using: "composite" steps: # - name: Random Number Generator # id: random-number-generator # run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT # shell: bash - name: Install needed tools shell: bash run: | echo "::group::apt install" set -e apt-get -y -qq update >apt_update.log 2>apt_update_err.log if [ $? -ne 0 ]; then cat apt_update.log apt_update_err.log fi apt-get -y -qq install jq python3 python3-pip python-is-python3 s3cmd git make wget >apt_get.log 2>apt_get_err.log if [ $? -ne 0 ]; then cat apt_get.log apt_get_err.log fi echo "::endgroup::" - name: Setup JAVA uses: actions/setup-java@v5 with: distribution: 'temurin' # See 'Supported distributions' for available options java-version: '21' - name: Install Go ${{ inputs.go-version }} uses: actions/setup-go@v6 with: # go-version: ${{ inputs.go-version }} check-latest: true go-version-file: 'go.mod' - name: Determine GOMODCACHE shell: bash id: goenv run: | set -e echo "gomodcache=$(go env GOMODCACHE)" >> "$GITHUB_OUTPUT" - name: Restore cached GO pkg id: cache-gopkg uses: actions/cache/restore@v5 with: path: "${{ steps.goenv.outputs.gomodcache }}" key: ${{ runner.os }}-gopkg - name: Install go tools if: steps.cache-gopkg.outputs.cache-hit != 'true' shell: bash run: | echo "::group::go install" set -e go mod download go install golang.org/x/tools/cmd/goimports@latest go install github.com/hashicorp/terraform-plugin-codegen-framework/cmd/tfplugingen-framework@latest go install github.com/hashicorp/terraform-plugin-codegen-openapi/cmd/tfplugingen-openapi@latest go install github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs@latest go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest echo "::endgroup::" - name: Run go mod tidy shell: bash run: go mod tidy - name: Save GO package Cache id: cache-gopkg-save uses: actions/cache/save@v5 with: path: | ${{ steps.goenv.outputs.gomodcache }} key: ${{ runner.os }}-gopkg - name: Define service account file path variable id: service_account shell: bash run: | echo "safilepath=${PWD}/stackit/${{ inputs.service_account_json_file_path }}" >> "$GITHUB_OUTPUT" - name: Creating service_account file from json input if: inputs.service_account_json_content != '' shell: bash run: | echo "::group::create service account file" set -e set -o pipefail jsonFile="${{ inputs.service_account_json_file_path }}" jsonFile="${jsonFile:-x}" if [ "${jsonFile}" == "x" ]; then echo "no service account file path provided" exit 1 fi if [ ! -f "${jsonFile}" ]; then echo "creating service account file '${{ inputs.service_account_json_file_path }}'" echo "${{ inputs.service_account_json_content }}" > stackit/"${{ inputs.service_account_json_file_path }}" fi ls -l stackit/"${{ inputs.service_account_json_file_path }}" echo "::endgroup::" - name: Creating service_account file from base64 json input if: inputs.service_account_json_content_b64 != '' shell: bash run: | echo "::group::create service account file" set -e set -o pipefail jsonFile="${{ inputs.service_account_json_file_path }}" jsonFile="${jsonFile:-x}" if [ "${jsonFile}" == "x" ]; then echo "no service account file path provided" exit 1 fi if [ ! -f "${jsonFile}" ]; then echo "creating service account file '${{ inputs.service_account_json_file_path }}'" echo "${{ inputs.service_account_json_content_b64 }}" | base64 -d > stackit/"${{ inputs.service_account_json_file_path }}" fi ls -l stackit/"${{ inputs.service_account_json_file_path }}" echo "::endgroup::" - name: Run acceptance test file if: ${{ inputs.test_file != '' }} shell: bash run: | echo "::group::go test file" set -e set -o pipefail echo "Running acceptance tests for the terraform provider" cd stackit || exit 1 TF_ACC=1 \ TF_ACC_PROJECT_ID=${TF_ACC_PROJECT_ID} \ TF_ACC_REGION=${TF_ACC_REGION} \ TF_ACC_TEST_PROJECT_USER_EMAIL=${TF_ACC_TEST_PROJECT_USER_EMAIL} \ TF_ACC_SERVICE_ACCOUNT_FILE="${PWD}/${{ inputs.service_account_json_file_path }}" \ TF_ACC_KEK_KEY_ID=${TF_ACC_KEK_KEY_ID} \ TF_ACC_KEK_KEY_RING_ID=${TF_ACC_KEK_KEY_RING_ID} \ TF_ACC_KEK_KEY_VERSION=${TF_ACC_KEK_KEY_VERSION} \ TF_ACC_KEK_SERVICE_ACCOUNT=${TF_ACC_KEK_SERVICE_ACCOUNT} \ go test -v ${{ inputs.test_file }} -count=1 -timeout=${{ inputs.test_timeout_string }} echo "::endgroup::" env: TF_ACC_PROJECT_ID: ${{ inputs.project_id }} TF_ACC_REGION: ${{ inputs.region }} TF_ACC_TEST_PROJECT_USER_EMAIL: ${{ inputs.project_user_email }} TF_ACC_KEK_KEY_ID: ${{ inputs.tf_acc_kek_key_id }} TF_ACC_KEK_KEY_RING_ID: ${{ inputs.tf_acc_kek_key_ring_id }} TF_ACC_KEK_KEY_VERSION: ${{ inputs.tf_acc_kek_key_version }} TF_ACC_KEK_SERVICE_ACCOUNT: ${{ inputs.tf_acc_kek_service_account }} - name: Run test action if: ${{ inputs.test_file == '' }} env: TF_ACC: 1 TF_ACC_PROJECT_ID: ${{ inputs.project_id }} TF_ACC_REGION: ${{ inputs.region }} TF_ACC_TEST_PROJECT_USER_EMAIL: ${{ inputs.project_user_email }} TF_ACC_KEK_KEY_ID: ${{ inputs.tf_acc_kek_key_id }} TF_ACC_KEK_KEY_RING_ID: ${{ inputs.tf_acc_kek_key_ring_id }} TF_ACC_KEK_KEY_VERSION: ${{ inputs.tf_acc_kek_key_version }} TF_ACC_KEK_SERVICE_ACCOUNT: ${{ inputs.tf_acc_kek_service_account }} TF_ACC_SERVICE_ACCOUNT_FILE: ${{ steps.service_account.outputs.safile }} uses: robherley/go-test-action@v0 with: testArguments: "./... -timeout ${{ inputs.test_timeout_string }}" moduleDirectory: "stackit" # - name: Run acceptance tests # if: ${{ inputs.test_file == '' }} # shell: bash # run: | # echo "::group::go test all" # set -e # set -o pipefail # # echo "Running acceptance tests for the terraform provider" # cd stackit || exit 1 # TF_ACC=1 \ # TF_ACC_PROJECT_ID=${TF_ACC_PROJECT_ID} \ # TF_ACC_REGION=${TF_ACC_REGION} \ # TF_ACC_TEST_PROJECT_USER_EMAIL=${TF_ACC_TEST_PROJECT_USER_EMAIL} \ # TF_ACC_SERVICE_ACCOUNT_FILE="${PWD}/${{ inputs.service_account_json_file_path }}" \ # TF_ACC_KEK_KEY_ID=${TF_ACC_KEK_KEY_ID} \ # TF_ACC_KEK_KEY_RING_ID=${TF_ACC_KEK_KEY_RING_ID} \ # TF_ACC_KEK_KEY_VERSION=${TF_ACC_KEK_KEY_VERSION} \ # TF_ACC_KEK_SERVICE_ACCOUNT=${TF_ACC_KEK_SERVICE_ACCOUNT} \ # go test -v ./... -count=1 -timeout=${{ inputs.test_timeout_string }} # echo "::endgroup::" # env: # TF_ACC_PROJECT_ID: ${{ inputs.project_id }} # TF_ACC_REGION: ${{ inputs.region }} # TF_ACC_TEST_PROJECT_USER_EMAIL: ${{ inputs.project_user_email }} # TF_ACC_KEK_KEY_ID: ${{ inputs.tf_acc_kek_key_id }} # TF_ACC_KEK_KEY_RING_ID: ${{ inputs.tf_acc_kek_key_ring_id }} # TF_ACC_KEK_KEY_VERSION: ${{ inputs.tf_acc_kek_key_version }} # TF_ACC_KEK_SERVICE_ACCOUNT: ${{ inputs.tf_acc_kek_service_account }}