/ bin / ccdesign-update-check
ccdesign-update-check
 1  #!/usr/bin/env bash
 2  set -euo pipefail
 3  
 4  CCDESIGN_DIR="${CCDESIGN_DIR:-$(cd "$(dirname "$0")/.." && pwd)}"
 5  STATE_DIR="${CCDESIGN_STATE_DIR:-$HOME/.ccdesign}"
 6  CACHE_FILE="$STATE_DIR/last-update-check"
 7  VERSION_FILE="$CCDESIGN_DIR/VERSION"
 8  REMOTE_URL="${CCDESIGN_REMOTE_URL:-https://raw.githubusercontent.com/ZeroZ-lab/claritas-design/master/VERSION}"
 9  
10  if [ "${1:-}" = "--force" ]; then
11    rm -f "$CACHE_FILE"
12  fi
13  
14  LOCAL=""
15  if [ -f "$VERSION_FILE" ]; then
16    LOCAL="$(tr -d '[:space:]' < "$VERSION_FILE" 2>/dev/null || true)"
17  fi
18  if [ -z "$LOCAL" ]; then
19    exit 0
20  fi
21  
22  mkdir -p "$STATE_DIR"
23  
24  if [ -f "$CACHE_FILE" ]; then
25    CACHED="$(cat "$CACHE_FILE" 2>/dev/null || true)"
26    case "$CACHED" in
27      UP_TO_DATE*) CACHE_TTL=60 ;;
28      UPGRADE_AVAILABLE*) CACHE_TTL=720 ;;
29      *) CACHE_TTL=0 ;;
30    esac
31  
32    STALE=$(find "$CACHE_FILE" -mmin +"$CACHE_TTL" 2>/dev/null || true)
33    if [ -z "$STALE" ] && [ "$CACHE_TTL" -gt 0 ]; then
34      case "$CACHED" in
35        UP_TO_DATE*)
36          CACHED_VER="$(echo "$CACHED" | awk '{print $2}')"
37          if [ "$CACHED_VER" = "$LOCAL" ]; then
38            exit 0
39          fi
40          ;;
41        UPGRADE_AVAILABLE*)
42          CACHED_OLD="$(echo "$CACHED" | awk '{print $2}')"
43          # Always re-verify UPGRADE_AVAILABLE against the remote.
44          # A cached "upgrade" may be stale if the remote version was reverted.
45          # Skip the network call only for UP_TO_DATE (where local == remote).
46          ;;
47      esac
48    fi
49  fi
50  
51  REMOTE="$(curl -fsSL --max-time 5 "$REMOTE_URL" 2>/dev/null || true)"
52  REMOTE="$(echo "$REMOTE" | tr -d '[:space:]')"
53  
54  if ! echo "$REMOTE" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+([.-][A-Za-z0-9]+)?$'; then
55    echo "UP_TO_DATE $LOCAL" > "$CACHE_FILE"
56    exit 0
57  fi
58  
59  if [ "$LOCAL" = "$REMOTE" ]; then
60    echo "UP_TO_DATE $LOCAL" > "$CACHE_FILE"
61    exit 0
62  fi
63  
64  echo "UPGRADE_AVAILABLE $LOCAL $REMOTE" > "$CACHE_FILE"
65  echo "UPGRADE_AVAILABLE $LOCAL $REMOTE"