Skip to content

Commit 473a0c2

Browse files
committed
fix selfhost manager pinned update source
1 parent fbb697d commit 473a0c2

2 files changed

Lines changed: 107 additions & 0 deletions

File tree

local/scripts/selfhost-shell.test.ts

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,95 @@ ENV
363363
expect(result.stdout).toContain("SUBBOOST_MANAGER_URL=file://");
364364
}, 10_000);
365365

366+
it("migrates old fixed official update sources to stable latest", () => {
367+
const script = `
368+
set -Eeuo pipefail
369+
home="$(mktemp -d)"
370+
trap 'rm -rf "$home"' EXIT
371+
mkdir -p "$home/bin"
372+
cat > "$home/.env" <<'ENV'
373+
SUBBOOST_RELEASE_URL=https://github.com/SubBoost/subboost/releases/download/v2.4.0/release.json
374+
SUBBOOST_IMAGE=old-image
375+
POSTGRES_DB=subboost
376+
POSTGRES_USER=subboost
377+
POSTGRES_PASSWORD=password
378+
DATABASE_URL=postgresql://subboost:password@db:5432/subboost?schema=public
379+
ENCRYPTION_KEY=key
380+
JWT_SECRET=jwt
381+
CRON_SECRET=cron
382+
APP_URL=http://127.0.0.1:31000
383+
SUBBOOST_PORT=31000
384+
ENV
385+
: > "$home/docker-compose.yml"
386+
export SUBBOOST_SCRIPT_SOURCE_ONLY=1
387+
export SUBBOOST_HOME="$home"
388+
export SUBBOOST_BIN="$home/bin/subboost"
389+
export SUBBOOST_DOCTOR_HEALTH_ATTEMPTS=1
390+
export SUBBOOST_DOCTOR_HEALTH_INTERVAL_SECONDS=0
391+
source local/scripts/subboost.sh
392+
sudo_do() { "$@"; }
393+
install_secret_file() { cp "$1" "$2"; }
394+
read_env_file() { cat "$ENV_FILE"; }
395+
download_log="$home/download-log"
396+
: > "$download_log"
397+
download_to_temp() {
398+
printf '%s\\n' "$1" >> "$download_log"
399+
case "$1" in
400+
*release.json)
401+
cat > "$2" <<'JSON'
402+
{"image":"new-image","composeUrl":"docker-compose.image.yml","managerUrl":"subboost-manager"}
403+
JSON
404+
;;
405+
*)
406+
printf 'asset\\n' > "$2"
407+
;;
408+
esac
409+
}
410+
docker_log="$home/docker-log"
411+
: > "$docker_log"
412+
docker() {
413+
if [ "$1" = "info" ]; then return 0; fi
414+
if [ "$1" = "compose" ]; then
415+
case "$*" in
416+
"compose version"*) return 0 ;;
417+
*" config") return 0 ;;
418+
*" pull")
419+
printf 'pull_image=%s\\n' "\${SUBBOOST_IMAGE:-}" >> "$docker_log"
420+
return 0
421+
;;
422+
*" up -d --remove-orphans") return 0 ;;
423+
*" up -d --no-deps --force-recreate app") return 0 ;;
424+
*" ps -q app") printf 'app-id\\n'; return 0 ;;
425+
*" ps -q db") printf 'db-id\\n'; return 0 ;;
426+
*" ps -q cron") printf 'cron-id\\n'; return 0 ;;
427+
esac
428+
fi
429+
if [ "$1" = "inspect" ]; then
430+
case "$*" in
431+
*".State.Status"*) printf 'running\\n'; return 0 ;;
432+
*".State.Health"*) printf 'healthy\\n'; return 0 ;;
433+
esac
434+
fi
435+
return 0
436+
}
437+
curl() { return 0; }
438+
update_cmd
439+
cat "$download_log"
440+
cat "$docker_log"
441+
cat "$home/.env"
442+
`;
443+
444+
const result = runBash(script);
445+
446+
expect(result.status).toBe(0);
447+
expect(result.stdout).toContain("Detected old fixed release update source");
448+
expect(result.stdout).toContain("https://github.com/SubBoost/subboost/releases/latest/download/release.json");
449+
expect(result.stdout).toContain("pull_image=new-image");
450+
expect(result.stdout).toContain(
451+
"SUBBOOST_RELEASE_URL=https://github.com/SubBoost/subboost/releases/latest/download/release.json"
452+
);
453+
}, 10_000);
454+
366455
it("updates exact env keys without removing similarly prefixed names", () => {
367456
const script = `
368457
set -Eeuo pipefail

local/scripts/subboost.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
set -Eeuo pipefail
33

44
DEFAULT_HOME="/opt/subboost"
5+
DEFAULT_STABLE_RELEASE_URL="https://github.com/SubBoost/subboost/releases/latest/download/release.json"
56
SUBBOOST_HOME="${SUBBOOST_HOME:-$DEFAULT_HOME}"
67
ENV_FILE="$SUBBOOST_HOME/.env"
78
COMPOSE_FILE="$SUBBOOST_HOME/docker-compose.yml"
@@ -138,6 +139,20 @@ write_runtime_env_value() {
138139
export "$key=$value"
139140
}
140141

142+
is_official_fixed_release_url() {
143+
case "$1" in
144+
https://github.com/SubBoost/subboost/releases/download/v[0-9]*.[0-9]*.[0-9]*/release.json) return 0 ;;
145+
*) return 1 ;;
146+
esac
147+
}
148+
149+
migrate_update_release_url() {
150+
local release_url="$1"
151+
is_official_fixed_release_url "$release_url" || return 1
152+
say "Detected old fixed release update source; switching updates to stable latest."
153+
write_runtime_env_value SUBBOOST_RELEASE_URL "$DEFAULT_STABLE_RELEASE_URL"
154+
}
155+
141156
install_file_from_url() {
142157
local url="$1"
143158
local destination="$2"
@@ -281,6 +296,9 @@ update_cmd() {
281296
local release_file="$TMP_DIR/release.json"
282297
local image compose_url manager_url
283298
mkdir -p "$TMP_DIR"
299+
if migrate_update_release_url "$release_url"; then
300+
release_url="$DEFAULT_STABLE_RELEASE_URL"
301+
fi
284302
if [ -n "$release_url" ] && download_to_temp "$release_url" "$release_file" 2>/dev/null; then
285303
image="$(json_get image "$release_file" || true)"
286304
compose_url="$(resolve_url "$release_url" "$(json_get composeUrl "$release_file" || true)")"

0 commit comments

Comments
 (0)