#!/bin/bash
set -euo pipefail
GIT_DIR="$(git rev-parse --git-dir 2>/dev/null || echo .)"
PUSHER="${GIT_AUTHOR_NAME:-${USER:-unknown}}"
PUSHER_EMAIL="${GIT_AUTHOR_EMAIL:-}"
timestamp() { date -u +"%Y-%m-%dT%H:%M:%SZ"; }
while read -r old new ref; do
if [[ "$ref" == refs/heads/* ]]; then
ref_type="branch"
ref_name="${ref#refs/heads/}"
elif [[ "$ref" == refs/tags/* ]]; then
ref_type="tag"
ref_name="${ref#refs/tags/}"
else
ref_type="other"
ref_name="$ref"
fi
if [[ "$new" =~ ^0+$ ]]; then
commit_sha=""
else
commit_sha="$new"
fi
repo_path="$(pwd)"
repo_name="$(basename "$repo_path" .git)"
org_name="$(basename "$(dirname "$repo_path")")"
pusher_ip="${SSH_CONNECTION%% *}" || pusher_ip=""
payload_args=(
"--repo" "$org_name/$repo_name"
"--ref" "$ref"
"--ref-type" "$ref_type"
"--ref-name" "$ref_name"
"--old" "$old"
"--new" "$new"
"--commit" "$commit_sha"
"--pusher" "$PUSHER"
"--pusher-email" "$PUSHER_EMAIL"
"--pusher-ip" "$pusher_ip"
"--git-dir" "$GIT_DIR"
"--timestamp" "$(timestamp)"
)
CI_HOST="https://gitfoss.dev"
AUTH_TOKEN="REPLACE_WITH_TOKEN"
ORG="${org_name:-org}"
repo_name="${repo_name%.git}"
REPO="${repo_name:-repo}"
json=$(
printf '%s\n' "${payload_args[@]}" |
awk 'NR%2{key=$0; getline; val=$0; sub(/^--/,"",key); printf "%s\0%s\0", key, val}' |
jq -Rn '
[inputs | split("\u0000")[]] as $a |
($a | length) as $n |
reduce range(0; $n/2 | floor) as $i ({}; . + { ($a[$i*2]) : $a[$i*2+1] })
'
)
curl -s -X POST "${CI_HOST}/${ORG}/${REPO}/pipelines/trigger" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-H "Content-Type: application/json" \
-d "$json"
done
exit 0