Skip to content

workflow

workflow #203

Workflow file for this run

name: Create Release
on:
push:
# Trigger on pushes to main or master branch
branches: [ main, master ]
# Allow manual triggering
workflow_dispatch:
permissions:
contents: write
jobs:
check-and-release:
runs-on: ubuntu-latest
env:
PLUGIN_FILE: enginescript-site-optimizer.php
PLUGIN_SLUG: enginescript-site-optimizer
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Get latest version
id: get_version
run: |
VERSION=$(grep -oP "Version: \K[0-9]+\.[0-9]+\.[0-9]+" "$PLUGIN_FILE")
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Found version: $VERSION"
- name: Check if release exists
id: check_release
run: |
RELEASE_EXISTS=$(curl -s -o /dev/null -w "%{http_code}" "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/v${{ steps.get_version.outputs.version }}")
if [[ "$RELEASE_EXISTS" == "200" ]]; then
echo "exists=true" >> $GITHUB_OUTPUT
echo "Release v${{ steps.get_version.outputs.version }} already exists"
else
echo "exists=false" >> $GITHUB_OUTPUT
echo "Release v${{ steps.get_version.outputs.version }} does not exist yet"
fi
- name: Update README version
if: steps.check_release.outputs.exists == 'false'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION: ${{ steps.get_version.outputs.version }}
run: |
README_FILE="README.md"
TMP_FILE=$(mktemp)
# Update the version badge with the new version and logo
sed -E "s#\[!\[Version\]\(https://img\.shields\.io/badge/Version-[0-9]+\.[0-9]+\.[0-9]+-orange\.svg\?logo=github\)\]\(https://github\.com/[^[:space:])]+/releases/(latest/download|download/v[0-9]+\.[0-9]+\.[0-9]+)/[^[:space:])]+-[0-9]+\.[0-9]+\.[0-9]+\.zip\)#[![Version](https://img.shields.io/badge/Version-${VERSION}-orange.svg?logo=github)](https://github.com/${GITHUB_REPOSITORY}/releases/latest/download/${PLUGIN_SLUG}-${VERSION}.zip)#g" "$README_FILE" > "$TMP_FILE"
# Replace file if changes were made
if ! cmp -s "$README_FILE" "$TMP_FILE"; then
cp "$TMP_FILE" "$README_FILE"
echo "Updated README.md with version $VERSION"
# Configure git
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
# Commit and push the changes
git add "$README_FILE"
git commit -m "docs: update README.md version to $VERSION [skip ci]"
git push "https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
echo "::notice::README.md updated with latest version $VERSION"
else
echo "::notice::README.md already has the correct version"
fi
# Clean up temporary file
rm "$TMP_FILE"
- name: Create zip file
if: steps.check_release.outputs.exists == 'false'
run: |
rm -rf "$PLUGIN_SLUG"
mkdir -p "$PLUGIN_SLUG"
cp "$PLUGIN_FILE" "$PLUGIN_SLUG/"
cp -r includes "$PLUGIN_SLUG/"
cp readme.txt "$PLUGIN_SLUG/"
cp README.md "$PLUGIN_SLUG/"
cp CHANGELOG.md "$PLUGIN_SLUG/"
cp LICENSE "$PLUGIN_SLUG/" || echo "No LICENSE file found"
if [ -d languages ]; then
cp -r languages "$PLUGIN_SLUG/"
fi
zip -r "${PLUGIN_SLUG}-${{ steps.get_version.outputs.version }}.zip" "$PLUGIN_SLUG"
- name: Get changelog entry
if: steps.check_release.outputs.exists == 'false'
id: get_changelog
run: |
CHANGELOG_ENTRY=$(awk -v ver="${{ steps.get_version.outputs.version }}" 'BEGIN{flag=0; target="^## \\[?" ver "\\]?([[:space:]-]|$)"} $0 ~ target {flag=1; print; next} /^## \[?[0-9]+\.[0-9]+\.[0-9]+\]?([[:space:]-]|$)/ {flag=0} flag {print}' CHANGELOG.md | tail -n +2)
echo "changelog<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGELOG_ENTRY" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Create Release
if: steps.check_release.outputs.exists == 'false'
uses: softprops/action-gh-release@v3
with:
tag_name: v${{ steps.get_version.outputs.version }}
name: Release v${{ steps.get_version.outputs.version }}
body: |
${{ steps.get_changelog.outputs.changelog }}
## Installation
1. Download the zip file
2. Upload to your WordPress site through the Plugins > Add New > Upload menu
3. Activate the plugin
[Full Documentation](https://github.com/${{ github.repository }})
files: ${{ env.PLUGIN_SLUG }}-${{ steps.get_version.outputs.version }}.zip
draft: false
prerelease: false
generate_release_notes: false