Skip to content

v1.4.3

v1.4.3 #21

Workflow file for this run

name: Release
on:
release:
types: [published]
permissions:
contents: write
env:
PLUGIN_SLUG: functionalities
jobs:
build:
name: Build & Release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get version from tag
id: get_version
run: |
TAG_VERSION=${GITHUB_REF#refs/tags/}
VERSION=${TAG_VERSION#v}
echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"
echo "TAG=$TAG_VERSION" >> "$GITHUB_OUTPUT"
- name: Verify version matches plugin
env:
TAG_VERSION: ${{ steps.get_version.outputs.VERSION }}
run: |
PLUGIN_VERSION=$(grep "Version:" "${PLUGIN_SLUG}.php" | head -1 | sed 's/.*Version:[[:space:]]*//' | tr -d '[:space:]')
if [ "$PLUGIN_VERSION" != "$TAG_VERSION" ]; then
echo "::error::Plugin version ($PLUGIN_VERSION) does not match tag version ($TAG_VERSION)"
exit 1
fi
echo "Version verified: $PLUGIN_VERSION"
# -- Generate Changelog --
- name: Generate changelog
id: changelog
env:
TAG: ${{ steps.get_version.outputs.TAG }}
VERSION: ${{ steps.get_version.outputs.VERSION }}
run: |
PREV_TAG=$(git tag --sort=-version:refname | grep -v "^${TAG}$" | head -1)
CHANGELOG_FILE=$(mktemp)
if [ -n "$PREV_TAG" ]; then
echo "Generating changelog: ${PREV_TAG}..${TAG}"
SECTION=$(sed -n "/^= ${VERSION} =/,/^= [0-9]/p" readme.txt | sed '$d' | tail -n +2)
if [ -n "$SECTION" ]; then
echo "## What's Changed" >> "$CHANGELOG_FILE"
echo "" >> "$CHANGELOG_FILE"
echo "$SECTION" | sed 's/^\* /- /' >> "$CHANGELOG_FILE"
echo "" >> "$CHANGELOG_FILE"
fi
echo "## Commits" >> "$CHANGELOG_FILE"
echo "" >> "$CHANGELOG_FILE"
git log "${PREV_TAG}..${TAG}" --pretty=format:"- %s (%h)" --no-merges >> "$CHANGELOG_FILE"
echo "" >> "$CHANGELOG_FILE"
echo "" >> "$CHANGELOG_FILE"
echo "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${PREV_TAG}...${TAG}" >> "$CHANGELOG_FILE"
else
echo "## Initial Release" >> "$CHANGELOG_FILE"
echo "" >> "$CHANGELOG_FILE"
echo "First release of Dynamic Functionalities v${VERSION}." >> "$CHANGELOG_FILE"
fi
echo "CHANGELOG_FILE=$CHANGELOG_FILE" >> "$GITHUB_OUTPUT"
echo "--- Generated changelog ---"
cat "$CHANGELOG_FILE"
# -- Assemble Distribution --
- name: Assemble distribution
run: |
mkdir -p "build-release/${PLUGIN_SLUG}"
rsync -a \
--exclude-from=".distignore" \
--exclude="build-release" \
. "build-release/${PLUGIN_SLUG}/"
find build-release -name ".DS_Store" -delete 2>/dev/null || true
find build-release -name "*.map" -delete 2>/dev/null || true
find build-release -type d -empty -delete 2>/dev/null || true
- name: Verify distribution
run: |
DIST="build-release/${PLUGIN_SLUG}"
MISSING=0
for f in \
"${PLUGIN_SLUG}.php" \
"index.php" \
"readme.txt" \
"uninstall.php" \
"includes/admin/class-admin.php" \
"includes/admin/class-admin-ui.php"; do
if [ ! -f "$DIST/$f" ]; then
echo "::error::Missing critical file: $f"
MISSING=$((MISSING + 1))
fi
done
if [ "$MISSING" -gt 0 ]; then
echo "::error::Distribution is incomplete"
exit 1
fi
echo "Distribution verified"
FILE_COUNT=$(find "$DIST" -type f | wc -l | tr -d ' ')
echo " Files: ${FILE_COUNT}"
# -- Package & Upload --
- name: Create zip file
id: zip
env:
VERSION: ${{ steps.get_version.outputs.VERSION }}
run: |
cd build-release
ZIP_NAME="${PLUGIN_SLUG}-${VERSION}.zip"
zip -rq "../${ZIP_NAME}" "${PLUGIN_SLUG}"
cd ..
echo "ZIP_NAME=${ZIP_NAME}" >> "$GITHUB_OUTPUT"
ZIP_SIZE=$(du -h "${ZIP_NAME}" | cut -f1)
FILE_COUNT=$(zipinfo -t "${ZIP_NAME}" 2>/dev/null | sed 's/[^0-9]*\([0-9]*\) file.*/\1/' || echo "?")
echo "ZIP_SIZE=${ZIP_SIZE}" >> "$GITHUB_OUTPUT"
echo "FILE_COUNT=${FILE_COUNT}" >> "$GITHUB_OUTPUT"
- name: Generate checksums
env:
ZIP_NAME: ${{ steps.zip.outputs.ZIP_NAME }}
run: |
sha256sum "$ZIP_NAME" > "${ZIP_NAME}.sha256"
md5sum "$ZIP_NAME" > "${ZIP_NAME}.md5"
echo "SHA256: $(cat "${ZIP_NAME}.sha256")"
- name: Update release with changelog and assets
uses: softprops/action-gh-release@v2
with:
body_path: ${{ steps.changelog.outputs.CHANGELOG_FILE }}
files: |
${{ steps.zip.outputs.ZIP_NAME }}
${{ steps.zip.outputs.ZIP_NAME }}.sha256
${{ steps.zip.outputs.ZIP_NAME }}.md5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: ${{ env.PLUGIN_SLUG }}-${{ steps.get_version.outputs.VERSION }}
path: ${{ steps.zip.outputs.ZIP_NAME }}
retention-days: 90
# -- Summary --
- name: Job summary
env:
VERSION: ${{ steps.get_version.outputs.VERSION }}
ZIP_NAME: ${{ steps.zip.outputs.ZIP_NAME }}
ZIP_SIZE: ${{ steps.zip.outputs.ZIP_SIZE }}
FILE_COUNT: ${{ steps.zip.outputs.FILE_COUNT }}
run: |
echo "## Release v${VERSION}" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "| Item | Value |" >> "$GITHUB_STEP_SUMMARY"
echo "|------|-------|" >> "$GITHUB_STEP_SUMMARY"
echo "| **Zip** | \`${ZIP_NAME}\` |" >> "$GITHUB_STEP_SUMMARY"
echo "| **Size** | ${ZIP_SIZE} |" >> "$GITHUB_STEP_SUMMARY"
echo "| **Files** | ${FILE_COUNT} |" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "### Changelog" >> "$GITHUB_STEP_SUMMARY"
cat "${{ steps.changelog.outputs.CHANGELOG_FILE }}" >> "$GITHUB_STEP_SUMMARY"
# Deploy to WordPress.org
deploy:
name: Deploy to WordPress.org
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Strip v prefix from tag
id: version
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
- name: WordPress.org plugin deploy
uses: 10up/action-wordpress-plugin-deploy@stable
with:
generate-zip: false
env:
SVN_USERNAME: ${{ secrets.SVN_USERNAME }}
SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
SLUG: ${{ env.PLUGIN_SLUG }}
VERSION: ${{ steps.version.outputs.VERSION }}
ASSETS_DIR: '.wordpress-org'