diff --git a/.github/workflows/cdk-connector-compatibility-test.yml b/.github/workflows/cdk-connector-compatibility-test.yml index b6c786b12c55..52b96f021f9c 100644 --- a/.github/workflows/cdk-connector-compatibility-test.yml +++ b/.github/workflows/cdk-connector-compatibility-test.yml @@ -114,12 +114,40 @@ jobs: working-directory: airbyte-integrations/connectors/${{ matrix.connector }} run: poe test-integration-tests + - name: Check if move team should be notified + id: check-move-notify + if: always() + run: | + echo "should-notify=${{ + github.event_name == 'schedule' && + startsWith(matrix.connector, 'destination-') && + (steps.run-unit-tests.outcome == 'failure' || steps.run-integration-tests.outcome == 'failure') + }}" >> $GITHUB_OUTPUT + - name: Slack Notification on Failure - if: github.event_name == 'schedule' && failure() && (steps.run-unit-tests.outcome == 'failure' || steps.run-integration-tests.outcome == 'failure') + if: always() && steps.check-move-notify.outputs.should-notify == 'true' uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1 with: token: ${{ secrets.SLACK_BOT_TOKEN_AIRBYTE_TEAM }} method: chat.postMessage payload: | - channel: C09H56MT8J2 # jose-alert-test channel. The use of this channel is meant to be temporary while we evaluate the usefulness of these notifications. + channel: C09H56MT8J2 text: "`${{ matrix.connector }}` connector tests failed when using local CDK! " + + - name: Authenticate as GitHub App + if: always() && steps.check-move-notify.outputs.should-notify == 'true' + uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2 + id: app-token + with: + owner: "airbytehq" + app-id: ${{ secrets.OCTAVIA_BOT_APP_ID }} + private-key: ${{ secrets.OCTAVIA_BOT_PRIVATE_KEY }} + + - name: Create Github Issue on Failure + if: always() && steps.check-move-notify.outputs.should-notify == 'true' + env: + GH_TOKEN: ${{ steps.app-token.outputs.token }} + run: tools/bin/bulk-cdk-compatibility-test/create-gh-issue.sh \ + ${{ matrix.connector }} \ + "https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}" \ + ${{ github.sha }} diff --git a/tools/bin/bulk-cdk-compatibility-test/create-gh-issue.sh b/tools/bin/bulk-cdk-compatibility-test/create-gh-issue.sh new file mode 100755 index 000000000000..1666e92f986c --- /dev/null +++ b/tools/bin/bulk-cdk-compatibility-test/create-gh-issue.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Creates a GitHub issue for CDK connector compatibility test failures. +# If an issue for the connector already exists, appends a new entry to the existing issue +# instead of creating a new issue. +# +# This is intended to be used by the move team since it has specific logic to how the move team manages oncall issues. +# +# Usage: tools/bin/bulk-cdk-compatibility-test/create-gh-issue.sh +# Example: tools/bin/bulk-cdk-compatibility-test/create-gh-issue.sh destination-dev-null www.myjoburl.com abcdef123456 + +# default values are specific to how the move team manages issues +ISSUES_REPOSITORY="${ISSUES_REPOSITORY:-airbytehq/airbyte-internal-issues}" +PROJECT_NUMBER="${PROJECT_NUMBER:-98}" +STATUS_FIELD_ID="${STATUS_FIELD_ID:-PVTSSF_lADOA4_XW84Am4WkzgetXZM}" +ONCALL_OPTION_ID="${ONCALL_OPTION_ID:-3ecf8bb4}" + +connector_name=$1 +job_url=$2 +commit_sha=$3 + +title="[CDK Connector Compatibility Test] Failures for $connector_name" + +existing_issue_number=$(gh issue list --state open --search "$title in:title" -R $ISSUES_REPOSITORY --json number --jq '.[0].number') + +# Build new entry +timestamp="$(date -u +'%Y-%m-%d %H:%M:%SZ')" +entry=$'#### ❌ '"$timestamp"$'\n'"Run: $job_url"$'\n'"Commit: ${commit_sha}" + +if [ -n "${existing_issue_number:-}" ]; then + # add new entry to existing issue + existing_issue_body="$(gh issue view "$existing_issue_number" -R "$ISSUES_REPOSITORY" --json body --jq .body)" + updated_issue_body="$existing_issue_body"$'\n'"${entry}" + gh issue edit "$existing_issue_number" -R "$ISSUES_REPOSITORY" -b "$updated_issue_body" + echo "Updated issue #${existing_issue_number} with new failure entry." +else + # create new issue + INITIAL_BODY=$'# Test failure history\n\n'"${entry}" + issue_url=$(gh issue create -t "$title" -b "$INITIAL_BODY" -R $ISSUES_REPOSITORY) + echo "Created issue ${issue_url}." + item_id=$(gh project item-add $PROJECT_NUMBER --owner "airbytehq" --url "$issue_url" --format json --jq '.id') + project_id=$(gh project view $PROJECT_NUMBER --owner "airbytehq" --format json --jq '.id') + gh project item-edit \ + --id $item_id \ + --project-id $project_id \ + --field-id $STATUS_FIELD_ID \ + --single-select-option-id "$ONCALL_OPTION_ID" + echo "Created new issue for $connector_name." +fi