Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Gutenberg build process testing to Core workflows #5499

Closed
wants to merge 49 commits into from
Closed
Show file tree
Hide file tree
Changes from 41 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
f0134d6
First pass at making the build process test code callable.
desrosj Oct 16, 2023
7bd10df
Workflow correction.
desrosj Oct 16, 2023
01e7697
Fix typo.
desrosj Oct 16, 2023
0585a81
Revert test change.
desrosj Oct 16, 2023
392e39d
Adjust job names.
desrosj Oct 16, 2023
acb1e2e
Fix MacOS job name.
desrosj Oct 16, 2023
cd3bbf8
Improve naming of jobs with better OS name.
desrosj Oct 16, 2023
f4b6337
Add Gutenberg testing.
desrosj Oct 16, 2023
3ffa797
Fix workflow name.
desrosj Oct 16, 2023
b85ec33
Reorder steps to try and reproduce a failure.
desrosj Oct 16, 2023
d545e64
Extend the MacOS timeout.
desrosj Oct 16, 2023
efbb7e8
Just use a static timeout value.
desrosj Oct 16, 2023
b07db75
Revert "Reorder steps to try and reproduce a failure."
desrosj Oct 16, 2023
ae45796
Remove caching to try and produce error.
desrosj Oct 16, 2023
80988b1
Restore cache keys and try the `wp/6.4` branch.
desrosj Oct 16, 2023
d3dbdf6
Merge branch 'trunk' of https://github.com/WordPress/wordpress-develo…
desrosj Oct 16, 2023
b29d14d
Downgrade package causing issues.
desrosj Oct 16, 2023
1e96fea
Remove specific branch checkout.
desrosj Oct 16, 2023
0177aec
Test running the plugin from `build` too.
desrosj Oct 16, 2023
ddedd5d
Past test directory to workflow.
desrosj Oct 16, 2023
345d3d3
Update the Core build process tests to run src and build tests in par…
desrosj Oct 16, 2023
3a6131e
Update inline docs for GB workflow.
desrosj Oct 16, 2023
a58a67c
Add missing input for MacOS GB tests.
desrosj Oct 16, 2023
103befa
Change confusing step name.
desrosj Oct 16, 2023
b9d3e69
Fix conditional issues.
desrosj Oct 16, 2023
2d043a2
The OS for the MacOS jobs will always be MacOS.
desrosj Oct 16, 2023
071791d
Downgrade problematic package.
desrosj Oct 16, 2023
42ef713
Undo name change for MacOS jobs.
desrosj Oct 16, 2023
b3ec542
Merge branch 'trunk' of https://github.com/WordPress/wordpress-develo…
desrosj Oct 17, 2023
cc20641
Test updating packages to the latest version.
desrosj Oct 17, 2023
b705f41
One last npm audit fix.
desrosj Oct 17, 2023
9296dc8
Merge branch 'trunk' of https://github.com/WordPress/wordpress-develo…
desrosj Oct 17, 2023
c8b51b3
Run Gutenberg test cases in parallel.
desrosj Oct 17, 2023
4d2f08c
Change grouping of jobs.
desrosj Oct 17, 2023
048b80d
Fix typo.
desrosj Oct 17, 2023
a519298
Change core grouping
desrosj Oct 17, 2023
56667cb
Change core grouping
desrosj Oct 17, 2023
0e8ef8c
Fix Gutenberg name splitting.
desrosj Oct 17, 2023
6240392
One final job name tweak.
desrosj Oct 17, 2023
cf65449
Fix typo.
desrosj Oct 17, 2023
9232aee
Small bug fixes and documentation clean up.
desrosj Oct 17, 2023
a08030b
Merge remote-tracking branch 'upstream/trunk' into combine/npm-testing
desrosj Oct 19, 2023
4fb1bae
Ensure the right version of Node.js is used for Gutenberg.
desrosj Oct 19, 2023
8b87990
Remove Node.js check.
desrosj Oct 19, 2023
b4e13c6
Remove the `with-core` control.
desrosj Oct 19, 2023
522fe85
Name adjustments.
desrosj Oct 19, 2023
caa1814
Regroup Gutenberg tests.
desrosj Oct 19, 2023
2a3e248
Move callable workflows into a new directory.
desrosj Oct 19, 2023
2488fdd
Nesting workflows is not supported. Moving back and changing name.
desrosj Oct 19, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 170 additions & 0 deletions .github/workflows/test-build-processes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
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]'
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

# Disable permissions for all available scopes by default.
# Any needed permissions should be configured at the job level.
permissions: {}

jobs:
# Creates a job to test the WordPress Core build process on multiple operating systems.
test-core-build-process:
name: Core running from ${{ matrix.directory }}
uses: desrosj/wordpress-develop/.github/workflows/test-core-build-process-run.yml@combine/npm-testing
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 }}

# Creates a job to test the WordPress Core build process 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.
test-core-build-process-macos:
name: Core running from ${{ matrix.directory }}
uses: desrosj/wordpress-develop/.github/workflows/test-core-build-process-run.yml@combine/npm-testing
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 }}

# Creates a job to test the Gutenberg plugin build process on multiple operating systems.
test-gutenberg-build-process:
name: Gutenberg ${{ matrix.with-core && ' with Core' || '' }}
uses: desrosj/wordpress-develop/.github/workflows/test-gutenberg-build-process-run.yml@combine/npm-testing
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-core: [ true, false ]
with:
os: ${{ matrix.os }}
with-core: ${{ matrix.with-core }}
directory: ${{ matrix.directory }}

# Creates a job to test the Gutenberg plugin build process 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.
test-gutenberg-build-process-macos:
name: Gutenberg ${{ matrix.with-core && ' with Core' || '' }}
uses: desrosj/wordpress-develop/.github/workflows/test-gutenberg-build-process-run.yml@combine/npm-testing
permissions:
contents: read
if: ${{ github.repository == 'WordPress/wordpress-develop' }}
strategy:
fail-fast: false
matrix:
os: [ macos-latest ]
directory: [ 'src', 'build' ]
with-core: [ true, false ]
with:
os: ${{ matrix.os }}
with-core: ${{ matrix.with-core }}
directory: ${{ matrix.directory }}

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@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.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 }}'
}
});
73 changes: 73 additions & 0 deletions .github/workflows/test-core-build-process-run.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
##
# A callable workflow that tests the WordPress Core build process.
##
name: Test the WordPress Build Process

on:
workflow_call:
inputs:
os:
description: 'Operating system to run tests on'
required: false
type: 'string'
default: 'ubuntu-latest'
directory:
description: 'Directory to run WordPress out of. Valid values are src or build'
required: false
type: 'string'
default: 'src'

env:
PUPPETEER_SKIP_DOWNLOAD: ${{ true }}

jobs:
# Verifies that installing npm dependencies and building WordPress works as expected.
#
# Performs the following steps:
# - Checks out the repository.
# - Sets up Node.js.
# - Logs debug information about the GitHub Action runner.
# - Installs npm dependencies.
# - Builds WordPress to run from the desired location (src or build).
# - Ensures version-controlled files are not modified or deleted.
# - Cleans up after building WordPress.
# - Ensures version-controlled files are not modified or deleted.
build-process-tests:
name: Core running from ${{ inputs.directory }} / ${{ inputs.os == 'macos-latest' && 'MacOS' || inputs.os == 'windows-latest' && 'Windows' || 'Linux' }}
runs-on: ${{ inputs.os }}
timeout-minutes: 20

steps:
- name: Checkout repository
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}

- name: Set up Node.js
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1
with:
node-version-file: '.nvmrc'
cache: npm

- name: Log debug information
run: |
npm --version
node --version
curl --version
git --version
svn --version

- name: Install npm Dependencies
run: npm ci

- name: Build WordPress to run from ${{ inputs.directory }}
run: npm run build${{ inputs.directory == 'src' && ':dev' || '' }}

- name: Ensure version-controlled files are not modified or deleted during building
run: git diff --exit-code

- name: Clean after building to run from ${{ inputs.directory }}
run: npm run grunt clean${{ inputs.directory == 'src' && ' -- --dev' || '' }}

- name: Ensure version-controlled files are not modified or deleted during cleaning
run: git diff --exit-code
100 changes: 100 additions & 0 deletions .github/workflows/test-gutenberg-build-process-run.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
##
# A callable workflow that tests the Gutenberg plugin build process.
##
name: Test the Gutenberg plugin Build Process

on:
workflow_call:
inputs:
os:
description: 'Operating system to run tests on'
required: false
type: 'string'
default: 'ubuntu-latest'
with-core:
description: 'Whether to test with WordPress Core'
required: false
type: 'boolean'
default: false
directory:
description: 'Directory to run WordPress out of. Valid values are src or build'
required: false
type: 'string'
default: 'src'

env:
GUTENBERG_DIRECTORY: ${{ inputs.directory == 'build' && 'build' || 'src' }}/wp-content/plugins/gutenberg
PUPPETEER_SKIP_DOWNLOAD: ${{ true }}

jobs:
# Verifies that installing npm dependencies and building the Gutenberg plugin works as expected.
#
# Performs the following steps:
# - Checks out the repository.
# - Checks out the Gutenberg plugin repository in the plugins directory.
# - Sets up Node.js.
# - Logs debug information about the GitHub Action runner.
# - Installs Core npm dependencies if testing with Core.
# - Installs npm dependencies for Gutenberg.
# - Runs the Gutenberg build process.
# - Builds WordPress to run from the relevant location (src or build) if testing with Core.
# - Runs the Gutenberg build process.
# - Ensures version-controlled files are not modified or deleted.
build-process-tests:
desrosj marked this conversation as resolved.
Show resolved Hide resolved
name: Gutenberg ${{ inputs.with-core && ' with Core' || '' }} / Running from ${{ inputs.directory }} on ${{ inputs.os == 'macos-latest' && 'MacOS' || inputs.os == 'windows-latest' && 'Windows' || 'Linux' }}
runs-on: ${{ inputs.os }}
timeout-minutes: 30

steps:
- name: Checkout repository
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}

- name: Checkout Gutenberg plugin
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
repository: 'WordPress/gutenberg'
path: ${{ env.GUTENBERG_DIRECTORY }}
show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}

- name: Set up Node.js
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1
with:
node-version-file: '.nvmrc'
desrosj marked this conversation as resolved.
Show resolved Hide resolved
cache: npm
cache-dependency-path: |
package-lock.json
${{ env.GUTENBERG_DIRECTORY }}/package-lock.json

- name: Log debug information
run: |
npm --version
node --version
curl --version
git --version
svn --version

- name: Install Core Dependencies
if: ${{ inputs.with-core }}
run: npm ci

- name: Install Gutenberg Dependencies
run: npm ci
working-directory: ${{ env.GUTENBERG_DIRECTORY }}

- name: Run Gutenberg build script
run: npm run build
working-directory: ${{ env.GUTENBERG_DIRECTORY }}

- name: Build WordPress to run from ${{ inputs.directory }}
if: ${{ inputs.with-core }}
run: npm run build${{ inputs.directory == 'src' && ':dev' || '' }}

- name: Run Gutenberg build script after building Core to run from ${{ inputs.directory }}
if: ${{ inputs.with-core }}
run: npm run build
working-directory: ${{ env.GUTENBERG_DIRECTORY }}

- name: Ensure version-controlled files are not modified or deleted during building
run: git diff --exit-code
Loading
Loading