fix: use /pulls instead of /pulls/pinned #4

Merged
lyn merged 10 commits from fix/pr-list-endpoint into main 2026-04-01 17:09:04 +00:00
3 changed files with 99 additions and 2 deletions
Showing only changes of commit 2d1d77f57a - Show all commits

View File

@@ -52,6 +52,8 @@ Manage pull requests on git.hangman-lab.top.
{baseDir}/scripts/git-ctrl pr list <repo-local-path> {baseDir}/scripts/git-ctrl pr list <repo-local-path>
{baseDir}/scripts/git-ctrl pr commits <repo-local-path> <pr-index> {baseDir}/scripts/git-ctrl pr commits <repo-local-path> <pr-index>
{baseDir}/scripts/git-ctrl pr merge <repo-local-path> <pr-index> <do> [commit-id] [title] [message] {baseDir}/scripts/git-ctrl pr merge <repo-local-path> <pr-index> <do> [commit-id] [title] [message]
{baseDir}/scripts/git-ctrl pr show <repo-local-path> <pr-index>
```
``` ```
> **Note**: The access token will be automatically generated if not found. > **Note**: The access token will be automatically generated if not found.

View File

@@ -0,0 +1,95 @@
#!/usr/bin/env bash
set -euo pipefail
# Get the directory where this script is located
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
usage() {
echo "Usage: $0 <repo-local-path> <head-branch> <base-branch> [pr-title] [pr-body]"
echo ""
echo "Create a pull request on git.hangman-lab.top"
echo ""
echo "Arguments:"
echo " repo-local-path Local path to the git repository"
echo " head-branch Branch containing the changes"
echo " base-branch Branch to merge into (e.g., main)"
echo " pr-title Title of the pull request (optional, default: 'untitled pull request')"
echo " pr-body Body/description of the pull request (optional, default: '')"
exit 2
}
if [[ $# -lt 3 ]]; then
usage
fi
REPO_LOCAL_PATH="$1"
HEAD_BRANCH="$2"
BASE_BRANCH="$3"
PR_TITLE="${4:-untitled pull request}"
PR_BODY="${5:-}"
# Validate repo path
if [[ ! -d "$REPO_LOCAL_PATH/.git" ]]; then
echo "Error: Not a git repository: $REPO_LOCAL_PATH"
exit 1
fi
# Check if git-access-token exists, if not generate it
if ! secret-mgr list 2>/dev/null | grep -q "git-access-token"; then
echo "Access token not found, generating..."
"$SCRIPT_DIR/generate-access-token"
fi
# Get the access token
GIT_TOKEN="$(secret-mgr get-secret --key git-access-token)"
if [[ -z "$GIT_TOKEN" ]]; then
echo "Error: Failed to get git-access-token"
exit 1
fi
# Get remote URL from .git
REMOTE_URL="$(git -C "$REPO_LOCAL_PATH" remote get-url origin)"
# Match pattern: https://git.hangman-lab.top/${owner}/${repo-name}.git
if [[ "$REMOTE_URL" =~ https://git\.hangman-lab\.top/([^/]+)/([^/]+)\.git ]]; then
OWNER="${BASH_REMATCH[1]}"
REPO_NAME="${BASH_REMATCH[2]}"
else
echo "Error: Invalid remote URL format: $REMOTE_URL"
echo "Expected: https://git.hangman-lab.top/\${owner}/\${repo-name}.git"
exit 1
fi
echo "Creating PR: $OWNER/$REPO_NAME ($HEAD_BRANCH -> $BASE_BRANCH)"
# Create PR via API
RESPONSE=$(curl -s -X POST "https://git.hangman-lab.top/api/v1/repos/${OWNER}/${REPO_NAME}/pulls" \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H "Authorization: token ${GIT_TOKEN}" \
-d "$(jq -n \
--arg head "$HEAD_BRANCH" \
--arg base "$BASE_BRANCH" \
--arg title "$PR_TITLE" \
--arg body "$PR_BODY" \
'{head: $head, base: $base, title: $title, body: $body}')")
# Check if response contains an error
if echo "$RESPONSE" | jq -e '.message' >/dev/null 2>&1; then
ERROR_MSG=$(echo "$RESPONSE" | jq -r '.message')
echo "Error: $ERROR_MSG"
exit 1
fi
# Extract PR URL from response
PR_URL=$(echo "$RESPONSE" | jq -r '.html_url // empty')
if [[ -n "$PR_URL" ]]; then
echo "Pull request created successfully!"
echo "URL: $PR_URL"
else
echo "Error: Failed to create pull request"
echo "Response: $RESPONSE"
exit 1
fi

View File

@@ -11,7 +11,7 @@ if [[ $# -eq 0 ]]; then
echo " check-git-cred Verify git credentials" echo " check-git-cred Verify git credentials"
echo " create-git-account Create a new git account" echo " create-git-account Create a new git account"
echo " create-repo Create a new repository" echo " create-repo Create a new repository"
echo " pr Pull request operations (create/list/commits/merge)" echo " pr Pull request operations (create/list/commits/merge/show)"
echo " generate-access-token Generate access token for current user" echo " generate-access-token Generate access token for current user"
echo " link-keycloak Link Keycloak account with Gitea" echo " link-keycloak Link Keycloak account with Gitea"
echo " repo-add-collaborators Add collaborator to repository" echo " repo-add-collaborators Add collaborator to repository"