Files
importarr/deploy/repo-upgrade.sh
T
daniels c65b5c8406 Fix release asset deployment
Package built frontend assets in wheels and force clean upgrades.

Run API-triggered updates in a transient unit with a safe delay.
2026-08-09 09:11:28 +02:00

72 lines
2.1 KiB
Bash

#!/usr/bin/env sh
set -eu
if [ "$(id -u)" -ne 0 ]; then
echo "Run as root: sudo sh /opt/importarr/repo-upgrade.sh vMAJOR.MINOR.PATCH" >&2
exit 1
fi
ENV_FILE=${IMPORTARR_ENV_FILE:-/etc/importarr/importarr.env}
if [ -f "$ENV_FILE" ]; then
# shellcheck disable=SC1090
. "$ENV_FILE"
fi
PREFIX=${IMPORTARR_PREFIX:-/opt/importarr}
REPO_DIR=${IMPORTARR_REPO_DIR:-$PREFIX/repo}
SERVICE=${IMPORTARR_SERVICE:-importarr.service}
VENV=${IMPORTARR_VENV:-$PREFIX/venv}
RELEASE_TAG=${1:-}
if [ -z "$RELEASE_TAG" ]; then
echo "Usage: $0 vMAJOR.MINOR.PATCH" >&2
exit 2
fi
LOCK_FILE=${IMPORTARR_UPGRADE_LOCK_FILE:-$PREFIX/repo-upgrade.lock}
exec 9>"$LOCK_FILE"
if ! flock -n 9; then
echo "Refusing to upgrade: another Importarr upgrade is already running." >&2
exit 1
fi
if [ ! -d "$REPO_DIR/.git" ]; then
echo "Importarr repo not found at $REPO_DIR" >&2
exit 1
fi
cd "$REPO_DIR"
if [ -n "$(git status --porcelain)" ]; then
echo "Refusing to upgrade: $REPO_DIR has uncommitted changes." >&2
git status --short >&2
exit 1
fi
git fetch --prune --tags origin
if ! git rev-parse --verify --quiet "refs/tags/$RELEASE_TAG" >/dev/null; then
echo "Release tag not found: $RELEASE_TAG" >&2
exit 1
fi
git checkout --detach "$RELEASE_TAG"
test "$(git describe --tags --exact-match HEAD)" = "$RELEASE_TAG"
"$VENV/bin/pip" install --upgrade --force-reinstall --no-cache-dir "$REPO_DIR"
install -m 0644 "$REPO_DIR/deploy/importarr.service" /etc/systemd/system/importarr.service
install -m 0755 "$REPO_DIR/deploy/repo-upgrade.sh" "$PREFIX/repo-upgrade.sh"
systemctl daemon-reload
GIT_SHA="$(git rev-parse --short=12 HEAD 2>/dev/null || printf development)"
BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
VERSION="$RELEASE_TAG"
BUILD_ENV_TMP="$PREFIX/build.env.tmp.$$"
trap 'rm -f "$BUILD_ENV_TMP"' EXIT HUP INT TERM
cat > "$BUILD_ENV_TMP" <<EOF
IMPORTARR_VERSION=$VERSION
IMPORTARR_GIT_SHA=$GIT_SHA
IMPORTARR_BUILD_DATE=$BUILD_DATE
EOF
chmod 0644 "$BUILD_ENV_TMP"
mv -f "$BUILD_ENV_TMP" "$PREFIX/build.env"
trap - EXIT HUP INT TERM
systemctl restart "$SERVICE"
systemctl restart manual-media-import.timer
systemctl --no-pager --full status "$SERVICE"