clawdinators/scripts/clawdinator-version.sh
joshp123 52f5168cd2 Add shellcheck + shfmt linting for scripts
Add CI workflow to run shellcheck + shfmt, plus a scripts/lint-shell.sh helper.

Also apply shfmt formatting and fix initial shellcheck warnings.
2026-02-15 15:51:40 -08:00

115 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
info=/etc/clawdinator/build-info.json
if [ ! -f "$info" ]; then
echo "missing $info" >&2
exit 1
fi
now="$(date +%s)"
human_age_from_epoch() {
local then_ts="$1"
if [ -z "$then_ts" ]; then
printf '%s' "unknown"
return 0
fi
# Accept either "null" or non-numeric.
if [ "$then_ts" = "null" ]; then
printf '%s' "unknown"
return 0
fi
if ! [[ "$then_ts" =~ ^[0-9]+$ ]]; then
printf '%s' "unknown"
return 0
fi
local delta=$((now - then_ts))
if [ "$delta" -lt 0 ]; then
delta=0
fi
local d=$((delta / 86400))
local h=$(((delta % 86400) / 3600))
local m=$(((delta % 3600) / 60))
if [ "$d" -gt 0 ]; then
printf '%sd%sh%sm' "$d" "$h" "$m"
elif [ "$h" -gt 0 ]; then
printf '%sh%sm' "$h" "$m"
else
printf '%sm' "$m"
fi
}
human_age_from_iso() {
local iso="$1"
if [ -z "$iso" ]; then
printf '%s' "unknown"
return 0
fi
local epoch
epoch="$(date -d "$iso" +%s 2> /dev/null || true)"
human_age_from_epoch "$epoch"
}
deployed_rev="$(cat /run/current-system/configurationRevision 2> /dev/null || true)"
if [ -z "$deployed_rev" ]; then
deployed_rev="$(nixos-version --json 2> /dev/null | jq -r '.configurationRevision // empty' || true)"
fi
if [ -z "$deployed_rev" ]; then
deployed_rev="unknown"
fi
desired_rev="$(jq -r '.clawdinators.rev // empty' "$info")"
if [ -z "$desired_rev" ]; then
desired_rev="unknown"
fi
nix_openclaw_rev="$(jq -r '.nixOpenclaw.rev // empty' "$info")"
nix_openclaw_lm="$(jq -r '.nixOpenclaw.lastModified // empty' "$info")"
nixpkgs_rev="$(jq -r '.nixpkgs.rev // empty' "$info")"
nixpkgs_lm="$(jq -r '.nixpkgs.lastModified // empty' "$info")"
openclaw_rev="$(jq -r '.openclaw.rev // empty' "$info")"
last_switch_time=""
if [ -f /var/lib/clawd/deploy/last-switch.time ]; then
last_switch_time="$(tr -d '\n' < /var/lib/clawd/deploy/last-switch.time)"
fi
last_switch_rev=""
if [ -f /var/lib/clawd/deploy/last-switch.rev ]; then
last_switch_rev="$(tr -d '\n' < /var/lib/clawd/deploy/last-switch.rev)"
fi
echo "clawdinators: $deployed_rev (desired: $desired_rev)"
if [ -n "$last_switch_time" ]; then
echo " deployed: $last_switch_time ($(human_age_from_iso "$last_switch_time") ago)"
fi
if [ -n "$last_switch_rev" ]; then
echo " last-switch.rev: $last_switch_rev"
fi
echo "nix-openclaw: $nix_openclaw_rev (lock age: $(human_age_from_epoch "$nix_openclaw_lm"))"
echo "nixpkgs: $nixpkgs_rev (lock age: $(human_age_from_epoch "$nixpkgs_lm"))"
echo "openclaw: $openclaw_rev"
# Optional: enrich OpenClaw with commit timestamp/age via GitHub API (requires auth).
if [ -n "$openclaw_rev" ] && command -v gh > /dev/null 2>&1; then
if gh auth status -h github.com > /dev/null 2>&1; then
openclaw_date="$(gh api \
-H 'Accept: application/vnd.github+json' \
"/repos/openclaw/openclaw/commits/${openclaw_rev}" \
--jq '.commit.committer.date' 2> /dev/null || true)"
if [ -n "$openclaw_date" ]; then
echo " commit: $openclaw_date ($(human_age_from_iso "$openclaw_date") ago)"
fi
fi
fi
if [ "$#" -ge 1 ] && [ "$1" = "--json" ]; then
jq -c '.' "$info"
fi