Test NPM #12889
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. | |
# - Ensures version-controlled files are not modified or deleted. | |
# - Builds WordPress to run from the `src` directory. | |
# - Cleans up after building WordPress to the `src` directory. | |
# - Ensures version-controlled files are not modified or deleted. | |
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: Ensure version-controlled files are not modified or deleted during building and cleaning | |
run: git diff --exit-code | |
# 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. | |
# - Ensures version-controlled files are not modified or deleted. | |
# - Builds WordPress to run from the `src` directory. | |
# - Cleans up after building WordPress to the `src` directory. | |
# - Ensures version-controlled files are not modified or deleted. | |
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: Ensure version-controlled files are not modified or deleted during building and cleaning | |
run: git diff --exit-code | |
- name: Build WordPress in /src | |
run: npm run build:dev | |
- name: Clean after building in /src | |
run: npm run grunt clean -- --dev | |
- name: Ensure version-controlled files are not modified or deleted during building and cleaning | |
run: git diff --exit-code | |
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 }}' | |
} | |
}); |