@asagiri-design/labels-config 0.2.2

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 BoxPistols
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.ja.md ADDED
@@ -0,0 +1,387 @@
1
+ # @boxpistols/labels-config
2
+
3
+ ターミナル完結型 GitHub ラベル管理 - シンプル、高速、トークン不要
4
+
5
+ gh CLI を使ってターミナルから GitHub ラベルを管理。トークンの手動設定は不要です。
6
+
7
+ ---
8
+
9
+ ## クイックスタート
10
+
11
+ ```bash
12
+ # 1. gh CLI をインストールして認証(初回のみ)
13
+ brew install gh # macOS
14
+ gh auth login
15
+
16
+ # 2. labels-config をインストール
17
+ npm install -g @boxpistols/labels-config
18
+
19
+ # 3. テンプレートから初期化
20
+ labels-config init minimal --file labels.json
21
+
22
+ # 4. リポジトリに同期
23
+ labels-config sync --owner your-name --repo your-repo --file labels.json
24
+ ```
25
+
26
+ 完了!ラベルが同期されました。
27
+
28
+ ---
29
+
30
+ ## 特徴
31
+
32
+ - **ターミナル完結**: トークン管理不要 - gh CLI 認証を使用
33
+ - **シンプルな CLI**: 5つのコマンド、わかりやすい使い方
34
+ - **ビルトインテンプレート**: 9種類のすぐに使えるラベルセット
35
+ - **バリデーション**: 同期前に設定をチェック
36
+ - **ドライラン**: 変更を適用前にプレビュー
37
+
38
+ ---
39
+
40
+ ## インストール
41
+
42
+ ### 前提条件
43
+
44
+ gh CLI をインストールして認証:
45
+
46
+ ```bash
47
+ # macOS
48
+ brew install gh
49
+
50
+ # Linux (Debian/Ubuntu)
51
+ sudo apt install gh
52
+
53
+ # Windows
54
+ winget install --id GitHub.cli
55
+
56
+ # 認証
57
+ gh auth login
58
+ ```
59
+
60
+ ### labels-config をインストール
61
+
62
+ ```bash
63
+ npm install -g @boxpistols/labels-config
64
+ ```
65
+
66
+ ---
67
+
68
+ ## 使い方
69
+
70
+ ### init と sync の違いを理解する
71
+
72
+ **重要:** `init` コマンドはローカルに設定ファイルを作成するだけで、GitHub には同期されません。
73
+
74
+ | コマンド | 何をするか |
75
+ |---------|-----------|
76
+ | `init` | `labels.json` をローカルに作成(GitHubは変更されない) |
77
+ | `sync` | `labels.json` を GitHub リポジトリに適用 |
78
+
79
+ **ワークフロー例:**
80
+ ```bash
81
+ # ステップ1: ローカルに設定ファイルを作成(まだGitHubは変更されない)
82
+ labels-config init prod-ja --file labels.json
83
+
84
+ # ステップ2: ファイルの内容を確認
85
+ cat labels.json
86
+
87
+ # ステップ3: GitHub に適用(ここで実際にラベルが変更される)
88
+ labels-config sync --owner your-name --repo your-repo --file labels.json
89
+ ```
90
+
91
+ ### 1. ラベル設定を作成
92
+
93
+ **テンプレートから:**
94
+ ```bash
95
+ labels-config init minimal --file labels.json
96
+ ```
97
+
98
+ **利用可能なテンプレート:**
99
+ - `minimal` - 基本3ラベルセット(bug、feature、documentation)
100
+ - `github` - GitHub 標準ラベル
101
+ - `prod-ja` - プロダクションプロジェクト(日本語、14ラベル)
102
+ - `prod-en` - プロダクションプロジェクト(英語、14ラベル)
103
+ - `agile` - アジャイル/スクラムワークフロー
104
+ - `react`、`vue`、`frontend` - フレームワーク特化
105
+
106
+ ### 2. 設定を検証
107
+
108
+ ```bash
109
+ labels-config validate labels.json
110
+ ```
111
+
112
+ ### 3. 変更をプレビュー(ドライラン)
113
+
114
+ ```bash
115
+ labels-config sync \
116
+ --owner your-name \
117
+ --repo your-repo \
118
+ --file labels.json \
119
+ --dry-run \
120
+ --verbose
121
+ ```
122
+
123
+ ### 4. GitHub に同期
124
+
125
+ **追加モード**(デフォルト - 既存ラベルを保持):
126
+ ```bash
127
+ labels-config sync --owner your-name --repo your-repo --file labels.json
128
+ ```
129
+
130
+ **置き換えモード**(リストにないラベルを削除):
131
+ ```bash
132
+ labels-config sync --owner your-name --repo your-repo --file labels.json --delete-extra
133
+ ```
134
+
135
+ ### 5. 既存ラベルをエクスポート
136
+
137
+ ```bash
138
+ labels-config export --owner your-name --repo your-repo --file exported.json
139
+ ```
140
+
141
+ ---
142
+
143
+ ## CLI コマンド
144
+
145
+ | コマンド | 説明 |
146
+ |---------|------|
147
+ | `init <template>` | テンプレートからラベル設定を作成 |
148
+ | `validate <file>` | ラベル設定を検証 |
149
+ | `sync` | ラベルを GitHub に同期 |
150
+ | `export` | GitHub からラベルをエクスポート |
151
+ | `help` | ヘルプを表示 |
152
+
153
+ ### オプション
154
+
155
+ | オプション | 説明 |
156
+ |-----------|------|
157
+ | `--owner <name>` | リポジトリのオーナー |
158
+ | `--repo <name>` | リポジトリ名 |
159
+ | `--file <path>` | 設定ファイルのパス |
160
+ | `--dry-run` | 変更をプレビューのみ |
161
+ | `--delete-extra` | リストにないラベルを削除(置き換えモード) |
162
+ | `--verbose` | 詳細な出力を表示 |
163
+
164
+ ---
165
+
166
+ ## ラベル設定フォーマット
167
+
168
+ ```json
169
+ {
170
+ "version": "1.0.0",
171
+ "labels": [
172
+ {
173
+ "name": "bug",
174
+ "color": "d73a4a",
175
+ "description": "何かが正常に動作していません"
176
+ },
177
+ {
178
+ "name": "feature",
179
+ "color": "0e8a16",
180
+ "description": "新機能のリクエスト"
181
+ }
182
+ ]
183
+ }
184
+ ```
185
+
186
+ **要件:**
187
+ - `name`: 1-50文字
188
+ - `color`: 3または6文字の16進数カラーコード(# なし)
189
+ - `description`: 1-200文字
190
+
191
+ ---
192
+
193
+ ## 同期モード
194
+
195
+ ### 追加モード(デフォルト)
196
+ 新しいラベルを追加し、既存のラベルを更新。設定にないラベルは保持されます。
197
+
198
+ ```bash
199
+ labels-config sync --owner user --repo repo --file labels.json
200
+ ```
201
+
202
+ ### 置き換えモード
203
+ 設定にないすべてのラベルを削除。完全なコントロール。
204
+
205
+ ```bash
206
+ labels-config sync --owner user --repo repo --file labels.json --delete-extra
207
+ ```
208
+
209
+ ⚠️ **警告**: 置き換えモードはすべての Issue と PR からラベルを削除します。必ず `--dry-run` を先に実行してください!
210
+
211
+ ---
212
+
213
+ ## 複数リポジトリへの同期
214
+
215
+ 同じラベルを複数のリポジトリに同期:
216
+
217
+ ```bash
218
+ #!/bin/bash
219
+ REPOS=("org/repo1" "org/repo2" "org/repo3")
220
+
221
+ for REPO in "${REPOS[@]}"; do
222
+ OWNER=$(echo $REPO | cut -d'/' -f1)
223
+ REPO_NAME=$(echo $REPO | cut -d'/' -f2)
224
+
225
+ labels-config sync \
226
+ --owner $OWNER \
227
+ --repo $REPO_NAME \
228
+ --file labels.json \
229
+ --verbose
230
+ done
231
+ ```
232
+
233
+ ---
234
+
235
+ ## ワークフロー統合
236
+
237
+ ### GitHub Actions
238
+
239
+ ```yaml
240
+ name: Sync Labels
241
+
242
+ on:
243
+ push:
244
+ paths:
245
+ - 'labels.json'
246
+ branches:
247
+ - main
248
+
249
+ jobs:
250
+ sync:
251
+ runs-on: ubuntu-latest
252
+ steps:
253
+ - uses: actions/checkout@v4
254
+
255
+ - name: Setup Node.js
256
+ uses: actions/setup-node@v4
257
+ with:
258
+ node-version: '18'
259
+
260
+ - name: Install labels-config
261
+ run: npm install -g @boxpistols/labels-config
262
+
263
+ - name: Install gh CLI
264
+ run: |
265
+ sudo apt update
266
+ sudo apt install gh -y
267
+
268
+ - name: Authenticate gh CLI
269
+ env:
270
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
271
+ run: echo "$GITHUB_TOKEN" | gh auth login --with-token
272
+
273
+ - name: Sync labels
274
+ run: |
275
+ labels-config sync \
276
+ --owner ${{ github.repository_owner }} \
277
+ --repo ${{ github.event.repository.name }} \
278
+ --file labels.json \
279
+ --verbose
280
+ ```
281
+
282
+ ---
283
+
284
+ ## トラブルシューティング
285
+
286
+ ### 認証失敗
287
+
288
+ ```bash
289
+ # gh CLI のステータスを確認
290
+ gh auth status
291
+
292
+ # 再認証
293
+ gh auth login
294
+
295
+ # 認証をリフレッシュ
296
+ gh auth refresh
297
+ ```
298
+
299
+ ### バリデーションエラー
300
+
301
+ ```bash
302
+ # 具体的なエラーを確認
303
+ labels-config validate labels.json
304
+
305
+ # よくある問題:
306
+ # - ラベル名の重複
307
+ # - 無効な16進数カラー(# なしで3または6文字)
308
+ # - 名前が長すぎる(最大50文字)
309
+ # - 説明が長すぎる(最大200文字)
310
+ ```
311
+
312
+ ### ラベルが同期されない
313
+
314
+ ```bash
315
+ # 詳細な出力で確認
316
+ labels-config sync --owner user --repo repo --file labels.json --verbose
317
+
318
+ # ドライランで何が変更されるか確認
319
+ labels-config sync --owner user --repo repo --file labels.json --dry-run --verbose
320
+ ```
321
+
322
+ ### レート制限超過
323
+
324
+ ```bash
325
+ # レート制限のステータスを確認
326
+ gh api rate_limit
327
+
328
+ # リセットを待つ(通常60分)
329
+ ```
330
+
331
+ ---
332
+
333
+ ## ベストプラクティス
334
+
335
+ **✅ すべきこと:**
336
+ - `labels.json` をバージョン管理に含める
337
+ - 実際の同期前に `--dry-run` を実行
338
+ - セマンティックなコミットメッセージを使用
339
+ - プロジェクトでラベルの目的を文書化
340
+ - プロジェクト間で一貫した色使いをする
341
+
342
+ **❌ すべきでないこと:**
343
+ - Issue/PR での使用状況を確認せずにラベルを削除
344
+ - ラベル名を頻繁に変更
345
+ - 同期前のバリデーションをスキップ
346
+
347
+ ---
348
+
349
+ ## 高度な使用方法
350
+
351
+ ### npm パッケージとして使用
352
+
353
+ コード内でライブラリとして使用することもできます:
354
+
355
+ ```typescript
356
+ import { GitHubLabelSync } from '@boxpistols/labels-config/github'
357
+ import { CONFIG_TEMPLATES } from '@boxpistols/labels-config'
358
+
359
+ const sync = new GitHubLabelSync({
360
+ owner: 'your-org',
361
+ repo: 'your-repo'
362
+ })
363
+
364
+ const labels = CONFIG_TEMPLATES.minimal
365
+ await sync.syncLabels(labels)
366
+ ```
367
+
368
+ プロジェクトにインストール:
369
+ ```bash
370
+ npm install @boxpistols/labels-config
371
+ ```
372
+
373
+ ---
374
+
375
+ ## ライセンス
376
+
377
+ MIT
378
+
379
+ ---
380
+
381
+ ## 関連
382
+
383
+ - [English README](./README.md)
384
+
385
+ ---
386
+
387
+ **gh CLI を愛するターミナルユーザーのために作られました** 🚀