Merge pull request 'feature-testing' (#3) from feature-testing into main
All checks were successful
Build & Release WordPress Plugin / build (push) Successful in 51s

Reviewed-on: #3
This commit is contained in:
j 2025-06-17 16:35:04 +10:00
commit fbb4e22dc7
2 changed files with 98 additions and 30 deletions

View file

@ -1,45 +1,94 @@
name: Build Plugin Zip
# 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:
branches:
- main
workflow_dispatch: # Manual trigger
tags:
- 'v*'
jobs:
build-zip:
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@v3
uses: actions/checkout@v4
- name: Get repo name
id: repo_name
run: echo "REPO_NAME=$(basename $(git rev-parse --show-toplevel))" >> $GITHUB_ENV
- name: Prepare zip folder
- name: Package plugin
run: |
rm -rf /tmp/$REPO_NAME
mkdir -p /tmp/$REPO_NAME
cp -r ./src/* /tmp/$REPO_NAME/
# Set plugin name like this because it's easier than inline
PLUGIN_NAME=$(echo $GITHUB_REPOSITORY | awk -F'/' '{ print $2 }')
- name: Create zip archive
# 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: |
apt update && apt -y install zip
cd /tmp
zip -r $REPO_NAME.zip $REPO_NAME
# 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 }')
- name: Upload zip artifact
uses: actions/upload-artifact@v3
with:
name: ${{ env.REPO_NAME }}-plugin-zip
path: /tmp/${{ env.REPO_NAME }}.zip
# 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" \
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
-F "name=${PLUGIN_NAME}.zip" \
-F "attachment=@${PLUGIN_NAME}.zip"
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: build/${{ env.REPO_NAME }}.zip
asset_name: ${{ env.REPO_NAME }}.zip
asset_content_type: application/zip

View file

@ -21,3 +21,22 @@ this information when a shortcode (`[event-calendar]`) is called.
We store a list/array of URLs to pull from, so you should be able to add a
couple.
## Usage
Just install then look in "Settings" for the "FWP Calendar" section.
You can add a simple list of ICS/iCal URLs there however they must be publicly
accessible. I tested and it works with Google calendars.
I created this for a customer who had a list of upcoming events displayed on
their website. They were manually updating the events calendar entirely through
Wordpress, which seemed clunky.
This plugin allows you to maintain a community events calendar from within your
Orgs typical public calendar. Visitors can see events spread out on a calendar
and upcoming events below.
This is good because you can provide the calendar for people to add to their
phones or import into their own calendars. Your options are endless when you
don't use shitty proprietary standards!