Zaříznout stará jména kostky
binárka / linux (pull_request) Successful in 11s
image / image (pull_request) Successful in 18s
testy / pytest (3.11) (pull_request) Successful in 1s
testy / pytest (3.12) (pull_request) Successful in 0s
testy / pytest (3.13) (pull_request) Successful in 0s
testy / pytest (3.14) (pull_request) Successful in 1s
binárka / linux (pull_request) Successful in 11s
image / image (pull_request) Successful in 18s
testy / pytest (3.11) (pull_request) Successful in 1s
testy / pytest (3.12) (pull_request) Successful in 0s
testy / pytest (3.13) (pull_request) Successful in 0s
testy / pytest (3.14) (pull_request) Successful in 1s
Druhý krok po #16, rovnou celý. Dvojkolejnost dávala smysl pro projekt s neznámými uživateli; tady běží jedna instance a ta je přemigrovaná. Pryč je: - deploy/pve-kostky.sh (přesměrování na nový skript) - stěhování ze starého jména v instalátoru včetně bloku STARY_* - záložní jméno přílohy kostky-* v instalátoru - věšení příloh pod dvěma jmény v obou workflow - záloha na ~/.local/share/kostky/dice.db ve storage.py - odstavce o přechodu v README Jediné, co ve zdrojácích zůstalo, je docstring "Pravidla hry v kostky" v core.py — to je česky pojmenovaná hra, ne identifikátor. POZOR na pořadí: instalátor teď hledá jen dice-counter-*, a poslední vydání (v1.2.1) má na releasu pouze kostky-*. Do otagování v1.2.2 tedy `update` ani čerstvá instalace nemají co stáhnout. Merge a tag patří k sobě. Ověřeno v debianím kontejneru: čistá instalace, druhé spuštění za sebou, a vydání bez nových jmen spadne se srozumitelnou hláškou místo toho, aby sáhlo po starém. Binárka postavená lokálně zakládá databázi v …/dice-counter/ a starou vedle sebe ignoruje. 118 testů. Closes #19
This commit is contained in:
1 parent
8e6e4a8fe9
commit
a6c94e239b
7 files changed
+14
-156
No files matched your search
@@ -84,20 +84,13 @@ HOME_DIR=/opt/dice-counter
|
||||
DATA_DIR=/var/lib/dice-counter
|
||||
SERVICE=dice-counter
|
||||
|
||||
# Do vydání 1.2.x se všechno jmenovalo kostky. Instalace z té doby se při
|
||||
# aktualizaci přestěhují; až budou přemigrované, tenhle blok zmizí.
|
||||
STARY_USER=kostky
|
||||
STARY_HOME=/opt/kostky
|
||||
STARY_DATA=/var/lib/kostky
|
||||
STARA_SLUZBA=kostky
|
||||
|
||||
msg() { echo -e "\e[1;34m →\e[0m $*"; }
|
||||
ok() { echo -e "\e[1;32m ✓\e[0m $*"; }
|
||||
die() { echo -e "\e[1;31m ✗\e[0m $*" >&2; exit 1; }
|
||||
|
||||
case "$(dpkg --print-architecture)" in
|
||||
amd64) PLATFORMA=linux-x86_64 ;;
|
||||
arm64) PLATFORMA=linux-arm64 ;;
|
||||
amd64) ASSET=dice-counter-linux-x86_64 ;;
|
||||
arm64) ASSET=dice-counter-linux-arm64 ;;
|
||||
*) die "Pro architekturu $(dpkg --print-architecture) binárka není." ;;
|
||||
esac
|
||||
|
||||
@@ -114,22 +107,15 @@ if [ -z "$VERSION" ]; then
|
||||
| grep -o '"tag_name":[[:space:]]*"[^"]*"' | head -1 | cut -d'"' -f4)
|
||||
[ -n "$VERSION" ] || die "Nepodařilo se zjistit poslední verzi z $GITEA."
|
||||
fi
|
||||
ok "Instaluje se $VERSION pro $PLATFORMA"
|
||||
ok "Instaluje se $VERSION ($ASSET)"
|
||||
|
||||
BASE="$GITEA/$REPO/releases/download/$VERSION"
|
||||
TMP=$(mktemp -d)
|
||||
trap 'rm -rf "$TMP"' EXIT
|
||||
|
||||
msg "Stahuji binárku"
|
||||
# Do vydání 1.2.x se přílohy jmenovaly kostky-*. Starší vydání se tak dají
|
||||
# nainstalovat dál; až stará jména z releasů zmizí, zůstane jen to první.
|
||||
ASSET=""
|
||||
for jmeno in "dice-counter-$PLATFORMA" "kostky-$PLATFORMA"; do
|
||||
curl -fsSL -o "$TMP/$jmeno" "$BASE/$jmeno" 2>/dev/null && { ASSET="$jmeno"; break; }
|
||||
done
|
||||
[ -n "$ASSET" ] \
|
||||
|| die "Binárka pro $PLATFORMA ve vydání $VERSION není. Pro tuhle architekturu možná ještě nevyšla."
|
||||
|
||||
curl -fsSL -o "$TMP/$ASSET" "$BASE/$ASSET" \
|
||||
|| die "$ASSET pro $VERSION na releasu není. Vydání pro tuhle architekturu možná ještě neproběhlo."
|
||||
curl -fsSL -o "$TMP/$ASSET.sha256" "$BASE/$ASSET.sha256" \
|
||||
|| die "Chybí kontrolní součet — radši nic neinstaluju."
|
||||
|
||||
@@ -143,38 +129,6 @@ id -u "$USER_NAME" >/dev/null 2>&1 \
|
||||
|
||||
install -d -o root -g root -m 755 "$HOME_DIR"
|
||||
|
||||
# Instalace z doby, kdy se všechno jmenovalo kostky, se tady převezme. Bez
|
||||
# přestěhování databáze by po aktualizaci zmizela historie her, takže se to
|
||||
# nedá odbýt smazáním staré služby.
|
||||
#
|
||||
# Starý domovský adresář se maže až úplně na konci skriptu: při aktualizaci
|
||||
# běžícího kontejneru se instalátor pouští právě z něj a `$0` z něj ještě
|
||||
# potřebujeme zkopírovat na nové místo.
|
||||
if [ -f "/etc/systemd/system/$STARA_SLUZBA.service" ] \
|
||||
|| [ -d "$STARY_HOME" ] || [ -d "$STARY_DATA" ]; then
|
||||
msg "Našel jsem instalaci pod starým jménem, stěhuji ji"
|
||||
|
||||
systemctl is-active --quiet "$STARA_SLUZBA" && systemctl stop "$STARA_SLUZBA"
|
||||
systemctl disable --quiet "$STARA_SLUZBA" 2>/dev/null || true
|
||||
rm -f "/etc/systemd/system/$STARA_SLUZBA.service"
|
||||
systemctl daemon-reload
|
||||
|
||||
# Když nový adresář z nějakého důvodu už existuje, starý se nechá být.
|
||||
# Přepsat cizí databázi je horší než nechat po sobě adresář navíc.
|
||||
if [ -d "$STARY_DATA" ] && [ ! -e "$DATA_DIR" ]; then
|
||||
mv "$STARY_DATA" "$DATA_DIR"
|
||||
ok "Databáze přestěhována do $DATA_DIR"
|
||||
elif [ -d "$STARY_DATA" ]; then
|
||||
msg "$DATA_DIR už existuje, $STARY_DATA nechávám na místě"
|
||||
fi
|
||||
|
||||
id -u "$STARY_USER" >/dev/null 2>&1 && userdel "$STARY_USER" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Po stěhování patří soubory uživateli, který už neexistuje. StateDirectory
|
||||
# to u založeného adresáře nedorovná, tak se to udělá rovnou tady.
|
||||
[ -d "$DATA_DIR" ] && chown -R "$USER_NAME:$USER_NAME" "$DATA_DIR"
|
||||
|
||||
# Zastavit se dá jen to, co běží — při první instalaci služba ještě není.
|
||||
if systemctl is-active --quiet "$SERVICE"; then
|
||||
systemctl stop "$SERVICE"
|
||||
@@ -273,14 +227,6 @@ UPDATE
|
||||
chmod 755 /usr/bin/update
|
||||
ok "Aktualizovat půjde příkazem: update"
|
||||
|
||||
# Teď už je `$0` zkopírovaný na nové místo a starý domov nikdo nepotřebuje.
|
||||
# Bash si drží otevřený popisovač na skript, takže smazat se dá i ten, který
|
||||
# se zrovna vykonává.
|
||||
if [ -d "$STARY_HOME" ]; then
|
||||
rm -rf "$STARY_HOME"
|
||||
ok "Staré $STARY_HOME uklizeno"
|
||||
fi
|
||||
|
||||
msg "Čekám, až začne odpovídat"
|
||||
for _ in $(seq 30); do
|
||||
curl -fsS -o /dev/null "http://127.0.0.1:$PORT/" 2>/dev/null && break
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Skript se přejmenoval na deploy/pve-dice-counter.sh.
|
||||
#
|
||||
# Tenhle soubor tu zůstává schválně. Příkaz `update` v už založených
|
||||
# kontejnerech si instalátor stahuje z téhle adresy — kdyby zmizela,
|
||||
# aktualizace by u nich přestala fungovat dřív, než se stihnou přemigrovat.
|
||||
# Až se tak stane, zmizí i tenhle soubor.
|
||||
#
|
||||
# Předává se všechno beze změny, včetně argumentů a proměnných prostředí.
|
||||
# Na stdout nesmí přibýt ani řádek navíc: starý `update` si sem chodí pro
|
||||
# `instalator` a výstup rovnou kontroluje přes `bash -n`.
|
||||
set -euo pipefail
|
||||
|
||||
GITEA="${GITEA:-https://gitea.spacilovi.eu}"
|
||||
REPO="${REPO:-david-spacil/dice-counter}"
|
||||
|
||||
NOVY=$(mktemp)
|
||||
trap 'rm -f "$NOVY"' EXIT
|
||||
|
||||
curl -fsSL "$GITEA/$REPO/raw/branch/main/deploy/pve-dice-counter.sh" -o "$NOVY" \
|
||||
|| { echo "Skript se přesunul do deploy/pve-dice-counter.sh, ale nejde stáhnout." >&2; exit 1; }
|
||||
|
||||
bash "$NOVY" "$@"
|
||||
Reference in new issue
Block a user