@asagiri-design/labels-config 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,200 @@
1
+ # npm Trusted Publishers (OIDC) セットアップガイド
2
+
3
+ このプロジェクトは、npm の **Trusted Publishers (OIDC)** 方式を使用して自動的にパッケージを公開しています。
4
+ 従来の長期有効なトークンではなく、GitHub Actions が実行時に一時的な認証情報を取得する方式です。
5
+
6
+ > **⚠️ 重要な注意事項**
7
+ >
8
+ > npm の Trusted Publisher 設定は **Web UI からのみ可能**です。
9
+ > 現時点では npm CLI やターミナルから設定することはできません。
10
+ > 以下の手順に従って、[npmjs.com](https://www.npmjs.com/) から設定してください。
11
+
12
+ ## 🔐 セキュリティ強化について
13
+
14
+ ### npm の新しいセキュリティポリシー(2024年〜)
15
+
16
+ - **長期トークンの有効期限短縮**: 書き込み可能なトークンはデフォルト7日、最大90日に制限
17
+ - **クラシックトークンの廃止**: 従来の広範な権限を持つトークンは段階的に廃止
18
+ - **TOTP から WebAuthn/パスキーへの移行**: より強力な2要素認証への移行を推奨
19
+ - **Trusted Publishers の推奨**: CI/CD での OIDC 認証方式を標準に
20
+
21
+ ### Trusted Publishers (OIDC) のメリット
22
+
23
+ ✅ **トークン管理不要**: 手動でのトークン生成・更新・ローテーションが不要
24
+ ✅ **セキュリティリスク最小化**: 長期有効なトークンが漏洩するリスクがゼロ
25
+ ✅ **自動 Provenance**: パッケージの出所証明が自動的に生成される
26
+ ✅ **最小権限の原則**: 各 CI/CD ジョブに必要最低限の権限のみ付与
27
+ ✅ **npm の推奨方式**: 今後の標準として推奨されている方式
28
+
29
+ ## 📋 必須:npm での Trusted Publisher 設定
30
+
31
+ このリポジトリのワークフローが正常に動作するためには、npm 側で Trusted Publisher の設定が必要です。
32
+
33
+ ### ステップ 1: npm にログイン
34
+
35
+ 1. [npmjs.com](https://www.npmjs.com/) にアクセス
36
+ 2. あなたのアカウントでログイン
37
+
38
+ ### ステップ 2: パッケージの設定画面へ移動
39
+
40
+ 1. パッケージ `@boxpistols/labels-config` のページへ移動
41
+ 2. "Settings" タブをクリック
42
+
43
+ ### ステップ 3: Publishing Access の設定
44
+
45
+ 1. 左サイドバーから **"Publishing Access"** を選択
46
+ 2. **"Add Trusted Publisher"** または **"Configure OIDC"** をクリック
47
+
48
+ ### ステップ 4: GitHub Actions の情報を入力
49
+
50
+ 以下の情報を入力します:
51
+
52
+ | 項目 | 値 |
53
+ |------|-----|
54
+ | **Provider** | GitHub |
55
+ | **Organization / Repository owner** | `your-org` |
56
+ | **Repository name** | `labels-config` |
57
+ | **Workflow name** | (以下の3つを個別に追加) |
58
+
59
+ **追加するワークフロー:**
60
+
61
+ 1. **自動リリース用**(main へのマージ時)
62
+ - Workflow: `auto-release.yml`
63
+ - Environment: (空欄のまま)
64
+ - Job: `auto-patch-release`
65
+
66
+ 2. **手動リリース用**
67
+ - Workflow: `manual-release.yml`
68
+ - Environment: (空欄のまま)
69
+ - Job: `manual-release`
70
+
71
+ 3. **GitHub Release トリガー用**
72
+ - Workflow: `publish.yml`
73
+ - Environment: (空欄のまま)
74
+ - Job: `publish`
75
+
76
+ ### ステップ 5: 設定の保存
77
+
78
+ 各ワークフローを追加後、設定を保存します。
79
+
80
+ ## 🚀 動作確認
81
+
82
+ ### main ブランチへのマージで自動公開
83
+
84
+ ```bash
85
+ # feature ブランチで作業
86
+ git checkout -b feature/new-feature
87
+ # コードを変更
88
+ git add .
89
+ git commit -m "feat: add new feature"
90
+ git push origin feature/new-feature
91
+
92
+ # PR を作成してマージ
93
+ # → main へのマージ後、自動的にパッチバージョンがリリースされ npm に公開される
94
+ ```
95
+
96
+ ### 手動でのバージョン指定リリース
97
+
98
+ GitHub の Actions タブから "Manual Release" ワークフローを実行:
99
+
100
+ 1. リポジトリの **Actions** タブを開く
101
+ 2. **"Manual Release"** を選択
102
+ 3. **"Run workflow"** をクリック
103
+ 4. バージョンタイプを選択(patch / minor / major / prerelease)
104
+ 5. **"Run workflow"** を実行
105
+
106
+ ## 🔍 トラブルシューティング
107
+
108
+ ### エラー: "403 Forbidden" または "OIDC authentication failed"
109
+
110
+ **原因**: npm で Trusted Publisher が正しく設定されていない
111
+
112
+ **解決方法**:
113
+ 1. npm の Publishing Access 設定を再確認
114
+ 2. Organization、Repository、Workflow、Job 名が正確に一致しているか確認
115
+ 3. 設定後、数分待ってから再試行
116
+
117
+ ### エラー: "Provenance generation failed"
118
+
119
+ **原因**: ワークフローの permissions 設定が不足している
120
+
121
+ **解決方法**:
122
+ - ワークフローファイルに以下が含まれているか確認:
123
+ ```yaml
124
+ permissions:
125
+ contents: write # または read(ジョブに応じて)
126
+ id-token: write # OIDC に必須
127
+ ```
128
+
129
+ ### リリースがスキップされる
130
+
131
+ **原因**: コミットメッセージに `[skip ci]` または `[no release]` が含まれている
132
+
133
+ **解決方法**:
134
+ - これらのキーワードを含まないコミットメッセージを使用
135
+ - または、手動リリースワークフローを使用
136
+
137
+ ## 📚 参考リンク
138
+
139
+ **プロジェクト内ドキュメント:**
140
+ - [npm Publish 更新フローガイド](./RELEASE_FLOW.md) - リリース方法の詳細
141
+
142
+ **外部リンク:**
143
+ - [npm: Publishing packages with provenance via GitHub Actions](https://docs.npmjs.com/generating-provenance-statements)
144
+ - [GitHub: Security hardening with OpenID Connect](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect)
145
+ - [npm Blog: Introducing npm package provenance](https://github.blog/2023-04-19-introducing-npm-package-provenance/)
146
+
147
+ ## 🔄 従来のトークン方式からの移行
148
+
149
+ もし以前 `NPM_TOKEN` シークレットを使用していた場合:
150
+
151
+ 1. ✅ Trusted Publisher の設定を完了
152
+ 2. ✅ ワークフローが正常に動作することを確認
153
+ 3. ✅ GitHub リポジトリの Settings → Secrets から `NPM_TOKEN` を削除(もう不要です)
154
+ 4. ✅ `package.json` の `release:*` スクリプトは廃止されました。今後のリリースは GitHub Actions ワークフロー経由で行います。
155
+
156
+ ### 廃止されたローカルスクリプト
157
+
158
+ 以下のスクリプトは削除されました(GitHub Actions で自動化されているため):
159
+
160
+ ```bash
161
+ # 🚫 これらのコマンドはもう使用しません
162
+ npm run release:patch # → GitHub Actions の auto-release が自動実行
163
+ npm run release:minor # → GitHub Actions の manual-release で実行
164
+ npm run release:major # → GitHub Actions の manual-release で実行
165
+ npm run release:beta # → GitHub Actions の manual-release で実行
166
+ ```
167
+
168
+ **新しいリリース方法:**
169
+ - **自動**: main へマージすると自動的にパッチバージョンがリリース
170
+ - **手動**: GitHub Actions UI から Manual Release ワークフローを実行
171
+
172
+ ## 💡 ベストプラクティス
173
+
174
+ ### コミットメッセージ
175
+
176
+ 自動リリースをスキップしたい場合は、コミットメッセージに `[skip ci]` または `[no release]` を含めます:
177
+
178
+ ```bash
179
+ git commit -m "docs: update README [skip ci]"
180
+ git commit -m "chore: update dependencies [no release]"
181
+ ```
182
+
183
+ ### バージョニング戦略
184
+
185
+ - **patch**: バグ修正、小さな改善(main へのマージで自動)
186
+ - **minor**: 新機能追加(手動リリース推奨)
187
+ - **major**: 破壊的変更(手動リリース推奨)
188
+ - **prerelease**: ベータ版リリース(手動リリース)
189
+
190
+ ### 2要素認証の強化
191
+
192
+ npm アカウントのセキュリティ強化のため、WebAuthn/パスキーの使用を推奨:
193
+
194
+ 1. npm アカウント設定で 2FA を開く
195
+ 2. パスキー(YubiKey、Touch ID、Face ID など)を追加
196
+ 3. 従来の TOTP(Google Authenticator など)からの移行を検討
197
+
198
+ ---
199
+
200
+ **設定完了後、このリポジトリは自動的に npm への公開が可能になります 🎉**
@@ -0,0 +1,457 @@
1
+ # Quick Start - 3ステップで始めるラベル管理
2
+
3
+ `@asagiri-design/labels-config` を使って、GitHubリポジトリのラベルを簡単に管理できます。
4
+
5
+ ---
6
+
7
+ ## 🚀 3ステップで完了
8
+
9
+ ### ステップ1: インストール(1回だけ)
10
+
11
+ ```bash
12
+ npm install -g @asagiri-design/labels-config
13
+ ```
14
+
15
+ ### ステップ2: GitHub認証(1回だけ)
16
+
17
+ ```bash
18
+ gh auth login
19
+ ```
20
+
21
+ ### ステップ3: ラベルを適用
22
+
23
+ ```bash
24
+ # あなたのリポジトリにラベルを適用
25
+ labels-config batch-sync --repos YourName/YourRepo --template prod-ja
26
+ ```
27
+
28
+ **これだけ!** 🎉
29
+
30
+ ---
31
+
32
+ ## 📋 具体例
33
+
34
+ ### 例1: 自分のリポジトリ1つに適用
35
+
36
+ ```bash
37
+ # Foo/Bar リポジトリに prod-ja テンプレートを適用
38
+ labels-config batch-sync --repos Foo/Bar --template prod-ja
39
+ ```
40
+
41
+ **実行結果:**
42
+ ```
43
+ 📋 Target repositories: 1
44
+
45
+ ✅ [1/1] Foo/Bar
46
+
47
+ 📊 Batch Sync Summary:
48
+ ✅ Successful: 1
49
+ ```
50
+
51
+ ---
52
+
53
+ ### 例2: 自分の全リポジトリに一括適用
54
+
55
+ ```bash
56
+ # あなたの全リポジトリに適用
57
+ labels-config batch-sync --user Foo --template prod-ja
58
+ ```
59
+
60
+ ---
61
+
62
+ ### 例3: 組織の全リポジトリに一括適用
63
+
64
+ ```bash
65
+ # Foo組織の全リポジトリに適用
66
+ labels-config batch-sync --org Foo --template prod-ja
67
+ ```
68
+
69
+ ---
70
+
71
+ ### 例4: 複数のリポジトリを指定
72
+
73
+ ```bash
74
+ # 複数のリポジトリに一括適用
75
+ labels-config batch-sync \
76
+ --repos Foo/Bar,Foo/Baz,Foo/Qux \
77
+ --template prod-ja
78
+ ```
79
+
80
+ ---
81
+
82
+ ## 🔍 ドライランで事前確認
83
+
84
+ 実際に変更する前に、何が変更されるか確認できます:
85
+
86
+ ```bash
87
+ # ドライラン(変更を実行しない)
88
+ labels-config batch-sync --repos Foo/Bar --template prod-ja --dry-run
89
+ ```
90
+
91
+ **出力例:**
92
+ ```
93
+ [DRY RUN] 📋 Target repositories: 1
94
+
95
+ 📊 Batch Sync Configuration
96
+ Labels: 14
97
+ Repositories: 1 specified
98
+ Parallel: 3
99
+ Mode: append
100
+
101
+ ✅ [1/1] Foo/Bar
102
+
103
+ 📊 Batch Sync Summary:
104
+ ✅ Successful: 1
105
+ ```
106
+
107
+ 問題なければ `--dry-run` を外して本番実行してください。
108
+
109
+ ---
110
+
111
+ ## 🎨 利用可能なテンプレート
112
+
113
+ | テンプレート名 | 説明 | ラベル数 |
114
+ |--------------|------|---------|
115
+ | `minimal` | 基本的な3ラベル (bug, feature, documentation) | 3 |
116
+ | `github` | GitHub標準ラベル | 9 |
117
+ | `prod-ja` | 本番プロジェクト用(日本語) | 14 |
118
+ | `prod-en` | 本番プロジェクト用(英語) | 14 |
119
+ | `react` | React開発用 | 12 |
120
+ | `vue` | Vue.js開発用 | 12 |
121
+ | `frontend` | フロントエンド開発用 | 15 |
122
+ | `agile` | アジャイル/スクラム用 | 18 |
123
+
124
+ ### テンプレートの内容を確認
125
+
126
+ ```bash
127
+ # テンプレートからファイル生成
128
+ labels-config init prod-ja --file labels.json
129
+
130
+ # ファイルを確認
131
+ cat labels.json
132
+ ```
133
+
134
+ ---
135
+
136
+ ## 🎯 よくある使い方
137
+
138
+ ### パターン1: 新しいリポジトリを作ったらすぐ実行
139
+
140
+ ```bash
141
+ # 1. 新しいリポジトリを作成
142
+ gh repo create Foo/NewProject --public
143
+
144
+ # 2. ラベルを適用
145
+ labels-config batch-sync --repos Foo/NewProject --template prod-ja
146
+ ```
147
+
148
+ ---
149
+
150
+ ### パターン2: 既存リポジトリのラベルを統一
151
+
152
+ ```bash
153
+ # 組織の全リポジトリのラベルを統一
154
+ labels-config batch-sync --org Foo --template prod-ja
155
+ ```
156
+
157
+ ---
158
+
159
+ ### パターン3: TypeScriptプロジェクトだけに適用
160
+
161
+ ```bash
162
+ # TypeScriptプロジェクトのみフィルタリング
163
+ labels-config batch-sync \
164
+ --org Foo \
165
+ --template react \
166
+ --filter-lang TypeScript
167
+ ```
168
+
169
+ ---
170
+
171
+ ### パターン4: 公開リポジトリのみに適用
172
+
173
+ ```bash
174
+ # 公開リポジトリのみに適用
175
+ labels-config batch-sync \
176
+ --user Foo \
177
+ --template prod-ja \
178
+ --filter-vis public
179
+ ```
180
+
181
+ ---
182
+
183
+ ## 🔄 2つのモード
184
+
185
+ ### Appendモード(デフォルト)
186
+
187
+ 既存のラベルを保持したまま、新しいラベルを追加・更新します。
188
+
189
+ ```bash
190
+ labels-config batch-sync --repos Foo/Bar --template prod-ja
191
+ ```
192
+
193
+ **動作:**
194
+ - ✅ 新しいラベルを追加
195
+ - ✅ 既存のラベルを更新
196
+ - ✅ 設定にないラベルは保持
197
+
198
+ ---
199
+
200
+ ### Replaceモード
201
+
202
+ 既存のラベルを完全に置き換えます。
203
+
204
+ ```bash
205
+ labels-config batch-sync --repos Foo/Bar --template prod-ja --delete-extra
206
+ ```
207
+
208
+ **動作:**
209
+ - ✅ 新しいラベルを追加
210
+ - ✅ 既存のラベルを更新
211
+ - ❌ 設定にないラベルを削除
212
+
213
+ ---
214
+
215
+ ## ⚙️ オプション一覧
216
+
217
+ ### ターゲット指定(いずれか必須)
218
+
219
+ | オプション | 説明 | 例 |
220
+ |-----------|------|-----|
221
+ | `--repos <list>` | リポジトリリスト(カンマ区切り) | `--repos Foo/Bar,Foo/Baz` |
222
+ | `--user <name>` | ユーザーの全リポジトリ | `--user Foo` |
223
+ | `--org <name>` | 組織の全リポジトリ | `--org Foo` |
224
+
225
+ ### ラベル指定(いずれか必須)
226
+
227
+ | オプション | 説明 | 例 |
228
+ |-----------|------|-----|
229
+ | `--template <name>` | テンプレート名 | `--template prod-ja` |
230
+ | `--file <path>` | カスタムラベルファイル | `--file ./labels.json` |
231
+
232
+ ### フィルタリング(オプション)
233
+
234
+ | オプション | 説明 | 例 |
235
+ |-----------|------|-----|
236
+ | `--filter-lang <lang>` | プログラミング言語でフィルタ | `--filter-lang TypeScript` |
237
+ | `--filter-vis <vis>` | 可視性でフィルタ (public/private/all) | `--filter-vis public` |
238
+
239
+ ### その他(オプション)
240
+
241
+ | オプション | 説明 | 例 |
242
+ |-----------|------|-----|
243
+ | `--dry-run` | ドライラン(実行しない) | `--dry-run` |
244
+ | `--delete-extra` | Replaceモード(設定外を削除) | `--delete-extra` |
245
+ | `--parallel <num>` | 並列実行数(デフォルト: 3) | `--parallel 5` |
246
+
247
+ ---
248
+
249
+ ## 🔐 必要な権限
250
+
251
+ ### 1. GitHub CLI の認証
252
+
253
+ ```bash
254
+ gh auth login
255
+ ```
256
+
257
+ 以下のスコープが必要です:
258
+ - `repo` (リポジトリへのアクセス)
259
+
260
+ ### 2. リポジトリへのアクセス権限
261
+
262
+ 対象リポジトリへの **管理者権限** または **書き込み権限** が必要です。
263
+
264
+ **確認方法:**
265
+ ```bash
266
+ # リポジトリのアクセス権限を確認
267
+ gh repo view Foo/Bar --json permissions
268
+ ```
269
+
270
+ ---
271
+
272
+ ## 📚 次のステップ
273
+
274
+ ### カスタムラベルを作成
275
+
276
+ ```bash
277
+ # 1. テンプレートからファイル生成
278
+ labels-config init prod-ja --file my-labels.json
279
+
280
+ # 2. ファイルを編集
281
+ vim my-labels.json
282
+
283
+ # 3. 適用
284
+ labels-config batch-sync --repos Foo/Bar --file my-labels.json
285
+ ```
286
+
287
+ ### 複雑な設定を使う
288
+
289
+ 複数の条件で異なるテンプレートを適用する場合は、設定ファイルを使用:
290
+
291
+ ```bash
292
+ # 設定ファイルを作成
293
+ cat > batch-config.json << EOF
294
+ {
295
+ "version": "1.0.0",
296
+ "targets": [
297
+ {
298
+ "organization": "Foo",
299
+ "filter": { "language": "TypeScript" },
300
+ "template": "react"
301
+ },
302
+ {
303
+ "repositories": ["Foo/special-project"],
304
+ "file": "./special-labels.json"
305
+ }
306
+ ]
307
+ }
308
+ EOF
309
+
310
+ # 設定ファイルで実行
311
+ labels-config batch-config batch-config.json
312
+ ```
313
+
314
+ 詳細は [BATCH_SYNC.md](./BATCH_SYNC.md) を参照してください。
315
+
316
+ ---
317
+
318
+ ## ❓ トラブルシューティング
319
+
320
+ ### エラー: `command not found: labels-config`
321
+
322
+ **原因:** パッケージがインストールされていない
323
+
324
+ **解決方法:**
325
+ ```bash
326
+ npm install -g @asagiri-design/labels-config
327
+ ```
328
+
329
+ ---
330
+
331
+ ### エラー: `gh: command not found`
332
+
333
+ **原因:** GitHub CLI がインストールされていない
334
+
335
+ **解決方法:**
336
+ ```bash
337
+ # macOS
338
+ brew install gh
339
+
340
+ # Windows
341
+ winget install --id GitHub.cli
342
+
343
+ # Linux
344
+ # https://github.com/cli/cli#installation
345
+ ```
346
+
347
+ ---
348
+
349
+ ### エラー: `Permission denied`
350
+
351
+ **原因:** リポジトリへのアクセス権限がない
352
+
353
+ **解決方法:**
354
+ 1. リポジトリの設定で自分の権限を確認
355
+ 2. `gh auth status` で認証状態を確認
356
+ 3. `gh auth refresh` で認証を更新
357
+
358
+ ---
359
+
360
+ ### エラー: `API rate limit exceeded`
361
+
362
+ **原因:** GitHub APIのレート制限に達した
363
+
364
+ **解決方法:**
365
+ ```bash
366
+ # 並列数を減らす
367
+ labels-config batch-sync --user Foo --template prod-ja --parallel 1
368
+
369
+ # または時間を置いて再実行
370
+ ```
371
+
372
+ ---
373
+
374
+ ## 🆘 ヘルプ
375
+
376
+ ```bash
377
+ # ヘルプを表示
378
+ labels-config help
379
+
380
+ # コマンドの使い方を確認
381
+ labels-config batch-sync --help
382
+ ```
383
+
384
+ ---
385
+
386
+ ## 📖 関連ドキュメント
387
+
388
+ - [Getting Started](./GETTING_STARTED.md) - 詳細な使い方
389
+ - [Batch Sync](./BATCH_SYNC.md) - バッチ同期の詳細
390
+ - [API Documentation](./API.md) - プログラマティックな使い方
391
+ - [GitHub Repository](https://github.com/your-org/labels-config) - ソースコード
392
+
393
+ ---
394
+
395
+ ## 💡 Tips
396
+
397
+ ### Tip 1: エイリアスを作成
398
+
399
+ ```bash
400
+ # .bashrc または .zshrc に追加
401
+ alias label-sync='labels-config batch-sync'
402
+
403
+ # 使用例
404
+ label-sync --repos Foo/Bar --template prod-ja
405
+ ```
406
+
407
+ ### Tip 2: プロジェクトごとの設定ファイル
408
+
409
+ ```bash
410
+ # プロジェクトディレクトリに設定ファイルを作成
411
+ cat > .labelrc.json << EOF
412
+ {
413
+ "version": "1.0.0",
414
+ "targets": [
415
+ {
416
+ "repositories": ["$(gh repo view --json nameWithOwner -q .nameWithOwner)"],
417
+ "template": "prod-ja"
418
+ }
419
+ ]
420
+ }
421
+ EOF
422
+
423
+ # いつでも簡単に実行
424
+ labels-config batch-config .labelrc.json
425
+ ```
426
+
427
+ ### Tip 3: GitHub Actionsで自動化
428
+
429
+ 新しいリポジトリ作成時に自動でラベルを適用:
430
+
431
+ ```yaml
432
+ # .github/workflows/auto-label.yml
433
+ name: Auto Apply Labels
434
+ on:
435
+ repository_dispatch:
436
+ types: [repository-created]
437
+
438
+ jobs:
439
+ apply-labels:
440
+ runs-on: ubuntu-latest
441
+ steps:
442
+ - uses: actions/setup-node@v4
443
+ - run: npm install -g @asagiri-design/labels-config
444
+ - run: labels-config batch-sync \
445
+ --repos ${{ github.repository }} \
446
+ --template prod-ja
447
+ env:
448
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
449
+ ```
450
+
451
+ ---
452
+
453
+ **さあ、始めましょう!** 🚀
454
+
455
+ ```bash
456
+ labels-config batch-sync --repos YourName/YourRepo --template prod-ja
457
+ ```