From cb29bfb20132497fb401938a0818c42d5df13a7d Mon Sep 17 00:00:00 2001 From: Sander Blue Date: Mon, 29 Apr 2024 16:02:18 -0500 Subject: [PATCH] chore(test): split out test jobs into their own workflows --- .github/workflows/test.yml | 144 ------------------------- .github/workflows/test_integration.yml | 85 +++++++++++++++ .github/workflows/test_lint.yml | 47 ++++++++ .github/workflows/test_unit.yml | 94 ++++++++++++++++ build/test.mk | 11 +- newrelic/provider_unit_test.go | 2 +- scripts/test-failure-report.sh | 15 +++ 7 files changed, 250 insertions(+), 148 deletions(-) delete mode 100644 .github/workflows/test.yml create mode 100644 .github/workflows/test_integration.yml create mode 100644 .github/workflows/test_lint.yml create mode 100644 .github/workflows/test_unit.yml create mode 100755 scripts/test-failure-report.sh diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 7bb0d8219e..0000000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,144 +0,0 @@ -name: Testing - -on: - workflow_dispatch: - push: - branches: [main] - pull_request: - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - name: Install Go - uses: actions/setup-go@v5 - with: - go-version: 1.21.x - - - name: Add GOBIN to PATH - run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH - shell: bash - - - name: Checkout code - uses: actions/checkout@v4 - - - name: Full git history - run: | - git fetch --prune --unshallow - - - 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: Lint - run: make lint - - - name: Check links - uses: gaurav-nelson/github-action-markdown-link-check@v1 - with: - use-quiet-mode: 'yes' - use-verbose-mode: 'yes' - config-file: '.markdownlinkcheck.json' - folder-path: 'website/docs' - file-extension: '.markdown' - - test-unit: - runs-on: ubuntu-latest - steps: - - name: Install Go - uses: actions/setup-go@v5 - with: - go-version: 1.21.x - - - name: Add GOBIN to PATH - run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH - shell: bash - - - 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: Unit Tests - run: make test-unit cover-report - - - name: Report unit test coverage via Codecov - uses: codecov/codecov-action@v3 - with: - files: ./coverage/coverage.out - - - # - name: New Relic JUnit Reporter - # if: github.event.pull_request.head.repo.full_name == github.repository - # uses: newrelic/junit-reporter-action@v0.1.1 - # with: - # accountId: ${{ secrets.NEW_RELIC_ACCOUNT_ID }} - # insertApiKey: ${{ secrets.NEW_RELIC_INSIGHTS_INSERT_KEY }} - # testOutputPath: coverage/unit.xml - - test-integration: - runs-on: ubuntu-latest - steps: - - name: Install Go - uses: actions/setup-go@v5 - with: - go-version: 1.21.x - - - name: Add GOBIN to PATH - run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH - shell: bash - - - 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: Report integration test coverage via Codecov - uses: codecov/codecov-action@v3 - with: - files: ./coverage/coverage.out - - # - name: New Relic JUnit Reporter - # if: github.event.pull_request.head.repo.full_name == github.repository - # uses: newrelic/junit-reporter-action@v0.1.1 - # with: - # accountId: ${{ secrets.NEW_RELIC_ACCOUNT_ID }} - # insertApiKey: ${{ secrets.NEW_RELIC_INSIGHTS_INSERT_KEY }} - # testOutputPath: coverage/integration.xml diff --git a/.github/workflows/test_integration.yml b/.github/workflows/test_integration.yml new file mode 100644 index 0000000000..716b6883d2 --- /dev/null +++ b/.github/workflows/test_integration.yml @@ -0,0 +1,85 @@ +name: Integration Tests + +on: + workflow_dispatch: + push: + branches: [main] + pull_request: + # schedule: + # # Cron executes at 0800, 1200 1600 (8am, 12pm, 4pm) + # - cron: "0 8,12,16 * * 1-5" + +jobs: + test-integration: + runs-on: ubuntu-latest + steps: + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: 1.21.x + + # - name: Add GOBIN to PATH + # run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + # shell: bash + + # - 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 + diff --git a/.github/workflows/test_lint.yml b/.github/workflows/test_lint.yml new file mode 100644 index 0000000000..32251bb1c8 --- /dev/null +++ b/.github/workflows/test_lint.yml @@ -0,0 +1,47 @@ +name: Lint Tests + +on: + workflow_dispatch: + push: + branches: [main] + pull_request: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: 1.21.x + + - name: Add GOBIN to PATH + run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + shell: bash + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Full git history + run: | + git fetch --prune --unshallow + + - 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: Lint + run: make lint + + - name: Check links + uses: gaurav-nelson/github-action-markdown-link-check@v1 + with: + use-quiet-mode: 'yes' + use-verbose-mode: 'yes' + config-file: '.markdownlinkcheck.json' + folder-path: 'website/docs' + file-extension: '.markdown' diff --git a/.github/workflows/test_unit.yml b/.github/workflows/test_unit.yml new file mode 100644 index 0000000000..60ad540fb2 --- /dev/null +++ b/.github/workflows/test_unit.yml @@ -0,0 +1,94 @@ +name: Unit Tests + +on: + workflow_dispatch: + push: + branches: [main] + pull_request: + +jobs: + test-unit: + runs-on: ubuntu-latest + steps: + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: 1.21.x + + - name: Add GOBIN to PATH + run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + shell: bash + + - 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: Unit Tests + id: unit-tests + run: | + make test-unit cover-report + + - name: Create test failure report + id: test-failure-report + if: ${{ failure() }} + run: | + go install github.com/mfridman/tparse@latest + make test-failure-report + tparse -file=coverage/unit.failures -format=markdown > coverage/unit.md + + - name: Prepare multiline test report + id: payload + shell: bash + if: ${{ always() }} + run: | + cat coverage/unit.md + result=$(cat coverage/unit.md) + + echo "Result: $result" + + echo 'UNIT_TEST_FAILURES< coverage/integration.failures +fi + +if ! [ -f ./coverage/unit.report ]; then + echo "File coverage/unit.report does not exist. Skipping." +else + grep 'FAIL:\|FAIL\|Error:\|error:' coverage/unit.report > coverage/unit.failures +fi +