mcpField
G
gitcode-pr

gitcode-pr

github.com/openharmonyinsight開発3590 回インストール11 週間前に更新
リポジトリ

gitcode-pr について

OpenHarmonyリポジトリ向けのGitCode PRワークフロースキルです。上流とフォークのリモートを判別し、issueとPRの手続きを進めます。操作にはGitCode MCPツールが必要です。

主な機能

  1. 01上流とフォークのリモートを判別
  2. 02リポジトリ状態と既存PRを確認
  3. 03テンプレートに基づいてissueを作成
  4. 04変更をプッシュし関連PRを作成
  5. 05リモート設定の曖昧さに対応

活用シーン

  1. 01OpenHarmony上流リポジトリへの変更提出
  2. 02PR作成前の既存リクエスト確認
  3. 03リポジトリのテンプレートによるissueとPR作成
  4. 04複数リモートのリポジトリでプッシュ先を選択

MCP 対応

このスキルにはGitCode MCPが必要で、利用できない場合は警告して終了します。GitCodeツールを使ってissueとPRの確認、作成、更新を行います。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/openharmonyinsight/openharmony-skills --skill gitcode-pr

インストール後、Claude Code で/gitcode-prを入力して読み込まれたか確認します。

同梱ファイルreferences/issue_template.md

詳細

OpenHarmony 向け GitCode PR ワークフロー

リモートのインテリジェントな検出と Issue と PR の関連付けにより、OpenHarmony リポジトリへの GitCode PR 提出を一通り処理します。gitcode mcp を使用してください。gitcode mcp がない場合はユーザーに警告し、スキルを直ちに終了してください。

インテリジェントなリモート検出

識別アルゴリズム

リモート名を決めつけないでください。次のアルゴリズムを使って upstream と fork を識別します。

# Step 1: List all remotes
git remote -v

# Step 2: Parse each remote
for remote in $(git remote); do
  url=$(git remote get-url $remote)
  
  # Parse owner from URL
  # Format: https://gitcode.com/<owner>/<repo> or https://gitcode.com/<owner>/<repo>.git
  if [[ "$url" =~ https://gitcode\.com/([^/]+)/(.+) ]]; then
    owner="${BASH_REMATCH[1]}"
    repo=$(echo "${BASH_REMATCH[2]}" | sed 's/\.git$//')
    
    # Determine type
    if [ "$owner" = "openharmony" ]; then
      echo "$remote: UPSTREAM ($owner/$repo)"
    else
      echo "$remote: FORK ($owner/$repo)"
    fi
  fi
done
リモートの分類
所有者種類用途
openharmonyUPSTREAMPR テンプレートの取得先、PR のベース、Issue の作成先
その他のユーザー名FORKプッシュ先、PR のヘッドソース
判定表
Upstream リモートFork リモートアクション
見つかった見つかった両方を使用します。upstream で Issue/PR を作成し、fork にプッシュします
見つかったなしユーザーに確認します。「upstream は見つかりましたが、fork がありません。先に fork する必要がありますか?」
なし見つかったfork をプッシュ先と PR の対象の両方として使用します(まれなケース)
なし複数(openharmony なし)ユーザーに選択を求めます。「どのリモートを使用しますか?」
なし1 つ(openharmony なし)fork として使用し、「upstream(openharmony)リモートが見つかりません」と警告します
ユーザーへの確認

リモートが曖昧な場合は、ユーザーに確認します。

I found these GitCode remotes:

- **remote_name**: owner/repo (UPSTREAM/FORK)

Which remote should I use for:
- Pushing changes?
- Creating the PR?

Please specify the remote name, or press Enter to use [default].

ワークフロー

ユーザーから PR の提出を依頼された場合は、次のワークフローに従ってください。

1. 現在の状態を確認する

git のステータスとブランチを確認します。

git status
git branch --show-current
git remote -v

次を特定します。

  • 現在のブランチ名
  • 上記のアルゴリズムを使って upstream と fork のリモートを識別する
2. PR が存在するか確認する

gitcode_list_pull_requests を使って、既存の PR を確認します。

# Get upstream owner/repo (parse from upstream remote URL)
UPSTREAM_REMOTE=$(detect_upstream_remote)
UPSTREAM_URL=$(git remote get-url $UPSTREAM_REMOTE)
# Parse: openharmony/security_code_signature from URL

# List PRs for upstream repo
gitcode_list_pull_requests --owner $UPSTREAM_OWNER --repo $UPSTREAM_REPO

# Search for PR with matching branch name and owner name

PR が存在する場合:fork にのみプッシュし、ユーザーに知らせます。

git push -u $FORK_REMOTE <branch-name>

PR が存在しない場合:Issue と PR を作成するため、ステップ 4~6 に進みます。

3. Issue を作成する

Issue テンプレートを読み込み、Issue を作成します。

  1. Issue テンプレートを読み取ります:references/issue_template.md
  2. コンテキスト(コミットメッセージ、変更されたファイルなど)に基づいて、テンプレートの項目を記入します
  3. upstream の所有者/リポジトリを指定して gitcode_create_issue を使用します

注:コミットメッセージと git diff を使って、Issue の説明を自動生成してください。

4. Fork にプッシュする

検出された fork リモートにプッシュします。

git push -u $FORK_REMOTE <branch-name>
5. Fork から Upstream に PR を作成する

upstream リポジトリから PR テンプレートを読み込み、Issue に関連付けて PR を作成します。

  1. upstream の PR テンプレートを取得する:

    # Try local copy first
    if [ -f .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md ]; then
      cat .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
    else
      # Fetch from upstream
      git fetch $UPSTREAM_REMOTE master
      git show $UPSTREAM_REMOTE/master:.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
    fi
    
  2. テンプレートに記入する: テンプレートの指示に従ってください。

  3. gitcode_create_pull_request を使って PR を作成します。

    重要:リポジトリ間の PR では、head パラメーターの形式が非常に重要です。

    • 正確に <fork-owner>:<branch-name> の形式にする必要があります(余分なプレフィックスは付けません)。
    • GitCode API は、fork 間の PR でこの形式を厳密に検証します。

    パラメーター:

    • owner:upstream の所有者(例:openharmony)
    • repo:upstream のリポジトリ(例:security_code_signature)
    • title:コミットメッセージの形式に従います
    • head:<fork-owner>:<branch-name>(fork リモートの解析結果)
    • base:upstream の対象ブランチ(通常は master または main)
    • body:Issue への参照を含むテンプレートの内容

例:

# After detection
UPSTREAM_OWNER="openharmony"
UPSTREAM_REPO="security_code_signature"
FORK_OWNER="someone"
FORK_REMOTE="fork"

gitcode_create_pull_request \
  --owner $UPSTREAM_OWNER \
  --repo $UPSTREAM_REPO \
  --title "fix(code_signature): add null check for buffer pointer" \
  --head "$FORK_OWNER:$BRANCH_NAME" \
  --base "master" \
  --body "$(cat .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md | \
    sed 's/^### 关联的issue:$/### 关联的issue:\n#$ISSUE_NUMBER/')"

テンプレート

Upstream の PR テンプレート

upstream リポジトリの .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md にあります。

ローカルの Issue テンプレート

標準的な Issue の形式については、references/issue_template.md を参照してください。

主なセクション:

  • 問題の説明:どのような問題または機能リクエストですか?
  • 再現手順:バグ報告の場合(該当する場合)
  • 期待される動作:どう動作するべきですか?
  • 実際の動作:実際にはどう動作しますか?
  • 環境情報:関連する環境の詳細

リモート URL の解析

リモート URL から所有者とリポジトリを解析します。

# Function to parse GitCode URL
parse_gitcode_url() {
  local url="$1"
  
  # Remove .git suffix if present
  url=$(echo "$url" | sed 's/\.git$//')
  
  # Extract owner and repo
  if [[ "$url" =~ https://gitcode\.com/([^/]+)/(.+) ]]; then
    echo "${BASH_REMATCH[1]}|${BASH_REMATCH[2]}"
  fi
}

# Usage
result=$(parse_gitcode_url "https://gitcode.com/openharmony/security_code_signature")
owner="${result%%|*}"
repo="${result##*|}"
# owner=openharmony, repo=security_code_signature

PR テンプレートでの Issue の参照

.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md に Issue への参照を記入します。

### 关联的issue:
#123

PR がマージされると、Issue #123 は自動的にクローズされます。

GitCode MCP ツール

GitCode の操作には、次のツールを使用します。

  • gitcode_list_pull_requests - 既存の PR を確認します(upstream の owner/repo を使用)
  • gitcode_get_pull_request - PR の詳細を取得します
  • gitcode_create_pull_request - 新しい PR を作成します(head はフォークを指します)
  • gitcode_update_pull_request - 既存の PR を更新します
  • gitcode_create_issue - 新しい issue を作成します(upstream の owner/repo を使用)
  • gitcode_get_issue - issue の詳細を取得します

エラー処理

  • 認証エラー:GitCode トークンが設定されているか確認します
  • フォークにブランチが見つからない:PR を作成する前にフォークへプッシュします
  • PR がすでに存在する:ユーザーに知らせてリンクを提示し、重複して作成しないでください
  • upstream リモートがない:upstream リモート(owner=openharmony)の設定をユーザーに依頼します
  • フォークのリモートがない:プッシュ先のリモートをユーザーに尋ねるか、先にフォークが必要か確認します
  • openharmony 以外のリモートが複数ある:どのリモートがフォークかユーザーに選んでもらいます
  • PR テンプレートが見つからない:upstream に .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md があるか確認します
  • Owner/repo の解析エラー:リモート URL の形式を検証します

判断フロー

User requests PR
  ↓
Check git status
  ↓
Changes uncommitted? → Yes → Commit changes
  ↓ No
List and parse remotes
  ↓
Detect upstream (owner=openharmony) and fork
  ↓
┌─────────────────────────────────────┐
│ Remote detection result:        │
│ - Upstream found?             │
│ - Fork found?                 │
└─────────────────────────────────────┘
  ↓
┌─────────────────────────────────────┐
│ Need user input?               │
│ - No fork?                   │
│ - Ambiguous remotes?           │
└─────────────────────────────────────┘
  ↓ Yes → Ask user
  ↓ No
Push to fork
  ↓
List PRs (upstream repo)
  ↓
PR exists for branch? → Yes → Inform user (PR already exists)
  ↓ No
Create issue (upstream repo)
  ↓
Get PR template from upstream (.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md)
  ↓
Create PR (head: fork-owner:branch, base: upstream-branch)
  ↓
Done

コンテキストの収集

issue または PR を作成するときは、次の情報を収集します。

  • git log -1 - 最後のコミットメッセージ
  • git diff HEAD~1 - 変更されたファイルと差分
  • ブランチ名 - 機能のコンテキスト
  • ユーザー入力 - 提供された追加の説明
  • git remote -v - すべてのリモートとその URL
  • リモートの解析 - upstream の owner/repo とフォークの owner/repo

コメント