2025-06-17 16:12:00 +10:00
|
|
|
# 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: |
|
2025-06-17 16:22:09 +10:00
|
|
|
apt update && apt -y install zip unzip nodejs curl jq
|
2025-06-17 16:12:00 +10:00
|
|
|
|
|
|
|
- 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
|
2025-06-17 16:19:16 +10:00
|
|
|
cp -r ${SOURCE_DIR} "build/${PLUGIN_NAME}"
|
2025-06-17 16:12:00 +10:00
|
|
|
|
|
|
|
# Zip it up for shipping
|
2025-06-17 16:19:16 +10:00
|
|
|
cd build
|
|
|
|
zip -r "../${PLUGIN_NAME}.zip" "${PLUGIN_NAME}"
|
|
|
|
cd -
|
2025-06-17 16:21:47 +10:00
|
|
|
unzip -l "${PLUGIN_NAME}.zip"
|
2025-06-17 16:12:00 +10:00
|
|
|
|
|
|
|
- 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.
|
2025-06-17 16:24:57 +10:00
|
|
|
curl -X POST "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets" \
|
2025-06-17 16:12:00 +10:00
|
|
|
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
|
2025-06-17 16:24:57 +10:00
|
|
|
-F "name=${PLUGIN_NAME}.zip" \
|
2025-06-17 16:26:58 +10:00
|
|
|
-F "attachment=@${PLUGIN_NAME}.zip"
|
2025-06-17 16:24:57 +10:00
|
|
|
|