Skip to content

Commit

Permalink
Additional tools for plugin archives: php-scoper, rector (#134)
Browse files Browse the repository at this point in the history
Co-authored-by: Philipp Bammes <[email protected]>
Co-authored-by: Alex Pantechovskis <[email protected]>
  • Loading branch information
3 people authored Sep 4, 2024
1 parent 4caec22 commit db67323
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 13 deletions.
62 changes: 53 additions & 9 deletions .github/workflows/build-plugin-archive.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ on:
type: string
PHP_VERSION_BUILD:
description: PHP version to use when executing build tools.
default: "8.0"
default: "8.2"
required: false
type: string
ARCHIVE_NAME:
Expand Down Expand Up @@ -87,6 +87,8 @@ jobs:
name: Install production dependencies
timeout-minutes: 5
runs-on: ubuntu-latest
outputs:
artifact: ${{ steps.set-artifact-name.outputs.artifact }}
env:
ENV_VARS: ${{ secrets.ENV_VARS }}
COMPOSER_AUTH: '${{ secrets.COMPOSER_AUTH_JSON }}'
Expand Down Expand Up @@ -131,9 +133,11 @@ jobs:
!./.git
!./.ddev
!./.github
include-hidden-files: true

run-build-tools:
name: Process build steps
timeout-minutes: 5
timeout-minutes: 10
runs-on: ubuntu-latest
needs: checkout-dependencies
env:
Expand All @@ -147,6 +151,13 @@ jobs:
uses: actions/download-artifact@v4
with:
name: ${{ needs.checkout-dependencies.outputs.artifact }}

- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ inputs.PHP_VERSION_BUILD }}
tools: humbug/php-scoper, rector

- name: Check optional Composer build tools
id: composer-tools
run: |
Expand All @@ -157,17 +168,29 @@ jobs:
echo "$EXIT"
exit 0
fi
jq '.extra | has("composer-asset-compiler")' < composer.json >/dev/null 2>&1
jq '.extra | has("composer-asset-compiler")' --exit-status < composer.json >/dev/null 2>&1
local EXIT=$?
echo "$EXIT"
}
hasTranslateConfig(){
jq '.extra | has("wp-translation-downloader")' < composer.json >/dev/null 2>&1
jq '.extra | has("wp-translation-downloader")' --exit-status < composer.json >/dev/null 2>&1
local EXIT=$?
echo "$EXIT"
}
hasScoperConfig(){
test -f scoper.inc.php
local EXIT=$?
echo "$EXIT"
}
hasRectorConfig(){
test -f rector.php
local EXIT=$?
echo "$EXIT"
}
echo "assets-compiler=$( hasAssetConfig )" >> $GITHUB_OUTPUT
echo "translation-downloader=$( hasTranslateConfig )" >> $GITHUB_OUTPUT
echo "php-scoper=$( hasScoperConfig )" >> $GITHUB_OUTPUT
echo "rector=$( hasRectorConfig )" >> $GITHUB_OUTPUT
- name: Set up node cache mode
run: |
Expand Down Expand Up @@ -202,16 +225,38 @@ jobs:
composer global require inpsyde/wp-translation-downloader
composer wp-translation-downloader:download
- name: Run Rector
if: steps.composer-tools.outputs.rector == '0'
run: |
rector
- name: Run PHP-Scoper
if: steps.composer-tools.outputs.php-scoper == '0'
run: |
php-scoper add-prefix --force --output-dir=build
composer --working-dir=build dump-autoload -o
sed -i "s/'__composer_autoload_files'/\'__composer_autoload_files_${{ github.sha }}'/g" "build/vendor/composer/autoload_real.php"
- name: Move code to the `build/` directory
if: steps.composer-tools.outputs.php-scoper != '0'
run: |
shopt -s extglob dotglob
mkdir build
mv !(build) build
- name: Set artifact name
id: set-artifact-name
run: echo "artifact=interim-built" >> $GITHUB_OUTPUT

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ steps.set-artifact-name.outputs.artifact }}
path: |
.
!**/node_modules
build/
!build/**/node_modules
include-hidden-files: true

create-plugin-archive:
name: Create build archive
timeout-minutes: 5
Expand Down Expand Up @@ -239,11 +284,9 @@ jobs:
run: echo "archive-name=${ARCHIVE_NAME:-${{ github.event.repository.name }}}" >> $GITHUB_OUTPUT

- name: Add commit hash to plugin header
working-directory: interim-deps
run: 'sed -Ei "s/SHA: .*/SHA: ${GIT_SHA}/g" ${{ inputs.PLUGIN_MAIN_FILE }}'

- name: Set plugin version header
working-directory: interim-deps
run: 'sed -Ei "s/Version: .*/Version: ${PLUGIN_VERSION}/g" ${{ inputs.PLUGIN_MAIN_FILE }}'

- name: Set up PHP
Expand All @@ -261,7 +304,7 @@ jobs:
- name: Run WP-CLI command
run: |
wp dist-archive ./interim-deps ./archive.zip --plugin-dirname=${{ steps.plugin-folder-name.outputs.plugin-folder-name }}
wp dist-archive . ./archive.zip --plugin-dirname=${{ steps.plugin-folder-name.outputs.plugin-folder-name }}
# GitHub Action artifacts would otherwise produce a zip within a zip
- name: Unzip archive to dist/
Expand All @@ -276,3 +319,4 @@ jobs:
with:
name: ${{ steps.set-artifact-name.outputs.artifact }}
path: ./dist/*
include-hidden-files: true
10 changes: 6 additions & 4 deletions docs/archive-creation.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ To achieve that, the reusable workflow:
1. Installs dependencies (including dev-dependencies) defined in `composer.json`
2. Executes `inpsyde/composer-assets-compiler` if required & configured by the package
3. Executes `inpsyde/wp-translation-downloader` if required & configured by the package
4. Re-installs dependencies without dev-dependencies
5. Sets current commit hash and plugin version in the plugin's main file
6. Runs `wp dist-archive` to create the final archive (with builtin support for a `.distignore` file)
7. Uploads it as an artifact for download or further processing
4. Executes PHP-Scoper if configured by the package
5. Executes Rector if configured by the package
6. Re-installs dependencies without dev-dependencies
7. Sets current commit hash and plugin version in the plugin's main file
8. Runs `wp dist-archive` to create the final archive (with builtin support for a `.distignore` file)
9. Uploads it as an artifact for download or further processing

## Simple usage example

Expand Down

0 comments on commit db67323

Please sign in to comment.