1
0
mirror of synced 2025-12-19 18:14:56 -05:00

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:
Jose Pefaur
2025-10-16 12:37:37 -05:00
committed by GitHub
parent 08c42ced3d
commit d2a4813a9b
2 changed files with 84 additions and 2 deletions

View File

@@ -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 }}

View 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