# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # --- name: "CI Notification" on: # yamllint disable-line rule:truthy schedule: - cron: '0 6,17 * * *' workflow_dispatch: permissions: # All other permissions are set to none by default contents: read env: GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_USERNAME: ${{ github.actor }} SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} VERBOSE: "true" jobs: workflow-status: strategy: matrix: branch: ["v3-1-test"] workflow-id: ["ci-amd-arm.yml"] runs-on: ubuntu-latest steps: - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - name: "Find workflow run status" id: find-workflow-run-status run: | python3 -m pip install uv uv run ./dev/breeze/src/airflow_breeze/utils/workflow_status.py env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} workflow_branch: ${{ matrix.branch }} workflow_id: ${{ matrix.workflow-id }} - name: "Determine notification action" id: notification shell: bash run: | command -v gh >/dev/null 2>&1 || { echo "::error::gh CLI is not installed"; exit 1; } gh auth status || gh auth login --with-token <<< "${GITHUB_TOKEN}" python3 scripts/ci/slack_notification_state.py env: ARTIFACT_NAME: "slack-state-ci-${{ matrix.branch }}-${{ matrix.workflow-id }}" CURRENT_FAILURES: "${{ steps.find-workflow-run-status.outputs.failed-jobs }}" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: "Upload notification state" uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: "slack-state-ci-${{ matrix.branch }}-${{ matrix.workflow-id }}" path: ./slack-state/ retention-days: 7 overwrite: true - name: "Send Slack notification (new/changed failures)" if: steps.notification.outputs.action == 'notify_new' uses: slackapi/slack-github-action@af78098f536edbc4de71162a307590698245be95 # v3.0.1 with: method: chat.postMessage token: ${{ env.SLACK_BOT_TOKEN }} # yamllint disable rule:line-length payload: | channel: "internal-airflow-ci-cd" text: "🚨 Failure Alert: ${{ env.workflow_id }} on branch *${{ env.branch }}*\n\nFailing jobs:\n${{ steps.find-workflow-run-status.outputs.failed-jobs }}\n\n*Details:* <${{ env.run_url }}|View the failure log>" blocks: - type: "section" text: type: "mrkdwn" text: "🚨 Failure Alert: ${{ env.workflow_id }} on *${{ env.branch }}*\n\nFailing jobs:\n${{ steps.find-workflow-run-status.outputs.failed-jobs }}\n\n*Details:* <${{ env.run_url }}|View the failure log>" # yamllint enable rule:line-length env: run_url: ${{ steps.find-workflow-run-status.outputs.run-url }} branch: ${{ matrix.branch }} workflow_id: ${{ matrix.workflow-id }} - name: "Send Slack notification (still not fixed)" if: steps.notification.outputs.action == 'notify_reminder' uses: slackapi/slack-github-action@af78098f536edbc4de71162a307590698245be95 # v3.0.1 with: method: chat.postMessage token: ${{ env.SLACK_BOT_TOKEN }} # yamllint disable rule:line-length payload: | channel: "internal-airflow-ci-cd" text: "🚨🔁 Still not fixed: ${{ env.workflow_id }} on branch *${{ env.branch }}*\n\nFailing jobs:\n${{ steps.find-workflow-run-status.outputs.failed-jobs }}\n\n*Details:* <${{ env.run_url }}|View the failure log>" blocks: - type: "section" text: type: "mrkdwn" text: "🚨🔁 Still not fixed: ${{ env.workflow_id }} on *${{ env.branch }}*\n\nFailing jobs:\n${{ steps.find-workflow-run-status.outputs.failed-jobs }}\n\n*Details:* <${{ env.run_url }}|View the failure log>" # yamllint enable rule:line-length env: run_url: ${{ steps.find-workflow-run-status.outputs.run-url }} branch: ${{ matrix.branch }} workflow_id: ${{ matrix.workflow-id }} - name: "Send Slack notification (all passing)" if: steps.notification.outputs.action == 'notify_recovery' uses: slackapi/slack-github-action@af78098f536edbc4de71162a307590698245be95 # v3.0.1 with: method: chat.postMessage token: ${{ env.SLACK_BOT_TOKEN }} # yamllint disable rule:line-length payload: | channel: "internal-airflow-ci-cd" text: "✅ All passing: ${{ env.workflow_id }} on branch *${{ env.branch }}*\n\n*Details:* <${{ env.run_url }}|View the run log>" blocks: - type: "section" text: type: "mrkdwn" text: "✅ All passing: ${{ env.workflow_id }} on *${{ env.branch }}*\n\n*Details:* <${{ env.run_url }}|View the run log>" # yamllint enable rule:line-length env: run_url: ${{ steps.find-workflow-run-status.outputs.run-url }} branch: ${{ matrix.branch }} workflow_id: ${{ matrix.workflow-id }}