cli + misc build stuff. Yes im testing in prod.

This commit is contained in:
lda
2026-04-30 15:46:09 +07:00 Verified
parent 7728910149
commit eb83feaf97
12 changed files with 370 additions and 29 deletions
+75 -7
View File
@@ -4,21 +4,30 @@
# then packaging the same bundle format and installing it.
#
# Simplest use:
# sudo -E ./scripts/update_wakey_cc_from_repo.sh
# ./scripts/update_wakey_cc_from_repo.sh
#
# Env options:
# WAKEY_CC_REPO_DIR Existing checkout to update/build instead of cloning
# WAKEY_CC_REPO_URL Git URL (default: https://git.ldlda.com/lda/wakey.git)
# WAKEY_CC_REF Git ref/branch/tag (default: main)
# WAKEY_CC_TARGET Rust target triple (default from uname)
# WAKEY_CC_ROOT Install root (default: current directory)
# WAKEY_CC_SERVICE systemd unit name (default: wakey-cc.service)
# WAKEY_CC_USER Owner for installed files/temp dirs (default: current user)
# WAKEY_CC_VERSION Bundle version label (default: v0.0.0-local-<short_sha>)
# WAKEY_CC_NO_RESTART If set, skip systemd restart
# WAKEY_CC_KEEP_TMP If set, keep temp checkout/build dir for debugging
# SUDO Privilege escalation command/path (default: sudo when needed)
# SUDO Privilege escalation command/path for install steps (default: sudo)
#
# Requires: git, cargo, tar, pnpm, systemctl (optional for restart)
# Common existing-checkout use:
: <<'USE CASE'
WAKEY_CC_REPO_DIR="$HOME/dev/wakey" \
WAKEY_CC_USER=lda \
WAKEY_CC_KEEP_TMP=1 \
scripts/update_wakey_cc_from_repo.sh
USE CASE
set -eu
log() { printf '[update_wakey_cc_from_repo] %s\n' "$*"; }
@@ -79,6 +88,28 @@ restore_label() {
fi
}
chown_if_requested() {
[ -n "${OWNER:-}" ] || return 0
priv chown -R "$OWNER:$OWNER" "$@"
}
chmod_user_rw_if_requested() {
[ -n "${OWNER:-}" ] || return 0
priv chmod -R u+rwX "$@"
}
update_existing_repo() {
repo_dir=$1
ref=$2
[ -d "$repo_dir/.git" ] || fail "WAKEY_CC_REPO_DIR is not a git checkout: $repo_dir"
log "using existing checkout $repo_dir (ref: $ref)"
git -C "$repo_dir" fetch --prune origin "$ref" || fail 'git fetch failed'
git -C "$repo_dir" checkout "$ref" || fail "git checkout failed: $ref"
git -C "$repo_dir" pull --ff-only origin "$ref" || fail 'git pull --ff-only failed'
}
install_executable_force() {
src=$1
dst=$2
@@ -90,6 +121,7 @@ install_executable_force() {
priv rm -f "$tmp"
priv cp -f "$src" "$tmp"
priv chmod 0755 "$tmp"
chown_if_requested "$tmp"
if [ -e "$dst" ]; then
priv mv -f "$dst" "$old" || true
fi
@@ -99,13 +131,25 @@ install_executable_force() {
}
main() {
REPO_DIR="${WAKEY_CC_REPO_DIR:-}"
REPO_URL="${WAKEY_CC_REPO_URL:-https://git.ldlda.com/lda/wakey.git}"
REF="${WAKEY_CC_REF:-main}"
TARGET="${WAKEY_CC_TARGET:-$(default_target)}"
ROOT="${WAKEY_CC_ROOT:-$PWD}"
SERVICE="${WAKEY_CC_SERVICE:-wakey-cc.service}"
if [ -n "${WAKEY_CC_USER:-}" ]; then
OWNER="$WAKEY_CC_USER"
elif [ "$(id -u)" -eq 0 ]; then
OWNER=
else
OWNER=$(id -un)
fi
SUDO_BIN=$(sudo_cmd)
if [ -n "$OWNER" ] && ! id "$OWNER" >/dev/null 2>&1; then
fail "WAKEY_CC_USER does not exist: $OWNER"
fi
require_cmd git
require_cmd cargo
require_cmd tar
@@ -114,19 +158,34 @@ main() {
TMPBASE="${TMPDIR:-/tmp}"
WORKDIR="$TMPBASE/wakey-cc-src.$$"
STAGING="$TMPBASE/wakey-cc-stage.$$"
CLONED_WORKDIR=1
cleanup() {
if [ -z "${WAKEY_CC_KEEP_TMP:-}" ]; then
rm -rf "$WORKDIR" "$STAGING"
[ "$CLONED_WORKDIR" = "0" ] || rm -rf "$WORKDIR"
rm -rf "$STAGING"
else
log "keeping temp dir: $WORKDIR"
if [ "$CLONED_WORKDIR" != "0" ]; then
chown_if_requested "$WORKDIR"
chmod_user_rw_if_requested "$WORKDIR"
log "keeping temp dir: $WORKDIR"
fi
chown_if_requested "$STAGING"
chmod_user_rw_if_requested "$STAGING"
log "keeping temp dir: $STAGING"
fi
}
trap cleanup EXIT INT TERM
log "cloning $REPO_URL (ref: $REF)"
git clone --depth 1 --branch "$REF" "$REPO_URL" "$WORKDIR" ||
fail 'git clone failed'
if [ -n "$REPO_DIR" ]; then
WORKDIR=$REPO_DIR
CLONED_WORKDIR=0
update_existing_repo "$WORKDIR" "$REF"
else
log "cloning $REPO_URL (ref: $REF)"
git clone --depth 1 --branch "$REF" "$REPO_URL" "$WORKDIR" ||
fail 'git clone failed'
fi
cd "$WORKDIR"
@@ -165,6 +224,15 @@ main() {
priv cp -a "$STAGING/ui" "$ROOT/"
priv cp -a "$STAGING/scripts" "$ROOT/"
priv cp -a "$STAGING/deploy" "$ROOT/"
chown_if_requested \
"$ROOT/bin/wakey-control-plane" \
"$ROOT/ui" \
"$ROOT/scripts" \
"$ROOT/deploy"
chmod_user_rw_if_requested \
"$ROOT/ui" \
"$ROOT/scripts" \
"$ROOT/deploy"
if [ -z "${WAKEY_CC_NO_RESTART:-}" ] && command -v systemctl >/dev/null 2>&1; then
if systemctl list-unit-files "$SERVICE" >/dev/null 2>&1; then