49 lines
1.7 KiB
Bash
49 lines
1.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
EXPECTED_USER="${AIOS_RUNTIME_USER:-aiman}"
|
|
EXPECTED_GROUP="${AIOS_RUNTIME_GROUP:-gitops}"
|
|
EXPECTED_UMASK="${AIOS_RUNTIME_UMASK:-0002}"
|
|
TASK_DIR="${AIOS_TASK_DIR:-.agent/tasks}"
|
|
RESULT_DIR="${AIOS_RESULT_DIR:-.agent/results}"
|
|
|
|
fail() {
|
|
echo "preflight_status: FAIL"
|
|
echo "reason: $1"
|
|
exit 1
|
|
}
|
|
|
|
USER_NOW="$(id -un)"
|
|
GROUPS_NOW="$(id -Gn)"
|
|
UMASK_NOW="$(umask)"
|
|
ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)"
|
|
GIT_DIR="$(git rev-parse --git-dir 2>/dev/null || true)"
|
|
BRANCH="$(git branch --show-current 2>/dev/null || true)"
|
|
|
|
[[ "$USER_NOW" == "$EXPECTED_USER" ]] || fail "runtime user is $USER_NOW, expected $EXPECTED_USER"
|
|
[[ " $GROUPS_NOW " == *" $EXPECTED_GROUP "* ]] || fail "runtime user is not in $EXPECTED_GROUP"
|
|
[[ "$UMASK_NOW" == "$EXPECTED_UMASK" || "$UMASK_NOW" == "002" ]] || fail "umask is $UMASK_NOW, expected $EXPECTED_UMASK"
|
|
[[ -n "$ROOT" ]] || fail "not inside a git worktree"
|
|
[[ "$ROOT" == /data/aios-gitops/worktrees/* ]] || fail "shared source worktree is prohibited: $ROOT"
|
|
[[ -w "$ROOT" ]] || fail "worktree root is not writable"
|
|
[[ -w "$GIT_DIR" ]] || fail "git dir is not writable: $GIT_DIR"
|
|
[[ ! -e "$GIT_DIR/index.lock" ]] || fail "git index lock exists"
|
|
install -d -m 2775 "$TASK_DIR" "$RESULT_DIR"
|
|
[[ -w "$TASK_DIR" ]] || fail "task directory is not writable: $TASK_DIR"
|
|
[[ -w "$RESULT_DIR" ]] || fail "result directory is not writable: $RESULT_DIR"
|
|
[[ -z "$(git status --porcelain)" ]] || fail "worktree is not clean at task start"
|
|
|
|
cat <<EOF
|
|
preflight_status: PASS
|
|
runtime_user: $USER_NOW
|
|
runtime_groups: $GROUPS_NOW
|
|
umask: $UMASK_NOW
|
|
worktree: $ROOT
|
|
git_dir: $GIT_DIR
|
|
branch: $BRANCH
|
|
workspace_clean: true
|
|
task_path_writable: true
|
|
result_path_writable: true
|
|
git_lock_present: false
|
|
EOF
|