forked from fairpm/fair-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbundle.sh
More file actions
executable file
·107 lines (89 loc) · 3.68 KB
/
bundle.sh
File metadata and controls
executable file
·107 lines (89 loc) · 3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/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