chore: refactor pipelines #96

Merged
marcel.henselin merged 19 commits from test/pipelines into main 2026-03-26 16:18:01 +00:00
4 changed files with 74 additions and 65 deletions

View file

@ -65,6 +65,11 @@ inputs:
description: "testfile to run"
default: ''
outputs:
result:
value: ${{ steps.testrun.result }}
description: "the output of the tests"
runs:
using: "composite"
steps:
@ -88,6 +93,10 @@ runs:
with:
terraform_wrapper: false
- uses: actions/setup-node@v6
with:
node-version: '24.x'
- name: Setup JAVA
uses: actions/setup-java@v5
with:
@ -190,8 +199,8 @@ runs:
ls -l stackit/"${{ inputs.service_account_json_file_path }}"
echo "::endgroup::"
- name: Run acceptance test file
if: ${{ inputs.test_file != '' }}
- name: Run acceptance tests
id: testrun
shell: bash
run: |
echo "::group::go test file"
@ -203,7 +212,10 @@ runs:
export TF_LOG
fi
testfile="${{ inputs.test_file }}"
echo "Running acceptance tests for the terraform provider"
set +e
cd stackit || exit 1
TF_ACC=1 \
TF_ACC_PROJECT_ID=${TF_ACC_PROJECT_ID} \
@ -214,7 +226,16 @@ runs:
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 }}
go test -v ${testfile} -timeout=${{ inputs.test_timeout_string }} | tee -a acc_test_run.log
echo "::endgroup::"
set -e
echo "::group::go test result"
if [ $? -ne 0 ]; then
echo "Test failed, see acc_test_run.log for details"
res=$(cat acc_test_run.log | grep -v "=== RUN" | grep -v "\-\-\- PASS" | grep -v "=== CONT" | grep -v "=== PAUSE")
echo "result=${res}" >> "$GITHUB_OUTPUT"
exit 1
fi
echo "::endgroup::"
env:
TF_ACC_PROJECT_ID: ${{ inputs.project_id }}
@ -225,55 +246,19 @@ runs:
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 == '' }}
- name: Artifact upload start
shell: bash
run: |
echo "::group::go test all"
set -e
set -o pipefail
echo "::group::artifact upload"
if [[ "${{ inputs.tf_debug }}" == "true" ]]; then
TF_LOG=INFO
export TF_LOG
fi
- name: Upload test log artifact
if: always()
uses: actions/upload-artifact@v3
with:
name: acc_test.log
path: "stackit/acc_test_run.log"
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 }}
- name: Artifact upload finish
shell: bash
run: |
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 }}

View file

@ -38,12 +38,12 @@ jobs:
uses: ./.github/actions/notify
with:
webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
title: CI pipeline started
event_title: ${{ github.event.type }}
event_author: ${{ github.event.actor.login }}
title: CLEAN UP pipeline started
event_title: ${{ forgejo.event_name }}
event_author: ${{ forgejo.actor }}
event_body: "Filter: ${{ inputs.res_prefix }}"
event_number: ${{ github.event.id }}
event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ github.run_id }}"
event_number: ${{ forgejo.run_number }}
event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ forgejo.run_number }}"
- name: Clean
uses: ./.github/actions/clean_up

View file

@ -21,6 +21,16 @@ on:
type: string
default: '90m'
required: true
test_file:
description: "string that determines the test file to run (default all tests)"
type: choice
options:
- tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/wait/postgresflexalpha
- tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha
- tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/wait/sqlserverflexbeta
- tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/sqlserverflexbeta
default: ''
required: true
jobs:
acc_test:
@ -35,14 +45,15 @@ jobs:
with:
webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
title: Terraform Acceptance Tests started
event_title: ${{ github.event.type }}
event_author: ${{ github.event.actor.login }}
event_body: 'No event body.'
event_number: ${{ github.event.id }}
event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ github.run_id }}"
event_title: ${{ github.event_name }}
event_author: ${{ github.actor }}
event_body: ${{ inputs.test_file }}
event_number: ${{ github.run_id }}
event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ forgejo.run_number }}"
- name: Run Test (workflow dispatch)
if: ${{ github.event_name == 'workflow_dispatch' }}
id: manual_run
uses: ./.github/actions/acc_test
with:
go-version: ${{ env.GO_VERSION }}
@ -56,9 +67,11 @@ jobs:
tf_acc_kek_service_account: ${{ vars.TF_ACC_KEK_SERVICE_ACCOUNT }}
tf_debug: ${{ inputs.enable_debug }}
test_timeout_string: ${{ inputs.test_timeout_string }}
test_file: ${{ inputs.test_file }}
- name: Run Test (automatic)
if: ${{ github.event_name != 'workflow_dispatch' }}
id: automatic_run
uses: ./.github/actions/acc_test
with:
go-version: ${{ env.GO_VERSION }}
@ -76,8 +89,8 @@ jobs:
with:
webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
title: Terraform Acceptance Tests finished
event_title: ${{ github.event.type }}
event_author: ${{ github.event.actor.login }}
event_body: 'No event body.'
event_title: ${{ github.event_name }}
event_author: ${{ github.actor }}
event_body: "${{ steps.automatic_run.outputs.result || steps.manual_run.outputs.result }}"
event_number: ${{ github.event.id }}
event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ github.run_id }}"
event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ forgejo.run_number }}"

View file

@ -182,7 +182,7 @@ func TestAccInstance(t *testing.T) {
PreConfig: func() {
t.Logf("testing: %s - %s", t.Name(), "update name and verify")
},
ExpectNonEmptyPlan: true,
ExpectNonEmptyPlan: false,
Config: testutils.StringFromTemplateMust(
"testdata/instance_template.gompl",
updNameData,
@ -196,6 +196,17 @@ func TestAccInstance(t *testing.T) {
defaultNoEncInstanceTestChecks(testInstanceID, updNameData),
),
},
// Expect empty plan after update
{
PreConfig: func() {
t.Logf("testing: %s - %s", t.Name(), "expect empty plan")
},
ExpectNonEmptyPlan: false,
Config: testutils.StringFromTemplateMust(
"testdata/instance_template.gompl",
updNameData,
),
},
// Update size and verify
{
PreConfig: func() {