opentween / OpenTween

TwitterクライアントのTweenからフォークしたオープンなプロジェクト
https://www.opentween.org/
Other
275 stars 76 forks source link

CIでのビルド時に *.pdb の生成を無効化する #256

Closed upsilon closed 9 months ago

upsilon commented 9 months ago

概要

CI でのビルド時 (GitHub Actions, AppVeyor) に *.pdb の生成を無効化する。 リリース時の Reproducible build のチェックもこれに準じるため、バイナリ配布用のビルドも DebugType=None で行われる。

背景

.NET アプリケーションで *.pdb を含めて Reproducible build を実現させる場合は、ビルドを実行する環境の runtime-version を含めて一致させる必要がある。これは Portable PDB の仕様により runtime-version の値が *.pdb に埋め込まれているためである。

参照: https://github.com/dotnet/runtime/blob/v8.0.0/docs/design/specs/PortablePdb-Metadata.md#compilation-options-c-and-vb-compilers

しかし、.NET Framework の場合は CI 環境(Windows Server 2022)と開発者の PC(Windows 11)で runtime-version を完全に一致させることが難しい場合があり、現時点 (2023/11/28) においても GitHub Actions では 4.8.9186.0 である一方で @upsilon の使用する開発環境では 4.8.9181.0 とバージョンに差異がある状態が続いている。

このようなバージョンの差異は今後の Windows Update によって解消する場合もあれば、逆に CI 環境の方が古い場合には Windows Update の履歴から特定のアップデートをアンインストールすることで一致する場合もあるが、いずれにせよ OS のアップデートと紐付く .NET Framework ランタイムの性質上バージョンが一致する環境を準備することは容易とは言えない。 そのため、今後のビルドでは DebugType=None でデバッグ情報の生成を行わないことで runtime-version が完全に一致しなくとも Reproducible build を実現できるようにする。