workflow-sample-wordpress-p.../.forgejo/workflows/wordpress-plugin.yml
j ad1212df4c
All checks were successful
Build & Release WordPress Plugin / build (push) Successful in 27s
Ensure unzip installed
God why do we still use zip when tar.gz is superior in every way
2025-06-17 16:22:09 +10:00

93 lines
3.2 KiB
YAML

# Building and releasing Wordpress plugins is pretty simple
# It's just zipping up some PHP. This doesn't contain any unit tests
# this is just zipping and shipping.
#
# Generally speaking your directory structure would be:
# .
# ├── README.md
# └── src
# └── wordpress-plugin.php
#
# With the repository name being the name of your plugin to make it easier
# to Google for. Up to you though; you can configure the source dir below.
#
# When you tag a commit and the tag stats with 'v', this workflow will
# zip and ship the Wordpress plugin to the 'releases' tab of Github or Forgejo
name: Build & Release WordPress Plugin
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: docker
container: debian:12
env:
SOURCE_DIR: "src"
steps:
- name: Prepare Build Environment
run: |
apt update && apt -y install zip unzip nodejs curl jq
- name: Checkout repo
uses: actions/checkout@v4
- name: Package plugin
run: |
# Set plugin name like this because it's easier than inline
PLUGIN_NAME=$(echo $GITHUB_REPOSITORY | awk -F'/' '{ print $2 }')
# Create a build directory to ensure that we're correctly creating
# a single child directory in the zip.
mkdir -p build
cp -r ${SOURCE_DIR} "build/${PLUGIN_NAME}"
# Zip it up for shipping
cd build
zip -r "../${PLUGIN_NAME}.zip" "${PLUGIN_NAME}"
cd -
unzip -l "${PLUGIN_NAME}.zip"
- name: Create Release if not exists
run: |
# Curl request that uses the repos token & Forgejo's built-in variables
# to create a new release based on the tag that you have pushed
#
# It doesn't care if the release exists or not.
curl -X POST "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases" \
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"tag_name": "'"${GITHUB_REF##*/}"'",
"target_commitish": "main",
"name": "'"${GITHUB_REF##*/}"'",
"body": "Auto release",
"draft": false,
"prerelease": false
}' || true
- name: Upload Plugin Zip to Release
run: |
# Set some variables because it's cleaner than in-line
TAG_NAME="${GITHUB_REF##*/}"
REPO_NAME="$(basename $GITHUB_REPOSITORY)"
PLUGIN_NAME=$(echo $GITHUB_REPOSITORY | awk -F'/' '{ print $2 }')
# Get the release ID created in the last step
RELEASE_ID=$(curl -s \
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/tags/${TAG_NAME}" \
| jq -r '.id')
# Pushes he zip file to be shown in the "Releases" tab under this release.
curl -X POST "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${PLUGIN_NAME}.zip" \
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
-H "Content-Type: application/zip" \
--data-binary "@build/${PLUGIN_NAME}.zip"