#!/usr/bin/env sh set -eu ROOT_DIR=${ROOT_DIR:-"/opt/project"} configure() { configure_user && configure_fs && configure_packages && configure_git && configure_firewall } services() { cd "$ROOT_DIR"; docker compose --profile services "$@"; } core() { cd "$ROOT_DIR"; docker compose --profile core "$@"; } # TODO: use --wait and add health checks start() { stop || true; services up -d "$@"; } startfg() { stop || true; services up "$@"; } stop() { services down; } configure_packages() { apt install \ docker.io docker-buildx docker-compose-v2 \ git ufw } configure_git() { sudo -u git git config --global init.defaultBranch main # kept explicit shell setup chsh -s "$(which git-shell)" git ln -sf "$ROOT_DIR/cgit/ssh/git-shell-commands" /home/git/ } configure_firewall() { ufw allow 443/tcp ufw allow 80/tcp ufw allow 22 ufw enable } configure_user() { groupadd -f -g 1001 git useradd --shell /usr/sbin/nologin git --uid 1001 --gid 1001 || true groupadd -f -g 1002 send useradd --shell /usr/sbin/nologin --no-create-home send --uid 1002 --gid 1002 || true } configure_fs() { mkdir -p /git chown -R git:git /git mkdir -p /uploads chown -R send:send /uploads } update() { apt update services build --pull } cmd="$1"; shift; case "$cmd" in update|start|startfg|stop|services|core) "$cmd" "$@" ;; configure|configure_firewall|configure_user|configure_fs|configure_packages|configure_git) "$cmd" "$@" ;; *) echo "Invalid command: $cmd"; exit 1 ;; esac