Refactor installation scripts to use consistent repository slug and improve temporary directory cleanup
This commit is contained in:
+20
-13
@@ -21,6 +21,13 @@ LEGACY_SYSTEM_DIR=""
|
|||||||
LEGACY_BACKUP_ARCHIVE=""
|
LEGACY_BACKUP_ARCHIVE=""
|
||||||
CLEANUP_OLD_SERVICES=true
|
CLEANUP_OLD_SERVICES=true
|
||||||
CLEANUP_OLD_REMOVE_CRON=false
|
CLEANUP_OLD_REMOVE_CRON=false
|
||||||
|
TMP_DIR=""
|
||||||
|
|
||||||
|
cleanup_tmp_dir() {
|
||||||
|
if [ -n "${TMP_DIR:-}" ] && [ -d "$TMP_DIR" ]; then
|
||||||
|
rm -rf "$TMP_DIR"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
need_cmd() {
|
need_cmd() {
|
||||||
if ! command -v "$1" >/dev/null 2>&1; then
|
if ! command -v "$1" >/dev/null 2>&1; then
|
||||||
@@ -263,10 +270,10 @@ main() {
|
|||||||
need_cmd python3
|
need_cmd python3
|
||||||
need_cmd curl
|
need_cmd curl
|
||||||
|
|
||||||
local tmp_dir meta_file tag bundle_url image_url
|
local meta_file tag bundle_url image_url
|
||||||
tmp_dir="$(mktemp -d)"
|
TMP_DIR="$(mktemp -d)"
|
||||||
meta_file="$tmp_dir/release.json"
|
meta_file="$TMP_DIR/release.json"
|
||||||
trap 'rm -rf "$tmp_dir"' EXIT
|
trap cleanup_tmp_dir EXIT
|
||||||
|
|
||||||
mapfile -t release_info < <(latest_tag_and_bundle_url "$meta_file")
|
mapfile -t release_info < <(latest_tag_and_bundle_url "$meta_file")
|
||||||
tag="${release_info[0]:-}"
|
tag="${release_info[0]:-}"
|
||||||
@@ -282,16 +289,16 @@ main() {
|
|||||||
echo "Installing Inventarsystem release $tag into $PROJECT_DIR"
|
echo "Installing Inventarsystem release $tag into $PROJECT_DIR"
|
||||||
sudo mkdir -p "$PROJECT_DIR"
|
sudo mkdir -p "$PROJECT_DIR"
|
||||||
|
|
||||||
curl -fL "$bundle_url" -o "$tmp_dir/$BUNDLE_ASSET"
|
curl -fL "$bundle_url" -o "$TMP_DIR/$BUNDLE_ASSET"
|
||||||
sudo tar -xzf "$tmp_dir/$BUNDLE_ASSET" -C "$PROJECT_DIR"
|
sudo tar -xzf "$TMP_DIR/$BUNDLE_ASSET" -C "$PROJECT_DIR"
|
||||||
|
|
||||||
if [ -z "$image_url" ]; then
|
if [ -z "$image_url" ]; then
|
||||||
echo "Error: release image asset is missing"
|
echo "Error: release image asset is missing"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
curl -fL "$image_url" -o "$tmp_dir/inventarsystem-image-$tag.tar.gz"
|
curl -fL "$image_url" -o "$TMP_DIR/inventarsystem-image-$tag.tar.gz"
|
||||||
sudo docker load -i "$tmp_dir/inventarsystem-image-$tag.tar.gz" >/dev/null
|
sudo docker load -i "$TMP_DIR/inventarsystem-image-$tag.tar.gz" >/dev/null
|
||||||
|
|
||||||
if [ ! -f "$PROJECT_DIR/start.sh" ]; then
|
if [ ! -f "$PROJECT_DIR/start.sh" ]; then
|
||||||
echo "Error: release bundle is missing start.sh"
|
echo "Error: release bundle is missing start.sh"
|
||||||
@@ -302,14 +309,14 @@ main() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [ ! -f "$PROJECT_DIR/restart.sh" ]; then
|
if [ ! -f "$PROJECT_DIR/restart.sh" ]; then
|
||||||
cat > "$tmp_dir/restart.sh" <<'EOF'
|
cat > "$TMP_DIR/restart.sh" <<'EOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
"$SCRIPT_DIR/stop.sh"
|
"$SCRIPT_DIR/stop.sh"
|
||||||
"$SCRIPT_DIR/start.sh"
|
"$SCRIPT_DIR/start.sh"
|
||||||
EOF
|
EOF
|
||||||
sudo install -m 755 "$tmp_dir/restart.sh" "$PROJECT_DIR/restart.sh"
|
sudo install -m 755 "$TMP_DIR/restart.sh" "$PROJECT_DIR/restart.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "$PROJECT_DIR/cleanup-old.sh" ] && [ -f "$INSTALLER_DIR/cleanup-old.sh" ]; then
|
if [ ! -f "$PROJECT_DIR/cleanup-old.sh" ] && [ -f "$INSTALLER_DIR/cleanup-old.sh" ]; then
|
||||||
@@ -322,13 +329,13 @@ EOF
|
|||||||
echo "$tag" | sudo tee "$PROJECT_DIR/.release-version" >/dev/null
|
echo "$tag" | sudo tee "$PROJECT_DIR/.release-version" >/dev/null
|
||||||
|
|
||||||
if [ ! -f "$PROJECT_DIR/.docker-build.env" ]; then
|
if [ ! -f "$PROJECT_DIR/.docker-build.env" ]; then
|
||||||
cat > "$tmp_dir/.docker-build.env" <<EOF
|
cat > "$TMP_DIR/.docker-build.env" <<EOF
|
||||||
NUITKA_BUILD=0
|
NUITKA_BUILD=0
|
||||||
INVENTAR_HTTP_PORT=80
|
INVENTAR_HTTP_PORT=80
|
||||||
INVENTAR_HTTPS_PORT=443
|
INVENTAR_HTTPS_PORT=443
|
||||||
INVENTAR_APP_IMAGE=ghcr.io/aiirondev/legendary-octo-garbanzo:$tag
|
INVENTAR_APP_IMAGE=ghcr.io/aiirondev/legendary-octo-garbanzo:$tag
|
||||||
EOF
|
EOF
|
||||||
sudo install -m 644 "$tmp_dir/.docker-build.env" "$PROJECT_DIR/.docker-build.env"
|
sudo install -m 644 "$TMP_DIR/.docker-build.env" "$PROJECT_DIR/.docker-build.env"
|
||||||
elif sudo grep -q '^INVENTAR_APP_IMAGE=' "$PROJECT_DIR/.docker-build.env"; then
|
elif sudo grep -q '^INVENTAR_APP_IMAGE=' "$PROJECT_DIR/.docker-build.env"; then
|
||||||
sudo sed -i "s|^INVENTAR_APP_IMAGE=.*|INVENTAR_APP_IMAGE=ghcr.io/aiirondev/legendary-octo-garbanzo:$tag|" "$PROJECT_DIR/.docker-build.env"
|
sudo sed -i "s|^INVENTAR_APP_IMAGE=.*|INVENTAR_APP_IMAGE=ghcr.io/aiirondev/legendary-octo-garbanzo:$tag|" "$PROJECT_DIR/.docker-build.env"
|
||||||
else
|
else
|
||||||
@@ -338,7 +345,7 @@ EOF
|
|||||||
backup_legacy_database
|
backup_legacy_database
|
||||||
|
|
||||||
echo "Starting stack..."
|
echo "Starting stack..."
|
||||||
sudo bash "$PROJECT_DIR/start.sh"
|
sudo env INVENTAR_APP_IMAGE="ghcr.io/aiirondev/legendary-octo-garbanzo:$tag" bash "$PROJECT_DIR/start.sh"
|
||||||
|
|
||||||
restore_legacy_backup_into_docker
|
restore_legacy_backup_into_docker
|
||||||
cleanup_old_services
|
cleanup_old_services
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||||||
cd "$SCRIPT_DIR"
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
ENV_FILE="$SCRIPT_DIR/.docker-build.env"
|
ENV_FILE="$SCRIPT_DIR/.docker-build.env"
|
||||||
APP_IMAGE_REPO="ghcr.io/aiirondev/inventarsystem"
|
APP_IMAGE_REPO="ghcr.io/aiirondev/legendary-octo-garbanzo"
|
||||||
DIST_DIR="$SCRIPT_DIR/dist"
|
DIST_DIR="$SCRIPT_DIR/dist"
|
||||||
|
|
||||||
SUDO=""
|
SUDO=""
|
||||||
@@ -17,7 +17,7 @@ NUITKA_BUILD_VALUE="0"
|
|||||||
HTTP_PORT_VALUE="80"
|
HTTP_PORT_VALUE="80"
|
||||||
HTTPS_PORT_VALUE="443"
|
HTTPS_PORT_VALUE="443"
|
||||||
CRON_SETUP_VALUE="${INVENTAR_SETUP_CRON:-1}"
|
CRON_SETUP_VALUE="${INVENTAR_SETUP_CRON:-1}"
|
||||||
APP_IMAGE_VALUE="${INVENTAR_APP_IMAGE:-ghcr.io/aiirondev/inventarsystem:latest}"
|
APP_IMAGE_VALUE="${INVENTAR_APP_IMAGE:-$APP_IMAGE_REPO:latest}"
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
@@ -364,11 +364,12 @@ configure_nuitka_mode() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resolve_app_image() {
|
resolve_app_image() {
|
||||||
local env_image="" release_tag=""
|
local env_image="" release_tag="" default_latest
|
||||||
|
default_latest="$APP_IMAGE_REPO:latest"
|
||||||
|
|
||||||
if [ -f "$ENV_FILE" ]; then
|
if [ -f "$ENV_FILE" ]; then
|
||||||
env_image="$(awk -F= '/^INVENTAR_APP_IMAGE=/{print $2}' "$ENV_FILE" | tail -n1 | tr -d ' ' || true)"
|
env_image="$(awk -F= '/^INVENTAR_APP_IMAGE=/{print $2}' "$ENV_FILE" | tail -n1 | tr -d ' ' || true)"
|
||||||
if [ -n "$env_image" ] && [ "$env_image" != "ghcr.io/aiirondev/inventarsystem:latest" ]; then
|
if [ -n "$env_image" ] && [ "$env_image" != "$default_latest" ]; then
|
||||||
APP_IMAGE_VALUE="$env_image"
|
APP_IMAGE_VALUE="$env_image"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@@ -379,7 +380,7 @@ resolve_app_image() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$release_tag" ]; then
|
if [ -n "$release_tag" ]; then
|
||||||
APP_IMAGE_VALUE="ghcr.io/aiirondev/inventarsystem:$release_tag"
|
APP_IMAGE_VALUE="$APP_IMAGE_REPO:$release_tag"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user