574a16d9fa
Snapshot of the working tree before cleanup. Captures: - Keysat licensing: server/license.js, /api/license/* endpoints in server/index.js, activation modal in public/index.html, embedded Ed25519 issuer key (assets/issuer.pub). - StartOS 0.4 expansion: setApiKey action, version files v0.1.1 through v0.1.15, file-models/config.json.ts, manifest updates. - Self-hosted registry server (startos-registry/). - Build/deploy scripts (bin/bump-version.sh, bin/deploy.sh, vendored yt-dlp binary), .gitignore, .deploy.env.example. - Recent design docs (KEYSAT_INTEGRATION.md, UPGRADE-DESIGN.md) — retained here so they remain recoverable when removed in the follow-up cleanup commit.
110 lines
4.4 KiB
Bash
Executable File
110 lines
4.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# One-shot deploy: upload the built .s9pk to FileBrowser, register it with the
|
|
# Start9 registry, and trigger a re-index so clients see the new version.
|
|
#
|
|
# Config is loaded from, in order:
|
|
# 1. Environment variables
|
|
# 2. $PROJECT_ROOT/.deploy.env (gitignored; see .deploy.env.example)
|
|
#
|
|
# Required config:
|
|
# FILEBROWSER_URL — e.g. https://immense-voyage.local:51165
|
|
# FILEBROWSER_USER — your FileBrowser login
|
|
# FILEBROWSER_PASS — your FileBrowser password
|
|
# START9_SERVER — your Start9 server, e.g. https://immense-voyage.local:62185
|
|
#
|
|
# Optional config (sensible defaults):
|
|
# FILEBROWSER_PATH — path on FileBrowser to overwrite. Default: /websites/packages/youtube-summarizer_x86_64.s9pk
|
|
# REGISTRY_URL — registry JSON-RPC URL. Default: https://registry.satsflows.com
|
|
# REGISTRY_PUBLIC_URL — public .s9pk URL registered with start-cli.
|
|
# Default: https://files.satsflows.com/youtube-summarizer_x86_64.s9pk
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
ENV_FILE="$PROJECT_ROOT/.deploy.env"
|
|
|
|
if [ -f "$ENV_FILE" ]; then
|
|
# shellcheck disable=SC1090
|
|
set -a; source "$ENV_FILE"; set +a
|
|
fi
|
|
|
|
# --- Validate config ---
|
|
: "${FILEBROWSER_URL:?FILEBROWSER_URL is required (see bin/deploy.sh header)}"
|
|
: "${FILEBROWSER_USER:?FILEBROWSER_USER is required}"
|
|
: "${FILEBROWSER_PASS:?FILEBROWSER_PASS is required}"
|
|
: "${START9_SERVER:?START9_SERVER is required (e.g. https://immense-voyage.local:62185)}"
|
|
|
|
FILEBROWSER_PATH="${FILEBROWSER_PATH:-/websites/packages/youtube-summarizer_x86_64.s9pk}"
|
|
REGISTRY_URL="${REGISTRY_URL:-https://registry.satsflows.com}"
|
|
REGISTRY_PUBLIC_URL="${REGISTRY_PUBLIC_URL:-https://files.satsflows.com/youtube-summarizer_x86_64.s9pk}"
|
|
|
|
S9PK_FILE="$PROJECT_ROOT/youtube-summarizer_x86_64.s9pk"
|
|
|
|
if [ ! -f "$S9PK_FILE" ]; then
|
|
echo "X $S9PK_FILE not found. Run 'make x86' first." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# --- Discover current version from startos/versions ---
|
|
CURRENT_VAR="$(sed -nE "s/.*current:[[:space:]]*(v_[0-9_]+).*/\1/p" "$PROJECT_ROOT/startos/versions/index.ts" | head -1)"
|
|
if [ -n "$CURRENT_VAR" ]; then
|
|
VERSION_DOT="$(echo "$CURRENT_VAR" | sed 's/^v_//; s/_/./g')"
|
|
VERSION_FILE="$PROJECT_ROOT/startos/versions/v${VERSION_DOT}.ts"
|
|
CURRENT_VERSION="$(sed -nE "s/.*version:[[:space:]]*'([^']+)'.*/\1/p" "$VERSION_FILE" | head -1)"
|
|
else
|
|
CURRENT_VERSION="unknown"
|
|
fi
|
|
|
|
echo "==> Deploying youtube-summarizer $CURRENT_VERSION"
|
|
echo " source : $S9PK_FILE"
|
|
echo " upload : $FILEBROWSER_URL$FILEBROWSER_PATH"
|
|
echo " public : $REGISTRY_PUBLIC_URL"
|
|
echo " start9 : $START9_SERVER"
|
|
echo ""
|
|
|
|
# FileBrowser is typically on a *.local address with a self-signed cert, so
|
|
# curl needs -k (--insecure) to connect. Override with FILEBROWSER_CURL_OPTS if
|
|
# you've set up trust for the Start9 root CA.
|
|
FB_CURL_OPTS="${FILEBROWSER_CURL_OPTS:--k}"
|
|
|
|
# --- 1. Authenticate with FileBrowser ---
|
|
echo "[1/4] Authenticating with FileBrowser..."
|
|
LOGIN_BODY="$(printf '{"username":"%s","password":"%s"}' \
|
|
"$(printf '%s' "$FILEBROWSER_USER" | sed 's/[\\"]/\\&/g')" \
|
|
"$(printf '%s' "$FILEBROWSER_PASS" | sed 's/[\\"]/\\&/g')")"
|
|
|
|
TOKEN="$(curl $FB_CURL_OPTS -fsS -X POST "$FILEBROWSER_URL/api/login" \
|
|
-H "Content-Type: application/json" \
|
|
--data-raw "$LOGIN_BODY")" || {
|
|
echo "X FileBrowser login failed (check URL, username, password)" >&2
|
|
exit 1
|
|
}
|
|
|
|
if [ -z "$TOKEN" ]; then
|
|
echo "X FileBrowser login returned an empty token" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# --- 2. Upload .s9pk (override existing) ---
|
|
echo "[2/4] Uploading $(basename "$S9PK_FILE") ($(du -h "$S9PK_FILE" | cut -f1))..."
|
|
curl $FB_CURL_OPTS -fsS -X POST "$FILEBROWSER_URL/api/resources${FILEBROWSER_PATH}?override=true" \
|
|
-H "X-Auth: $TOKEN" \
|
|
-H "Content-Type: application/octet-stream" \
|
|
--data-binary "@$S9PK_FILE" \
|
|
-o /dev/null
|
|
|
|
# --- 3. Register with Start9 registry (adds manifest + pointer to public URL) ---
|
|
echo "[3/4] Registering package with registry..."
|
|
start-cli -r "$START9_SERVER" registry package add "$S9PK_FILE" --url "$REGISTRY_PUBLIC_URL"
|
|
|
|
# --- 4. Trigger registry re-index so clients see the new version ---
|
|
echo "[4/4] Re-indexing registry..."
|
|
curl -fsS -X POST "$REGISTRY_URL/rpc/v0" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"jsonrpc":"2.0","method":"index","id":1}' \
|
|
-o /dev/null
|
|
|
|
echo ""
|
|
echo "==> Done. youtube-summarizer $CURRENT_VERSION is live."
|