#!/usr/bin/env bash # Example: set up a GitTally instance that watches and builds GitTally itself. # Run from inside a working checkout of the gittally repository. # # Usage: # GIT_ACCOUNT=mi GIT_TOKEN=xxxx ./docs/examples/setup-gittally-selfhost.sh # (both empty is fine for a public origin — commit statuses just won't be published) set -euo pipefail INSTALL_DIR="${INSTALL_DIR:-$HOME/gittally-selfhost}" GIT_ACCOUNT="${GIT_ACCOUNT:-}" # technical Gitea user for HTTPS fetch + status API GIT_TOKEN="${GIT_TOKEN:-}" # Gitea API token — stays in the uncommitted config file SERVER_PORT="${SERVER_PORT:-18080}" DEV_CHECKOUT=$(git rev-parse --show-toplevel) ORIGIN_URL="${ORIGIN_URL:-$(git -C "$DEV_CHECKOUT" remote get-url origin)}" # 1. Build the GitTally jar — the last Gradle run you ever start by hand. (cd "$DEV_CHECKOUT" && ./gradlew --console=plain build) # 2. Dedicated clone: builds run in worktrees under its .git/gittally/worktrees, # completely separate from your dev checkout. mkdir -p "$INSTALL_DIR" JAR=$(ls "$DEV_CHECKOUT"/build/libs/gittally-*.jar | grep -v -- '-plain' | head -1) cp "$JAR" "$INSTALL_DIR/gittally.jar" if [ ! -d "$INSTALL_DIR/repo/.git" ]; then git clone "$ORIGIN_URL" "$INSTALL_DIR/repo" fi cd "$INSTALL_DIR/repo" # 3. Generate the config templates; existing files are kept, Gitea URL/owner/repo # are detected from the origin URL. java -jar "$INSTALL_DIR/gittally.jar" init # 4. Machine-specific overrides and secrets (.git/gittally/ is never committed; # this file deep-merges over .gittally.yml and wins). cat > .git/gittally/.gittally.yml <