| name | gh-upload |
| description | ローカルファイルをGitHub PRまたはIssueにアップロードしてコメントに添付する。
gh CLIの認証情報のみを使用し、GitHub Releases経由でファイルをホスト。
トリガー: "ファイルをアップロード", "PRに添付", "動画をPRに貼って", "/gh-upload"
|
GitHub File Upload
ローカルファイルをGitHub PR/Issueにアップロードし、コメントとして投稿する。
Arguments
/gh-upload <file_path> <pr_or_issue_url_or_number> [comment_body]
file_path: アップロードするファイルのパス(必須)
pr_or_issue_url_or_number: PR番号、Issue番号、またはURL(必須)
comment_body: コメント本文(省略時はファイルリンクのみ)
例:
/gh-upload tmp/demo.mp4 279
/gh-upload tmp/demo.mp4 https://github.com/owner/repo/pull/279
/gh-upload tmp/screenshot.png 279 "修正後のスクリーンショットです"
仕組み
GitHub Releases のドラフトリリースをファイルホスティングとして使用する。
user-attachments 形式ではないため動画のインラインプレビューは出ないが、
ブラウザ認証不要で gh CLI の認証だけで完結する。
Prerequisites
gh CLI がインストール済みで認証済み (gh auth status)
- リポジトリへの push 権限(Releases 作成に必要)
Workflow
Step 1: 引数の解析
引数からファイルパス、対象(PR/Issue)、コメント本文を特定する。
- PR番号のみの場合: 現在のリポジトリの PR として扱う
- URLの場合: owner/repo/number を抽出
- ファイルの存在確認
Step 2: ファイルをアップロード
TAG="upload-$(date +%s)-$(basename FILE_PATH .${EXT})"
gh release create "$TAG" --draft --title "File upload" --notes ""
gh release upload "$TAG" "$FILE_PATH"
ASSET_URL=$(gh release view "$TAG" --json assets --jq '.assets[0].url')
Step 3: コメントを投稿
FILENAME=$(basename "$FILE_PATH")
FILESIZE=$(ls -lh "$FILE_PATH" | awk '{print $5}')
gh pr comment NUMBER --body "$BODY"
gh issue comment NUMBER --body "$BODY"
Step 4: 結果を報告
- アップロードしたファイル名、サイズ、URL
- 投稿したコメントのURL
- インラインプレビューが出ない旨の注意(動画ファイルの場合)
Notes