Test NPM #12954
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test npm | |
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]' | |
paths: | |
# These files configure npm. Changes could affect the outcome. | |
- 'package*.json' | |
# JavaScript files are built using npm. | |
- '**.js' | |
# CSS and SCSS files are built using npm. | |
- '**.scss' | |
- '**.css' | |
# Changes to workflow files should always verify all workflows are successful. | |
- '.github/workflows/**.yml' | |
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 | |
env: | |
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: ${{ true }} | |
jobs: | |
# Verifies that installing npm dependencies and building WordPress works as expected. | |
# | |
# Performs the following steps: | |
# - Checks out the repository. | |
# - Logs debug information about the GitHub Action runner. | |
# - Installs Node.js. | |
# _ Installs npm dependencies. | |
# - Builds WordPress to run from the `build` directory. | |
# - Cleans up after building WordPress to the `build` directory. | |
# - Builds WordPress to run from the `src` directory. | |
# - Cleans up after building WordPress to the `src` directory. | |
test-npm: | |
name: Test npm on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 20 | |
if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ ubuntu-latest, windows-latest ] | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
- name: Log debug information | |
run: | | |
npm --version | |
node --version | |
curl --version | |
git --version | |
svn --version | |
- name: Install Node.js | |
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 | |
with: | |
node-version-file: '.nvmrc' | |
cache: npm | |
- name: Install Dependencies | |
run: npm ci | |
- name: Build WordPress | |
run: npm run build | |
- name: Clean after building | |
run: npm run grunt clean | |
- name: Build WordPress in /src | |
run: npm run build:dev | |
- name: Clean after building in /src | |
run: npm run grunt clean -- --dev | |
# Verifies that installing npm dependencies and building WordPress works as expected on MacOS. | |
# | |
# This is separate from the job above in order to use stricter conditions about 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. | |
# | |
# Performs the following steps: | |
# - Checks out the repository. | |
# - Logs debug information about the GitHub Action runner. | |
# - Installs Node.js. | |
# _ Installs npm dependencies. | |
# - Builds WordPress to run from the `build` directory. | |
# - Cleans up after building WordPress to the `build` directory. | |
# - Builds WordPress to run from the `src` directory. | |
# - Cleans up after building WordPress to the `src` directory. | |
test-npm-macos: | |
name: Test npm on MacOS | |
runs-on: macos-latest | |
timeout-minutes: 30 | |
if: ${{ github.repository == 'WordPress/wordpress-develop' }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
- name: Log debug information | |
run: | | |
npm --version | |
node --version | |
curl --version | |
git --version | |
svn --version | |
- name: Install Node.js | |
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 | |
with: | |
node-version-file: '.nvmrc' | |
cache: npm | |
- name: Install Dependencies | |
run: npm ci | |
- name: Build WordPress | |
run: npm run build | |
- name: Clean after building | |
run: npm run grunt clean | |
- name: Build WordPress in /src | |
run: npm run build:dev | |
- name: Clean after building in /src | |
run: npm run grunt clean -- --dev | |
slack-notifications: | |
name: Slack Notifications | |
uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk | |
needs: [ test-npm, test-npm-macos ] | |
if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} | |
with: | |
calling_status: ${{ needs.test-npm.result == 'success' && needs.test-npm-macos.result == 'success' && 'success' || ( needs.test-npm.result == 'cancelled' || needs.test-npm-macos.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-npm, test-npm-macos, slack-notifications ] | |
if: | | |
always() && | |
github.repository == 'WordPress/wordpress-develop' && | |
github.event_name != 'pull_request' && | |
github.run_attempt < 2 && | |
( | |
needs.test-npm.result == 'cancelled' || needs.test-npm.result == 'failure' || | |
needs.test-npm-macos.result == 'cancelled' || needs.test-npm-macos.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 }}' | |
} | |
}); |