Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 1 commit into from
Nov 27, 2023

Conversation

upsilon
Copy link
Member

@upsilon upsilon commented Nov 27, 2023

概要

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 を実現できるようにする。

@upsilon upsilon added this to the v3.7.2 milestone Nov 27, 2023
@upsilon upsilon self-assigned this Nov 27, 2023
@upsilon upsilon enabled auto-merge November 27, 2023 16:39
@upsilon upsilon merged commit 2001d4a into develop Nov 27, 2023
3 checks passed
@upsilon upsilon deleted the disable-build-pdb branch November 27, 2023 16:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

1 participant