Skip to content

release: 0.2.0-beta.2 - #46

Merged
LibraryLibrarian merged 103 commits into
mainfrom
release/0.2.0-beta.2
Sep 26, 2026
Merged

LibraryLibrarian merged 103 commits into
mainfrom
release/0.2.0-beta.2

Conversation

@autodartrelease

Copy link
Copy Markdown

CHANGELOG.md の [Unreleased] から算出したバージョンです(チャンネル: beta)。 マージすると v0.2.0-beta.2 タグが作成され、pub.dev への公開と GitHub Release の作成まで自動で進みます。

github-actions Bot and others added 30 commits September 8, 2026 11:41
Tag Releaseがmainへの任意のpushでタグを作れる状態だったため、公開意図と
経路を検証するようにした。既存タグは指しているコミットが一致する場合のみ
成功とし、不一致は失敗させる。タグは自動では移動しない。

publishのdry-runは警告件数を検査する。--forceは確認を省略するだけで警告を
消さないため、警告が残った状態でpub.devへ送られる経路があった。

merge-backはorigin/mainの先端ではなく公開したタグのコミットを取り込む。
後続のリリースが進んでいた場合に別バージョンを巻き込む問題を防ぐ。

ciのchangesジョブにpull-requests: readを付与した。dorny/paths-filterは
PR時にREST APIから変更ファイルを取得するため、publicリポジトリでは動作
していたがprivate化した時点で壊れる状態だった。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
bumpVersionは[Unreleased]の本文を各プレリリースで消費するため、昇格時に
本文が空の安定版セクションを生成していた。misskey_auth以外の5リポジトリは
verifyRelease内で本文を検査していないため、空のリリースノートのまま
pub.devへ公開される経路になっていた。

安定版への昇格時は、同じベースを持つ全プレリリースと[Unreleased]の本文を
カテゴリ別に統合する。カテゴリはBreaking changes / Added / Changed /
Deprecated / Removed / Fixed / Securityの順、それ以外は初出順。カテゴリ内は
SemVerの優先順位で古い順に並べ、同一行は重複排除する。統合したプレリリースは
見出しと日付を残し、本文をポインタ1行に置き換える。

あわせてcompareReleaseVersionsを追加し、pubspecの現在値およびCHANGELOG上の
既存リリースより真に大きいバージョンだけを許可する。従来はSemVerの構文と
現在値との不一致しか検査していなかった。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phase 0: 昇格対応とリリース経路の検証強化
pub.dev Environmentの承認者を解除したため、手順書から承認ステップを削除する。
マージが公開の起点であることを明記した。

Environmentは承認のためではなくOIDCの束縛のために残している。Environment名は
OIDCトークンに署名されるため、push権限を持つ者がワークフローを書き換えて公開
経路を迂回することを防ぐ。削除すると公開自体が失敗する。

あわせて、リリースPRが開いている間にdevelop側で[Unreleased]を編集すると
マージバックで競合することを追記した。v2.0.1のリリースで実際に発生した。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
docs: 公開のゲートをリリースPRのマージ1回に統一する
.pubignore は .gitignore を置き換えるため、ビルド生成物や作業用ディレクトリも
明示的に列挙する必要がある。従来の .pubignore は example のビルド生成物と IDE
ファイルしか除外しておらず、test/ tool/ doc/ pages/ assets/ とルート直下の
android/ ios/ が公開アーカイブに含まれていた。

ルート直下の android/ ios/ は flutter create が生成した雛形であり、pubspec に
plugin 宣言がないためこのパッケージ自身のプラットフォーム実装ではない。
assets/demo_thumb.gif は README から raw.githubusercontent.com の絶対URLで
参照しているためアーカイブに実体は不要。

build/ と coverage/ は先頭に / を付けず任意階層に一致させる。example 配下は
example/.gitignore でも除外されるが、そちらの存在に依存しない。

クリーンチェックアウトでの dry-run で 3 MB から 31 KB になり、警告は0件。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
chore: 公開アーカイブから開発用ファイルを除外(3 MB → 31 KB)
release_project.dart は6リポジトリに分岐したコピーが存在していた。実質的な差は
参照ファイルの一覧、1ファイルあたりの参照数、example/pubspec.lock の同期有無の
3点だけで、残りは dart format のバージョン差による折り返し位置の違いだった。

3点を ReleaseConfig として切り出し、release_project.dart と各エントリポイントを
6リポジトリでバイト単位で同一にした。設定は YAML ではなく Dart の const とし、
依存追加なしでアナライザの型検査が効くようにしている。

bumpVersion / verifyRelease は config を必須の名前付き引数で受け取る。
release_notes.dart は出力先を引数で受け取る形に統一した。

テストは共有実装用と設定用に分けた。release_project_test.dart は合成した
プロジェクトに対して全設定パターン(空 / exactly(1) / exactly(2) /
atLeastOne / exampleLockPath)と、書き込み前に失敗することの保証を検証する。
release_config_test.dart は実ファイルに対して自リポジトリの設定を検証するため、
参照ファイルの不整合がリリース時ではなく毎回の CI で落ちる。テストのみ
package:test と package:flutter_test で import 1行が異なる。

挙動の差が1点ある。misskey_mfm_parser は参照ファイルを持たないため旧実装が
pubspec.yaml の name を読んでいなかったが、共有実装は常に読む。name が欠落
または重複した pubspec.yaml の受理条件が変わる。

Flutter 3.38.7 と 3.47.1 の dart format が同じ出力を返すことを確認済み。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
refactor: リリースツールの差分を release_config.dart へ集約
CHANGELOG で宣言した影響度と実際のAPI差分の食い違いは、これまでリリース後に
しか分からなかった。dart_apitool で公開済みバージョンとの公開API差分を取り、
ジョブサマリへ出力する。

このジョブは助言であり必須チェックではない。gate の needs に入れていないため
マージをブロックしない。--no-set-exit-on-version-check-failure により
バージョン検査の不一致でもステップは失敗しない。破壊的変更の有無から
バージョンを機械的に決めるのは誤検知の余地があり、判断は人間に残す。

比較対象は pub.dev API の latest.version。pub.dev は未知のパッケージに
404 と XML 本文を返すため、本文を読む前に HTTP ステータスで分岐し、未公開
(404)と通信障害(それ以外)と不正な応答を区別して、いずれもサマリに理由を
残して正常終了する。

バージョン判定は標準出力側にしか出ず、ツールが途中で失敗すると節ごと存在
しない。抽出できなくてもステップを失敗させない。

--ignore-prerelease は既定で有効で、x.y.z-beta.n を x.y.z とみなして検査する。
ただし新バージョンが比較元のプレリリース部分を除いた値以上の場合、バージョン
検査自体がスキップされる。公開済み最新がベータのリポジトリでは、当面は判定
ではなく変更一覧が得られる。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ci: 公開APIの差分を報告するジョブを追加
Prepare Release はバージョンの手入力を必須にしていた。判断の根拠は CHANGELOG の
[Unreleased] にあるのに、それを人が読んで semver へ翻訳していた。

nextReleaseVersion() を共有実装へ追加し、[Unreleased] から影響度を導くように
した。コミットメッセージは参照しない。このプロジェクトの履歴では破壊的変更が
docs: や build: として記録され、!/BREAKING CHANGE マーカーが0件だった実績が
あるため。

算出規則:
- 内容のある ### Breaking changes 見出し、または箇条書き先頭の **Breaking:** /
  **BREAKING**: / **Breaking**: があればメジャー。ただしメジャーが 0 の間は
  マイナー
- なければ内容のある ### Added があればマイナー
- どちらでもなければパッチ
- 影響度は直近の安定版以降の全プレリリースから積み上げる
- 安定版を一度も公開していない場合はコアを動かさない。組んでいる列が目標その
  ものなので、破壊的変更が入ってもベータ番号だけが進む
- 見出しだけで項目がない [Unreleased] は空として扱う。空の場合 beta はエラー、
  stable は昇格なので許容する
- コードブロックの中は判定に使わない

3つの表記を受け付けるのは過去の記載に合わせたため。過去の全リリースに規則を
突き合わせたところ、メジャー上げ4件を含め misskey_auth の 0.1.x 系を除く全
リポジトリで実績と一致した。

あわせて昇格時のリリースノートの畳み込み範囲を「同じコアのプレリリース」から
「直近の安定版より後のプレリリース」へ広げた。列の途中で影響度が上がりコアが
変わる場合(2.1.0-beta.1 のあとに破壊的変更が入り 3.0.0 になるなど)に、先行
ベータの内容が公開ノートから欠落していたため。

壊れたリリース見出しは黙って無視せず失敗させる。閉じ括弧を欠いた安定版の見出し
が「安定版を一度も公開していない」と誤認され、影響度を過小評価していた。

workflow_dispatch の入力はチャンネル選択(beta / stable)に変わる。算出結果を
使わない場合の上書き入力も残した。native assets を持つリポジトリでは dart run
がビルドフックの進捗を標準出力へ出すため、next_version.dart は出力先を引数で
受け取る。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ersion

feat: リリースバージョンを CHANGELOG から算出する
認証フローの不具合修正(再送・検証・例外分類・秘密情報のログ出力)
…istency

SecureTokenStore の書き込みの直列化と孤立トークンの防止
Misskey が HTTPS を要求するのは client_id だけで、redirect_uri は client_id
ページの <link rel="redirect_uri"> と完全一致すればよい。README の「redirect_uri
は HTTPS 必須」という記述を訂正し、中継ページは任意の構成として残す。

Co-Authored-By: Claude <noreply@anthropic.com>
intent-filter を host/path で制限すると MiAuth の callback が届かないことを明記し、
callbackScheme が使われるのは redirectUri が http(s) の場合だけであることを実装に合わせて記載。
英語版にだけあった OAuth redirect_uri の注意事項を日本語版にも追加。

Co-Authored-By: Claude <noreply@anthropic.com>
LibraryLibrarian and others added 28 commits September 25, 2026 08:40
ドキュメントサイトの簡体字中国語・ドイツ語・フランス語・韓国語訳
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
example アプリを slang で多言語化(ドキュメントと同じ6言語)
標準の showLicensePage を開くボタンを追加し、ツールチップを6言語に翻訳。
サーバー情報タブと同じアイコンになるため、既存テストのタブ探索を NavigationBar 内に限定。

Co-Authored-By: Claude <noreply@anthropic.com>
…page

example アプリの AppBar から OSS ライセンス一覧を開けるようにする
@LibraryLibrarian
LibraryLibrarian merged commit 030447f into main Sep 26, 2026
10 checks passed
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