name: Test Build Processes on: push: branches: - trunk - '3.[7-9]' - '[4-9].[0-9]' tags: - '[0-9]+.[0-9]' - '[0-9]+.[0-9].[0-9]+' pull_request: branches: - trunk - '3.[7-9]' - '[4-9].[0-9]' workflow_dispatch: # Cancels all previous workflow runs for pull requests that have not completed. concurrency: # The concurrency group contains the workflow name and the branch name for pull requests # or the commit hash for any other events. group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} cancel-in-progress: true # Disable permissions for all available scopes by default. # Any needed permissions should be configured at the job level. permissions: {} jobs: # Tests the WordPress Core build process on multiple operating systems. test-core-build-process: name: Core running from ${{ matrix.directory }} uses: WordPress/wordpress-develop/.github/workflows/callable-test-core-build-process.yml@trunk permissions: contents: read if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} strategy: fail-fast: false matrix: os: [ ubuntu-latest, windows-latest ] directory: [ 'src', 'build' ] with: os: ${{ matrix.os }} directory: ${{ matrix.directory }} # Tests the WordPress Core build process on MacOS. # # This is separate from the job above in order to use stricter conditions when determining when to run. # This avoids unintentionally consuming excessive minutes, as MacOS jobs consume minutes at a 10x rate. # # The `matrix` and `runner` contexts are not available for use within `if` expressions. So there is # currently no way to determine the OS being used on a given job. # See https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability. test-core-build-process-macos: name: Core running from ${{ matrix.directory }} uses: WordPress/wordpress-develop/.github/workflows/callable-test-core-build-process.yml@trunk permissions: contents: read if: ${{ github.repository == 'WordPress/wordpress-develop' }} strategy: fail-fast: false matrix: os: [ macos-latest ] directory: [ 'src', 'build' ] with: os: ${{ matrix.os }} directory: ${{ matrix.directory }} # Tests the Gutenberg plugin build process on multiple operating systems when run within a wordpress-develop checkout. test-gutenberg-build-process: name: Gutenberg running from ${{ matrix.directory }} uses: WordPress/wordpress-develop/.github/workflows/callable-test-gutenberg-build-process.yml@trunk permissions: contents: read if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} strategy: fail-fast: false matrix: os: [ ubuntu-latest, windows-latest ] directory: [ 'src', 'build' ] with: os: ${{ matrix.os }} directory: ${{ matrix.directory }} # Tests the Gutenberg plugin build process on MacOS when run within a wordpress-develop checkout. # # This is separate from the job above in order to use stricter conditions when determining when to run. # This avoids unintentionally consuming excessive minutes, as MacOS jobs consume minutes at a 10x rate. # # The `matrix` and `runner` contexts are not available for use within `if` expressions. So there is # currently no way to determine the OS being used on a given job. # See https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability. test-gutenberg-build-process-macos: name: Gutenberg running from ${{ matrix.directory }} uses: WordPress/wordpress-develop/.github/workflows/callable-test-gutenberg-build-process.yml@trunk permissions: contents: read if: ${{ github.repository == 'WordPress/wordpress-develop' }} strategy: fail-fast: false matrix: os: [ macos-latest ] directory: [ 'src', 'build' ] with: os: ${{ matrix.os }} directory: ${{ matrix.directory }} # Uploads the PR number as an artifact for the Pull Request Commenting workflow to download and then # leave a comment detailing how to test the PR within WordPress Playground. playground-comment: name: Leave WordPress Playground details runs-on: ubuntu-latest permissions: actions: write continue-on-error: true needs: [ test-core-build-process, test-core-build-process-macos, test-gutenberg-build-process, test-gutenberg-build-process-macos ] if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name == 'pull_request' }} steps: - name: Save PR number run: | mkdir -p ./pr-number echo ${{ github.event.number }} > ./pr-number/NR - name: Upload PR number as artifact uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0 with: name: pr-number path: pr-number/ slack-notifications: name: Slack Notifications uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk permissions: actions: read contents: read needs: [ test-core-build-process, test-core-build-process-macos, test-gutenberg-build-process, test-gutenberg-build-process-macos ] if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} with: calling_status: ${{ contains( needs.*.result, 'cancelled' ) && 'cancelled' || contains( needs.*.result, 'failure' ) && 'failure' || 'success' }} secrets: SLACK_GHA_SUCCESS_WEBHOOK: ${{ secrets.SLACK_GHA_SUCCESS_WEBHOOK }} SLACK_GHA_CANCELLED_WEBHOOK: ${{ secrets.SLACK_GHA_CANCELLED_WEBHOOK }} SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }} SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }} failed-workflow: name: Failed workflow tasks runs-on: ubuntu-latest permissions: actions: write needs: [ slack-notifications ] if: | always() && github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && github.run_attempt < 2 && ( contains( needs.*.result, 'cancelled' ) || contains( needs.*.result, 'failure' ) ) steps: - name: Dispatch workflow run uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: retries: 2 retry-exempt-status-codes: 418 script: | github.rest.actions.createWorkflowDispatch({ owner: context.repo.owner, repo: context.repo.repo, workflow_id: 'failed-workflow.yml', ref: 'trunk', inputs: { run_id: '${{ github.run_id }}' } });