#!/bin/sh set -eu readonly BASE_URL="${BASE_URL:-https://codeberg.org/api/v1/users/}" readonly LIMIT=30 get_clone_urls() { user=$1 page=1 base_url="${BASE_URL}${user}/repos?limit=${LIMIT}" while :; do result="$(curl --silent "${base_url}&page=$page" | jq -r ".[].clone_url")" [ -z "$result" ] && break echo "$result" lines="$(echo "$result" | wc -l)" [ "$lines" -lt "$LIMIT" ] && break page=$((page + 1)) done | sort } clone_repos() { workdir=$1 if [ ! -d "$workdir" ]; then mkdir -p "$workdir"; fi while read -r url; do repo_name="$(basename "$url" ".git")" if ! git clone --branch main --single-branch --depth 1 "$url" "${workdir}/${repo_name}"; then git clone --branch master --single-branch --depth 1 "$url" "${workdir}/${repo_name}" fi done } get_branch() { branch="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo main)" if [ "$branch" = "HEAD" ]; then # Detached HEAD: assume main as default branch name; adjust if different branch="main" fi echo "$branch" } add_and_push() { file="$1" msg="$2" git_push_url="$3" branch="$(get_branch)" git add "$file" git config user.email "${GIT_EMAIL:-ci@example.com}" git config user.name "${GIT_NAME:-CI Bot}" git commit --no-gpg-sign -m "$msg" if [ -n "${git_push_url:-}" ]; then git remote set-url origin "$git_push_url" fi git push origin "HEAD:${branch}" }