Make WordPress Core

Changeset 63310 for trunk


Ignore:
Timestamp:
08/16/2026 10:27:51 PM (2 weeks ago)
Author:
desrosj
Message:

Build/Test Tools: Distinguish between cancelled and timed out workflow runs.

GitHub Actions expressions and contexts do not currently expose the details about a workflow run necessary to determine whether a workflow has timed out. Instead, all timed out runs are considered cancelled. However, the REST API does return a timed_out conclusion in this scenario.

This creates a new job for the timed_out conlclusion and adjusts the logic for cancelled Slack notifications to provide more useful notifications.

Props lancewillett.
See #65845.

Location:
trunk/.github/workflows
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/.github/workflows/coding-standards.yml

    r63230 r63310  
    9090      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    9191      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     92      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    9293
    9394  failed-workflow:
  • trunk/.github/workflows/end-to-end-tests.yml

    r63230 r63310  
    9090      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    9191      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     92      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    9293
    9394  failed-workflow:
  • trunk/.github/workflows/install-testing.yml

    r62742 r63310  
    153153      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    154154      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     155      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    155156
    156157  failed-workflow:
  • trunk/.github/workflows/javascript-tests.yml

    r63230 r63310  
    7878      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    7979      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     80      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    8081
    8182  failed-workflow:
  • trunk/.github/workflows/javascript-type-checking.yml

    r63230 r63310  
    7171      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    7272      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     73      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    7374
    7475  failed-workflow:
  • trunk/.github/workflows/local-docker-environment.yml

    r63230 r63310  
    136136      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    137137      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     138      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    138139
    139140  failed-workflow:
  • trunk/.github/workflows/performance.yml

    r63230 r63310  
    154154      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    155155      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     156      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    156157
    157158  failed-workflow:
  • trunk/.github/workflows/php-compatibility.yml

    r63230 r63310  
    6767      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    6868      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     69      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    6970
    7071  failed-workflow:
  • trunk/.github/workflows/phpstan-static-analysis.yml

    r63230 r63310  
    6767      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    6868      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     69      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    6970
    7071  failed-workflow:
  • trunk/.github/workflows/phpunit-tests.yml

    r63230 r63310  
    412412      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    413413      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     414      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    414415
    415416  failed-workflow:
  • trunk/.github/workflows/slack-notifications.yml

    r62742 r63310  
    2525      SLACK_GHA_FAILURE_WEBHOOK:
    2626        description: 'The Slack webhook URL for a failed build.'
     27        required: true
     28      SLACK_GHA_TIMEOUT_WEBHOOK:
     29        description: 'The Slack webhook URL for a timed out build.'
    2730        required: true
    2831
     
    5659    outputs:
    5760      previous_conclusion: ${{ steps.previous-attempt-result.outputs.result }}
     61      timed_out: ${{ steps.timeout-check.outputs.result }}
    5862      payload: ${{ steps.create-payload.outputs.payload }}
    5963
     
    128132        env:
    129133          CALLING_STATUS: ${{ inputs.calling_status }}
     134
     135      # The REST API exposes a distinct `timed_out` job conclusion that is unavailable through workflow contexts.
     136      - name: Determine whether the workflow timed out
     137        id: timeout-check
     138        uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
     139        if: ${{ inputs.calling_status == 'cancelled' }}
     140        with:
     141          retries: 2
     142          retry-exempt-status-codes: 418
     143          result-encoding: string
     144          script: |
     145            const jobs = await github.paginate( github.rest.actions.listJobsForWorkflowRunAttempt, {
     146              owner: context.repo.owner,
     147              repo: context.repo.repo,
     148              run_id: `${context.runId}`,
     149              attempt_number: Number( process.env.GITHUB_RUN_ATTEMPT ),
     150            }, ( response ) => response.data.jobs );
     151
     152            return jobs.some( ( job ) => job.conclusion === 'timed_out' ) ? 'true' : 'false';
    130153
    131154      - name: Get the commit message
     
    212235          payload: ${{ needs.prepare.outputs.payload }}
    213236
    214   # Posts notifications when a workflow is cancelled.
    215237  cancelled:
    216238    name: Cancelled notifications
     
    219241    timeout-minutes: 20
    220242    needs: [ prepare ]
    221     if: ${{ inputs.calling_status == 'cancelled' && github.run_attempt == 2 || cancelled() }}
     243    if: ${{ ( inputs.calling_status == 'cancelled' && github.run_attempt == 2 && needs.prepare.outputs.timed_out != 'true' ) || cancelled() }}
    222244
    223245    steps:
     
    228250          webhook: ${{ secrets.SLACK_GHA_CANCELLED_WEBHOOK }}
    229251          payload: ${{ needs.prepare.outputs.payload }}
     252
     253  timeout:
     254    name: Timeout notifications
     255    permissions: {}
     256    runs-on: ubuntu-24.04
     257    timeout-minutes: 20
     258    needs: [ prepare ]
     259    if: ${{ inputs.calling_status == 'cancelled' && github.run_attempt == 2 && needs.prepare.outputs.timed_out == 'true' }}
     260
     261    steps:
     262      - name: Post timeout notifications to Slack
     263        uses: slackapi/slack-github-action@45a88b9581bfab2566dc881e2cd66d334e621e2c # v3.0.3
     264        with:
     265          webhook-type: webhook-trigger
     266          webhook: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
     267          payload: ${{ needs.prepare.outputs.payload }}
  • trunk/.github/workflows/test-and-zip-default-themes.yml

    r63183 r63310  
    285285      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    286286      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     287      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    287288
    288289  failed-workflow:
  • trunk/.github/workflows/test-build-processes.yml

    r63230 r63310  
    119119      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    120120      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     121      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    121122
    122123  failed-workflow:
  • trunk/.github/workflows/test-coverage.yml

    r63162 r63310  
    9898      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    9999      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     100      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    100101
    101102  failed-workflow:
  • trunk/.github/workflows/test-old-branches.yml

    r63167 r63310  
    159159      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    160160      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     161      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
  • trunk/.github/workflows/upgrade-develop-testing.yml

    r63230 r63310  
    141141      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    142142      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     143      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    143144
    144145  failed-workflow:
  • trunk/.github/workflows/upgrade-testing.yml

    r63167 r63310  
    207207      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    208208      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     209      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    209210
    210211  failed-workflow:
  • trunk/.github/workflows/workflow-lint.yml

    r63230 r63310  
    6262      SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
    6363      SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
     64      SLACK_GHA_TIMEOUT_WEBHOOK: ${{ secrets.SLACK_GHA_TIMEOUT_WEBHOOK }}
    6465
    6566  failed-workflow:
Note: See TracChangeset for help on using the changeset viewer.