288 lines
11 KiB
YAML
288 lines
11 KiB
YAML
|
name: Bump WP L-2 Support
|
||
|
on:
|
||
|
workflow_dispatch:
|
||
|
inputs:
|
||
|
releaseBranch:
|
||
|
description: Provide the release branch you want to bump the WP L-2 support. Example release/6.9. Note that trunk will also be bumped to match.
|
||
|
default: ''
|
||
|
required: true
|
||
|
|
||
|
permissions: {}
|
||
|
|
||
|
env:
|
||
|
GIT_COMMITTER_NAME: 'WooCommerce Bot'
|
||
|
GIT_COMMITTER_EMAIL: 'no-reply@woocommerce.com'
|
||
|
GIT_AUTHOR_NAME: 'WooCommerce Bot'
|
||
|
GIT_AUTHOR_EMAIL: 'no-reply@woocommerce.com'
|
||
|
|
||
|
jobs:
|
||
|
check-release-branch-exists:
|
||
|
name: Check for existence of release branch
|
||
|
runs-on: ubuntu-20.04
|
||
|
steps:
|
||
|
- name: Check for release branch
|
||
|
id: release-branch-check
|
||
|
uses: actions/github-script@v6
|
||
|
with:
|
||
|
script: |
|
||
|
// This will throw an error for non-200 responses, which prevents subsequent jobs from completing, as desired.
|
||
|
await github.request( 'GET /repos/{owner}/{repo}/branches/{branch}', {
|
||
|
owner: context.repo.owner,
|
||
|
repo: context.repo.repo,
|
||
|
branch: '${{ inputs.releaseBranch }}',
|
||
|
} );
|
||
|
|
||
|
validate-bump:
|
||
|
name: Validate and bump WP L-2 support version
|
||
|
runs-on: ubuntu-20.04
|
||
|
needs: check-release-branch-exists
|
||
|
if: success()
|
||
|
permissions:
|
||
|
actions: write
|
||
|
contents: write
|
||
|
pull-requests: write
|
||
|
steps:
|
||
|
- uses: actions/checkout@v3
|
||
|
|
||
|
- name: Get latest WP version
|
||
|
id: latestWP
|
||
|
uses: actions/github-script@v6
|
||
|
with:
|
||
|
script: |
|
||
|
const https = require( 'https' );
|
||
|
|
||
|
https.get( 'https://api.wordpress.org/core/stable-check/1.0/', ( resp ) => {
|
||
|
let data = '';
|
||
|
|
||
|
// A chunk of data has been received.
|
||
|
resp.on( 'data', ( chunk ) => {
|
||
|
data += chunk;
|
||
|
} );
|
||
|
|
||
|
// The whole response has been received. Print out the result.
|
||
|
resp.on( 'end', () => {
|
||
|
JSON.parse(data, ( key, val ) => {
|
||
|
if ( val === 'latest' ) {
|
||
|
core.setOutput( 'version', key )
|
||
|
}
|
||
|
} );
|
||
|
} );
|
||
|
|
||
|
} ).on( 'error', ( err ) => {
|
||
|
console.log( 'Error: ' + err.message );
|
||
|
} );
|
||
|
|
||
|
- name: Get L-2 WP version
|
||
|
id: l2Version
|
||
|
if: steps.latestWP.outputs.version != '' && steps.latestWP.outputs.version != null
|
||
|
uses: actions/github-script@v6
|
||
|
with:
|
||
|
script: |
|
||
|
const version = "${{ steps.latestWP.outputs.version }}";
|
||
|
const latestWPVersionMajor = version.split( '.' )[0];
|
||
|
const latestWPVersionMinor = version.split( '.' )[1];
|
||
|
const l2 = (parseInt( ( latestWPVersionMajor + latestWPVersionMinor ), 10 ) - 2 ).toString();
|
||
|
const l2Major = l2.split( '' )[0];
|
||
|
const l2Minor = l2.split( '' )[1];
|
||
|
core.setOutput( 'version', l2Major + '.' + l2Minor );
|
||
|
|
||
|
- name: Git fetch the release branch
|
||
|
run: git fetch origin ${{ inputs.releaseBranch }}
|
||
|
|
||
|
- name: Checkout release branch
|
||
|
run: git checkout ${{ inputs.releaseBranch }}
|
||
|
|
||
|
- name: Create a PR branch based on release branch
|
||
|
run: git checkout -b WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/${{ inputs.releaseBranch }}
|
||
|
|
||
|
- name: Check if WP L-2 support needs to be bumped the release branch
|
||
|
id: readmeWPVersion
|
||
|
if: steps.l2Version.outputs.version != '' && steps.l2Version.outputs.version != null
|
||
|
uses: actions/github-script@v6
|
||
|
with:
|
||
|
script: |
|
||
|
const fs = require( 'node:fs' );
|
||
|
const l2Version = "${{ steps.l2Version.outputs.version }}";
|
||
|
let readme = '';
|
||
|
|
||
|
fs.readFile( './plugins/woocommerce/readme.txt', 'utf-8', function( err, data ) {
|
||
|
if ( err ) {
|
||
|
console.error( err );
|
||
|
}
|
||
|
|
||
|
readme = data.split( "\n" );
|
||
|
const newReadme = [];
|
||
|
let needsChange = false;
|
||
|
|
||
|
for ( const line of readme ) {
|
||
|
if ( line.match( /Requires\sat\sleast:\s\d+\.\d/ ) ) {
|
||
|
const readmeVersion = line.match( /\d+\.\d/ );
|
||
|
|
||
|
// If the versions don't match, means we need to make a change.
|
||
|
if ( readmeVersion != l2Version ) {
|
||
|
needsChange = true;
|
||
|
|
||
|
newReadme.push( 'Requires at least: ' + l2Version );
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
newReadme.push( line );
|
||
|
}
|
||
|
|
||
|
if ( needsChange ) {
|
||
|
fs.writeFile( './plugins/woocommerce/readme.txt', newReadme.join( "\n" ), err => {
|
||
|
if ( err ) {
|
||
|
core.setFailed( `Unable to bump the WP L-2 support version. ${err}` );
|
||
|
}
|
||
|
|
||
|
core.setOutput( 'needsChange', needsChange );
|
||
|
|
||
|
// Copy the readme.txt file to the root of VM to be used later.
|
||
|
fs.writeFile( '../../readme.txt', newReadme.join( "\n" ), err => {
|
||
|
if ( err ) {
|
||
|
core.setFailed( `Unable to copy the readme.txt file to the root of VM. ${err}` );
|
||
|
}
|
||
|
} );
|
||
|
} );
|
||
|
} else {
|
||
|
core.setFailed( 'No changes needed. WP Version is L-2 compatible.' );
|
||
|
}
|
||
|
} );
|
||
|
|
||
|
- name: Commit changes
|
||
|
if: steps.readmeWPVersion.outputs.needsChange == 'true'
|
||
|
run: git commit --no-verify -am "Update readme.txt WP L-2 support version."
|
||
|
|
||
|
- name: Push changes
|
||
|
if: steps.readmeWPVersion.outputs.needsChange == 'true'
|
||
|
run: git push origin WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/${{ inputs.releaseBranch }}
|
||
|
|
||
|
- name: Push the PR up to GitHub
|
||
|
id: release-branch-pr
|
||
|
if: steps.readmeWPVersion.outputs.needsChange == 'true'
|
||
|
uses: actions/github-script@v6
|
||
|
with:
|
||
|
script: |
|
||
|
const PRBody = "This PR bumps the WP version to L-2 compatible for the release branch ${{ inputs.releaseBranch }}.\n";
|
||
|
|
||
|
const pr = await github.rest.pulls.create( {
|
||
|
owner: context.repo.owner,
|
||
|
repo: context.repo.repo,
|
||
|
title: "Bump WP Version to L-2 compatible for ${{ inputs.releaseBranch }}",
|
||
|
head: "WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/${{ inputs.releaseBranch }}",
|
||
|
base: "${{ inputs.releaseBranch }}",
|
||
|
body: PRBody
|
||
|
} );
|
||
|
|
||
|
if ( pr.status != 201 ) {
|
||
|
core.setFailed( "Unable to push WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/${{ inputs.releaseBranch }} to GitHub." );
|
||
|
}
|
||
|
|
||
|
core.setOutput( 'pr', pr.data.number );
|
||
|
|
||
|
await github.rest.pulls.requestReviewers( {
|
||
|
owner: context.repo.owner,
|
||
|
repo: context.repo.repo,
|
||
|
pull_number: pr.data.number,
|
||
|
reviewers: [ context.actor ]
|
||
|
} );
|
||
|
|
||
|
- name: Checkout trunk branch
|
||
|
if: steps.release-branch-pr.outputs.pr != '' && steps.release-branch-pr.outputs.pr != null
|
||
|
run: git checkout trunk
|
||
|
|
||
|
- name: Create a branch based on trunk branch
|
||
|
if: steps.release-branch-pr.outputs.pr != '' && steps.release-branch-pr.outputs.pr != null
|
||
|
run: git checkout -b WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/trunk
|
||
|
|
||
|
- name: Check if WP L-2 support needs to be bumped for trunk
|
||
|
id: readmeWPVersionTrunk
|
||
|
if: steps.release-branch-pr.outputs.pr != '' && steps.release-branch-pr.outputs.pr != null
|
||
|
uses: actions/github-script@v6
|
||
|
with:
|
||
|
script: |
|
||
|
const fs = require( 'node:fs' );
|
||
|
const l2Version = "${{ steps.l2Version.outputs.version }}";
|
||
|
let readme = '';
|
||
|
|
||
|
fs.readFile( './plugins/woocommerce/readme.txt', 'utf-8', function( err, data ) {
|
||
|
if ( err ) {
|
||
|
console.error( err );
|
||
|
}
|
||
|
|
||
|
readme = data.split( "\n" );
|
||
|
const newReadme = [];
|
||
|
let needsChange = false;
|
||
|
|
||
|
for ( const line of readme ) {
|
||
|
if ( line.match( /Requires\sat\sleast:\s\d+\.\d/ ) ) {
|
||
|
const readmeVersion = line.match( /\d+\.\d/ );
|
||
|
|
||
|
// If the versions don't match, means we need to make a change.
|
||
|
if ( readmeVersion != l2Version ) {
|
||
|
needsChange = true;
|
||
|
|
||
|
newReadme.push( 'Requires at least: ' + l2Version );
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
newReadme.push( line );
|
||
|
}
|
||
|
|
||
|
if ( needsChange ) {
|
||
|
fs.writeFile( './plugins/woocommerce/readme.txt', newReadme.join( "\n" ), err => {
|
||
|
if ( err ) {
|
||
|
core.setFailed( `Unable to bump the WP L-2 support version. ${err}` );
|
||
|
}
|
||
|
|
||
|
core.setOutput( 'needsChange', needsChange );
|
||
|
|
||
|
// Copy the readme.txt file to the root of VM to be used later.
|
||
|
fs.writeFile( '../../readme.txt', newReadme.join( "\n" ), err => {
|
||
|
if ( err ) {
|
||
|
core.setFailed( `Unable to copy the readme.txt file to the root of VM. ${err}` );
|
||
|
}
|
||
|
} );
|
||
|
} );
|
||
|
} else {
|
||
|
core.setFailed( 'No changes needed. WP Version is L-2 compatible.' );
|
||
|
}
|
||
|
} );
|
||
|
|
||
|
- name: Commit changes
|
||
|
if: steps.readmeWPVersionTrunk.outputs.needsChange == 'true'
|
||
|
run: git commit --no-verify -am "Update readme.txt WP L-2 support version."
|
||
|
|
||
|
- name: Push changes
|
||
|
if: steps.readmeWPVersionTrunk.outputs.needsChange == 'true'
|
||
|
run: git push origin WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/trunk
|
||
|
|
||
|
- name: Push the PR up to GitHub
|
||
|
if: steps.readmeWPVersionTrunk.outputs.needsChange == 'true'
|
||
|
uses: actions/github-script@v6
|
||
|
with:
|
||
|
script: |
|
||
|
const PRBody = "This PR bumps the WP version to L-2 compatible for trunk.\n";
|
||
|
|
||
|
const pr = await github.rest.pulls.create( {
|
||
|
owner: context.repo.owner,
|
||
|
repo: context.repo.repo,
|
||
|
title: "Bump WP Version to L-2 compatible for trunk",
|
||
|
head: "WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/trunk",
|
||
|
base: "trunk",
|
||
|
body: PRBody
|
||
|
} );
|
||
|
|
||
|
if ( pr.status != 201 ) {
|
||
|
core.setFailed( "Unable to push WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/trunk to GitHub." );
|
||
|
}
|
||
|
|
||
|
await github.rest.pulls.requestReviewers( {
|
||
|
owner: context.repo.owner,
|
||
|
repo: context.repo.repo,
|
||
|
pull_number: pr.data.number,
|
||
|
reviewers: [ context.actor ]
|
||
|
} );
|