diff --git a/.github/actions/acc_test/action.yaml b/.github/actions/acc_test/action.yaml index e43ceeff..99a1ffeb 100644 --- a/.github/actions/acc_test/action.yaml +++ b/.github/actions/acc_test/action.yaml @@ -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=FAIL:
${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 }} diff --git a/.github/actions/clean_up/action.yaml b/.github/actions/clean_up/action.yaml index c8e142fa..1cea3615 100644 --- a/.github/actions/clean_up/action.yaml +++ b/.github/actions/clean_up/action.yaml @@ -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 diff --git a/.github/actions/notify/action.yaml b/.github/actions/notify/action.yaml index 2e72732e..f260d087 100644 --- a/.github/actions/notify/action.yaml +++ b/.github/actions/notify/action.yaml @@ -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": "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: @@ -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": "\($author)" + "text": "Opened by: \($author)" } }, { diff --git a/.github/workflows/ci_new.yaml b/.github/workflows/ci_new.yaml index 61288df4..8679e134 100644 --- a/.github/workflows/ci_new.yaml +++ b/.github/workflows/ci_new.yaml @@ -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 diff --git a/.github/workflows/clean_up.yaml b/.github/workflows/clean_up.yaml index e1cc291b..b5a84fed 100644 --- a/.github/workflows/clean_up.yaml +++ b/.github/workflows/clean_up.yaml @@ -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 ${{ 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 }}" + 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 }}
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 dbfbc247..2810d5c4 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -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' }}" diff --git a/.github/workflows/tf-acc-test.yaml b/.github/workflows/tf-acc-test.yaml index 91619dde..cc76fd61 100644 --- a/.github/workflows/tf-acc-test.yaml +++ b/.github/workflows/tf-acc-test.yaml @@ -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 }}" diff --git a/stackit/internal/services/postgresflexalpha/postgresflex_acc_test.go b/stackit/internal/services/postgresflexalpha/postgresflex_acc_test.go index 6c057cfb..4dd1e6ea 100644 --- a/stackit/internal/services/postgresflexalpha/postgresflex_acc_test.go +++ b/stackit/internal/services/postgresflexalpha/postgresflex_acc_test.go @@ -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 { diff --git a/stackit/internal/services/sqlserverflexbeta/sqlserverflex_acc_test.go b/stackit/internal/services/sqlserverflexbeta/sqlserverflex_acc_test.go index fae56505..399eed3f 100644 --- a/stackit/internal/services/sqlserverflexbeta/sqlserverflex_acc_test.go +++ b/stackit/internal/services/sqlserverflexbeta/sqlserverflex_acc_test.go @@ -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 {