Compare commits

..

3 commits

Author SHA1 Message Date
Marcel S. Henselin
b06e7ffd40 chore: add tests
[skip ci]
2026-03-25 16:53:23 +01:00
Marcel S. Henselin
ff144042ba chore: add notifications
[skip ci]
2026-03-25 13:56:44 +01:00
Marcel S. Henselin
413dbd6f50 chore: add notifications
[skip ci]
2026-03-25 13:52:47 +01:00
9 changed files with 200 additions and 288 deletions

View file

@ -65,15 +65,6 @@ 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:
@ -97,10 +88,6 @@ runs:
with:
terraform_wrapper: false
- uses: actions/setup-node@v6
with:
node-version: '24.x'
- name: Setup JAVA
uses: actions/setup-java@v5
with:
@ -203,11 +190,11 @@ runs:
ls -l stackit/"${{ inputs.service_account_json_file_path }}"
echo "::endgroup::"
- name: Run acceptance tests
id: testrun
- name: Run acceptance test file
if: ${{ inputs.test_file != '' }}
shell: bash
run: |
echo "::group::go test"
echo "::group::go test file"
set -e
set -o pipefail
@ -216,22 +203,7 @@ 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"
if [[ -z "$testfile" ]]; then
testfile="./..."
fi
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} \
@ -242,21 +214,7 @@ 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 ${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=<b>FAIL:</b> <br />${have_fail}" >> "$GITHUB_OUTPUT"
echo "::endgroup::"
exit 1
fi
echo "result=no FAIL detected" >> "$GITHUB_OUTPUT"
go test -v ${{ inputs.test_file }} -timeout=${{ inputs.test_timeout_string }} | tee -a acc_test_run.log
echo "::endgroup::"
env:
TF_ACC_PROJECT_ID: ${{ inputs.project_id }}
@ -267,16 +225,55 @@ runs:
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
# 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 all acceptance tests
if: ${{ inputs.test_file == '' }}
shell: bash
run: |
echo "status=${{ steps.testrun.outcome == 'success' && 'SUCCESS' || 'FAILURE' }}" >> "$GITHUB_OUTPUT"
echo "::group::go test all"
set -e
set -o pipefail
- name: Upload test log artifact
if: always()
uses: actions/upload-artifact@v3
with:
name: acc_test.log
path: "stackit/acc_test_run.log"
if [[ "${{ inputs.tf_debug }}" == "true" ]]; then
TF_LOG=INFO
export TF_LOG
fi
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 }}

View file

@ -41,18 +41,6 @@ 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:
@ -127,8 +115,7 @@ runs:
exit 1
fi
- name: Retrieve resources before
id: retrieve_pre
- name: Retrieve resources
run: |
echo "::group::retrieve resources"
set -e
@ -138,28 +125,21 @@ runs:
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)
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 }}"))'
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)
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 }}"))'
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 || echo "status=FAILURE" >> ${GITHUB_OUTPUT};
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; done
echo "::endgroup::"
shell: bash
@ -172,14 +152,11 @@ 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" --force || echo "status=FAILURE" >> ${GITHUB_OUTPUT};
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; done
echo "::endgroup::"
shell: bash
@ -189,39 +166,3 @@ 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

View file

@ -9,17 +9,11 @@ inputs:
title:
description: "The title of the notification."
required: true
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'
default: 'no title provided'
event_author:
description: "The author of the event."
required: true
default: 'unknown'
event_title:
@ -28,23 +22,35 @@ 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: |
@ -54,27 +60,6 @@ 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": "<b style=\"color: green;\">SUCCESS</b>"}},'
;;
FAILURE)
STATUS_COLOR="8b0000/dc143c"
ADD='{"decoratedText": {"startIcon": {"materialIcon": {"name": "stop_circle"}},"text": "<b style=\"color: red;\">FAILURE</b>"}},'
;;
*)
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:
@ -84,8 +69,7 @@ runs:
PAYLOAD=$(jq -n -r \
--arg header "${{ inputs.title }}" \
--arg subtitle "${{ inputs.subtitle }}" \
--arg imgurl "https://cdn.simpleicons.org/${{ inputs.image_slug }}/${{ steps.status.outputs.color }}" \
--arg repo "${{ github.repository || '' }}" \
--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' }}" \
@ -93,8 +77,8 @@ runs:
'{ "cardsV2": [ { "cardId": "notify-${{ github.run_id }}", "card": {
"header": {
"title": "\($header)",
"subtitle": "\($subtitle)",
"imageUrl": "\($imgurl)",
"subtitle": "Repo: \($repo)",
"imageUrl": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/git.png",
"imageType": "SQUARE"
},
"sections": [
@ -102,13 +86,12 @@ runs:
"header": "\($title)",
"collapsible": false,
"widgets": [
${{ steps.status.outputs.status_add }}
{
"decoratedText": {
"startIcon": {
"icon": {
"knownIcon": "PERSON"
},
"text": "<b>\($author)</b>"
"text": "<b>Opened by:</b> \($author)"
}
},
{

View file

@ -33,18 +33,33 @@ jobs:
- name: Checkout
uses: actions/checkout@v6
- name: Notify Google Chat
if: ${{ always() }} # Use always to ensure that the notification is also send on failure of former steps
uses: SimonScholz/google-chat-action@main
with:
webhookUrl: '${{ secrets.GOOGLE_WEBHOOK_URL }}'
jobStatus: '${{ job.status }}'
title: CI pipeline
subtitle: "on: ${{ github.event_name }}"
#imageUrl: https://raw.githubusercontent.com/SimonScholz/simonscholz.github.io/gatsby-homepage/src/assets/img/avatar.webp
#imageType: SQUARE
#imageAltText: Alternative image text
#createDefaultSection: false
#collapsibleDefaultSection: false
#uncollapsibleWidgetsCount: 3
#additionalSections: '[{"header": "Additional Section", "collapsible": true, "widgets": [{"decoratedText": {"startIcon": {"knownIcon": "STAR"},"text": "Additional Section"}}] }]'
#threadKey: ${{ github.event.number }}
- name: Notify
if: always()
uses: ./.github/actions/notify
with:
webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
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 }}"
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 }}"
- name: Check GoReleaser
uses: goreleaser/goreleaser-action@v7

View file

@ -34,20 +34,27 @@ jobs:
- name: Checkout
uses: actions/checkout@v6
- name: Notify
uses: ./.github/actions/notify
- name: Notify Google Chat
if: ${{ always() }} # Use always to ensure that the notification is also send on failure of former steps
uses: SimonScholz/google-chat-action@main
with:
webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
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 <b>${{ inputs.res_prefix }}</b>"
event_number: ${{ forgejo.run_number }}
event_url: "https://tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/actions/runs/${{ forgejo.run_number }}"
webhookUrl: '${{ secrets.GOOGLE_WEBHOOK_URL }}'
jobStatus: '${{ job.status }}'
title: CLEAN-UP pipeline
subtitle: "${{ github.event_name }} with filter prefix \"${{ inputs.res_prefix }}\""
# - name: Notify
# uses: ./.github/actions/notify
# with:
# webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
# title: CLEAN-UP pipeline
# 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 }}"
- name: Clean
id: clean
uses: ./.github/actions/clean_up
with:
project_id: ${{ vars.TF_ACC_PROJECT_ID }}
@ -56,17 +63,3 @@ 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 }} <br /> 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' }}

View file

@ -51,13 +51,12 @@ jobs:
uses: ./.github/actions/notify
with:
webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
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 }}"
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 }}"
- name: Setup Go
uses: actions/setup-go@v6
@ -146,7 +145,6 @@ jobs:
--outFile nav.md
- name: Publish provider to S3
id: publish_to_s3
run: |
set -e
cd release/
@ -167,17 +165,3 @@ 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' }}"

View file

@ -16,23 +16,12 @@ on:
type: boolean
default: false
required: true
test_timeout_string:
description: "string that determines the timeout (default: '120m')"
description: "string that determines the timeout (default: 45m)"
type: string
default: '120m'
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: ''
jobs:
acc_test:
name: Acceptance Tests
@ -41,31 +30,27 @@ 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 Google Chat
if: ${{ always() }} # Use always to ensure that the notification is also send on failure of former steps
uses: SimonScholz/google-chat-action@main
with:
webhookUrl: '${{ secrets.GOOGLE_WEBHOOK_URL }}'
title: Acceptance Tests started
subtitle: "${{ github.event_name }}"
- name: Notify
uses: ./.github/actions/notify
with:
webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
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 }}"
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 }}"
- name: Run Test (workflow dispatch)
if: ${{ forgejo.event_name == 'workflow_dispatch' }}
id: manual_run
continue-on-error: true
if: ${{ github.event_name == 'workflow_dispatch' }}
uses: ./.github/actions/acc_test
with:
go-version: ${{ env.GO_VERSION }}
@ -79,12 +64,9 @@ 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: ${{ forgejo.event_name != 'workflow_dispatch' }}
id: automatic_run
continue-on-error: true
if: ${{ github.event_name != 'workflow_dispatch' }}
uses: ./.github/actions/acc_test
with:
go-version: ${{ env.GO_VERSION }}
@ -97,31 +79,22 @@ 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 Google Chat
if: ${{ always() }} # Use always to ensure that the notification is also send on failure of former steps
uses: SimonScholz/google-chat-action@main
with:
webhookUrl: '${{ secrets.GOOGLE_WEBHOOK_URL }}'
jobStatus: '${{ job.status }}'
title: Acceptance Tests started
subtitle: "${{ github.event_name }} finished"
- name: Notify
uses: ./.github/actions/notify
with:
webhook_url: ${{ secrets.GOOGLE_WEBHOOK_URL }}
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 }}"
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 }}"

View file

@ -157,6 +157,9 @@ func TestAccInstance(t *testing.T) {
updVersion := updNetACL
updVersion.Version = "17"
updRetention := updVersion
updRetention.RetentionDays = 40
testItemID := testutils.ResStr(pfx, "instance", exData.TfName)
compareValuesSame := statecheck.CompareValue(compare.ValuesSame())
resource.ParallelTest(
@ -337,6 +340,23 @@ func TestAccInstance(t *testing.T) {
),
),
},
// Update retention_days
{
PreConfig: func() {
t.Logf(" ... %s - %s", t.Name(), "update version")
},
Config: testutils.StringFromTemplateMust(
"testdata/instance_template.gompl",
updVersion,
),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(
testItemID,
"retention_days",
strconv.Itoa(int(updVersion.RetentionDays)),
),
),
},
// Import test
// test instance imports
{

View file

@ -142,6 +142,9 @@ func TestAccInstance(t *testing.T) {
updSizeData := exData
updSizeData.Size = 25
updRetentionDays := updSizeData
updRetentionDays.RetentionDays = 30
testInstanceID := testutils.ResStr(pfx, "instance", exData.TfName)
compareValuesSame := statecheck.CompareValue(compare.ValuesSame())
@ -182,7 +185,7 @@ func TestAccInstance(t *testing.T) {
PreConfig: func() {
t.Logf("testing: %s - %s", t.Name(), "update name and verify")
},
ExpectNonEmptyPlan: false,
ExpectNonEmptyPlan: true,
Config: testutils.StringFromTemplateMust(
"testdata/instance_template.gompl",
updNameData,
@ -196,23 +199,12 @@ 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: false,
ExpectNonEmptyPlan: true,
Config: testutils.StringFromTemplateMust(
"testdata/instance_template.gompl",
updSizeData,
@ -221,6 +213,20 @@ func TestAccInstance(t *testing.T) {
defaultNoEncInstanceTestChecks(testInstanceID, updSizeData),
),
},
// Update retention_days
{
PreConfig: func() {
t.Logf("testing: %s - %s", t.Name(), "update storage.retention_days and verify")
},
ExpectNonEmptyPlan: true,
Config: testutils.StringFromTemplateMust(
"testdata/instance_template.gompl",
updRetentionDays,
),
Check: resource.ComposeTestCheckFunc(
defaultNoEncInstanceTestChecks(testInstanceID, updRetentionDays),
),
},
// Import test
// test instance imports
{