64 lines
3.0 KiB
Bash
Executable File
64 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Builds a WP-LIT-MCP release ZIP from the committed state into dist/. It publishes nothing: bin/ship.sh does the
|
|
# whole way (this script, push, release, upload, check from outside).
|
|
#
|
|
# bin/release.sh
|
|
#
|
|
# Needs: bsdtar, composer.
|
|
# Environment: LIT_MCP_DIVI_CHECK (command that must succeed before a release, default:
|
|
# ddev wp --user=janniclas lit-mcp divi-check).
|
|
set -euo pipefail
|
|
|
|
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
cd "$root"
|
|
|
|
divi_check="${LIT_MCP_DIVI_CHECK:-ddev wp --user=janniclas lit-mcp divi-check}"
|
|
|
|
fail() { echo "ABBRUCH: $*" >&2; exit 1; }
|
|
step() { echo "==> $*"; }
|
|
|
|
# --- 1. The three version places agree, the tree is committed, nothing is released twice ----------------------------
|
|
step "Version und Zustand prüfen"
|
|
version="$(sed -n "s/.*const VERSION = '\(.*\)';/\1/p" src/Plugin.php)"
|
|
[[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || fail "Plugin::VERSION ist keine Version x.y.z: '$version'"
|
|
[[ "$(sed -n 's/^ \* Version: //p' wp-lit-mcp.php)" == "$version" ]] || fail "Header-Version in wp-lit-mcp.php weicht ab"
|
|
[[ "$(sed -n 's/^Stable tag: //p' readme.txt)" == "$version" ]] || fail "Stable tag in readme.txt weicht ab"
|
|
grep -q "^= $version =\$" readme.txt || fail "readme.txt hat keinen Changelog-Eintrag für $version"
|
|
[[ -z "$(git status --porcelain)" ]] || fail "Arbeitsbaum nicht sauber: erst committen, das ZIP entsteht aus HEAD"
|
|
! git rev-parse -q --verify "refs/tags/v$version" >/dev/null || fail "Tag v$version existiert schon"
|
|
|
|
# --- 2. Tests and the Divi check must be green ------------------------------------------------------------------------
|
|
step "Tests"
|
|
composer test
|
|
step "Divi-Prüfung ($divi_check)"
|
|
eval "$divi_check" || fail "Divi-Prüfung nicht grün: kein Release"
|
|
|
|
# --- 3. Build from the commit: git archive honours export-ignore, then production dependencies ----------------------
|
|
step "ZIP bauen"
|
|
work="$(mktemp -d)"
|
|
trap 'rm -rf "$work"' EXIT
|
|
mkdir "$work/wp-lit-mcp"
|
|
git archive HEAD | tar -x -C "$work/wp-lit-mcp"
|
|
(cd "$work/wp-lit-mcp" && composer install --no-dev --optimize-autoloader --no-interaction --quiet)
|
|
name="wp-lit-mcp-$version.zip"
|
|
mkdir -p dist
|
|
# Files of earlier releases would be one wrong click away from the upload.
|
|
rm -f dist/wp-lit-mcp-*
|
|
zip="$root/dist/$name"
|
|
(cd "$work" && bsdtar --format zip -cf "$zip" wp-lit-mcp)
|
|
|
|
# --- 4. Look into the ZIP like WordPress will: one folder, the plugin, its autoloader, the right version --------------
|
|
step "ZIP prüfen"
|
|
entries="$(bsdtar -tf "$zip")"
|
|
if grep -qv '^wp-lit-mcp/' <<<"$entries"; then fail "ZIP enthält Einträge außerhalb von wp-lit-mcp/"; fi
|
|
for need in wp-lit-mcp/wp-lit-mcp.php wp-lit-mcp/vendor/autoload_packages.php; do
|
|
grep -qx "$need" <<<"$entries" || fail "Im ZIP fehlt $need"
|
|
done
|
|
if grep -qE '^wp-lit-mcp/(tests|bin|docs/superpowers|\.git|\.gitea-token)(/|$)' <<<"$entries"; then
|
|
fail "Entwicklungsdateien im ZIP"
|
|
fi
|
|
[[ "$(bsdtar -xOf "$zip" wp-lit-mcp/wp-lit-mcp.php | sed -n 's/^ \* Version: //p')" == "$version" ]] \
|
|
|| fail "Version im ZIP stimmt nicht mit $version überein"
|
|
|
|
echo "In Ordnung: dist/$name"
|