mirror of
https://gh.wpcy.net/https://github.com/fairpm/fair-plugin.git
synced 2026-06-10 01:04:28 +08:00
107 lines
3.7 KiB
Bash
Executable file
107 lines
3.7 KiB
Bash
Executable file
#!/bin/bash -e
|
|
#
|
|
# Create our distribution zips.
|
|
|
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
|
|
|
# Extract a header value from plugin.php
|
|
# Usage: get_plugin_header "Header Name"
|
|
get_plugin_header() {
|
|
sed -n "s/.*$1: \([0-9.]*\).*/\1/p" "$SCRIPT_DIR/../plugin.php"
|
|
}
|
|
|
|
# Prepare the distribution directory.
|
|
DIST_DIR="/tmp/fair-dist"
|
|
[ -d "$DIST_DIR" ] && rm -rf "$DIST_DIR"
|
|
mkdir "$DIST_DIR"
|
|
touch /tmp/fair-dist/MD5SUMS
|
|
touch /tmp/fair-dist/SHA1SUMS
|
|
touch /tmp/fair-dist/SHA256SUMS
|
|
touch /tmp/fair-dist/SHA384SUMS
|
|
|
|
# Auto-detect and hash plugin zip.
|
|
PLUGIN_VERSION=$(get_plugin_header "Version")
|
|
REPO_NAME=$(basename "$GITHUB_REPOSITORY")
|
|
PLUGIN_ZIP="/tmp/${REPO_NAME}-${PLUGIN_VERSION}.zip"
|
|
|
|
if [ -f "$PLUGIN_ZIP" ]; then
|
|
echo "Hashing plugin zip: $PLUGIN_ZIP" >&2
|
|
# Change to /tmp so hash files contain just filename, not full path
|
|
cd /tmp
|
|
md5sum -b "$(basename "$PLUGIN_ZIP")" >> /tmp/fair-dist/MD5SUMS
|
|
sha1sum -b "$(basename "$PLUGIN_ZIP")" >> /tmp/fair-dist/SHA1SUMS
|
|
sha256sum -b "$(basename "$PLUGIN_ZIP")" >> /tmp/fair-dist/SHA256SUMS
|
|
sha384sum -b "$(basename "$PLUGIN_ZIP")" >> /tmp/fair-dist/SHA384SUMS
|
|
cd - > /dev/null
|
|
fi
|
|
|
|
# Bundle our plugin first.
|
|
[ -d /tmp/fair-temp ] && rm -rf /tmp/fair-temp
|
|
mkdir -p /tmp/fair-temp/wordpress/wp-content/plugins/fair-plugin
|
|
rsync -a --exclude-from="$SCRIPT_DIR/../.distignore" "$SCRIPT_DIR/../" /tmp/fair-temp/wordpress/wp-content/plugins/fair-plugin
|
|
|
|
# Extract minimum required WordPress version from plugin header.
|
|
REQUIRES_AT_LEAST=$(get_plugin_header "Requires at least")
|
|
echo "Plugin requires WordPress $REQUIRES_AT_LEAST or higher" >&2
|
|
|
|
echo "Fetching WordPress version data" >&2
|
|
VERSION_DATA=$(curl -s https://api.wordpress.org/core/version-check/1.7/)
|
|
AVAILABLE_VERSIONS=$(echo "$VERSION_DATA" | jq -r '.offers[] | .version')
|
|
|
|
# For each available version, download WP and add our plugin to the WP zip.
|
|
for VERSION in $AVAILABLE_VERSIONS; do
|
|
# Skip versions older than minimum required.
|
|
if [ "$(printf '%s\n' "$REQUIRES_AT_LEAST" "$VERSION" | sort -V | head -n1)" != "$REQUIRES_AT_LEAST" ]; then
|
|
echo "Skipping $VERSION (older than $REQUIRES_AT_LEAST)" >&2
|
|
continue
|
|
fi
|
|
|
|
# Skip repeat versions via the API.
|
|
if [ -f "$DIST_DIR/wordpress-$VERSION-fair.zip" ]; then
|
|
echo "Skipping $VERSION (already bundled)" >&2
|
|
continue
|
|
fi
|
|
|
|
echo "Bundling $VERSION..." >&2
|
|
# Download the WP zip.
|
|
WP_ZIP_URL="https://wordpress.org/wordpress-$VERSION.zip"
|
|
WP_ZIP_FILE="/tmp/fair-temp/wordpress-$VERSION.zip"
|
|
echo " Downloading $WP_ZIP_URL..." >&2
|
|
curl -sSL "$WP_ZIP_URL" -o "$WP_ZIP_FILE"
|
|
EXPECTED_HASH=$(curl -sSL "$WP_ZIP_URL.sha1")
|
|
|
|
# Skip if we can't get a valid hash.
|
|
if [[ ! "$EXPECTED_HASH" =~ ^[a-z0-9]{40}$ ]]; then
|
|
echo "Failed to fetch valid hash for $VERSION" >&2
|
|
continue
|
|
fi
|
|
|
|
# Verify the checksum.
|
|
# (sha1 is suboptimal, but it's all we've got.)
|
|
echo " Verifying checksum" >&2
|
|
echo "$EXPECTED_HASH *$WP_ZIP_FILE" | sha1sum -c --status - || { echo "Checksum verification failed!" >&2; exit 1; }
|
|
|
|
# Add the plugin into the existing zip.
|
|
echo " Adding plugin" >&2
|
|
cd /tmp/fair-temp
|
|
zip -r /tmp/fair-temp/wordpress-$VERSION.zip wordpress/ >&2
|
|
cd - > /dev/null
|
|
|
|
# Rename altered zip.
|
|
mv /tmp/fair-temp/wordpress-$VERSION.zip "$DIST_DIR/wordpress-$VERSION-fair.zip"
|
|
|
|
# Recalculate hashes.
|
|
echo " Calculating hashes" >&2
|
|
cd "$DIST_DIR"
|
|
md5sum -b "wordpress-$VERSION-fair.zip" >> /tmp/fair-dist/MD5SUMS
|
|
sha1sum -b "wordpress-$VERSION-fair.zip" >> /tmp/fair-dist/SHA1SUMS
|
|
sha256sum -b "wordpress-$VERSION-fair.zip" >> /tmp/fair-dist/SHA256SUMS
|
|
sha384sum -b "wordpress-$VERSION-fair.zip" >> /tmp/fair-dist/SHA384SUMS
|
|
cd - > /dev/null
|
|
|
|
# Output filename.
|
|
echo $DIST_DIR/wordpress-$VERSION-fair.zip
|
|
done
|
|
|
|
# Clean up.
|
|
rm -rf /tmp/fair-temp
|