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,