#!/usr/bin/env bash set -euo pipefail CONFIG_FILE="/opt/appfactory/config/appfactory.env" if [ ! -f "$CONFIG_FILE" ]; then echo "Missing config file: $CONFIG_FILE" exit 1 fi source "$CONFIG_FILE" if [ -z "${GITEA_URL:-}" ] || [ -z "${GITEA_ORG:-}" ] || [ -z "${GITEA_TOKEN:-}" ] || [ -z "${WEBHOOK_INTERNAL_URL:-}" ] || [ -z "${WEBHOOK_SECRET:-}" ]; then echo "Missing required config values." echo "Required: GITEA_URL, GITEA_ORG, GITEA_TOKEN, WEBHOOK_INTERNAL_URL, WEBHOOK_SECRET" exit 1 fi echo "Syncing Gitea webhooks" echo "Org: $GITEA_ORG" echo "URL: $WEBHOOK_INTERNAL_URL" echo "" repos_json="$(curl -sS \ "$GITEA_URL/api/v1/orgs/$GITEA_ORG/repos?limit=1000" \ -H "Authorization: token $GITEA_TOKEN")" repo_names="$(echo "$repos_json" | jq -r '.[].name')" if [ -z "$repo_names" ]; then echo "No repositories found." exit 0 fi for repo in $repo_names; do echo "Repository: $repo" hooks_json="$(curl -sS \ "$GITEA_URL/api/v1/repos/$GITEA_ORG/$repo/hooks" \ -H "Authorization: token $GITEA_TOKEN")" hook_id="$(echo "$hooks_json" | jq -r \ --arg url "$WEBHOOK_INTERNAL_URL" \ '.[] | select(.type == "gitea") | select(.config.url == $url) | .id' \ | head -n 1)" payload="$(jq -n \ --arg url "$WEBHOOK_INTERNAL_URL" \ --arg secret "$WEBHOOK_SECRET" \ '{ type: "gitea", active: true, events: ["push"], config: { url: $url, content_type: "json", secret: $secret } }')" if [ -n "$hook_id" ] && [ "$hook_id" != "null" ]; then echo " Updating hook ID: $hook_id" curl -sS -X PATCH \ "$GITEA_URL/api/v1/repos/$GITEA_ORG/$repo/hooks/$hook_id" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "$payload" >/dev/null else echo " Creating hook" curl -sS -X POST \ "$GITEA_URL/api/v1/repos/$GITEA_ORG/$repo/hooks" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "$payload" >/dev/null fi done echo "" echo "DONE"