Skip to content

ci(release): split release-please config and manifest per service - #1404

Merged
panicboat merged 1 commit into
mainfrom
ci/release-please-per-service-manifest
Oct 7, 2026
Merged

panicboat merged 1 commit into
mainfrom
ci/release-please-per-service-manifest

Conversation

@panicboat

@panicboat panicboat commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

Why

複数サービスの release PR が open している状態でどれか 1 つをマージすると、残りの release PR がコンフリクトしていた。

release-please は release PR の body が変わらない限り branch を push し直さない(PR #N remained the same)。全サービスが 1 つの release-please-manifest.json を共有していたため、残った PR は古い manifest を基点にしたままになり、main と隣り合う行でぶつかる。これまでは PR を close して gh workflow run release.yml で作り直していた。

What

  • config と manifest をサービスごとのファイルに分け、各サービスのディレクトリに置く。release PR が編集するのは自サービス配下の CHANGELOG.md と release-please-manifest.json だけになる。
  • release.yml は */release-please-config.json を検出して matrix を組む。サービスを足すときに workflow を触らない。
  • 各 config の label にサービス固有の label(release: <service>)を足す。release-please は「マージ済みで未 tag の release PR」を label だけで探し、1 件でもあると PR の作成と更新を中断するため、共通 label のままだと並列 job が互いの更新を skip させる。
  • separate-pull-requests: true は残す。外すと branch 名が全サービス共通になる。
  • 3 サービスの .dockerignore に 2 ファイルを追加する。release のたびに build context が変わるのを防ぐ。

Decisions

  • always-update: true は採らなかった。1 行で済むが、main への push ごとに open 中の全 release PR が force-push され、その都度 PR の CI が走る。
  • meeting-translation は対象から外した。tools/meeting-translation が main に存在しない。
  • bootstrap-sha は引き継がなかった。残る 3 サービスはすべてリリース済みで、参照されない。

Rollout

  1. マージ前に open 中の release PR(chore(main): release monolith 0.9.0 #1303 / chore(main): release frontend 0.11.0 #1304 / chore(main): release meeting-translation 1.2.0 #1389 / chore(main): release pennyworth 1.1.1 #1397)を close する。旧 manifest への変更を含み、新しい label を持たないため、作り直させる。
  2. この PR をマージする。push で release.yml が走り、3 サービスの release PR が作り直される。
  3. 作り直された release PR の変更ファイルが、自サービス配下の 2 ファイルだけであることを確認する。

Verification

  • actionlint .github/workflows/release.yml: エラーなし
  • matrix の検出コマンド: ["dystopia/frontend","dystopia/monolith","system-components/pennyworth"]
  • 3 つの config を release-please v17.6.0 の JSON schema で検証: valid(キーを typo した対照ファイルは reject される)
  • release-please release-pr --dry-run をこの branch に対して 3 サービス分実行: それぞれ 1 PR(monolith 0.9.0 / frontend 0.11.0 / pennyworth 1.1.1。open 中の release PR と同じバージョン)で、更新対象は自サービス配下の CHANGELOG.md と release-please-manifest.json

コンフリクトが起きないこと自体は、作り直された release PR のどれかをマージするまで実地では確認できない。

🤖 Generated with Claude Code

https://claude.ai/code/session_0159WC2CuFahuFTufiEjdaGz

Release PRs conflicted whenever another service's release PR was merged
first. release-please only re-pushes a release branch when the PR body
changes, so the remaining PRs kept a stale copy of the shared manifest
and collided with main on adjacent lines.

Each service now owns its config and manifest, so release PRs no longer
edit a common file. release.yml discovers the configs instead of listing
services, and each config carries a service-specific label so that one
service's merged-but-untagged release PR does not make the other jobs
skip their PR update.

meeting-translation is dropped because tools/meeting-translation no
longer exists. bootstrap-sha is dropped because every remaining service
already has a release.

Claude-Session: https://claude.ai/code/session_0159WC2CuFahuFTufiEjdaGz
Signed-off-by: panicboat <panicboat@gmail.com>
@coderabbitai

coderabbitai Bot commented Oct 7, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@panicboat-github-workflow-bot panicboat-github-workflow-bot Bot added deploy:frontend Auto-generated deployment label deploy:monolith Auto-generated deployment label deploy:pennyworth Auto-generated deployment label labels Oct 7, 2026
@panicboat
panicboat marked this pull request as ready for review October 7, 2026 17:06
@panicboat
panicboat merged commit 740fc15 into main Oct 7, 2026
15 of 17 checks passed
@panicboat
panicboat deleted the ci/release-please-per-service-manifest branch October 7, 2026 17:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deploy:frontend Auto-generated deployment label deploy:monolith Auto-generated deployment label deploy:pennyworth Auto-generated deployment label

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant