TEST PR: Identical to "#666 ✨😈☝️ pull request preview playground" ?? #8
Workflow file for this run
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: Prepare a .zip file with the current state of the plugin | |
# Inspired by, but not based on https://github.com/WordPress/gutenberg/blob/b89fb7b6eaf619bde0269e2a7fbf6245822f6cbf/.github/workflows/build-plugin-zip.yml#L153 | |
on: | |
pull_request: | |
paths: | |
- '.github/**' # ONLY DURING DEVELOPMENT # REMOVE !!!! | |
- 'build/**' | |
- 'includes/**' | |
- 'languages/**' | |
- 'src/**' | |
- '*.php' | |
# What and Why pull_request_target? | |
# https://github.com/GatherPress/gatherpress/pull/666#issuecomment-2143088443 | |
# pull_request_target: | |
# 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 | |
# Permission can be added at job level or workflow level | |
permissions: | |
issues: write | |
jobs: | |
zip: | |
name: Build GatherPress Plugin Zip | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.ref }} | |
show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: latest | |
coverage: none | |
tools: wp-cli | |
- name: Install latest version of dist-archive-command | |
run: wp package install wp-cli/dist-archive-command:dev-main | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
cache: npm | |
- name: Install dependencies | |
run: npm ci | |
- name: Build plugin | |
# - [Incorrect version number used when creating zip archive · Issue #92 · wp-cli/dist-archive-command](https://github.com/wp-cli/dist-archive-command/issues/92) | |
run: | | |
npm run build | |
wp dist-archive . ./${{ github.event.repository.name }}.zip | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ github.event.repository.name }}-pr | |
path: ./${{ github.event.repository.name }}.zip | |
blueprint: | |
name: Create blueprint.json | |
needs: zip | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/github-script@v7 | |
with: | |
# Based on: https://github.com/WordPress/wordpress-playground/blob/trunk/packages/playground/website/public/gutenberg.html | |
script: | | |
// const prNumber = 666; | |
const prNumber = context.issue.number; | |
// Verify that the PR exists and that GitHub CI finished building it | |
// const zipArtifactUrl = `/plugin-proxy.php?org=WordPress&repo=gutenberg&workflow=Build%20Gutenberg%20Plugin%20Zip&artifact=gutenberg-plugin&pr=${prNumber}`; | |
const zipArtifactUrl = `https://carsten-bach.de/R/plugin-proxy.php?org=GatherPress&repo=gatherpress&workflow=Build%GatherPress%20Plugin%20Zip&artifact=gatherpress-pr&pr=${prNumber}`; | |
// Get link to the Playground site with the Blueprint to download and apply the PR | |
const blueprint = { | |
landingPage: '/wp-admin/', | |
steps: [ | |
{ | |
step: 'login', | |
username: 'admin', | |
password: 'password', | |
}, | |
{ | |
step: 'mkdir', | |
path: '/wordpress/pr', | |
}, | |
/* | |
* This is the most important step. | |
* It download the built plugin zip file exposed by GitHub CI. | |
* | |
* Because the zip file is not publicly accessible, we use the | |
* plugin-proxy API endpoint to download it. The source code of | |
* that endpoint is available at: | |
* https://github.com/WordPress/wordpress-playground/blob/trunk/packages/playground/website/public/plugin-proxy.php | |
*/ | |
{ | |
step: 'writeFile', | |
path: '/wordpress/pr/pr.zip', | |
data: { | |
resource: 'url', | |
url: zipArtifactUrl, | |
caption: `Downloading GatherPress PR ${prNumber}`, | |
}, | |
progress: { | |
weight: 2, | |
caption: `Applying GatherPress PR ${prNumber}`, | |
}, | |
}, | |
/** | |
* GitHub CI artifacts are doubly zipped: | |
* | |
* pr.zip | |
* gatherpress.zip | |
* gatherpress.php | |
* ... other files ... | |
* | |
* This step extracts the inner zip file so that we get | |
* access directly to gatherpress.zip and can use it to | |
* install the plugin. | |
*/ | |
{ | |
step: 'unzip', | |
zipPath: '/wordpress/pr/pr.zip', | |
extractToPath: '/wordpress/pr', | |
}, | |
{ | |
step: 'installPlugin', | |
pluginZipFile: { | |
resource: 'vfs', | |
path: '/wordpress/pr/gatherpress.zip', | |
}, | |
}, | |
], | |
}; | |
console.log( blueprint ); | |
const encoded = JSON.stringify(blueprint); | |
console.log( 'https://playground.wordpress.net/builder/builder.html#' + encodeURI(encoded) ); | |
console.log( 'https://playground.wordpress.net/#' + encodeURI(encoded) ); | |
# Run a separate file | |
# If you don't want to inline your entire script that you want to run, you can use a separate JavaScript module in your repository like so: | |
# - uses: actions/checkout@v3 | |
# - uses: actions/github-script@v7 | |
# with: | |
# script: | | |
# const script = require('./path/to/script.js') | |
# console.log(script({github, context})) | |
comment: | |
name: Comment with playground link | |
# https://github.com/actions/github-script?tab=readme-ov-file#comment-on-an-issue | |
# vs. | |
# https://docs.github.com/de/rest/issues/comments?apiVersion=2022-11-28#create-an-issue-comment--parameters | |
needs: ['zip', 'blueprint'] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Add comment (& log context attributes) | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
# console.log(context); | |
script: | | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: '👋 (Not, yet) A link to a *WordPress playground* instance with your least recent changes to GatherPress.' | |
}) |