macvim-dev / macvim-dev/macvim

Epic: Support reproducible builds

オープン
#1,506 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Epic Infrastructure
主要言語
Vim Script
スター
7.9k
フォーク
691
PR マージ指標
30日以内にマージされた PR はありません

説明

We currently distribute binary releases that people can use to download and install MacVim. We should add reproducible builds so that the binary we release is deterministic and reproducible and can be easily built on a local machine by any third party in an identical fashion.

Some motivations include the fact that supply chain attacks are real and while MacVim is unlikely a high-value target, it's still useful to reduce the likelihood of such problem happening to begin with. Also, with the deprecation of the macos-12 GitHub Action runner we will need to find another way to build the legacy MacVim binaries (either via a custom VM, or another CI service like Circle CI), and it would be nice to have some standard way to compare the generated artifacts and to have trust in the process working.

Note that we distribute signed apps, which is signed by a private key that only the maintainer controls, so it's impossible to have an artifact (MacVim.app) that can be compared bit-by-bit to a local build. We will need to provide a script that could strip the app signature before comparing.

  • Use relative paths for debug symbols and reproducible linker flags when building Vim
  • Use SOURCE_DATE_EPOCH to make builds not dependent on date/time.
  • Add documentation, and refactor build scripts (also necessary when adding another CI system) to make it more easily to build locally with the same flags.
  • Add CI output artifacts that contain necessary environment info.
  • #1586
  • Add user script that could compare two apps by stripping the signature, resign with adhoc signature, and then compare the result binaries. We also need to compare the entitlements.
  • CI test to validate reproducible builds.
  • Test in older versions of Xcode to make sure didn't break anything.

Related:

  • Add support for exporting dSYM files as part of build steps. These contain debug symbols and help diagnose crash issues for users. Make sure to use relative paths as it's necessary for reproducibility. This is a bit annoying to do due to a clang issue llvm/llvm-project#113973.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

この issue では具体的なファイルやテストは指定されていません。まず、既存の build スクリプトと binary-release CI workflow を確認してください。ローカルと CI のビルドで一貫した flags と環境データが使用され、未署名または ad-hoc-signed のアプリを比較でき、CI がサポート対象の build 環境全体で再現性を検証できれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
github-actions, macos, vim
領域
build-system, ci-cd, release
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
20/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。