From 33e3e4e0989e48581478fb693956b724e7c814fe Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Tue, 24 Feb 2026 21:15:17 -0800 Subject: [PATCH] Add mirror-create mise task for upstream mirrors Creates mirrors in the mirrors/ Forgejo org via API. Supports GitHub, Codeberg, and generic git URLs with auto-detection. Co-Authored-By: Claude Opus 4.6 --- mise-tasks/mirror-create | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100755 mise-tasks/mirror-create diff --git a/mise-tasks/mirror-create b/mise-tasks/mirror-create new file mode 100755 index 0000000..31af7c2 --- /dev/null +++ b/mise-tasks/mirror-create @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +#MISE description="Create a new upstream mirror in the mirrors/ Forgejo org" +#USAGE arg "" help="Upstream git URL to mirror (e.g. https://github.com/org/repo.git)" +#USAGE flag "--name " help="Repository name on forge (default: derived from URL)" +#USAGE flag "--description " help="Repository description" +#USAGE flag "--dry-run" help="Show what would be done without creating" +set -euo pipefail + +FORGE_API="https://forge.ops.eblu.me/api/v1" +ORG="mirrors" +OP_TOKEN_REF="op://blumeops/w3663ffnvkewbftncqxtcpeavy/api-token" + +url="${usage_url:?}" + +# Derive repo name from URL if not provided +if [[ -n "${usage_name:-}" ]]; then + repo_name="${usage_name}" +else + # Strip trailing .git and extract last path component + repo_name="$(basename "$url" .git)" +fi + +description="${usage_description:-}" + +# Detect service type from URL +service="git" +case "$url" in + *github.com*) service="github" ;; + *codeberg.org*) service="gitea" ;; + *forgejo.org*) service="gitea" ;; +esac + +echo "Mirror: $url" +echo "Forge repo: $ORG/$repo_name" +echo "Service: $service" +[[ -n "$description" ]] && echo "Description: $description" +echo + +if [[ "${usage_dry_run:-}" == "true" ]]; then + echo "[dry-run] Would create mirror at ${FORGE_API}/repos/migrate" + exit 0 +fi + +echo "Reading Forgejo API token from 1Password..." +token="$(op read "$OP_TOKEN_REF")" + +payload=$(cat <