diff --git a/.github/actions/acc_test/action.yaml b/.github/actions/acc_test/action.yaml
index 23bcd84e..e43ceeff 100644
--- a/.github/actions/acc_test/action.yaml
+++ b/.github/actions/acc_test/action.yaml
@@ -65,6 +65,15 @@ inputs:
description: "testfile to run"
default: ''
+outputs:
+ result:
+ value: ${{ steps.testrun.outputs.result }}
+ description: "the output of the tests"
+
+ status:
+ value: ${{ steps.status.outputs.status }}
+ description: "the status of the tests"
+
runs:
using: "composite"
steps:
@@ -88,6 +97,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,11 +203,11 @@ 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"
+ echo "::group::go test"
set -e
set -o pipefail
@@ -203,60 +216,22 @@ runs:
export TF_LOG
fi
+ testfile="${{ inputs.test_file }}"
+
+ echo "result=no result before run" >> "$GITHUB_OUTPUT"
+
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
-
- if [[ "${{ inputs.tf_debug }}" == "true" ]]; then
- TF_LOG=INFO
- export TF_LOG
+ if [[ -z "$testfile" ]]; then
+ testfile="./..."
fi
- echo "Running acceptance tests for the terraform provider"
+ if [[ -z "$testfile" ]]; then
+ echo "ERROR: No test file provided"
+ exit 1
+ fi
+
+ set +e
cd stackit || exit 1
TF_ACC=1 \
TF_ACC_PROJECT_ID=${TF_ACC_PROJECT_ID} \
@@ -267,7 +242,21 @@ 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 ./... -timeout=${{ inputs.test_timeout_string }}
+ go test -v ${testfile} -timeout=${{ inputs.test_timeout_string }} | tee -a acc_test_run.log
+ set -e
+
+ have_fail=$(cat acc_test_run.log | grep FAIL)
+ if [[ -n $have_fail ]]; then
+ echo "::endgroup::"
+ echo "::group::go test result"
+ echo "Test failed, see acc_test_run.log for details"
+ echo "${have_fail}"
+ echo "result=FAIL:
${have_fail}" >> "$GITHUB_OUTPUT"
+ echo "::endgroup::"
+ exit 1
+ fi
+
+ echo "result=no FAIL detected" >> "$GITHUB_OUTPUT"
echo "::endgroup::"
env:
TF_ACC_PROJECT_ID: ${{ inputs.project_id }}
@@ -277,3 +266,17 @@ runs:
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: Set status output variable
+ if: always()
+ id: status
+ shell: bash
+ run: |
+ echo "status=${{ steps.testrun.outcome == 'success' && 'SUCCESS' || 'FAILURE' }}" >> "$GITHUB_OUTPUT"
+
+ - name: Upload test log artifact
+ if: always()
+ uses: actions/upload-artifact@v3
+ with:
+ name: acc_test.log
+ path: "stackit/acc_test_run.log"
diff --git a/.github/actions/clean_up/action.yaml b/.github/actions/clean_up/action.yaml
index 1cea3615..c8e142fa 100644
--- a/.github/actions/clean_up/action.yaml
+++ b/.github/actions/clean_up/action.yaml
@@ -41,6 +41,18 @@ outputs:
description: "stackit cli version"
value: ${{ steps.stackit_version.outputs.version }}
+ pre_count:
+ description: "number of resources found"
+ value: ${{ steps.retrieve_pre.outputs.count }}
+
+ post_count:
+ description: "number of resources found"
+ value: ${{ steps.retrieve_post.outputs.count }}
+
+ status:
+ description: "status of the test"
+ value: ${{ steps.status.outputs.status }}
+
runs:
using: "composite"
steps:
@@ -115,7 +127,8 @@ runs:
exit 1
fi
- - name: Retrieve resources
+ - name: Retrieve resources before
+ id: retrieve_pre
run: |
echo "::group::retrieve resources"
set -e
@@ -125,21 +138,28 @@ runs:
stackit auth activate-service-account --service-account-key-path .svc_acc.json
echo "SQL Server Flex resources:"
- stackit --verbosity ${{ inputs.log_level }} --project-id "${{ inputs.project_id }}" beta sqlserverflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}"))'
+ sql_res=$(stackit --verbosity ${{ inputs.log_level }} --project-id "${{ inputs.project_id }}" beta sqlserverflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}"))')
+ sql_count=$(echo "$sql_res" | jq -r '.id' | wc -l)
echo "PostgreSQL Flex resources:"
- stackit --verbosity ${{ inputs.log_level }} --project-id "${{ inputs.project_id }}" postgresflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}"))'
+ pg_res=$(stackit --verbosity ${{ inputs.log_level }} --project-id "${{ inputs.project_id }}" postgresflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}"))')
+ pg_count=$(echo "$pg_res" | jq -r '.id' | wc -l)
+ echo "Number of resources found: ${sql_count} SQL Server Flex, ${pg_count} PostgreSQL Flex"
+ echo "count=$(( ${pg_count} + ${sql_count} ))" >> $GITHUB_OUTPUT
echo "::endgroup::"
shell: bash
- name: Delete SQL Server Flex resources
if: ${{ inputs.list_only != 'true' }}
+ id: del_sql
run: |
echo "::group::delete SQL Server Flex resources"
- set -e
stackit --verbosity ${{ inputs.log_level }} auth activate-service-account --service-account-key-path .svc_acc.json
- for s in $(stackit --verbosity ${{ inputs.log_level }} --project-id ${{ inputs.project_id }} beta sqlserverflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}")) | .id'); do stackit --verbosity ${{ inputs.log_level }} -y --project-id ${{ inputs.project_id }} beta sqlserverflex instance delete $s; done
+ for s in $(stackit --verbosity ${{ inputs.log_level }} --project-id ${{ inputs.project_id }} beta sqlserverflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}")) | .id');
+ do
+ stackit --verbosity ${{ inputs.log_level }} -y --project-id ${{ inputs.project_id }} beta sqlserverflex instance delete $s || echo "status=FAILURE" >> ${GITHUB_OUTPUT};
+ done
echo "::endgroup::"
shell: bash
@@ -152,11 +172,14 @@ runs:
- name: Delete PostgreSQL Flex resources
if: ${{ inputs.list_only != 'true' }}
+ id: del_pg
run: |
echo "::group::delete PostgreSQL Flex resources"
- set -e
stackit auth activate-service-account --service-account-key-path .svc_acc.json
- for s in $(stackit --verbosity ${{ inputs.log_level }} --project-id ${{ inputs.project_id }} postgresflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}")) | .id'); do stackit --verbosity ${{ inputs.log_level }} -y --project-id ${{ inputs.project_id }} postgresflex instance delete $s; done
+ for s in $(stackit --verbosity ${{ inputs.log_level }} --project-id ${{ inputs.project_id }} postgresflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}")) | .id');
+ do
+ stackit --verbosity ${{ inputs.log_level }} -y --project-id ${{ inputs.project_id }} postgresflex instance delete "$s" --force || echo "status=FAILURE" >> ${GITHUB_OUTPUT};
+ done
echo "::endgroup::"
shell: bash
@@ -166,3 +189,39 @@ runs:
set -e
echo "Skip deleting: list only mode"
shell: bash
+
+ - name: Retrieve resources after
+ id: retrieve_post
+ run: |
+ echo "::group::retrieve resources"
+ set -e
+ echo "authenticating api"
+ STACKIT_SERVICE_ACCOUNT_KEY_PATH="${PWD}/.svc_acc.json"
+ export STACKIT_SERVICE_ACCOUNT_KEY_PATH
+ stackit auth activate-service-account --service-account-key-path .svc_acc.json
+
+ echo "SQL Server Flex resources:"
+ sql_res=$(stackit --verbosity ${{ inputs.log_level }} --project-id "${{ inputs.project_id }}" beta sqlserverflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}"))')
+ sql_count=$(echo "$sql_res" | jq -r '.id' | wc -l)
+
+ echo "PostgreSQL Flex resources:"
+ pg_res=$(stackit --verbosity ${{ inputs.log_level }} --project-id "${{ inputs.project_id }}" postgresflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}"))')
+ pg_count=$(echo "$pg_res" | jq -r '.id' | wc -l)
+
+ echo "Number of resources found: ${sql_count} SQL Server Flex, ${pg_count} PostgreSQL Flex"
+ echo "count=$(( ${pg_count} + ${sql_count} ))" >> $GITHUB_OUTPUT
+ echo "::endgroup::"
+ shell: bash
+
+ - name: Set status
+ if: always()
+ id: status
+ run: |
+ status="SUCCESS"
+ if [[ "${{ steps.del_pg.outputs.status }}" == "FAILURE" ]]; then
+ status=FAILURE"
+ elif [[ "${{ steps.del_sql.outputs.status }}" == "FAILURE" ]]; then
+ status=FAILURE"
+ fi
+ echo "status=$status" >> $GITHUB_OUTPUT
+ shell: bash
diff --git a/.github/actions/notify/action.yaml b/.github/actions/notify/action.yaml
index f260d087..2e72732e 100644
--- a/.github/actions/notify/action.yaml
+++ b/.github/actions/notify/action.yaml
@@ -9,11 +9,17 @@ inputs:
title:
description: "The title of the notification."
required: true
- default: 'no title provided'
+
+ subtitle:
+ description: "The subtitle of the notification."
+ default: 'no subtitle provided'
+
+ image_slug:
+ description: "The slug of the image to be included in the notification."
+ default: 'git'
event_author:
description: "The author of the event."
- required: true
default: 'unknown'
event_title:
@@ -22,35 +28,23 @@ inputs:
event_body:
description: "The body of the event."
- required: true
default: 'no body provided'
event_number:
description: "The number of the event."
- required: true
default: 'no number provided'
event_url:
description: "The url of the event."
- required: true
default: 'none'
+ status:
+ description: "The status of the event."
+ default: 'UNKNOWN'
+
runs:
using: "composite"
steps:
-# - name: event list
-# shell: bash
-# run: |
-# cat <<'EOF'
-# ${{ toJSON(github) }}
-# EOF
-#
-# - name: print env
-# shell: bash
-# run: |
-# env
-# exit 1
-
- name: Install prerequisites
shell: bash
run: |
@@ -60,6 +54,27 @@ runs:
apt install -y curl jq
echo "::endgroup::"
+ - name: Determine status color
+ id: status
+ shell: bash
+ run: |
+ case "${{ inputs.status }}" in
+ SUCCESS)
+ STATUS_COLOR="006400/228b22"
+ ADD='{"decoratedText": {"startIcon": {"materialIcon": {"name": "check_circle"}},"text": "SUCCESS"}},'
+ ;;
+ FAILURE)
+ STATUS_COLOR="8b0000/dc143c"
+ ADD='{"decoratedText": {"startIcon": {"materialIcon": {"name": "stop_circle"}},"text": "FAILURE"}},'
+ ;;
+ *)
+ STATUS_COLOR="483d8b/6495ed"
+ ADD=''
+ ;;
+ esac
+ echo "color=${STATUS_COLOR}" >> "$GITHUB_OUTPUT"
+ echo "status_add=${ADD}" >> "$GITHUB_OUTPUT"
+
- name: Notify via Google Chat Webhook
shell: bash
env:
@@ -69,7 +84,8 @@ runs:
PAYLOAD=$(jq -n -r \
--arg header "${{ inputs.title }}" \
- --arg repo "${{ github.repository || '' }}" \
+ --arg subtitle "${{ inputs.subtitle }}" \
+ --arg imgurl "https://cdn.simpleicons.org/${{ inputs.image_slug }}/${{ steps.status.outputs.color }}" \
--arg title "${{ inputs.event_title || 'no event title given' }}" \
--arg body "${{ inputs.event_body || 'no event body given' }}" \
--arg author "${{ inputs.event_author || 'no event author given' }}" \
@@ -77,8 +93,8 @@ runs:
'{ "cardsV2": [ { "cardId": "notify-${{ github.run_id }}", "card": {
"header": {
"title": "\($header)",
- "subtitle": "Repo: \($repo)",
- "imageUrl": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/git.png",
+ "subtitle": "\($subtitle)",
+ "imageUrl": "\($imgurl)",
"imageType": "SQUARE"
},
"sections": [
@@ -86,12 +102,13 @@ runs:
"header": "\($title)",
"collapsible": false,
"widgets": [
+ ${{ steps.status.outputs.status_add }}
{
"decoratedText": {
- "icon": {
+ "startIcon": {
"knownIcon": "PERSON"
},
- "text": "Opened by: \($author)"
+ "text": "\($author)"
}
},
{
diff --git a/.github/workflows/ci_new.yaml b/.github/workflows/ci_new.yaml
index d79f806a..61288df4 100644
--- a/.github/workflows/ci_new.yaml
+++ b/.github/workflows/ci_new.yaml
@@ -34,15 +34,17 @@ jobs:
uses: actions/checkout@v6
- name: Notify
+ if: always()
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 }}
- 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 }}"
+ title: "[START] CI pipeline (#${{ forgejo.run_number }})"
+ subtitle: "${{ forgejo.event_name }} on ${{ forgejo.ref_name }}"
+ event_title: "${{ forgejo.event_name }} for ${{ forgejo.repository }}"
+ event_author: ${{ forgejo.actor }}
+ event_body: "${{ forgejo.event_name }} on ${{ forgejo.ref }} for ${{ forgejo.repository }}"
+ 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: Check GoReleaser
uses: goreleaser/goreleaser-action@v7
diff --git a/.github/workflows/clean_up.yaml b/.github/workflows/clean_up.yaml
index 318c5054..e1cc291b 100644
--- a/.github/workflows/clean_up.yaml
+++ b/.github/workflows/clean_up.yaml
@@ -38,14 +38,16 @@ 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 }}
- 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 }}"
+ title: "[START] CLEAN UP pipeline (#${{ forgejo.run_number }})"
+ subtitle: "${{ forgejo.repository }}"
+ event_title: ${{ forgejo.event_name }}
+ event_author: ${{ forgejo.actor }}
+ event_body: "try to remove all resources with prefix ${{ inputs.res_prefix }}"
+ 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
+ id: clean
uses: ./.github/actions/clean_up
with:
project_id: ${{ vars.TF_ACC_PROJECT_ID }}
@@ -54,3 +56,17 @@ jobs:
service_account_json_content_b64: "${{ secrets.TF_ACC_SERVICE_ACCOUNT_JSON_B64 }}"
list_only: ${{ inputs.list_only }}
log_level: ${{ inputs.log_level }}
+
+ - name: Notify
+ if: always()
+ uses: ./.github/actions/notify
+ with:
+ webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
+ title: "[END] CLEAN UP pipeline (#${{ forgejo.run_number }})"
+ subtitle: "${{ forgejo.repository }}"
+ event_title: ${{ forgejo.event_name }}
+ event_author: ${{ forgejo.actor }}
+ event_body: "count before cleaning: ${{ steps.clean.outputs.pre_count }}
count after cleaning: ${{ steps.clean.outputs.post_count }}"
+ event_number: ${{ forgejo.run_number }}
+ event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ forgejo.run_number }}"
+ status: ${{ steps.clean.outcome == 'success' && 'SUCCESS' || 'FAILURE' }}
diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml
index 2810d5c4..dbfbc247 100644
--- a/.github/workflows/publish.yaml
+++ b/.github/workflows/publish.yaml
@@ -51,12 +51,13 @@ jobs:
uses: ./.github/actions/notify
with:
webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
- title: Publish started
- event_title: ${{ github.event.type }}
- event_author: ${{ github.event.actor.login }}
- event_body: "Trigger: ${{ github.event_name }}"
- event_number: ${{ github.event.id }}
- event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ github.run_id }}"
+ title: "[START] Publish (#${{ forgejo.run_number }})"
+ subtitle: "${{ forgejo.event_name }} on branch ${{ forgejo.ref }}"
+ event_title: "run started"
+ event_author: ${{ forgejo.actor }}
+ event_body: ""
+ event_number: ${{ forgejo.event.id }}
+ event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ forgejo.run_number }}"
- name: Setup Go
uses: actions/setup-go@v6
@@ -145,6 +146,7 @@ jobs:
--outFile nav.md
- name: Publish provider to S3
+ id: publish_to_s3
run: |
set -e
cd release/
@@ -165,3 +167,17 @@ jobs:
# echo "${{ github.ref_name }}" >docs/_version.txt
scp -o StrictHostKeyChecking=no -r docs ubuntu@${{ vars.DOCS_SERVER_IP }}:/srv/www/
scp -o StrictHostKeyChecking=no nav.md ubuntu@${{ vars.DOCS_SERVER_IP }}:/srv/www/
+
+ - name: Notify
+ if: always()
+ uses: ./.github/actions/notify
+ with:
+ webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
+ title: "[END] Publish (#${{ forgejo.run_number }})"
+ subtitle: "${{ forgejo.event_name }} on branch ${{ forgejo.ref }}"
+ event_title: "released: ${{ steps.get_version.outputs.version }}"
+ event_author: ${{ forgejo.actor }}
+ event_body: ""
+ event_number: ${{ forgejo.event.id }}
+ event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ forgejo.run_number }}"
+ status: "${{ steps.publish_to_s3.outcome == 'success' && 'SUCCESS' || 'FAILURE' }}"
diff --git a/.github/workflows/tf-acc-test.yaml b/.github/workflows/tf-acc-test.yaml
index 85c78437..91619dde 100644
--- a/.github/workflows/tf-acc-test.yaml
+++ b/.github/workflows/tf-acc-test.yaml
@@ -16,12 +16,23 @@ on:
type: boolean
default: false
required: true
+
test_timeout_string:
- description: "string that determines the timeout (default: 45m)"
+ description: "string that determines the timeout (default: '120m')"
type: string
- default: '90m'
+ default: '120m'
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: ''
+
jobs:
acc_test:
name: Acceptance Tests
@@ -30,19 +41,31 @@ jobs:
- name: Checkout
uses: actions/checkout@v6
+ - name: set start time
+ id: start_time
+ continue-on-error: true
+ run: |
+ time=$(date --rfc-3339=ns)
+ echo "start_time=$time" >> ${GITHUB_OUTPUT}
+ start=$(date +%s%N)
+ echo "start=$start" >> ${GITHUB_OUTPUT}
+
- name: Notify
uses: ./.github/actions/notify
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 }}"
+ title: "[START] Terraform Acceptance Tests (#${{ forgejo.run_number }})"
+ subtitle: "${{ forgejo.event_name }} on branch ${{ forgejo.ref }}"
+ event_title: "started: ${{ steps.start_time.outputs.start_time }}"
+ event_author: ${{ forgejo.actor }}
+ event_body: ${{ inputs.test_file }}
+ 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: Run Test (workflow dispatch)
- if: ${{ github.event_name == 'workflow_dispatch' }}
+ if: ${{ forgejo.event_name == 'workflow_dispatch' }}
+ id: manual_run
+ continue-on-error: true
uses: ./.github/actions/acc_test
with:
go-version: ${{ env.GO_VERSION }}
@@ -56,9 +79,12 @@ 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' }}
+ if: ${{ forgejo.event_name != 'workflow_dispatch' }}
+ id: automatic_run
+ continue-on-error: true
uses: ./.github/actions/acc_test
with:
go-version: ${{ env.GO_VERSION }}
@@ -71,13 +97,31 @@ jobs:
tf_acc_kek_key_version: ${{ vars.TF_ACC_KEK_KEY_VERSION }}
tf_acc_kek_service_account: ${{ vars.TF_ACC_KEK_SERVICE_ACCOUNT }}
+ - name: set end time
+ id: end_time
+ continue-on-error: true
+ run: |
+ set -e
+ echo "auto status: ${{ steps.automatic_run.outputs.status }}"
+ echo "manual status: ${{ steps.manual_run.outputs.status }}"
+ echo "status: ${{ forgejo.event_name == 'workflow_dispatch' && steps.manual_run.outputs.status || steps.automatic_run.outputs.status }}"
+ echo "end_time=$(date --rfc-3339=ns)" >> ${GITHUB_OUTPUT}
+ end=$(date +%s%N)
+ echo "end=${end}" >> ${GITHUB_OUTPUT}
+ start=${{ steps.start_time.outputs.start }}
+ diff=$((end-start))
+ duration=$(printf "%s.%s" "${diff:0: -9}" "${diff: -9:3}")
+ echo "duration=${duration}" >> ${GITHUB_OUTPUT}
+
- name: Notify
uses: ./.github/actions/notify
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_number: ${{ github.event.id }}
- event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ github.run_id }}"
+ title: "[END] Terraform Acceptance Tests (#${{ forgejo.run_number }})"
+ subtitle: "${{ forgejo.event_name }} on branch ${{ forgejo.ref }} with status: ${{ forgejo.event_name == 'workflow_dispatch' && steps.manual_run.outputs.status || steps.automatic_run.outputs.status }}"
+ event_title: "run ended: ${{ steps.end_time.outputs.end_time }}, duration: ${{ steps.end_time.outputs.duration }} seconds"
+ event_author: ${{ forgejo.actor }}
+ event_body: "${{ forgejo.event_name == 'workflow_dispatch' && steps.manual_run.outputs.result || steps.automatic_run.outputs.result }}"
+ event_number: ${{ forgejo.event.id }}
+ event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ forgejo.run_number }}"
+ status: "${{ forgejo.event_name == 'workflow_dispatch' && steps.manual_run.outputs.status || steps.automatic_run.outputs.status }}"
diff --git a/stackit/internal/services/sqlserverflexbeta/sqlserverflex_acc_test.go b/stackit/internal/services/sqlserverflexbeta/sqlserverflex_acc_test.go
index 77955dd5..fae56505 100644
--- a/stackit/internal/services/sqlserverflexbeta/sqlserverflex_acc_test.go
+++ b/stackit/internal/services/sqlserverflexbeta/sqlserverflex_acc_test.go
@@ -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,12 +196,23 @@ 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() {
t.Logf("testing: %s - %s", t.Name(), "update storage.size and verify")
},
- ExpectNonEmptyPlan: true,
+ ExpectNonEmptyPlan: false,
Config: testutils.StringFromTemplateMust(
"testdata/instance_template.gompl",
updSizeData,