RKNnoVPN/tools/version.sh
2026-05-02 15:19:56 +03:00

59 lines
1.3 KiB
Shell
Executable file

#!/usr/bin/env bash
set -euo pipefail
rknnovpn_project_root() {
local script_dir
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "${script_dir}/.." && pwd
}
rknnovpn_current_version() {
local root
root="$(rknnovpn_project_root)"
printf '%s\n' "$(tr -d '[:space:]' < "${root}/VERSION")"
}
rknnovpn_version_code() {
local version="${1#v}"
local major minor patch
if [[ "$version" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
major="${BASH_REMATCH[1]}"
minor="${BASH_REMATCH[2]}"
patch="${BASH_REMATCH[3]}"
else
echo "invalid version: $1" >&2
return 1
fi
if (( 10#$major > 99 || 10#$minor > 99 || 10#$patch > 99 )); then
echo "versionCode supports major/minor/patch 0..99: $1" >&2
return 1
fi
printf '%d\n' "$((10#$major * 1000000 + 10#$minor * 10000 + 10#$patch * 100))"
}
rknnovpn_ci_version() {
local ref_name="$1"
local run_number="${2:-0}"
local sha="${3:-0000000}"
if [[ "$ref_name" == v* ]]; then
echo "$ref_name"
else
echo "dev-${run_number}-${sha:0:7}"
fi
}
case "${1:-}" in
current)
rknnovpn_current_version
;;
code)
rknnovpn_version_code "${2:-$(rknnovpn_current_version)}"
;;
ci)
rknnovpn_ci_version "${2:-}" "${3:-}" "${4:-}"
;;
*)
echo "usage: $0 current | code [version] | ci <ref-name> <run-number> <sha>" >&2
exit 2
;;
esac