gitcode-pr について
OpenHarmonyリポジトリ向けのGitCode PRワークフロースキルです。上流とフォークのリモートを判別し、issueとPRの手続きを進めます。操作にはGitCode MCPツールが必要です。
主な機能
- 01上流とフォークのリモートを判別
- 02リポジトリ状態と既存PRを確認
- 03テンプレートに基づいてissueを作成
- 04変更をプッシュし関連PRを作成
- 05リモート設定の曖昧さに対応
活用シーン
- 01OpenHarmony上流リポジトリへの変更提出
- 02PR作成前の既存リクエスト確認
- 03リポジトリのテンプレートによるissueとPR作成
- 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
リモートの分類
| 所有者 | 種類 | 用途 |
|---|---|---|
openharmony | UPSTREAM | PR テンプレートの取得先、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 を作成します。
- Issue テンプレートを読み取ります:
references/issue_template.md - コンテキスト(コミットメッセージ、変更されたファイルなど)に基づいて、テンプレートの項目を記入します
- 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 を作成します。
-
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 -
テンプレートに記入する: テンプレートの指示に従ってください。
-
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