name: CI slack report on: workflow_call: inputs: job: required: true type: string slack_report_channel: required: true type: string setup_status: required: true type: string folder_slices: required: true type: string quantization_matrix: required: true type: string ci_event: required: true type: string report_repo_id: required: true type: string commit_sha: required: false type: string outputs: is_slack_reporting_job_ok: description: "Whether the send_results job succeeded (not failed)" value: ${{ jobs.send_results.result != 'failure' }} env: TRANSFORMERS_CI_RESULTS_UPLOAD_TOKEN: ${{ secrets.TRANSFORMERS_CI_RESULTS_UPLOAD_TOKEN }} permissions: contents: read jobs: send_results: name: Send results to webhook runs-on: ubuntu-22.04 if: always() && !cancelled() steps: - name: Preliminary job status shell: bash # For the meaning of these environment variables, see the job `Setup` env: setup_status: ${{ inputs.setup_status }} run: | echo "Setup status: $setup_status" - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: fetch-depth: 2 # Security: checkout to the `main` branch for untrusted triggers (issue_comment, pull_request_target), otherwise use the specified ref ref: ${{ (github.event_name == 'issue_comment' || github.event_name == 'pull_request_target') && 'main' || (inputs.commit_sha || github.sha) }} persist-credentials: false - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 env: ACTIONS_ARTIFACT_MAX_ARTIFACT_COUNT: 2000 with: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Prepare some setup values run: | if [ -f setup_values/prev_workflow_run_id.txt ]; then echo "PREV_WORKFLOW_RUN_ID=$(cat setup_values/prev_workflow_run_id.txt)" >> $GITHUB_ENV else echo "PREV_WORKFLOW_RUN_ID=" >> $GITHUB_ENV fi if [ -f setup_values/other_workflow_run_id.txt ]; then echo "OTHER_WORKFLOW_RUN_ID=$(cat setup_values/other_workflow_run_id.txt)" >> $GITHUB_ENV else echo "OTHER_WORKFLOW_RUN_ID=" >> $GITHUB_ENV fi - name: Send message to Slack shell: bash env: CI_SLACK_BOT_TOKEN: ${{ secrets.CI_SLACK_BOT_TOKEN }} CI_SLACK_CHANNEL_ID: ${{ secrets.CI_SLACK_CHANNEL_ID }} CI_SLACK_CHANNEL_ID_DAILY: ${{ secrets.CI_SLACK_CHANNEL_ID_DAILY }} CI_SLACK_CHANNEL_DUMMY_TESTS: ${{ secrets.CI_SLACK_CHANNEL_DUMMY_TESTS }} SLACK_REPORT_CHANNEL: ${{ inputs.slack_report_channel }} ACCESS_REPO_INFO_TOKEN: ${{ secrets.ACCESS_REPO_INFO_TOKEN }} CI_EVENT: ${{ inputs.ci_event }} # This `CI_TITLE` would be empty for `schedule` or `workflow_run` events. CI_TITLE: ${{ github.event.head_commit.message }} CI_SHA: ${{ inputs.commit_sha || github.sha }} CI_TEST_JOB: ${{ inputs.job }} SETUP_STATUS: ${{ inputs.setup_status }} REPORT_REPO_ID: ${{ inputs.report_repo_id }} quantization_matrix: ${{ inputs.quantization_matrix }} folder_slices: ${{ inputs.folder_slices }} # We pass `needs.setup.outputs.matrix` as the argument. A processing in `notification_service.py` to change # `models/bert` to `models_bert` is required, as the artifact names use `_` instead of `/`. # For a job that doesn't depend on (i.e. `needs`) `setup`, the value for `inputs.folder_slices` would be an # empty string, and the called script still get one argument (which is the emtpy string). run: | pip install huggingface_hub pip install slack_sdk pip show slack_sdk pip install . if [ "$quantization_matrix" != "" ]; then python utils/notification_service.py "$quantization_matrix" else python utils/notification_service.py "$folder_slices" fi # Upload the directory containing CI reports prepared in `notification_service.py` - name: Failure table artifacts uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: ci_results_${{ inputs.job }} path: ci_results_${{ inputs.job }}