From 097df9a22e1df101728ead43b803aed337c4b9ad Mon Sep 17 00:00:00 2001 From: Anton Afanasyeu Date: Sat, 6 Jun 2026 16:10:31 +0200 Subject: [PATCH] sync landing 2 --- examples/app_hub/DEPLOY.md | 19 ++++ .../app_hub/deploy/BE-apps-hub.conf.snippet | 2 +- .../app_hub/scripts/sync-landing-to-be.sh | 96 +++++++++++++++++++ 3 files changed, 116 insertions(+), 1 deletion(-) create mode 100755 examples/app_hub/scripts/sync-landing-to-be.sh diff --git a/examples/app_hub/DEPLOY.md b/examples/app_hub/DEPLOY.md index 4573576..37d055e 100644 --- a/examples/app_hub/DEPLOY.md +++ b/examples/app_hub/DEPLOY.md @@ -22,6 +22,25 @@ Landing uses **`index.php`** (shared footer from `examples/platform/footer.confi **Multipage landing (2026-06):** sync `hub-landing.css`, `landing-pages.inc.php`, `assets/hub-landing.js`, `assets/hub-i18n.js`, `assets/i18n/hub-en.json`, `assets/i18n/hub-ru.json` with `index.php`. +**One-shot sync (recommended):** + +```bash +# sshfs mount at tmp/BE_alpine/... OR pass BE path: +./examples/app_hub/scripts/sync-landing-to-be.sh + +# Or direct to Alpine BE: +REMOTE=alpine-be ./examples/app_hub/scripts/sync-landing-to-be.sh +``` + +**Verify deploy actually landed** (old hub title is `Project hub`; new is `Landing`): + +```bash +curl -sS 'https://apps.f0xx.org/app/androidcast_project/' | grep -E '|hub-landing|landing-top' +curl -sS -o /dev/null -w '%{http_code}\n' 'https://apps.f0xx.org/app/androidcast_project/hub-landing.css' +``` + +Expect `Android Cast — Landing`, `hub-landing.css`, and HTTP **200** (not 404). + ```bash cp .../android_cast/examples/app_hub/index.php \ .../htdocs/apps/app/androidcast_project/index.php diff --git a/examples/app_hub/deploy/BE-apps-hub.conf.snippet b/examples/app_hub/deploy/BE-apps-hub.conf.snippet index 91f219b..28f0d4c 100644 --- a/examples/app_hub/deploy/BE-apps-hub.conf.snippet +++ b/examples/app_hub/deploy/BE-apps-hub.conf.snippet @@ -7,7 +7,7 @@ location = /app/androidcast_project { location /app/androidcast_project/ { alias /var/www/localhost/htdocs/apps/app/androidcast_project/; - index index.html; + index index.php index.html; } location ^~ /app/androidcast_project/crashes/assets/ { diff --git a/examples/app_hub/scripts/sync-landing-to-be.sh b/examples/app_hub/scripts/sync-landing-to-be.sh new file mode 100755 index 0000000..0dc1cde --- /dev/null +++ b/examples/app_hub/scripts/sync-landing-to-be.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +# Sync multipage landing from repo to BE hub root. +# Usage: +# ./scripts/sync-landing-to-be.sh +# ./scripts/sync-landing-to-be.sh /path/to/BE/.../androidcast_project +# REMOTE=alpine-be ./scripts/sync-landing-to-be.sh +# +# After sync, verify: +# curl -sS 'https://apps.f0xx.org/app/androidcast_project/' | head -20 +# Expect: title "Android Cast — Landing", link hub-landing.css, body hub-landing +set -euo pipefail + +SRC="$(cd "$(dirname "$0")/.." && pwd)" +REPO="$(cd "$SRC/../.." && pwd)" +DEFAULT_DEST="$REPO/tmp/BE_alpine/var/www/localhost/htdocs/apps/app/androidcast_project" +DEST="${1:-$DEFAULT_DEST}" +REMOTE="${REMOTE:-}" + +hub_files=( + index.php + index.html + hub.css + hub-logo-layers.css + hub-landing.css + landing-pages.inc.php +) + +asset_files=( + assets/hub-landing.js + assets/hub-i18n.js + assets/hub-globe.js + assets/analytics.config.js + assets/i18n/hub-en.json + assets/i18n/hub-ru.json +) + +sync_local() { + local dest="$1" + if [[ ! -d "$dest" ]]; then + echo "DEST not found: $dest" >&2 + echo "Mount BE sshfs or pass the BE androidcast_project path as arg 1." >&2 + exit 1 + fi + mkdir -p "$dest/assets/i18n" + for f in "${hub_files[@]}"; do + install -m 0644 "$SRC/$f" "$dest/$f" + echo " $f" + done + for f in "${asset_files[@]}"; do + install -D -m 0644 "$SRC/$f" "$dest/$f" + echo " $f" + done + PLATFORM_SRC="$REPO/examples/platform" + PLATFORM_DEST="$dest/android_cast/examples/platform" + if [[ -d "$PLATFORM_SRC" ]]; then + mkdir -p "$PLATFORM_DEST" + rsync -a --no-group --no-owner "$PLATFORM_SRC/" "$PLATFORM_DEST/" + echo " platform/ (footer)" + fi +} + +verify_hint() { + cat <<'EOF' + +Verify on BE or public URL: + curl -sS 'https://apps.f0xx.org/app/androidcast_project/' | grep -E 'Landing|hub-landing|landing-top' + curl -sS -o /dev/null -w '%{http_code}\n' 'https://apps.f0xx.org/app/androidcast_project/hub-landing.css' + +Expect: title "Android Cast — Landing", HTTP 200 for hub-landing.css. +Then hard-refresh the browser (Ctrl+Shift+R). +EOF +} + +echo "Sync landing hub → $DEST" +if [[ -n "$REMOTE" ]]; then + tmp="$(mktemp -d)" + trap 'rm -rf "$tmp"' EXIT + for f in "${hub_files[@]}"; do cp "$SRC/$f" "$tmp/"; done + mkdir -p "$tmp/assets/i18n" + for f in "${asset_files[@]}"; do + mkdir -p "$tmp/$(dirname "$f")" + cp "$SRC/$f" "$tmp/$f" + done + scp "$tmp/index.php" "$tmp/index.html" "$tmp/hub.css" "$tmp/hub-logo-layers.css" \ + "$tmp/hub-landing.css" "$tmp/landing-pages.inc.php" \ + "$REMOTE:/var/www/localhost/htdocs/apps/app/androidcast_project/" + scp -r "$tmp/assets/hub-landing.js" "$tmp/assets/hub-i18n.js" "$tmp/assets/hub-globe.js" \ + "$tmp/assets/analytics.config.js" "$tmp/assets/i18n" \ + "$REMOTE:/var/www/localhost/htdocs/apps/app/androidcast_project/assets/" + echo "Remote sync via $REMOTE complete." +else + sync_local "$DEST" + echo "Local sync complete." +fi + +verify_hint