Files
Linux_post_install/bin/flag-reader
T
Your Name 2a2b4d81d1 feat: add feature-flag subsystem with on-demand features install
- Move autostart.sh from bin/ to features/ so re-installs never reset it
- Add lib/flags.sh (flag_set/clear/is_set/value/list/status) + flag-reader/set/clear CLIs
- install.sh --feature copies features/* to /usr/local/bin with overwrite prompt, sets flags
- postinstall.sh enables autostart.service only when the autostart flag is set
- Document features & flags in README, DEV.md, AGENT_Context_Project.md
2026-08-03 02:40:51 -04:00

59 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
source "$(dirname "$0")/../lib/common.sh" 2>/dev/null || source "$(dirname "$0")/common.sh"
source "$(dirname "$0")/../lib/flags.sh" 2>/dev/null || source "$(dirname "$0")/flags.sh"
usage() {
cat <<EOF
Usage: flag-reader [OPTIONS] [name ...]
Show feature flag state. Flags live in $FLAGS_DIR
flag-reader list all flags with status
flag-reader <name>... status per flag (exit 0 if all are set)
flag-reader --raw <name> print the raw stored value only (script-friendly)
EOF
exit 0
}
RAW=0
NAMES=()
for arg in "$@"; do
case "$arg" in
-h|--help) usage ;;
--raw) RAW=1 ;;
-*) echo "ERROR: unknown option: $arg" >&2; exit 1 ;;
*) NAMES+=("$arg") ;;
esac
done
if [ "$RAW" -eq 1 ]; then
[ "${#NAMES[@]}" -eq 1 ] || { echo "ERROR: --raw requires exactly one name" >&2; exit 1; }
flag_value "${NAMES[0]}"
exit 0
fi
if [ "${#NAMES[@]}" -eq 0 ]; then
if [ -d "$FLAGS_DIR" ] && [ -n "$(ls -A "$FLAGS_DIR" 2>/dev/null)" ]; then
for f in "$FLAGS_DIR"/*; do
[ -f "$f" ] || continue
flag_status "$(basename "$f")"
done
else
warn "no flags set"
fi
exit 0
fi
rc=0
for name in "${NAMES[@]}"; do
if flag_is_set "$name"; then
ok "$(flag_status "$name")"
else
warn "$(flag_status "$name")"
rc=1
fi
done
exit "$rc"