From a6e5d6ff9961a717dbc4ea2f409bdd19a693a7e9 Mon Sep 17 00:00:00 2001 From: j Date: Tue, 17 Jun 2025 16:33:08 +1000 Subject: [PATCH 1/2] Shit talking in README --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index d0d86c9..8c28be6 100644 --- a/README.md +++ b/README.md @@ -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! From ddfd175650e8b3011e62a85bfee381d6ca46b2c2 Mon Sep 17 00:00:00 2001 From: j Date: Tue, 17 Jun 2025 16:33:51 +1000 Subject: [PATCH 2/2] Workflow to build and ship --- .forgejo/workflows/package.yml | 109 ++++++++++++++++++++++++--------- 1 file changed, 79 insertions(+), 30 deletions(-) diff --git a/.forgejo/workflows/package.yml b/.forgejo/workflows/package.yml index 2277a88..f6325b8 100644 --- a/.forgejo/workflows/package.yml +++ b/.forgejo/workflows/package.yml @@ -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