Files
SODEW/wordpress-compiler/wordpress-compiler.sh
T
2026-08-18 10:33:14 +02:00

154 lines
4.0 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
TARGET_DIR="www"
SODEW_DIR="sodew"
# WordPress core (latest.zip)
WP_URL_BASE="https://wordpress.org/latest.zip"
# Plugin slugs (WordPress.org)
PLUGINS=(
"litespeed-cache"
)
need_cmd() {
command -v "$1" >/dev/null 2>&1 || { echo "Chybí příkaz: $1" >&2; exit 1; }
}
need_cmd curl
need_cmd unzip
need_cmd rsync
need_cmd mktemp
need_cmd date
need_cmd find
need_cmd grep
need_cmd sed
tmp="$(mktemp -d)"
cleanup() { rm -rf "$tmp"; }
trap cleanup EXIT
ts="$(date +%s)"
echo "==> TMP: $tmp"
mkdir -p "$tmp/downloads" "$tmp/extract" "$tmp/plugins"
# --- Helper: fresh download (no cache) ---
fresh_curl() {
local url="$1"
local out="$2"
curl -fsSL --retry 3 --retry-delay 1 \
-H "Cache-Control: no-cache, no-store, must-revalidate" \
-H "Pragma: no-cache" \
-H "Expires: 0" \
-o "$out" \
"$url"
}
# --- Helper: detekce verze WordPressu ---
detect_wp_version() {
local version_file="$1/wp-includes/version.php"
if [[ -f "$version_file" ]]; then
grep -E "^\\\$wp_version\s*=" "$version_file" \
| head -n1 \
| sed -E "s/.*=\s*'([^']+)'.*/\1/"
else
echo "neznámá"
fi
}
# --- Helper: detekce verze pluginu ---
detect_plugin_version() {
local plugin_dir="$1"
# Zkus najít verzi v PHP hlavičce hlavního souboru pluginu
local version
version="$(grep -rhiE "^\s*\*?\s*Version:\s*" "$plugin_dir" --include="*.php" 2>/dev/null \
| head -n1 \
| sed -E "s/.*[Vv]ersion:\s*([0-9A-Za-z.\-]+).*/\1/")"
if [[ -z "$version" ]]; then
# Fallback: zkus readme.txt (Stable tag)
local readme="$plugin_dir/readme.txt"
if [[ -f "$readme" ]]; then
version="$(grep -iE "^Stable tag:" "$readme" \
| head -n1 \
| sed -E "s/.*[Ss]table tag:\s*([0-9A-Za-z.\-]+).*/\1/")"
fi
fi
echo "${version:-neznámá}"
}
# --- Fail-fast: kontrola struktury SODEW ---
echo "==> Kontroluju SODEW zdroj"
[[ -d "$SODEW_DIR" ]] || { echo "Chybí složka: $SODEW_DIR" >&2; exit 1; }
[[ -d "$SODEW_DIR/wp-content/mu-plugins" ]] || { echo "Chybí: $SODEW_DIR/wp-content/mu-plugins/" >&2; exit 1; }
echo "==> Stahuju WordPress (vždy fresh)"
WP_URL="${WP_URL_BASE}?t=${ts}"
fresh_curl "$WP_URL" "$tmp/downloads/wordpress.zip"
echo "==> Rozbaluju WordPress"
unzip -q "$tmp/downloads/wordpress.zip" -d "$tmp/extract"
WP_SRC="$tmp/extract/wordpress"
if [[ ! -d "$WP_SRC/wp-admin" ]]; then
echo "Chyba: WordPress nebyl správně rozbalen." >&2
exit 1
fi
WP_VERSION="$(detect_wp_version "$WP_SRC")"
echo " WordPress verze: ${WP_VERSION}"
# Pole pro shrnutí na konci
declare -A PLUGIN_VERSIONS
echo "==> Stahuju a rozbaluju pluginy (vždy fresh)"
for slug in "${PLUGINS[@]}"; do
url="https://downloads.wordpress.org/plugin/${slug}.zip?t=${ts}"
zip="$tmp/downloads/${slug}.zip"
echo " -> $slug"
fresh_curl "$url" "$zip"
unzip -q "$zip" -d "$tmp/plugins"
plugin_dir="$tmp/plugins/$slug"
if [[ -d "$plugin_dir" ]]; then
pv="$(detect_plugin_version "$plugin_dir")"
else
pv="neznámá"
fi
PLUGIN_VERSIONS["$slug"]="$pv"
echo " verze: ${pv}"
done
echo "==> Připravuju cílovou složku"
mkdir -p "$TARGET_DIR"
echo "==> Clean deploy (mažu obsah cílové složky)"
find "$TARGET_DIR" -mindepth 1 -maxdepth 1 -exec rm -rf {} +
echo "==> Nasazuju WordPress core"
rsync -a --delete "$WP_SRC"/ "$TARGET_DIR"/
echo "==> Nasazuju pluginy do wp-content/plugins"
mkdir -p "$TARGET_DIR/wp-content/plugins"
rm -rf "$TARGET_DIR/wp-content/plugins/"* || true
rsync -a "$tmp/plugins"/ "$TARGET_DIR/wp-content/plugins/"
echo "==> Includuju vše ze SODEW do rootu WP (kromě wp-content/)"
rsync -a \
--exclude "wp-content/" \
"$SODEW_DIR"/ \
"$TARGET_DIR"/
echo "==> Includuju mu-plugins ze SODEW do wp-content/mu-plugins"
mkdir -p "$TARGET_DIR/wp-content/mu-plugins"
rsync -a --delete \
"$SODEW_DIR/wp-content/mu-plugins/" \
"$TARGET_DIR/wp-content/mu-plugins/"
echo ""
echo "==> Hotovo."
echo ""
echo "Nasazené verze:"
echo " - WordPress: ${WP_VERSION}"
for slug in "${PLUGINS[@]}"; do
echo " - ${slug}: ${PLUGIN_VERSIONS[$slug]}"
done