Skip to content

TEST PR: Identical to "#666 ✨😈☝️ pull request preview playground" ?? #8

TEST PR: Identical to "#666 ✨😈☝️ pull request preview playground" ??

TEST PR: Identical to "#666 ✨😈☝️ pull request preview playground" ?? #8

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.'
})