feat(git-hangman-lab): add create-pr command
- Add create-pr script for creating pull requests via API - Auto-generate access token if not present - Integrate into git-ctrl dispatcher - Update SKILL.md with new command documentation
This commit is contained in:
@@ -43,6 +43,16 @@ Create a new git repository on git.hangman-lab.top.
|
|||||||
|
|
||||||
> **Note**: The repository will be created at `${AGENT_WORKSPACE}/${repo-name}` (default: `/root/.openclaw/workspace/workspace-mentor`)
|
> **Note**: The repository will be created at `${AGENT_WORKSPACE}/${repo-name}` (default: `/root/.openclaw/workspace/workspace-mentor`)
|
||||||
|
|
||||||
|
### Create Pull Request
|
||||||
|
|
||||||
|
Create a pull request on git.hangman-lab.top.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
{baseDir}/scripts/git-ctrl create-pr <repo-local-path> <head-branch> <base-branch> [pr-title] [pr-body]
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Note**: The access token will be automatically generated if not found.
|
||||||
|
|
||||||
### Link Keycloak Account
|
### Link Keycloak Account
|
||||||
|
|
||||||
Link Keycloak account with Gitea (for OAuth binding).
|
Link Keycloak account with Gitea (for OAuth binding).
|
||||||
|
|||||||
95
git-hangman-lab/scripts/create-pr
Executable file
95
git-hangman-lab/scripts/create-pr
Executable 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
|
||||||
@@ -11,6 +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 " create-pr Create a pull request"
|
||||||
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"
|
||||||
@@ -35,6 +36,9 @@ case "$subcommand" in
|
|||||||
create-repo)
|
create-repo)
|
||||||
"$SCRIPT_DIR/create-repo" "$@"
|
"$SCRIPT_DIR/create-repo" "$@"
|
||||||
;;
|
;;
|
||||||
|
create-pr)
|
||||||
|
"$SCRIPT_DIR/create-pr" "$@"
|
||||||
|
;;
|
||||||
generate-access-token)
|
generate-access-token)
|
||||||
"$SCRIPT_DIR/generate-access-token" "$@"
|
"$SCRIPT_DIR/generate-access-token" "$@"
|
||||||
;;
|
;;
|
||||||
|
|||||||
Reference in New Issue
Block a user