ci: make cdk connector compatibility test create gh issue (#67611)
## What We have a workflow that once a day checks if the latest CDK version would break any connector. If there are test failures, it sends a slack alert. In addition to sending a slack alert, we would like to get an oncall ticket in our github project. We should only do this for destinations (connectors owned by move) ## How Added a few extra steps to the workflow that calls a script that creates gh issues. It checks if an issue already exists for the connector. If it does it will update the description with information about the new failure. If it doesn't it will create a new ticket ## How did I test this? Tested in this PR https://github.com/airbytehq/airbyte/pull/67617. Confirmed that tickets were created if they didn't exist and that they were updated if they did exist. ## Can this PR be safely reverted and rolled back? <!-- * If unsure, leave it blank. --> - [x] YES 💚 - [ ] NO ❌
This commit is contained in:
@@ -103,12 +103,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! <https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}|View Test Logs>"
|
||||
|
||||
- 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 }}
|
||||
|
||||
54
tools/bin/bulk-cdk-compatibility-test/create-gh-issue.sh
Executable file
54
tools/bin/bulk-cdk-compatibility-test/create-gh-issue.sh
Executable file
@@ -0,0 +1,54 @@
|
||||
#!/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 <connector_name> <job_url> <commit_sha>
|
||||
# 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
|
||||
# Getting these ids is not straightforward:
|
||||
# - project number: from the project URL `https://github.com/orgs/airbytehq/projects/98`
|
||||
# - status field id and oncall option id: using `gh project field-list 98 --owner airbytehq --format json` to explore the project fields and options
|
||||
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
|
||||
Reference in New Issue
Block a user