#!/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 "$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" cat > "$PREFIX/build.env" <