import: contenido inicial de la skill gitea
This commit is contained in:
84
scripts/pr-list.sh
Normal file
84
scripts/pr-list.sh
Normal file
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env bash
|
||||
# gitea skill — listar PRs de un repo.
|
||||
#
|
||||
# Uso:
|
||||
# pr-list.sh <owner>/<repo> [--state open|closed|all] [--limit N]
|
||||
#
|
||||
# Si pasás solo <repo>, usa GITEA_DEFAULT_OWNER del .env (NucleOS).
|
||||
# Devuelve una tabla compacta. Para ver el JSON crudo, usá query.sh directamente.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
QUERY="$SKILL_DIR/scripts/query.sh"
|
||||
|
||||
state="open"
|
||||
limit=20
|
||||
repo_arg=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--state) state="$2"; shift 2 ;;
|
||||
--limit) limit="$2"; shift 2 ;;
|
||||
-h|--help)
|
||||
cat <<EOF
|
||||
Uso: pr-list.sh <owner>/<repo> [--state open|closed|all] [--limit N]
|
||||
|
||||
Ejemplos:
|
||||
pr-list.sh NucleOS/nucleo-infra
|
||||
pr-list.sh nucleo-infra --state closed --limit 5
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
-*) echo "ERROR: flag desconocida: $1" >&2; exit 2 ;;
|
||||
*) repo_arg="$1"; shift ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$repo_arg" ]]; then
|
||||
echo "ERROR: pasá <owner>/<repo> o solo <repo>." >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Resolver owner/repo
|
||||
if [[ "$repo_arg" == */* ]]; then
|
||||
owner="${repo_arg%%/*}"
|
||||
repo="${repo_arg##*/}"
|
||||
else
|
||||
set -a; source "$SKILL_DIR/.env"; set +a
|
||||
owner="${GITEA_DEFAULT_OWNER:?owner no especificado y GITEA_DEFAULT_OWNER vacío}"
|
||||
repo="$repo_arg"
|
||||
fi
|
||||
|
||||
resp="$("$QUERY" "/repos/${owner}/${repo}/pulls?state=${state}&limit=${limit}")"
|
||||
|
||||
# Detectar errores (objeto, no array)
|
||||
if [[ "${resp:0:1}" == "{" ]]; then
|
||||
echo "$resp" | PYTHONIOENCODING=utf-8 python -c "
|
||||
import json, sys
|
||||
d=json.load(sys.stdin)
|
||||
print('ERROR:', d.get('message') or d.get('error') or d, file=sys.stderr)
|
||||
" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$resp" | PYTHONIOENCODING=utf-8 python -c "
|
||||
import json, sys
|
||||
prs = json.load(sys.stdin)
|
||||
if not prs:
|
||||
print('(sin PRs en estado: $state)')
|
||||
sys.exit(0)
|
||||
print(f'{len(prs)} PR(s) en $owner/$repo (state=$state):')
|
||||
print()
|
||||
for pr in prs:
|
||||
n = pr.get('number')
|
||||
title = (pr.get('title') or '').replace('\n', ' ')
|
||||
if len(title) > 70: title = title[:67] + '...'
|
||||
state_label = 'merged' if pr.get('merged') else pr.get('state','?')
|
||||
head = (pr.get('head') or {}).get('ref','?')
|
||||
base = (pr.get('base') or {}).get('ref','?')
|
||||
user = (pr.get('user') or {}).get('login','?')
|
||||
updated = (pr.get('updated_at') or '')[:10]
|
||||
print(f' #{n:<4} [{state_label:<7}] {title}')
|
||||
print(f' {user} | {head} → {base} | updated {updated}')
|
||||
"
|
||||
Reference in New Issue
Block a user