release-workflow
バージョン整合性チェック→提案→承認→GitHub Release作成までの標準リリースフロー(マルチエコシステム対応)
معلومات المصدر
- المستودع
- takemo101/compose-workflow
- آخر نشاط في المصدر
- ١٧ يناير ٢٠٢٦ في ٠١:٣٦
- لغة SKILL.md المكتشفة
- اليابانية
- النجوم
- ٠
- التفرعات
- ٠
خيارات التثبيت
يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.
مراجعة ملفات المصدر
اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.
مستكشف الملفات
2 ملفاتعرض SKILL.md
SKILL.md
تعليمات المصدر · معاينة للقراءة فقط- name
- release-workflow
- description
- バージョン整合性チェック→提案→承認→GitHub Release作成までの標準リリースフロー(マルチエコシステム対応)
# リリースワークフロー
バージョン提案 → ユーザー承認 → リリース作成までの標準フローを定義する。
---
## フロー概要
```
0.5. バージョン整合性チェック(ハードコード検出)
↓
1. バージョン提案(Sisyphusが自動計算)
↓
2. ユーザーがバージョンを承認/変更
↓
3. リリース実行(自動)
- ハードコードバージョン修正(検出時)
- バージョンファイル更新
- CHANGELOG.md更新
- コミット & タグ作成
- push
- GitHub Release作成
- Release Workflow完了待機
```
---
## 実装環境
### container-use不要
リリースワークフローでは**container-useは不要**です。
| 理由 | 説明 |
|------|------|
| コード変更なし | バージョンファイル(Cargo.toml等)とCHANGELOG.mdのみ更新 |
| ドキュメント操作のみ | 実行可能コードの変更を伴わない |
| タグ・リリース操作 | Gitタグ作成とGitHub Release操作のみ |
### ホスト環境で直接実行
```bash
# リリース作業はホスト環境で直接実行
git add Cargo.toml CHANGELOG.md
git commit -m "chore: release v<version>"
git tag -a v<version> -m "Release v<version>"
git push origin <default-branch> --tags
gh release create v<version> ...
```
---
## 対応エコシステム
| エコシステム | バージョンファイル | 検出条件 |
|-------------|-------------------|----------|
| **Rust** | `Cargo.toml` | `Cargo.toml` 存在 |
| **Node.js** | `package.json` | `package.json` 存在 |
| **Python (pyproject)** | `pyproject.toml` | `pyproject.toml` 存在 |
| **Python (setup.py)** | `setup.py` | `setup.py` 存在 |
| **Go** | タグのみ | `go.mod` 存在 |
| **Generic** | `VERSION` | `VERSION` ファイル存在 |
| **Tag-only** | なし | 上記いずれも該当しない |
### 自動検出の優先順位
1. `Cargo.toml` → Rust
2. `package.json` → Node.js
3. `pyproject.toml` → Python (pyproject)
4. `setup.py` → Python (setup.py)
5. `go.mod` → Go
6. `VERSION` → Generic
7. いずれもなし → Tag-only
> **Note**: 複数のエコシステムファイルが存在する場合、上記の優先順位で最初にマッチしたものを使用します。
> スクリプトは検出時に警告を表示します。
---
## Phase 0.5: バージョン整合性チェック
リリース前にコードベース内のハードコードされたバージョンを検出し、修正を提案する。
### 0.5.1 目的
- ハードコードされたバージョン文字列の検出
- 推奨パターン(動的バージョン取得)への移行提案
- リリース時のバージョン不整合を防止
### 0.5.2 エコシステム別チェックパターン
#### Rust
| パターン | 検索コマンド | 問題 | 推奨修正 |
|---------|-------------|------|---------|
| `#[command(version = "x.x.x")]` | `rg '#\[command\(version\s*=' --type rust` | clap属性にハードコード | `#[command(version)]` |
| `const VERSION: &str = "x.x.x"` | `rg 'const\s+VERSION.*=.*"\d+\.\d+' --type rust` | 定数定義 | `env!("CARGO_PKG_VERSION")` |
| `static VERSION` | `rg 'static\s+VERSION.*=.*"\d+\.\d+' --type rust` | static定義 | `env!("CARGO_PKG_VERSION")` |
#### Node.js
| パターン | 検索コマンド | 問題 | 推奨修正 |
|---------|-------------|------|---------|
| `const version = "x.x.x"` | `rg 'const\s+version\s*=\s*["\x27]\d+\.\d+' --type js --type ts` | 定数定義 | `require('./package.json').version` |
| `VERSION = "x.x.x"` | `rg 'VERSION\s*=\s*["\x27]\d+\.\d+' --type js --type ts` | 大文字定数 | `process.env.npm_package_version` |
| `.version("x.x.x")` | `rg '\.version\(["\x27]\d+\.\d+' --type js --type ts` | メソッドチェーン | 動的取得に変更 |
#### Python
| パターン | 検索コマンド | 問題 | 推奨修正 |
|---------|-------------|------|---------|
| `__version__ = "x.x.x"` | `rg '__version__\s*=\s*["\x27]\d+\.\d+' --type py` | モジュールバージョン | `importlib.metadata.version("pkg")` |
| `VERSION = "x.x.x"` | `rg 'VERSION\s*=\s*["\x27]\d+\.\d+' --type py` | 定数定義 | `importlib.metadata.version("pkg")` |
| `version="x.x.x"` in setup() | `rg 'version\s*=\s*["\x27]\d+\.\d+' setup.py` | setup.py内 | pyproject.tomlに移行 |
#### Go
| パターン | 検索コマンド | 問題 | 推奨修正 |
|---------|-------------|------|---------|
| `var Version = "x.x.x"` | `rg 'var\s+[Vv]ersion\s*=\s*"\d+\.\d+' --type go` | 変数定義 | `-ldflags "-X main.Version=..."` |
| `const Version = "x.x.x"` | `rg 'const\s+[Vv]ersion\s*=\s*"\d+\.\d+' --type go` | 定数定義 | `-ldflags`でビルド時注入 |
### 0.5.3 共通チェックパターン(全エコシステム)
| パターン | 検索コマンド | 対応 |
|---------|-------------|------|
| READMEバッジ | `rg 'badge/v?\d+\.\d+\.\d+' README.md` | 新バージョンに更新 |
| シールドバッジ | `rg 'shields\.io.*\d+\.\d+\.\d+' README.md` | 新バージョンに更新 |
| インストール例 | `rg '@\d+\.\d+\.\d+' README.md` | 新バージョンに更新 |
| ドキュメント内バージョン | `rg 'v\d+\.\d+\.\d+' docs/` | 警告表示(確認必要) |
### 0.5.4 スクリプト実行
バージョン整合性チェックは `release.sh` に統合されています:
```bash
# Phase 0.5 のみ実行
.claude/skills/release-workflow/scripts/release.sh --version-check <new-version>
# 完全リリースフロー内で自動実行(デフォルト)
.claude/skills/release-workflow/scripts/release.sh --version 1.2.3
# Phase 0.5 をスキップして実行
.claude/skills/release-workflow/scripts/release.sh --version 1.2.3 --skip-version-check
```
> **依存**: `rg`(ripgrep)がインストールされている場合は高速検索を使用。
> 未インストールの場合は `grep -E` にフォールバック。
### 0.5.5 出力フォーマット
```markdown
## バージョン整合性チェック結果
### ⚠️ 検出されたハードコードバージョン
| ファイル | 行 | 現在の値 | 種別 | 推奨対応 |
|---------|-----|---------|------|---------|
| src/cli/args.rs | 5 | `version = "0.1.0"` | Rust/clap | `#[command(version)]` に変更 |
| README.md | 12 | `badge/v0.1.0` | バッジ | `v{NEW_VERSION}` に更新 |
### 対応オプション
1. **自動修正を適用** → 推奨パターンに変換(コード変更あり)
2. **バージョン番号のみ更新** → 現在のパターンを維持し値のみ更新
3. **スキップ** → 警告のみ、修正なし
> 番号を選択してください(1-3):
```
### 0.5.6 自動修正ルール
| 種別 | 自動修正可能 | 修正内容 |
|------|-------------|---------|
| Rust clap属性 | ✅ | `version = "x.x.x"` → `version` |
| Rust定数 | ✅ | `"x.x.x"` → `env!("CARGO_PKG_VERSION")` |
| READMEバッジ | ✅ | バージョン番号を新バージョンに置換 |
| Node.js定数 | ⚠️ 確認必要 | 使用箇所により異なる |
| Python `__version__` | ⚠️ 確認必要 | importlib使用可否による |
| Go変数 | ❌ 手動 | ビルドスクリプト修正が必要 |
| ドキュメント内 | ⚠️ 確認必要 | コンテキストによる |
### 0.5.7 Phase 0.5 スキップ条件
以下の場合はPhase 0.5をスキップ可能:
- `--skip-version-check` フラグ指定時
- 前回リリースからコード変更がない場合(CHANGELOG.mdのみ等)
- ユーザーが明示的にスキップを選択
---
## Phase 1: バージョン提案
### 1.1 エコシステム検出とバージョン取得
```bash
# スクリプトを使用(推奨)
.claude/skills/release-workflow/scripts/release.sh --detect
# または手動で検出
# Rust
grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/'
# Node.js
jq -r '.version' package.json
# Python (pyproject.toml)
grep '^version = ' pyproject.toml | head -1 | sed 's/version = "\(.*\)"/\1/'
# Python (setup.py)
grep -o "version=['\"][^'\"]*['\"]" setup.py | sed "s/version=['\"]\\([^'\"]*\\)['\"/\\1/"
# Go / Tag-only
git tag --sort=-version:refname | head -1 | sed 's/^v//'
# Generic
cat VERSION
```
### 1.2 変更内容の分析
```bash
# 前回リリースからのコミットを取得
git log <last-tag>..HEAD --oneline
```
### 1.3 セマンティックバージョニング判定
| 変更種別 | バージョン変更 | 例 |
|---------|---------------|-----|
| **Breaking Change** | MAJOR (x.0.0) | API変更、後方互換性なし |
| **新機能追加** | MINOR (0.x.0) | 機能追加、後方互換性あり |
| **バグ修正** | PATCH (0.0.x) | バグ修正、リファクタリング |
### 1.4 提案フォーマット
```markdown
## リリース提案
### エコシステム
<detected-ecosystem>
### 現在のバージョン
v0.4.0
### 前回リリースからの変更
- feat: 新機能追加(#XX)
- fix: バグ修正(#YY)
### 提案バージョン
**v0.5.0** (MINOR: 新機能追加)
### 変更種別
- ✨ 新機能: N件
- 🐛 バグ修正: N件
- 📝 ドキュメント: N件
---
**このバージョンでリリースしますか?**
1. **提案バージョンで続行** → v0.5.0 でリリース開始
2. **バージョン変更** → 手動でバージョンを入力
عرض على GitHubملف SKILL.md هذا كبير جدا، لذلك يعرض SkillsMP القسم الاول فقط هنا. عرض على GitHub