Skip to content

CI: Package.swift と project.yml の依存バージョン一致を検証#26

Merged
mrmt merged 1 commit into
mainfrom
ci/dep-version-sync
Jul 25, 2026
Merged

CI: Package.swift と project.yml の依存バージョン一致を検証#26
mrmt merged 1 commit into
mainfrom
ci/dep-version-sync

Conversation

@mrmt

@mrmt mrmt commented Jul 25, 2026

Copy link
Copy Markdown
Owner

背景

依存は SwiftPM 用の Package.swift と XcodeGen 用の project.yml の2箇所で宣言しているが、dependabot は Package.swift しか更新しない

pbxproj は project.yml から生成されるため、既存の xcodegen 整合性チェック (xcodegen generate && git diff --exit-code) では両者の食い違いを検出できない。結果として「SwiftPM ビルドは 0.8.x、Xcode (=配布物) ビルドは 0.7.x」という状態が CI 全green のまま成立する

実際に #25 (swift-markdown 0.8.0) がこの状態で、マージ前に手動で project.yml を追従させる必要があった。今後も同じ穴が空くため機械的に塞ぐ。

変更内容

  • scripts/check-dependency-versions.sh を追加。両ファイルから (URL, バージョン) を抽出して照合する
  • lint ジョブの先頭で実行 (SwiftLint の brew install より前に置いて早く落とす)
  • README に依存更新手順を追記

抽出に失敗した場合も黙って通さず失敗させる。書式が変わったときに検証が無言で無効化されるのを防ぐため。

検証

ローカルで4パターン確認済み。

ケース 結果
現状 (0.8.0 で一致) exit 0
Package.swift だけ 0.9.0 (dependabot の挙動を再現) exit 1・両者の値を表示
project.yml の packages ブロック消失 exit 1・書式変更を警告
依存2つ・片方だけ食い違い exit 1 (将来の依存追加にも対応)

🤖 Generated with Claude Code

https://claude.ai/code/session_01YAgg3ad7Muz4ed4EYTgKU2

依存は SwiftPM 用と XcodeGen 用の2箇所で宣言しているが、dependabot は
Package.swift しか更新しないため project.yml が取り残される。
pbxproj は project.yml から生成されるので、既存の xcodegen 整合性チェック
(xcodegen generate && git diff --exit-code) では食い違いを検出できず、
SwiftPM ビルドと Xcode/配布ビルドで別バージョンが使われる状態が
CI 全green のまま成立してしまう (実際に PR #25 がこの状態だった)。

照合スクリプトを追加し lint ジョブの先頭で実行する。ローカルでも
./scripts/check-dependency-versions.sh で同じ検証ができる。

Co-authored-by: Claude Code <claude@anthropic.com>
@mrmt
mrmt merged commit d178a51 into main Jul 25, 2026
3 checks passed
@mrmt
mrmt deleted the ci/dep-version-sync branch July 25, 2026 23:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant