Repository navigation
fix: Swift の依存も --age の判定の前にタグの公開日を確かめる - #61
Merged
Merged
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
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. Comment |
Maven Central のテストにあった、決めた応答を順に返す HTTP サーバ (serve_responses) を test_support::http へ移す。次のコミットで GitHub Tags のアダプタのテストからも使う。 偽のコマンド (pnpm・mise・cargo・gradlew の代わりのシェルスクリプト) は、 test_support::exec::write_script で子プロセスに書かせる。テストが std::fs::write で 書いた直後のスクリプトを exec すると、並列に走るほかのテストの fork が、書き込み用の fd の写しを exec までの間持っていることがあり、Linux は ETXTBSY (Text file busy) で 拒否する。PR の CI (ubuntu-latest) で、偽の pnpm を実行するテストがこれで落ちた。 本番のコードがパスを直接 exec するので、`sh <パス>` で読ませる形にはできない。 書いて実行させる全テストを置き換えた。 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
GitHub のタグの一覧には公開日が無く、judge は Swift の日付の無い版を常に通していた。 そのため age が 2w でも、公開から 3 日の版へ `(release date unknown)` と表示しながら 更新していた (#59)。 judge は Swift でもほかのレジストリと同じく、age が有効なら日付の無い版を候補にしない。 その前に orchestrator が、judge と同じ絞り込みの候補を新しい順に見て公開日を取得し、 期間を満たす版に当たったら止める。公開日は SwiftPM が使うタグの GitHub Release の published_at、Release の無い注釈付きタグは tagger.date で代える。軽量タグと、SwiftPM の 順位が同じ別のタグがある版は公開日不明にする。 問い合わせは 1 依存 5 回まで (この実行で解決済みの版は数えない) とし、上限に達したら 古い版へは更新せず、確かめていない版を示して skip にする (ReleaseDateUnchecked)。 --max-change の内側に期間を満たす版が無ければ外側も確かめ、ほかの言語と同じく max-change で止まったと報告する。取得の失敗は公開日不明にせず FetchFailed にする。 age が無効なときと、age_exempt の owner では取得しない。公開日のキャッシュは、公開日が 無いという答えも覚える。 AGENTS.md には、前のコミットで足した偽のコマンドの書き方もテスト方針に書き足す。 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
owayo
force-pushed
the
fix/issue-59-swift-release-dates-for-age
branch
from
October 23, 2026 02:20
28ce80e to
0d8d54f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
Swift (
Package.swift) の依存で--ageが効かず、公開から期間がたっていない版へ更新していました (#59)。例: age が2wのとき、stephencelis/SQLite.swiftを 0.16.0 から、公開 3 日前の 0.17.0 へ「(release date unknown)」と表示しながら更新していました。この PR で、Swift でも age の判定に要る候補だけタグの公開日を取得し、ほかの言語と同じく期間内の版と公開日の分からない版を候補から外します。原因
Swift の版の一覧は GitHub の Tags API から作りますが、タグの一覧には公開日がありません。judge は Swift について、公開日の無い版を age の判定で常に通していました (
allow_undated)。Java (Maven) には、選んだ候補の公開日を後から取得して判定し直す仕組みがありますが、Swift にはありませんでした。変更内容
allow_undatedの対象から外しました。age が有効なら、ほかのレジストリと同じく公開日の無い版を候補にしません。すべて分からなければrelease date unavailable for <version>です。resolve_tag_release_dates): age が有効なら、judge と同じ絞り込み (安定版・範囲の上限・reject・現在版より新しい・--max-changeの内側) を通った候補を新しい順に見て公開日を取得し、期間を満たす版に当たったら止めます。それより古い版は問い合わせません。[age_exempt]の owner と、age が無効なときは取得しません。GitHubTagsAdapter::fetch_release_date): そのタグの GitHub Release のpublished_atを使います。Release の無い (404 かpublished_atが null の) タグは、注釈付きタグのtagger.dateで代えます。軽量タグは、指すコミットの日時がタグを打った日より古いことがあるので公開日不明とします。同じ版を表すタグが複数あるときは SwiftPM が使うタグ (区切りの多い方、同じなら小文字のvの無い方) で問い合わせます。順位が同じタグが残る版 (1.2.0とV1.2.0) は、どちらが使われるか分からないので公開日不明とします。タグ名の+は%2Bに符号化します。release date lookup limit reached; <version> and older not checked(JSON はrelease_date_unchecked: <version>) で止めます。--max-changeの内側に期間を満たす版が無いときは外側も現在版に近い順に確かめ、ほかの言語と同じくmax-change=<LEVEL>と報告します。fetch failedにします。VersionFetcher::release_date) は、公開日が無いという答えも覚えます (Java は従来どおり公開日が無ければエラー)。test_support::httpに移し、Maven と GitHub のアダプタのテストで共有しました (1 つ目のコミット)。docs/usage.md・docs/ecosystems.md・docs/configuration.mdとそれぞれの日本語版、AGENTS.md を更新しました。設計判断
codex (gpt-6.1-sol) に設計と差分を相談しました。
release_date_candidates) で作り、Swift の judge は厳しいまま使います。Swift では「公開日が無い」が正常系なので、緩い判定と厳しい判定を使い分けるより単純で、判定はほかのレジストリと同じになります。検証
make ci(fmt・clippy・全テスト): pass2wでは更新しない (no suitable version)、age1dでは 0.17.0 へ更新し公開日(2026/10/20 16:31)を表示 (Release のpublished_atと一致)、--no-ageでは公開日を取得しない--max-changeの外側を確かめてmax-change=patchと報告する / キャッシュ済みの公開日は数えない / 取得の失敗はfetch failed。修正前は、公開日を取得せずに最新版へ更新していましたpublished_atが null /+の符号化 / 順位が同じタグは問い合わせずに不明 / レート制限と壊れた日付をエラーにする / タグ名を知らないときに一覧を取り直す--max-change・プレリリース・範囲の上限での振り分けCloses #59
🤖 Generated with Claude Code