name: Python CDK Tests concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: workflow_dispatch: push: branches: - master pull_request: types: - opened - reopened - synchronize jobs: changes: runs-on: ubuntu-latest outputs: python_cdk: ${{ steps.changes.outputs.python_cdk }} steps: - name: Checkout Airbyte if: github.event_name != 'pull_request' uses: actions/checkout@v3 - id: changes uses: dorny/paths-filter@v2 with: # Note: expressions within a filter are OR'ed filters: | python_cdk: - 'airbyte-cdk/python/**/*' run-python-cdk-check: needs: - changes if: needs.changes.outputs.python_cdk == 'true' runs-on: ubuntu-latest name: Python CDK Tests timeout-minutes: 30 steps: # The run-python-cdk-check job will be triggered if a fork made changes to Python CDK. # We don't want forks to make changes to Python CDK. # So we fail the job if the PR is from a fork, it will make the required CI check fail. - name: Check if PR is from a fork id: check-if-pr-is-from-fork if: github.event_name == 'pull_request' shell: bash run: | if [ "${{ github.event.pull_request.head.repo.fork }}" == "true" ]; then echo "PR is from a fork. Exiting workflow..." exit 78 fi - name: Checkout Airbyte uses: actions/checkout@v3 - name: Install Poetry uses: snok/install-poetry@v1 - name: Install Dependencies id: install_dependencies working-directory: airbyte-cdk/python run: poetry install --all-extras - name: Build CDK Package working-directory: airbyte-cdk/python run: poetry run poe build - name: Check Python CDK working-directory: airbyte-cdk/python run: poetry run poe check-ci set-instatus-incident-on-failure: name: Create Instatus Incident on Failure runs-on: ubuntu-latest needs: - run-python-cdk-check if: ${{ failure() && github.ref == 'refs/heads/master' }} steps: - name: Call Instatus Webhook uses: joelwmale/webhook-action@master with: url: ${{ secrets.INSTATUS_CONNECTOR_CI_WEBHOOK_URL }} body: '{ "trigger": "down", "status": "HASISSUES" }' set-instatus-incident-on-success: name: Create Instatus Incident on Success runs-on: ubuntu-latest needs: - run-python-cdk-check if: ${{ success() && github.ref == 'refs/heads/master' }} steps: - name: Call Instatus Webhook uses: joelwmale/webhook-action@master with: url: ${{ secrets.INSTATUS_CONNECTOR_CI_WEBHOOK_URL }} body: '{ "trigger": "up" }' notify-failure-slack-channel: name: "Notify Slack Channel on Build Failures" runs-on: ubuntu-latest needs: - run-python-cdk-check if: ${{ failure() && github.ref == 'refs/heads/master' }} steps: - name: Checkout Airbyte uses: actions/checkout@v3 - name: Match GitHub User to Slack User id: match-github-to-slack-user uses: ./.github/actions/match-github-to-slack-user env: AIRBYTE_TEAM_BOT_SLACK_TOKEN: ${{ secrets.SLACK_AIRBYTE_TEAM_READ_USERS }} GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Publish to OSS Build Failure Slack Channel uses: abinoda/slack-action@master env: SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN_AIRBYTE_TEAM }} with: args: >- {\"channel\":\"C03BEADRPNY\", \"blocks\":[ {\"type\":\"divider\"}, {\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\" Merge to OSS Master failed! :bangbang: \n\n\"}}, {\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"_merged by_: *${{ github.actor }}* \n\"}}, {\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"<@${{ steps.match-github-to-slack-user.outputs.slack_user_ids }}> \n\"}}, {\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\" :octavia-shocked: :octavia-shocked: \n\"}}, {\"type\":\"divider\"}]} notify-failure-slack-channel-fixed-broken-build: name: "Notify Slack Channel on Build Fixes" runs-on: ubuntu-latest needs: - run-python-cdk-check if: success() steps: - name: Get Previous Workflow Status uses: Mercymeilya/last-workflow-status@v0.3 id: last_status with: github_token: ${{ secrets.GITHUB_TOKEN }} # To avoid clogging up the channel, only publish build success if the previous build was a failure since this means the build was fixed. - name: Publish Build Fixed Message to OSS Build Failure Slack Channel if: ${{ steps.last_status.outputs.last_status == 'failure' }} uses: abinoda/slack-action@master env: SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN_AIRBYTE_TEAM }} with: args: >- {\"channel\":\"C03BEADRPNY\", \"blocks\":[ {\"type\":\"divider\"}, {\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\" OSS Master Fixed! :white_check_mark: \n\n\"}}, {\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"_merged by_: *${{ github.actor }}* \n\"}}, {\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\" :octavia-rocket: :octavia-rocket: \n\"}}, {\"type\":\"divider\"}]}