#!/usr/bin/env bash # gitea skill — crear un repo en gitea.nucleoriofrio.com. # # Soporta dos targets: # - usuario autenticado (claudecode0): POST /api/v1/user/repos # - org (NucleOS u otra): POST /api/v1/orgs/{org}/repos # # Regla dura: cualquier repo bajo el usuario `claudecode0` (case-insensitive # match con $GITEA_BOT_USER) DEBE ser público. La justificación es que el # usuario humano necesita poder ver lo que el bot crea — sino la cuenta # claudecode0 sería una caja negra. Si pasás --private a un repo bajo el bot, # el script aborta con exit 5. # # Para repos en orgs, --public o --private es REQUERIDO (forzar decisión # explícita; sin default sorpresa). # # Uso: # repo-create.sh [--owner ] [--description "..."] # [--public | --private] [--no-init] [--license ] # [--gitignore ] [--default-branch ] [--template] set -euo pipefail SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" QUERY="$SKILL_DIR/scripts/query.sh" ENV_FILE="$SKILL_DIR/.env" if [[ ! -f "$ENV_FILE" ]]; then echo "ERROR: $ENV_FILE no existe. Corré setup.sh primero." >&2 exit 1 fi set -a # shellcheck disable=SC1090 source "$ENV_FILE" set +a : "${GITEA_BOT_USER:?GITEA_BOT_USER no definido en .env. Re-correr setup.sh.}" name="" owner="" description="" visibility="" # "public" | "private" | "" auto_init=1 license="" gitignore="" default_branch="main" is_template=0 while [[ $# -gt 0 ]]; do case "$1" in --owner) owner="$2"; shift 2 ;; --description) description="$2"; shift 2 ;; --public) visibility="public"; shift ;; --private) visibility="private"; shift ;; --no-init) auto_init=0; shift ;; --license) license="$2"; shift 2 ;; --gitignore) gitignore="$2"; shift 2 ;; --default-branch) default_branch="$2"; shift 2 ;; --template) is_template=1; shift ;; -h|--help) cat < [opciones] Argumentos: Nombre del repo (requerido) Owner: --owner Default: el usuario del bot (\$GITEA_BOT_USER, "$GITEA_BOT_USER") Pasale "NucleOS" para crear en el org. Visibilidad: --public | --private Para orgs, uno es REQUERIDO (sin default). Para el usuario del bot, --private está BLOQUEADO (regla dura: todo lo del bot debe ser público para que el usuario humano pueda verlo). Contenido: --description "..." Descripción del repo --no-init No crear README inicial (default: auto-init=true) --license