fix: use FORGE_API_BASE for /repos/migrate endpoint, build payload with jq
- FORGE_API is repo-scoped; /repos/migrate needs the global FORGE_API_BASE - Use jq -n --arg for safe JSON construction (no shell interpolation) - Update docs to reference FORGE_API_BASE Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
2465841b84
commit
b6f2d83a28
2 changed files with 19 additions and 17 deletions
|
|
@ -8,7 +8,7 @@ How to populate an empty Forgejo repo from an external source using
|
||||||
| Variable | Example | Purpose |
|
| Variable | Example | Purpose |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `FORGE_URL` | `http://forgejo:3000` | Forgejo instance base URL |
|
| `FORGE_URL` | `http://forgejo:3000` | Forgejo instance base URL |
|
||||||
| `FORGE_API` | `${FORGE_URL}/api/v1` | API base (set by `lib/env.sh`) |
|
| `FORGE_API_BASE` | `${FORGE_URL}/api/v1` | Global API base (set by `lib/env.sh`) |
|
||||||
| `FORGE_TOKEN` | (admin or org-owner token) | Must have `repo:create` scope |
|
| `FORGE_TOKEN` | (admin or org-owner token) | Must have `repo:create` scope |
|
||||||
|
|
||||||
The target org/user must already exist on the Forgejo instance.
|
The target org/user must already exist on the Forgejo instance.
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
# Usage: source lib/mirrors.sh; mirror_push
|
# Usage: source lib/mirrors.sh; mirror_push
|
||||||
# source lib/mirrors.sh; mirror_pull_register <clone_url> <owner> <repo_name> [interval]
|
# source lib/mirrors.sh; mirror_pull_register <clone_url> <owner> <repo_name> [interval]
|
||||||
# Requires: PROJECT_REPO_ROOT, PRIMARY_BRANCH, MIRROR_* vars from load-project.sh
|
# Requires: PROJECT_REPO_ROOT, PRIMARY_BRANCH, MIRROR_* vars from load-project.sh
|
||||||
# FORGE_API, FORGE_TOKEN for pull-mirror registration
|
# FORGE_API_BASE, FORGE_TOKEN for pull-mirror registration
|
||||||
|
|
||||||
# shellcheck disable=SC2154 # globals set by load-project.sh / calling script
|
# shellcheck disable=SC2154 # globals set by load-project.sh / calling script
|
||||||
|
|
||||||
|
|
@ -56,7 +56,7 @@ mirror_push() {
|
||||||
# interval — sync interval (default: "8h0m0s"; Forgejo duration format)
|
# interval — sync interval (default: "8h0m0s"; Forgejo duration format)
|
||||||
#
|
#
|
||||||
# Requires:
|
# Requires:
|
||||||
# FORGE_API, FORGE_TOKEN (from env.sh)
|
# FORGE_API_BASE, FORGE_TOKEN (from env.sh)
|
||||||
#
|
#
|
||||||
# Returns 0 on success, 1 on failure. Prints the new repo JSON to stdout.
|
# Returns 0 on success, 1 on failure. Prints the new repo JSON to stdout.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
@ -66,8 +66,8 @@ mirror_pull_register() {
|
||||||
local repo_name="$3"
|
local repo_name="$3"
|
||||||
local interval="${4:-8h0m0s}"
|
local interval="${4:-8h0m0s}"
|
||||||
|
|
||||||
if [ -z "${FORGE_API:-}" ] || [ -z "${FORGE_TOKEN:-}" ]; then
|
if [ -z "${FORGE_API_BASE:-}" ] || [ -z "${FORGE_TOKEN:-}" ]; then
|
||||||
echo "ERROR: FORGE_API and FORGE_TOKEN must be set" >&2
|
echo "ERROR: FORGE_API_BASE and FORGE_TOKEN must be set" >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -77,23 +77,25 @@ mirror_pull_register() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local payload
|
local payload
|
||||||
payload=$(cat <<ENDJSON
|
payload=$(jq -n \
|
||||||
{
|
--arg clone_addr "$clone_url" \
|
||||||
"clone_addr": "${clone_url}",
|
--arg repo_name "$repo_name" \
|
||||||
"repo_name": "${repo_name}",
|
--arg repo_owner "$owner" \
|
||||||
"repo_owner": "${owner}",
|
--arg interval "$interval" \
|
||||||
"mirror": true,
|
'{
|
||||||
"mirror_interval": "${interval}",
|
clone_addr: $clone_addr,
|
||||||
"service": "git"
|
repo_name: $repo_name,
|
||||||
}
|
repo_owner: $repo_owner,
|
||||||
ENDJSON
|
mirror: true,
|
||||||
)
|
mirror_interval: $interval,
|
||||||
|
service: "git"
|
||||||
|
}')
|
||||||
|
|
||||||
local http_code body
|
local http_code body
|
||||||
body=$(curl -s -w "\n%{http_code}" -X POST \
|
body=$(curl -s -w "\n%{http_code}" -X POST \
|
||||||
-H "Authorization: token ${FORGE_TOKEN}" \
|
-H "Authorization: token ${FORGE_TOKEN}" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
"${FORGE_API}/repos/migrate" \
|
"${FORGE_API_BASE}/repos/migrate" \
|
||||||
-d "$payload")
|
-d "$payload")
|
||||||
|
|
||||||
http_code=$(printf '%s' "$body" | tail -n1)
|
http_code=$(printf '%s' "$body" | tail -n1)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue