name: Test Default Themes & Create ZIPs on: push: branches: - trunk - '3.[89]' - '[4-9].[0-9]' paths: # Changing the preferred version of Node.js could affect themes with build processes. - '.nvm' # Changes to any themes with a build script should be confirmed. - 'src/wp-content/themes/twentynineteen/**' - 'src/wp-content/themes/twentytwenty/**' - 'src/wp-content/themes/twentytwentyone/**' # Changes to this workflow file should always verify success. - '.github/workflows/test-and-zip-default-themes.yml' pull_request: branches: - trunk - '3.[89]' - '[4-9].[0-9]' paths: # Changing the preferred version of Node.js could affect themes with build processes. - '.nvm' # Changes to any themes with a build script should be confirmed. - 'src/wp-content/themes/twentynineteen/**' - 'src/wp-content/themes/twentytwenty/**' - 'src/wp-content/themes/twentytwentyone/**' # Changes to this workflow file should always verify success. - '.github/workflows/test-and-zip-default-themes.yml' workflow_dispatch: inputs: branch: description: 'The branch to create ZIP files from' required: true type: string default: 'trunk' # 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 jobs: # Tests the build script for themes that have one. # # Performs the following steps: # - Checks out the repository. # - Sets up Node.js. # - Installs npm dependencies. # - Runs the theme build script. # - Ensures version-controlled files are not modified or deleted. test-build-scripts: name: Test ${{ matrix.theme }} build script runs-on: ubuntu-latest timeout-minutes: 10 if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} strategy: fail-fast: false matrix: theme: [ 'twentytwentyone', 'twentytwenty', 'twentynineteen', ] defaults: run: working-directory: src/wp-content/themes/${{ matrix.theme }} steps: - name: Checkout repository uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 with: ref: ${{ github.event_name == 'workflow_dispatch' && inputs.branch || github.ref }} - name: Set up Node.js uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 with: node-version-file: '.nvmrc' cache: npm cache-dependency-path: src/wp-content/themes/${{ matrix.theme }}/package-lock.json - name: Install npm dependencies run: npm ci - name: Build theme run: npm run build - name: Ensure version-controlled files are not modified or deleted run: git diff --exit-code # Prepares bundled themes for release. # # Performs the following steps: # - Checks out the repository. # - Uploads the theme files as a workflow artifact (files uploaded as an artifact are automatically zipped). bundle-theme: name: Create ${{ matrix.theme }} ZIP file runs-on: ubuntu-latest needs: [ test-build-scripts ] timeout-minutes: 10 if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} strategy: fail-fast: false matrix: theme: [ 'twentytwentythree', 'twentytwentytwo', 'twentytwentyone', 'twentytwenty', 'twentynineteen', 'twentyseventeen', 'twentysixteen', 'twentyfifteen', 'twentyfourteen', 'twentythirteen', 'twentytwelve', 'twentyeleven', 'twentyten' ] steps: - name: Checkout repository uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 with: ref: ${{ github.event_name == 'workflow_dispatch' && inputs.branch || github.ref }} - name: Upload theme ZIP as an artifact uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 with: if-no-files-found: error name: ${{ matrix.theme }} path: src/wp-content/themes/${{ matrix.theme }} slack-notifications: name: Slack Notifications uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk needs: [ bundle-theme, test-build-scripts ] if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} with: calling_status: ${{ needs.test-build-scripts.result == 'success' && needs.bundle-theme.result == 'success' && 'success' || ( needs.test-build-scripts.result == 'cancelled' || needs.bundle-theme.result == 'cancelled' ) && 'cancelled' || 'failure' }} 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 needs: [ test-build-scripts, bundle-theme, slack-notifications ] if: | always() && github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && github.run_attempt < 2 && ( needs.test-build-scripts.result == 'cancelled' || needs.test-build-scripts.result == 'failure' || needs.bundle-theme.result == 'cancelled' || needs.bundle-theme.result == 'failure' ) steps: - name: Dispatch workflow run uses: actions/github-script@98814c53be79b1d30f795b907e553d8679345975 # v6.4.0 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 }}' } });