Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 30 additions & 2 deletions .github/workflows/cdk-connector-compatibility-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note that this is only to notify the move team. The logic to create a gh issue changes quite a bit depending on how teams manage their oncall tickets so I thought it made sense to just do it for the ones we own (and also by doing this we are not making other team sign up to how we want to deal with these issues).

id: check-move-notify
if: always()
run: |
echo "should-notify=${{
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setting condition here so that I don't repeat it everywhere

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.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I renamed the channel to cdk-connector-compatibility-tests

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 }}
51 changes: 51 additions & 0 deletions tools/bin/bulk-cdk-compatibility-test/create-gh-issue.sh
Original file line number Diff line number Diff line change
@@ -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 <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
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}"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

using all these ids is not pretty, but afaik this is the only way to deal creating issues and editing their fields

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you add a comment explaining how to find these IDs? I actually don't know where to find them 😅


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
Loading