Files
fn_registry/bash/functions/infra/gitea_create_webhook.sh
T
egutierrez 6b8bcd0939 feat: funciones bash de deploy — rsync_deploy y gitea_create_webhook
rsync_deploy sincroniza directorio local a remoto via SSH con
exclusiones estándar (.git, node_modules, *.db, etc.).
gitea_create_webhook crea webhook de push en un repo Gitea para
auto-deploy en cada commit.
2026-04-12 17:29:56 +02:00

61 lines
1.6 KiB
Bash

#!/usr/bin/env bash
# gitea_create_webhook — Crea un webhook de push en un repositorio Gitea
set -euo pipefail
gitea_create_webhook() {
local owner="$1"
local repo="$2"
local target_url="$3"
local secret="${4:-}"
if [[ -z "$owner" || -z "$repo" || -z "$target_url" ]]; then
echo "usage: gitea_create_webhook <owner> <repo> <target_url> [secret]" >&2
return 1
fi
local gitea_url="${GITEA_URL:?GITEA_URL no seteada}"
local gitea_token="${GITEA_TOKEN:?GITEA_TOKEN no seteada}"
# Payload JSON para el webhook
local payload
payload=$(cat <<EOF
{
"type": "gitea",
"active": true,
"events": ["push"],
"config": {
"url": "$target_url",
"content_type": "json",
"secret": "$secret"
}
}
EOF
)
local response http_code body
response=$(curl -s -w "\n%{http_code}" \
-X POST \
-H "Authorization: token $gitea_token" \
-H "Content-Type: application/json" \
-d "$payload" \
"${gitea_url}/api/v1/repos/${owner}/${repo}/hooks")
http_code=$(echo "$response" | tail -1)
body=$(echo "$response" | sed '$d')
if [[ "$http_code" -ge 200 && "$http_code" -lt 300 ]]; then
# Extraer webhook ID del response
local webhook_id
webhook_id=$(echo "$body" | grep -oP '"id":\s*\K[0-9]+' | head -1)
printf '{"webhook_id":%s,"owner":"%s","repo":"%s","target_url":"%s"}\n' \
"$webhook_id" "$owner" "$repo" "$target_url"
else
echo "gitea_create_webhook: HTTP $http_code$body" >&2
return 1
fi
}
if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
gitea_create_webhook "$@"
fi