RKNnoVPN/tools/version.sh
2026-05-02 14:16:34 +03:00

60 lines
1.4 KiB
Shell

#!/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 commits
if [[ "$version" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(-([0-9]+)-g[0-9a-fA-F]+)?$ ]]; then
major="${BASH_REMATCH[1]}"
minor="${BASH_REMATCH[2]}"
patch="${BASH_REMATCH[3]}"
commits="${BASH_REMATCH[5]:-0}"
else
echo "invalid version: $1" >&2
return 1
fi
if (( 10#$minor > 99 || 10#$patch > 99 || 10#$commits > 99 )); then
echo "version components exceed two reserved digits: $1" >&2
return 1
fi
echo $((10#$major * 1000000 + 10#$minor * 10000 + 10#$patch * 100 + 10#$commits))
}
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