# 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 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"