154 lines
4.0 KiB
Bash
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
|