#!/bin/bash # KOTA Sensorbox Technician Tool - update to the newest released version. # Checks Gitea for the newest release tag (vX.Y) and downloads only what changed (git). # Works in a git clone and in a folder unpacked from a release zip (it is connected on first run). # If Finder refuses to open this file, run it once as: bash update_macos.command cd "$(dirname "$0")" || exit 1 REPO_URL="${KOTA_REPO_URL:-https://gitea.kota-app.com/kkallas/kota-technician-tool.git}" export UV_PROJECT_ENVIRONMENT="${UV_PROJECT_ENVIRONMENT:-$HOME/Library/Caches/KotaTechnicianTool/venv}" export PATH="$HOME/.local/bin:$PATH" finish() { [ -z "$KOTA_NO_PAUSE" ] && [ -t 0 ] && read -r -p "Press Enter to close..." _ exit "$1" } fail() { echo; echo "[!] $*"; echo "[!] Update did not finish."; finish 1; } # ---- git (macOS: the Command Line Tools installer offers it) -------------- if ! git --version >/dev/null 2>&1; then if [ "$(uname)" = Darwin ]; then xcode-select --install >/dev/null 2>&1 fail "Git is being installed (Apple Command Line Tools). Run this again when the installer has finished." fi fail "Git is not installed." fi # ---- connect a folder unpacked from a zip ---------------------------------- if [ ! -d .git ]; then echo "Connecting this folder to $REPO_URL ..." git init -q && git remote add origin "$REPO_URL" || fail "Cannot set up git in this folder." fi # A developer copy follows a branch; it is updated with "git pull", not here. if git rev-parse -q --verify HEAD >/dev/null 2>&1 && branch=$(git symbolic-ref -q --short HEAD); then echo "This is a developer copy on branch $branch. Update it with: git pull" finish 0 fi echo "Checking for a new version..." git fetch --quiet --force --tags origin || fail "Cannot reach $REPO_URL. Check the Internet connection and your Gitea login, then try again." latest=$(git tag -l 'v*' --sort=-v:refname | head -n 1) [ -n "$latest" ] || fail "No released version found on the server." current=$(git describe --tags --exact-match HEAD 2>/dev/null) if [ "$current" = "$latest" ]; then echo "You already have the newest version $latest." else if [ -n "$current" ]; then if [ -n "$(git status --porcelain --untracked-files=no)" ]; then echo "Some tool files in this folder were changed by hand. They will be replaced by $latest." read -r -p "Continue? [y/N] " answer [[ "$answer" =~ ^[Yy]$ ]] || fail "Cancelled." fi echo "Updating $current -> $latest. Changes:" git --no-pager log --oneline --no-decorate "$current..$latest" else echo "Installing $latest..." fi git -c advice.detachedHead=false checkout -q -f "$latest" || fail "Checkout of $latest failed." echo "Now on $latest." fi # ---- Python libraries (only what changed) ---------------------------------- if ! command -v uv >/dev/null 2>&1; then echo "Installing uv (Python package runner, current user only)..." curl -LsSf https://astral.sh/uv/install.sh | sh || fail "uv installation failed. Ask the firmware team for help." fi echo "Checking Python libraries..." uv sync --frozen --no-dev --python 3.12 --quiet || fail "Installing Python libraries failed." echo echo "Done. Start the tool with run_macos.command." finish 0