mdslide

ADR-0027 配布とサプライチェーンの守り

状況

決定

  1. release.yml を build と publish の 2 ジョブに分ける。build は contents: read で、ビルド、署名とインストールの確認、ライセンス表示と fuses の確認をして、dmg / zip を成果物に上げる。publish だけが contents: write を持ち、リポジトリのコードも依存も実行せず、下書きのリリースに添付してから公開する。
  2. リポジトリで Immutable releases を有効にする。公開後は添付ファイルとタグを変えられず、GitHub がリリース証明(attestation)を作る。
  3. インストール用コマンドは、GitHub API でリリースの zip の sha256(digest)を取り、ダウンロードしたファイルと照らし合わせてから入れる。curl は --proto '=https' --tlsv1.2 で https だけにする。
  4. インストール用コマンドは python-pptx と依存を版で固定し、--only-binary=:all: で wheel だけを入れる。Python 3.9 では Pillow 12 が入らないので 11.3.0 を入れ、3.10 以上を勧める表示を出す。アプリの設定に出す入れ方のコマンドも python-pptx の版を固定する。
  5. CI とリリースは npm ci --ignore-scripts で依存の install スクリプトを走らせず、アプリを動かすジョブだけ npm run rebuild で node-pty を作る。Electron 44 は本体を初めて使うときに取得する(electron/index.js)ので、dist:mac はパッケージの前に取得させる(ADR-0028 のライセンス文書もそこから取る)。
  6. checkout は persist-credentials: false。runner は ubuntu-24.04macos-26 に固定する。pages.yml の書き込み権限(pages / id-token)は deploy ジョブだけに付ける。
  7. 紹介ページの Tailwind(Play CDN 3.4.17)と Lucide(1.45.0)は .github/pages/assets/ に置き、integrity 付きで同じサイトから読む。
  8. リポジトリ設定: main はルールセットで削除と強制 push を禁じ、v* タグは削除・付け替え・強制 push を禁じる。Actions は SHA 固定を必須にし、使える action を GitHub 製と認証済みの作成者のものに限る。Dependabot のアラートとセキュリティ更新、非公開の脆弱性報告を有効にする。SECURITY.md に知らせ方と確かめ方を書く。

結果

状態