From da19f1faa0ef8ade52cc20d5e9a854ebeda6eb43 Mon Sep 17 00:00:00 2001 From: Sander Blue Date: Thu, 23 May 2024 15:51:32 -0500 Subject: [PATCH] feat(automation): run integration tests and report drift --- .github/workflows/test_integration.yml | 131 ++++++++++---------- .github/workflows/test_integration_cron.yml | 101 +++++++++++++++ .github/workflows/test_unit.yml | 65 +--------- build/test.mk | 5 - newrelic/provider_unit_test.go | 2 +- scripts/detect-state-drift.js | 17 +-- 6 files changed, 171 insertions(+), 150 deletions(-) create mode 100644 .github/workflows/test_integration_cron.yml diff --git a/.github/workflows/test_integration.yml b/.github/workflows/test_integration.yml index 716b6883d..e817d2f1d 100644 --- a/.github/workflows/test_integration.yml +++ b/.github/workflows/test_integration.yml @@ -5,9 +5,40 @@ on: push: branches: [main] pull_request: - # schedule: - # # Cron executes at 0800, 1200 1600 (8am, 12pm, 4pm) - # - cron: "0 8,12,16 * * 1-5" + workflow_call: + secrets: + NEW_RELIC_ACCOUNT_ID: + required: true + NEW_RELIC_SUBACCOUNT_ID: + required: true + NEW_RELIC_ADMIN_API_KEY: + required: true + NEW_RELIC_API_KEY: + required: true + NEW_RELIC_LICENSE_KEY: + required: true + NEW_RELIC_REGION: + required: true + NEW_RELIC_INSIGHTS_INSERT_KEY: + required: true + NR_ACC_TESTING: + required: true + INTEGRATION_TESTING_AWS_ARN: + required: true + INTEGRATION_TESTING_GCP_ACCOUNT_NAME: + required: true + INTEGRATION_TESTING_GCP_PROJECT_ID: + required: true + INTEGRATION_TESTING_GCP_INTEGRATIONS_PROJECT_ID: + required: true + INTEGRATION_TESTING_AZURE_APPLICATION_ID: + required: true + INTEGRATION_TESTING_AZURE_CLIENT_SECRET_ID: + required: true + INTEGRATION_TESTING_AZURE_SUBSCRIPTION_ID: + required: true + INTEGRATION_TESTING_AZURE_TENANT_ID: + required: true jobs: test-integration: @@ -18,68 +49,38 @@ jobs: with: go-version: 1.21.x - # - name: Add GOBIN to PATH - # run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH - # shell: bash + - name: Add GOBIN to PATH + run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + shell: bash - # - name: Checkout code - # uses: actions/checkout@v4 + - name: Checkout code + uses: actions/checkout@v4 - # - name: Cache deps - # uses: actions/cache@v4 - # with: - # path: ~/go/pkg/mod - # key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} - # restore-keys: | - # ${{ runner.os }}-go- - - # - name: Integration Tests - # if: github.event.pull_request.head.repo.full_name == github.repository - # run: make test-integration cover-report - # env: - # NEW_RELIC_ACCOUNT_ID: ${{ secrets.NEW_RELIC_ACCOUNT_ID }} - # NEW_RELIC_SUBACCOUNT_ID: ${{ secrets.NEW_RELIC_SUBACCOUNT_ID }} - # NEW_RELIC_ADMIN_API_KEY: ${{ secrets.NEW_RELIC_ADMIN_API_KEY }} - # NEW_RELIC_API_KEY: ${{ secrets.NEW_RELIC_API_KEY }} - # NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }} - # NEW_RELIC_REGION: ${{ secrets.NEW_RELIC_REGION }} - # NEW_RELIC_INSIGHTS_INSERT_KEY: ${{ secrets.NEW_RELIC_INSIGHTS_INSERT_KEY }} - # NR_ACC_TESTING: ${{ secrets.NR_ACC_TESTING }} - # INTEGRATION_TESTING_AWS_ARN: ${{ secrets.INTEGRATION_TESTING_AWS_ARN }} - # INTEGRATION_TESTING_GCP_ACCOUNT_NAME: ${{ secrets.INTEGRATION_TESTING_GCP_ACCOUNT_NAME }} - # INTEGRATION_TESTING_GCP_PROJECT_ID: ${{ secrets.INTEGRATION_TESTING_GCP_PROJECT_ID }} - # INTEGRATION_TESTING_GCP_INTEGRATIONS_PROJECT_ID: ${{secrets.INTEGRATION_TESTING_GCP_INTEGRATIONS_PROJECT_ID}} - # INTEGRATION_TESTING_AZURE_APPLICATION_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_APPLICATION_ID }} - # INTEGRATION_TESTING_AZURE_CLIENT_SECRET_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_CLIENT_SECRET_ID }} - # INTEGRATION_TESTING_AZURE_SUBSCRIPTION_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_SUBSCRIPTION_ID }} - # INTEGRATION_TESTING_AZURE_TENANT_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_TENANT_ID }} - - # - name: Create test failure report - # id: testFailureReport - # run: | - # go install github.com/mfridman/tparse@latest - # make test-failure-report - # tparse -file=coverage/integration.failures -format=markdown >> "$GITHUB_OUTPUT" - - # - name: Send test failures report to Slack - # id: slack - # uses: slackapi/slack-github-action@v1.26 - # with: - # # Uses Slack's Block Kit to build the message - # payload: | - # { - # "text": "New Relic Terraform Provider Test Failures", - # "blocks": [ - # { - # "type": "section", - # "text": { - # "type": "mrkdwn", - # "text": "${{ steps.testFailureReport.outputs }}" - # } - # } - # ] - # } - # env: - # SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} - # SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + - name: Cache deps + uses: actions/cache@v4 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + - name: Integration Tests + if: github.event.pull_request.head.repo.full_name == github.repository + run: make test-integration cover-report + env: + NEW_RELIC_ACCOUNT_ID: ${{ secrets.NEW_RELIC_ACCOUNT_ID }} + NEW_RELIC_SUBACCOUNT_ID: ${{ secrets.NEW_RELIC_SUBACCOUNT_ID }} + NEW_RELIC_ADMIN_API_KEY: ${{ secrets.NEW_RELIC_ADMIN_API_KEY }} + NEW_RELIC_API_KEY: ${{ secrets.NEW_RELIC_API_KEY }} + NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }} + NEW_RELIC_REGION: ${{ secrets.NEW_RELIC_REGION }} + NEW_RELIC_INSIGHTS_INSERT_KEY: ${{ secrets.NEW_RELIC_INSIGHTS_INSERT_KEY }} + NR_ACC_TESTING: ${{ secrets.NR_ACC_TESTING }} + INTEGRATION_TESTING_AWS_ARN: ${{ secrets.INTEGRATION_TESTING_AWS_ARN }} + INTEGRATION_TESTING_GCP_ACCOUNT_NAME: ${{ secrets.INTEGRATION_TESTING_GCP_ACCOUNT_NAME }} + INTEGRATION_TESTING_GCP_PROJECT_ID: ${{ secrets.INTEGRATION_TESTING_GCP_PROJECT_ID }} + INTEGRATION_TESTING_GCP_INTEGRATIONS_PROJECT_ID: ${{secrets.INTEGRATION_TESTING_GCP_INTEGRATIONS_PROJECT_ID}} + INTEGRATION_TESTING_AZURE_APPLICATION_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_APPLICATION_ID }} + INTEGRATION_TESTING_AZURE_CLIENT_SECRET_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_CLIENT_SECRET_ID }} + INTEGRATION_TESTING_AZURE_SUBSCRIPTION_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_SUBSCRIPTION_ID }} + INTEGRATION_TESTING_AZURE_TENANT_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_TENANT_ID }} diff --git a/.github/workflows/test_integration_cron.yml b/.github/workflows/test_integration_cron.yml new file mode 100644 index 000000000..95b979610 --- /dev/null +++ b/.github/workflows/test_integration_cron.yml @@ -0,0 +1,101 @@ +name: Integration Tests Cron Job + +on: + workflow_dispatch: # this is just to test the functionality, remove before merging!!!!!!!!!!!! + # schedule: + # # Cron executes at 0800, 1200 1600 (8am, 12pm, 4pm) + # - cron: "0 8,12,16 * * 1-5" + +jobs: + test-integration: + # if: github.ref == 'refs/heads/main' + uses: newrelic/terraform-provider-newrelic/.github/workflows/test_integration.yml@feat/integration-test-cron-job + secrets: + NEW_RELIC_ACCOUNT_ID: ${{ secrets.NEW_RELIC_ACCOUNT_ID }} + NEW_RELIC_SUBACCOUNT_ID: ${{ secrets.NEW_RELIC_SUBACCOUNT_ID }} + NEW_RELIC_ADMIN_API_KEY: ${{ secrets.NEW_RELIC_ADMIN_API_KEY }} + NEW_RELIC_API_KEY: ${{ secrets.NEW_RELIC_API_KEY }} + NEW_RELIC_LICENSE_KEY: ${{ secrets.NEW_RELIC_LICENSE_KEY }} + NEW_RELIC_REGION: ${{ secrets.NEW_RELIC_REGION }} + NEW_RELIC_INSIGHTS_INSERT_KEY: ${{ secrets.NEW_RELIC_INSIGHTS_INSERT_KEY }} + NR_ACC_TESTING: ${{ secrets.NR_ACC_TESTING }} + INTEGRATION_TESTING_AWS_ARN: ${{ secrets.INTEGRATION_TESTING_AWS_ARN }} + INTEGRATION_TESTING_GCP_ACCOUNT_NAME: ${{ secrets.INTEGRATION_TESTING_GCP_ACCOUNT_NAME }} + INTEGRATION_TESTING_GCP_PROJECT_ID: ${{ secrets.INTEGRATION_TESTING_GCP_PROJECT_ID }} + INTEGRATION_TESTING_GCP_INTEGRATIONS_PROJECT_ID: ${{secrets.INTEGRATION_TESTING_GCP_INTEGRATIONS_PROJECT_ID}} + INTEGRATION_TESTING_AZURE_APPLICATION_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_APPLICATION_ID }} + INTEGRATION_TESTING_AZURE_CLIENT_SECRET_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_CLIENT_SECRET_ID }} + INTEGRATION_TESTING_AZURE_SUBSCRIPTION_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_SUBSCRIPTION_ID }} + INTEGRATION_TESTING_AZURE_TENANT_ID: ${{ secrets.INTEGRATION_TESTING_AZURE_TENANT_ID }} + + detect-drift: + runs-on: ubuntu-latest + steps: + - name: Check check + run: ls + + - name: Detect drift + if: ${{ always() }} + uses: actions/github-script@v7 + id: detect-state-drift + with: + script: | + const script = require('./scripts/detect-state-drift.js') + await script({core}) + + - name: Send report to Slack + id: slack + if: ${{ steps.detect-state-drift.outputs.drift_report != '' }} + uses: slackapi/slack-github-action@v1.26 + with: + # Uses Slack's Block Kit to build the message + # https://app.slack.com/block-kit-builder + payload: | + { + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": ":warning: *Terraform Provider | Drift Detected*" + } + }, + { + "type": "divider" + }, + { + "type": "context", + "elements": [ + { + "type": "plain_text", + "text": ${{ toJSON(steps.detect-state-drift.outputs.failed_tests_with_drift) }} + } + ] + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "More information can be viewed in the job summary." + }, + "accessory": { + "type": "button", + "text": { + "type": "plain_text", + "text": "Job Summary", + "emoji": true + }, + "value": "View Job Summary", + "url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "action_id": "button-action" + } + }, + { + "type": "divider" + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + diff --git a/.github/workflows/test_unit.yml b/.github/workflows/test_unit.yml index 60cebe634..af6f811b6 100644 --- a/.github/workflows/test_unit.yml +++ b/.github/workflows/test_unit.yml @@ -35,73 +35,10 @@ jobs: run: | make test-unit cover-report - - name: Detect drift - if: ${{ always() }} - uses: actions/github-script@v7 - id: detect-state-drift - with: - script: | - const script = require('./scripts/detect-state-drift.js') - await script({core}) - # - name: Report unit test coverage via Codecov # uses: codecov/codecov-action@v3 # with: # files: ./coverage/coverage.out - - name: Send report to Slack - id: slack - if: ${{ always() }} - uses: slackapi/slack-github-action@v1.26 - with: - # Uses Slack's Block Kit to build the message - # https://app.slack.com/block-kit-builder - payload: | - { - "blocks": [ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": ":warning: *Terraform Provider | Drift Detected*" - } - }, - { - "type": "divider" - }, - { - "type": "context", - "elements": [ - { - "type": "plain_text", - "text": ${{ toJSON(steps.detect-state-drift.outputs.failed_tests_with_drift) }} - } - ] - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "More information can be viewed in the job summary." - }, - "accessory": { - "type": "button", - "text": { - "type": "plain_text", - "text": "Job Summary", - "emoji": true - }, - "value": "View Job Summary", - "url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}", - "action_id": "button-action" - } - }, - { - "type": "divider" - } - ] - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} - SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + diff --git a/build/test.mk b/build/test.mk index 7c560af0a..138a7dd51 100644 --- a/build/test.mk +++ b/build/test.mk @@ -35,11 +35,6 @@ test-integration: tools -- -v -parallel 10 -tags=integration $(TEST_ARGS) -covermode=$(COVERMODE) -coverprofile $(COVERAGE_DIR)/integration.tmp \ -timeout 120m -ldflags=$(LDFLAGS_TEST) -test-failure-report: tools - @echo "=== $(PROJECT_NAME) === [ test-report-failed ]: generating report..." - @mkdir -p $(COVERAGE_DIR) - ./scripts/test-failure-report.sh - # # Coverage # diff --git a/newrelic/provider_unit_test.go b/newrelic/provider_unit_test.go index 65a34e8b0..67d14760a 100644 --- a/newrelic/provider_unit_test.go +++ b/newrelic/provider_unit_test.go @@ -28,7 +28,7 @@ func TestBuildUserAgentStringWithDefaultServiceName(t *testing.T) { tfUA := "HashiCorp Terraform/1.3.5 (+https://www.terraform.io) Terraform Plugin SDK/2.10.1" result := buildUserAgentString(tfUA, getUserAgentServiceName(), ProviderVersion) - require.Contains(t, result, " terraform-provider-newrelic/dev---fixthisbcitsatest") + require.Contains(t, result, " terraform-provider-newrelic/dev") } func TestBuildUserAgentStringWithCustomServiceName(t *testing.T) { diff --git a/scripts/detect-state-drift.js b/scripts/detect-state-drift.js index 082199991..d51ec8ee3 100755 --- a/scripts/detect-state-drift.js +++ b/scripts/detect-state-drift.js @@ -4,7 +4,7 @@ module.exports = async ({ const fs = require('fs'); // Read the text from the file - fs.readFile('coverage/unit.report', 'utf8', (err, data) => { + fs.readFile('coverage/integration.report', 'utf8', (err, data) => { if (err) { console.error('Error reading file:', err); return; @@ -23,7 +23,6 @@ module.exports = async ({ } }); - // Print the resulting JSON array // console.log(jsonData); const report = jsonData.filter(data => { @@ -37,18 +36,6 @@ module.exports = async ({ msg = `'${report.join('\n')}'`; } - core.setOutput('failed_tests_with_drift', msg); - - // // Convert JSON data to string - // const jsonString = JSON.stringify(failedTests, null, 2); - - // // Write the JSON data to a file - // fs.writeFile('output.json', jsonString, 'utf8', err => { - // if (err) { - // console.error('Error writing file:', err); - // return; - // } - // console.log('JSON data has been written to output.json'); - // }); + core.setOutput('drift_report', msg); }); };