Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
cc268f7
chore: suppress Rolldown plugin timing warnings
sasagar Apr 10, 2026
4e5164d
chore: add git workflow rules and dev sync automation
sasagar Apr 10, 2026
d537139
fix: use previous stable tag for release notes on stable releases
sasagar Apr 10, 2026
693e2e8
Merge pull request #156 from Love-Rox/chore/git-workflow-rules
sasagar Apr 10, 2026
0370c4e
docs: clarify branch deletion steps in git workflow rules
sasagar Apr 10, 2026
452f54d
Merge pull request #157 from Love-Rox/docs/git-workflow-cleanup
sasagar Apr 10, 2026
83e23ba
chore: unify workflow rules into issue-driven development (refs #158)
sasagar Apr 10, 2026
9356a8f
Merge pull request #159 from Love-Rox/chore/issue-158-unify-workflow
sasagar Apr 10, 2026
f91aad8
chore: auto-close issues when PRs merge to dev (refs #160)
sasagar Apr 10, 2026
cab99a4
Merge pull request #161 from Love-Rox/chore/issue-160-auto-close-issues
sasagar Apr 10, 2026
25563dd
chore: harden CI/CD against supply-chain attacks (refs #162)
sasagar May 13, 2026
9d227c7
chore: bump Waku to 1.0.0-beta.0 and audit dependencies (refs #163)
sasagar May 13, 2026
3350ad1
chore: unify BUN_VERSION env var in docs workflow (refs #162)
sasagar May 13, 2026
d6acd1a
Merge pull request #164 from Love-Rox/chore/issue-162-supply-chain-ha…
sasagar May 13, 2026
3c76a5c
Merge pull request #165 from Love-Rox/chore/issue-163-update-waku-bet…
sasagar May 13, 2026
865a259
chore: replace better-sqlite3 with bun:sqlite (refs #166)
sasagar May 13, 2026
76dbd44
Merge pull request #167 from Love-Rox/chore/issue-166-bun-sqlite-migr…
sasagar May 13, 2026
689fcb8
chore: phase 2 supply-chain hardening (SBOM + provenance) (refs #168)
sasagar May 13, 2026
4b9c89e
Merge pull request #169 from Love-Rox/chore/issue-168-supply-chain-ph…
sasagar May 13, 2026
b8e7851
chore: bump version to 2026.5.0
sasagar May 13, 2026
744cbd3
Merge pull request #170 from Love-Rox/chore/bump-v2026.5.0
sasagar May 13, 2026
73ad35b
fix: address CodeRabbit nitpicks from PR #171 review
sasagar May 13, 2026
6464669
fix: address remaining CodeRabbit nitpicks from PR #171
sasagar May 13, 2026
0ef8813
Merge pull request #172 from Love-Rox/fix/coderabbit-nitpicks-release…
sasagar May 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 61 additions & 23 deletions .claude/workflows/github-workflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,60 +3,98 @@
このプロジェクトでは、Issue駆動開発を採用しています。
以下のワークフローに従って作業を進めてください。

## Branch Strategy

```
feature/issue-{N}-* ──PR──> dev ──PR──> main (release only)
└──> dev (auto-synced by GitHub Actions)
```

## ワークフロー

### Phase 1: Issue確認・作成
1. 作業内容に関連するissueが既に存在するか gh issue list で確認
1. 作業内容に関連するissueが既に存在するか `gh issue list` で確認
2. 該当issueがない場合:
- gh issue create でissueを作成
- `gh issue create` でissueを作成
- タイトルと説明を簡潔に記載
- 適切なラベルを付与
3. 該当issueがある場合: そのissue番号を記録

### Phase 2: ブランチ作成
- 最新のdevブランチからフィーチャーブランチを作成
- git checkout -b feature/issue-{番号}-{簡潔な説明} でfeatureブランチを作成
- ブランチ名例: feature/issue-42-add-login-form
- `git checkout -b {type}/issue-{番号}-{簡潔な説明} dev`
- ブランチ名例: `feat/issue-42-add-login-form`, `fix/issue-58-emoji-size`

### Phase 3: 実装
- issueの要件に基づいてコードを実装
- 小さな単位で進捗を確認しながら作業

### Phase 4: コミット
- 意味のある単位でコミット
- コミットメッセージ形式: feat: 機能の説明 (refs #issue番号)
- 例: feat: ログインフォームを追加 (refs #42)
- コミットメッセージ形式: `{type}: 説明 (refs #{issue番号})`
- 例: `feat: ログインフォームを追加 (refs #42)`

### Phase 5: ユーザー確認待機
- 実装完了を報告し、動作確認を依頼
- 修正が必要な場合はPhase 3に戻る

### Phase 6: 品質チェック
動作確認完了後、以下を実行:
- npm run type-check または tsc --noEmit
- npm test または該当するテストコマンド
- npm run lint (設定されている場合)
- `bun run typecheck`
- `bun run lint`
- `bun test` (該当するテストがある場合)
- エラーがあれば修正し、再度チェック

### Phase 7: プッシュとPR作成
以下のコマンドを実行:
git push origin feature/issue-{番号}-{説明}
gh pr create --base dev --title "feat: {説明}" --body "Closes #issue番号"
```bash
git push origin {type}/issue-{番号}-{説明}
gh pr create --base dev --title "{type}: {説明}" --body "Closes #{issue番号}"
```
- PRは**必ず `dev` ブランチ**をターゲットにする
- PRボディに `Closes #{issue番号}` を含めてissueを自動クローズする

### Phase 8: CI確認
- gh pr checks でCI状態を確認
### Phase 8: CI確認とマージ
- `gh pr checks` でCI状態を確認
- 失敗している場合は原因を特定し、Phase 6に戻る
- すべてのチェックが通過したら報告
- すべてのチェックが通過したら:
```bash
gh pr merge --merge --delete-branch
git checkout dev && git pull && git branch -d {branch}
```

## リリースフロー (dev → main)

安定版リリース時のみ `dev` → `main` のPRを作成する。

### 手順
1. `dev` ブランチ上でバージョンをバンプ (フィーチャーブランチ経由)
2. `dev` → `main` のPRを作成
- タイトル: `Release vX.X.X`
- ボディ: 前回の安定版リリースからの変更サマリー
3. CI通過後にマージ
4. 以下は自動で実行される:
- `auto-tag.yml`: Gitタグ + GitHubリリース作成 (安定版は前回安定版からの差分でリリースノート生成)
- `sync-dev.yml`: `dev` を `main` にfast-forward同期

## コミットメッセージ規約
- feat: 新機能
- fix: バグ修正
- docs: ドキュメント
- refactor: リファクタリング
- test: テスト追加・修正
- chore: その他の変更
- `feat`: 新機能
- `fix`: バグ修正
- `docs`: ドキュメント
- `refactor`: リファクタリング
- `test`: テスト追加・修正
- `chore`: その他の変更
- `perf`: パフォーマンス改善

## 注意事項
- devブランチへの直接コミットは禁止
- PRは必ずレビューを経てマージ
- `dev` / `main` ブランチへの直接コミットは禁止
- PRは必ずCIを通過してからマージ
- issueとPRは必ずリンクさせる
- マージ後はフィーチャーブランチを必ず削除 (リモート + ローカル)

## 自動化
| イベント | ワークフロー |
|---------|------------|
| mainへのpush時にタグ + リリース作成 | `auto-tag.yml` |
| mainマージ後にdevを同期 | `sync-dev.yml` |
| PR/push時のCI実行 | `ci.yml` |
93 changes: 93 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Dependabot configuration
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
# GitHub Actions versions
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
day: monday
time: "09:00"
timezone: Asia/Tokyo
open-pull-requests-limit: 5
commit-message:
prefix: "chore"
include: scope

# npm dependencies - root
- package-ecosystem: npm
directory: "/"
schedule:
interval: weekly
day: monday
time: "09:00"
timezone: Asia/Tokyo
open-pull-requests-limit: 10
commit-message:
prefix: "chore"
include: scope
groups:
minor-and-patch:
update-types:
- minor
- patch

# npm dependencies - backend
- package-ecosystem: npm
directory: "/packages/backend"
schedule:
interval: weekly
day: monday
time: "09:00"
timezone: Asia/Tokyo
open-pull-requests-limit: 10
labels:
- backend
commit-message:
prefix: "chore"
include: scope
groups:
minor-and-patch:
update-types:
- minor
- patch

# npm dependencies - frontend
- package-ecosystem: npm
directory: "/packages/frontend"
schedule:
interval: weekly
day: monday
time: "09:00"
timezone: Asia/Tokyo
open-pull-requests-limit: 10
labels:
- frontend
commit-message:
prefix: "chore"
include: scope
groups:
minor-and-patch:
update-types:
- minor
- patch

# npm dependencies - shared
- package-ecosystem: npm
directory: "/packages/shared"
schedule:
interval: weekly
day: monday
time: "09:00"
timezone: Asia/Tokyo
open-pull-requests-limit: 5
commit-message:
prefix: "chore"
include: scope
groups:
minor-and-patch:
update-types:
- minor
- patch
50 changes: 43 additions & 7 deletions .github/workflows/auto-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,19 @@ on:
- "package.json"

permissions:
contents: write
contents: read

jobs:
auto-tag:
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
tag_created: ${{ steps.create_tag.outputs.created }}
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.0
with:
fetch-depth: 0

Expand Down Expand Up @@ -70,19 +72,36 @@ jobs:
needs: [auto-tag, call-ci]
if: needs.auto-tag.outputs.tag_created == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write # for sigstore signing via GitHub OIDC
attestations: write # for actions/attest-build-provenance
steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.0
with:
fetch-depth: 0

- name: Get previous tag
id: prev_tag
run: |
CURRENT_TAG="v${{ needs.auto-tag.outputs.version }}"
PREV_TAG=$(git describe --tags --abbrev=0 "${CURRENT_TAG}^" 2>/dev/null || echo "")
echo "prev_tag=$PREV_TAG" >> $GITHUB_OUTPUT
echo "Previous tag: $PREV_TAG"
VERSION="${{ needs.auto-tag.outputs.version }}"

# For stable releases, find the previous stable tag (skip prereleases)
# For prereleases, find the previous tag of any kind
if [[ "$VERSION" != *"-"* ]]; then
# Stable release: find previous stable tag
PREV_TAG=$(git tag --sort=-v:refname | grep -v '\-alpha\|\-beta\|\-rc' | grep -v "^${CURRENT_TAG}$" | head -1)
echo "Stable release: comparing against previous stable tag"
else
# Prerelease: find the immediately previous tag
PREV_TAG=$(git describe --tags --abbrev=0 "${CURRENT_TAG}^" 2>/dev/null || echo "")
echo "Prerelease: comparing against previous tag"
fi

echo "prev_tag=${PREV_TAG:-}" >> $GITHUB_OUTPUT
echo "Previous tag: ${PREV_TAG:-none}"

- name: Extract package versions
id: pkg_versions
Expand Down Expand Up @@ -240,13 +259,30 @@ jobs:

cat CHANGELOG.md

- name: Generate SBOM (SPDX-JSON)
uses: anchore/sbom-action@e22c389904149dbc22b58101806040fa8d37a610 # v0.24.0
with:
path: .
format: spdx-json
artifact-name: rox-${{ needs.auto-tag.outputs.version }}.spdx.json
output-file: rox-${{ needs.auto-tag.outputs.version }}.spdx.json
upload-artifact: false
upload-release-assets: false

- name: Attest SBOM provenance
uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0
with:
subject-path: rox-${{ needs.auto-tag.outputs.version }}.spdx.json

- name: Create Release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2.6.2
with:
tag_name: v${{ needs.auto-tag.outputs.version }}
name: "Rox ${{ needs.auto-tag.outputs.version }}"
body_path: CHANGELOG.md
prerelease: ${{ steps.check.outputs.is_prerelease }}
draft: false
files: |
rox-${{ needs.auto-tag.outputs.version }}.spdx.json
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Loading