#!/usr/bin/env bash # Sourced by auto_update_check.sh and apply_github_update.sh: which git ref a node updates to. # stable (default) — the latest release tag vX.Y.Z; main until the first release is tagged # main — every change on the main branch # Needs SOURCE_DIR, REMOTE and BRANCH; sets UPDATE_CHANNEL, TARGET_REF, TARGET_LABEL, TARGET_ZIP_URL. # Where the project lives. Nodes installed before the move from GitHub are switched over by migrate_update_remote. DEFAULT_REPO_URL="https://git.stackworks.ru/viktor/virtuality.git" LEGACY_REPO_URLS=("https://github.com/viktor138irk/virtuality.git" "https://github.com/viktor138irk/virtuality") update_channel() { local value="${VIRTUALITY_UPDATE_CHANNEL:-}" if [[ -z "$value" && -f /var/lib/virtuality/config/web.env ]]; then value="$(sed -n 's/^VIRTUALITY_UPDATE_CHANNEL=//p' /var/lib/virtuality/config/web.env | tail -n1 | tr -d "\"'")" fi [[ "$value" == "main" ]] && echo main || echo stable } remote_url() { git -C "$SOURCE_DIR" remote get-url "$REMOTE" 2>/dev/null || true } migrate_update_remote() { [[ -d "${SOURCE_DIR}/.git" ]] || return 0 local url legacy url="$(remote_url)" for legacy in "${LEGACY_REPO_URLS[@]}"; do if [[ "$url" == "$legacy" ]]; then git -C "$SOURCE_DIR" remote set-url "$REMOTE" "$DEFAULT_REPO_URL" && echo "update remote moved: $url -> $DEFAULT_REPO_URL" return 0 fi done } # Web address of the repository for ZIP downloads: the remote itself when it is https, otherwise the default. # Gitea and GitHub both serve /archive/.zip. repo_web_url() { local url="" [[ -d "${SOURCE_DIR}/.git" ]] && url="$(remote_url)" [[ "$url" == https://* ]] || url="$DEFAULT_REPO_URL" echo "${url%.git}" } resolve_update_target() { local tag="" web web="$(repo_web_url)" UPDATE_CHANNEL="$(update_channel)" TARGET_REF="${REMOTE}/${BRANCH}" TARGET_LABEL="${BRANCH}" TARGET_ZIP_URL="${web}/archive/${BRANCH}.zip" if [[ "$UPDATE_CHANNEL" == "stable" && -d "${SOURCE_DIR}/.git" ]]; then tag="$(git -C "$SOURCE_DIR" tag --list 'v[0-9]*' --sort=-v:refname | grep -E '^v[0-9]+(\.[0-9]+)*$' | head -n1 || true)" if [[ -n "$tag" ]]; then TARGET_REF="refs/tags/${tag}" TARGET_LABEL="$tag" TARGET_ZIP_URL="${web}/archive/${tag}.zip" fi fi }