#!/bin/bash ## Bootstrap Gitea for local dev/testing. ## Creates admin user, org, and mirrors public repos from src.sunbeam.pt. ## Run after: docker compose -f docker-compose.dev.yaml up -d gitea set -euo pipefail GITEA="http://localhost:3000" ADMIN_USER="sol" ADMIN_PASS="solpass123" ADMIN_EMAIL="sol@sunbeam.local" SOURCE="https://src.sunbeam.pt" echo "Waiting for Gitea..." until curl -sf "$GITEA/api/v1/version" >/dev/null 2>&1; do sleep 2 done echo "Gitea is ready." # Create admin user via container CLI (can't use API without existing admin) echo "Creating admin user..." docker compose -f docker-compose.dev.yaml exec -T --user git gitea \ gitea admin user create \ --username "$ADMIN_USER" --password "$ADMIN_PASS" \ --email "$ADMIN_EMAIL" --admin --must-change-password=false 2>/dev/null || true echo "Admin user ready." # Create studio org echo "Creating studio org..." curl -sf -X POST "$GITEA/api/v1/orgs" \ -H 'Content-Type: application/json' \ -u "$ADMIN_USER:$ADMIN_PASS" \ -d '{"username":"studio","full_name":"Sunbeam Studios","visibility":"public"}' \ > /dev/null 2>&1 || true # Mirror repos from src.sunbeam.pt (public, no auth needed) REPOS=( "sol" "cli" "proxy" "storybook" "admin-ui" "mistralai-client-rs" ) for repo in "${REPOS[@]}"; do echo "Migrating studio/$repo from src.sunbeam.pt..." curl -sf -X POST "$GITEA/api/v1/repos/migrate" \ -H 'Content-Type: application/json' \ -u "$ADMIN_USER:$ADMIN_PASS" \ -d "{ \"clone_addr\": \"$SOURCE/studio/$repo.git\", \"repo_name\": \"$repo\", \"repo_owner\": \"studio\", \"service\": \"gitea\", \"mirror\": false }" > /dev/null 2>&1 && echo " ✓ $repo" || echo " – $repo (already exists or failed)" done # Create a PAT for the admin user (for SDK testing without Vault) echo "Creating admin PAT..." PAT=$(curl -sf -X POST "$GITEA/api/v1/users/$ADMIN_USER/tokens" \ -H 'Content-Type: application/json' \ -u "$ADMIN_USER:$ADMIN_PASS" \ -d '{"name":"sol-dev-pat","scopes":["read:repository","write:repository","read:user","read:organization","read:issue","write:issue","read:notification"]}' \ 2>/dev/null | python3 -c "import sys,json; print(json.load(sys.stdin).get('sha1',json.load(sys.stdin).get('token','')))" 2>/dev/null || echo "") if [ -z "$PAT" ]; then # Token might already exist — try to get it PAT="already-provisioned" echo " PAT already exists (or creation failed)" else echo " PAT: ${PAT:0:8}..." fi echo "" echo "Gitea bootstrap complete." echo " Admin: $ADMIN_USER / $ADMIN_PASS" echo " Org: studio" echo " Repos: ${REPOS[*]}" echo " URL: $GITEA" if [ "$PAT" != "already-provisioned" ] && [ -n "$PAT" ]; then echo "" echo "Add to .env:" echo " GITEA_PAT=$PAT" fi