📜 setup-repository-health-files.sh
指定 Repository に対して、Community Health Files を空ファイルとして一括登録するスクリプトです。 作業ブランチを作成し、Contents API でファイルを登録した後、デフォルトブランチへの PR を作成します。 既にファイルが存在する場合はスキップします(上書き禁止)。
(ここをクリック)目次
🔧 環境変数
| 環境変数 | 説明 | 必須 |
|---|---|---|
GH_TOKEN |
GitHub PAT(repo Scope が必要) |
✅ |
TARGET_REPO |
対象 Repository(owner/repo 形式) |
✅ |
📋 対象ファイル
以下の Community Health Files を空ファイルとして登録します。
対象ファイルは scripts/config/repo-health-file-definitions.json で定義されており、ユーザーがスクリプトを直接編集せずにカスタマイズできます。
| ファイル | パス | 説明 |
|---|---|---|
CODE_OF_CONDUCT.md |
.github/CODE_OF_CONDUCT.md |
行動規範 |
CONTRIBUTING.md |
.github/CONTRIBUTING.md |
コントリビューションガイド |
GOVERNANCE.md |
.github/GOVERNANCE.md |
ガバナンスポリシー |
SECURITY.md |
.github/SECURITY.md |
セキュリティポリシー |
SUPPORT.md |
.github/SUPPORT.md |
サポート情報 |
PULL_REQUEST_TEMPLATE.md |
.github/PULL_REQUEST_TEMPLATE.md |
PR テンプレート |
| Issue テンプレート設定 | .github/ISSUE_TEMPLATE/config.yml |
Issue テンプレートの設定ファイル |
Note:
FUNDING.ymlは対象外です。
設定ファイルのカスタマイズ
scripts/config/repo-health-file-definitions.json を編集することで、登録対象のファイルを追加・削除できます。
[
{
"path": ".github/CODE_OF_CONDUCT.md",
"description": "行動規範"
}
]
| フィールド | 説明 | 必須 |
|---|---|---|
path |
Repository 内のファイルパス | ✅ |
description |
ファイルの説明 | — |
📊 処理フロー
flowchart TD
A["開始"] --> B["環境変数バリデーション"]
B --> C["gh / jq コマンド存在チェック"]
C --> D["デフォルトブランチ取得\n(repos API)"]
D --> E["デフォルトブランチの SHA 取得\n(git/ref API)"]
E --> F["対象ファイルの既存チェック\n(Contents API)"]
F --> G{"登録対象\nあり?"}
G -- "No" --> H["スキップサマリー出力\n(PR 未作成)"]
H --> I["完了"]
G -- "Yes" --> J["作業ブランチ作成\n(git/refs API)"]
J --> K["ファイルをループ処理"]
K --> L["Contents API で\n空ファイル作成"]
L --> M["結果を記録\n(作成 / 失敗)"]
M --> N{"次のファイル\nあり?"}
N -- "Yes" --> K
N -- "No" --> O{"作成ファイル\nあり?"}
O -- "Yes" --> P["gh pr create で\nPR 作成"]
O -- "No" --> Q["実行結果サマリー出力"]
P --> Q
Q --> I
📝 処理詳細
| ステップ | 処理内容 | 使用コマンド / API |
|---|---|---|
| 環境変数バリデーション | validate_target_repo_env で GH_TOKEN, TARGET_REPO を一括検証 |
common.sh |
| 設定ファイル読み込み | load_config_file で Health File 定義 JSON を読み込み |
common.sh |
| デフォルトブランチ取得 | get_default_branch_info でブランチ名と SHA を一括取得 |
common.sh → GET /repos/{owner}/{repo}, GET /repos/{owner}/{repo}/git/ref/heads/{branch} |
| 既存ファイルチェック | check_existing_repo_files で対象ファイルごとに Contents API で存在確認。存在すればスキップ |
common.sh → GET /repos/{owner}/{repo}/contents/{path} |
| ファイル登録 & PR 作成 | create_files_via_pr で作業ブランチ作成、空ファイル登録、PR 作成を一括実行 |
common.sh → POST /repos/{owner}/{repo}/git/refs, PUT /repos/{owner}/{repo}/contents/{path}, gh pr create |
| サマリー出力 | output_repo_files_summary で作成/スキップ/失敗の件数をコンソールと GITHUB_STEP_SUMMARY に出力 |
common.sh |
実行結果サマリーの出力形式
コンソール出力:
=========================================
完了サマリー
=========================================
Repository: owner/repo
作成: 5 件
スキップ: 2 件
失敗: 0 件
=========================================
GITHUB_STEP_SUMMARY 出力:
| 項目 | 件数 |
|---|---|
| 作成 | 5 |
| スキップ | 2 |
| 失敗 | 0 |
📚 API リファレンス
API / コマンド
| API / コマンド | 用途 | リファレンス |
|---|---|---|
GET /repos/{owner}/{repo} |
デフォルトブランチ名の取得 | Get a repository |
GET /repos/{owner}/{repo}/git/ref/heads/{branch} |
ブランチの SHA 取得 | Get a reference |
GET /repos/{owner}/{repo}/contents/{path} |
ファイル存在チェック | Get repository content |
POST /repos/{owner}/{repo}/git/refs |
作業ブランチの作成 | Create a reference |
PUT /repos/{owner}/{repo}/contents/{path} |
ファイルの作成 | Create or update file contents |
gh pr create |
PR の作成 | gh pr create |
PAT Scope 要件
| Scope | 用途 | 備考 |
|---|---|---|
repo |
リポジトリの読み取り、ブランチ作成、ファイル作成、PR 作成 | Classic PAT の場合。プライベート Repository 含む全 Repository へのアクセス |
Fine-grained PAT の場合は、対象 Repository に対する Contents と Pull requests の Read and write 権限が必要です。
API レート制限
| リソース | 上限 | 備考 |
|---|---|---|
| REST API (Core) | 5,000 リクエスト/時 | 認証済みユーザーの場合 |
対象ファイル 7 件に対して、既存チェック (7) + ブランチ作成 (1) + ファイル作成 (最大 7) + PR 作成 (1) = 最大 16 リクエストを消費します。 レート制限の影響はありません。