270 lines
9.1 KiB
YAML
270 lines
9.1 KiB
YAML
name: Acceptance Testing
|
|
description: "Acceptance Testing pipeline"
|
|
|
|
inputs:
|
|
test_timeout_string:
|
|
description: "string that determines the timeout (default: 45m)"
|
|
default: '90m'
|
|
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 }} -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 }}
|
|
|
|
# does not work correctly
|
|
# - 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 ./... -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 }}
|