diff --git a/.github/workflows/sync-to-gitea.yml b/.github/workflows/sync-to-gitea.yml index 99869eb..981de93 100644 --- a/.github/workflows/sync-to-gitea.yml +++ b/.github/workflows/sync-to-gitea.yml @@ -34,6 +34,11 @@ jobs: REPO_NAME="${{ github.event.repository.name }}" BRANCH_NAME="${{ github.ref_name }}" + API_USER_JSON="$(curl -fsS -H "Authorization: token ${GITEA_TOKEN}" "https://${GITEA_HOST}/api/v1/user" || true)" + RESOLVED_GITEA_USER="$(printf '%s' "$API_USER_JSON" | jq -r '.login // empty')" + if [ -n "$RESOLVED_GITEA_USER" ]; then + echo "Resolved token user: $RESOLVED_GITEA_USER" + fi CANDIDATE_OWNERS="${GITEA_OWNER:-} Admin ${{ github.repository_owner }}" TARGET_FULL_NAME="" TARGET_URL="" @@ -64,17 +69,29 @@ jobs: exit 1 fi - for auth_url in \ - "https://${GITEA_USERNAME}:${GITEA_TOKEN}@${GITEA_HOST}/${TARGET_FULL_NAME}.git" \ - "https://${GITEA_TOKEN}@${GITEA_HOST}/${TARGET_FULL_NAME}.git" \ - "https://oauth2:${GITEA_TOKEN}@${GITEA_HOST}/${TARGET_FULL_NAME}.git"; do + for auth_user in "$RESOLVED_GITEA_USER" "$GITEA_USERNAME" "oauth2"; do + [ -n "$auth_user" ] || continue + auth_url="https://${auth_user}:${GITEA_TOKEN}@${GITEA_HOST}/${TARGET_FULL_NAME}.git" if git ls-remote "$auth_url" >/dev/null 2>&1; then TARGET_URL="$auth_url" - echo "Using Gitea credential mode for ${TARGET_FULL_NAME}" + echo "Using Gitea credential mode for ${TARGET_FULL_NAME} as ${auth_user}" break fi done + if [ -z "$TARGET_URL" ]; then + for auth_url in \ + "https://${GITEA_USERNAME}:${GITEA_TOKEN}@${GITEA_HOST}/${TARGET_FULL_NAME}.git" \ + "https://${GITEA_TOKEN}@${GITEA_HOST}/${TARGET_FULL_NAME}.git" \ + "https://oauth2:${GITEA_TOKEN}@${GITEA_HOST}/${TARGET_FULL_NAME}.git"; do + if git ls-remote "$auth_url" >/dev/null 2>&1; then + TARGET_URL="$auth_url" + echo "Using Gitea credential mode for ${TARGET_FULL_NAME}" + break + fi + done + fi + if [ -z "$TARGET_URL" ]; then echo "Resolved repo path but authentication to Gitea git remote failed" exit 1