#!/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