jiro4989 / setup-nim-action

Set up your GitHub Actions workflow with a specific version of Nim
MIT License
105 stars 14 forks source link

BREAKING_CHANGES: installing nim without choosenim 🔥 #483 #491

Closed jiro4989 closed 4 months ago

jiro4989 commented 4 months ago

概要

  1. choosenim を使用して nim をインストールする際、2 系をインストールしようとすると非常に遅くなることがある
    1. また、Mac の場合は 1 系 2 系を問わず 20 分ほどインストールに時間がかかってしまい、非常に遅い
  2. これは node20 runtime のカスタムアクションで choosenim を実行した場合でも、composite カスタムアクションで実行した場合でも発生する
  3. choosenim を使わずに Nim コンパイラをインストールする方式だと、Linux, Mac, Windows のいずれも高速にインストールできることがわかった
    1. Linux, Windows では 10 秒以内
    2. Mac では 6 分ほど。これは Nim 公式がビルド済みの Mac 向けコンパイラを提供していないため、CI で都度コンパイラをビルドするため、時間がかかっている
    3. それでも 20 分かかっていた頃よりは十分高速に完了する
  4. そのため、今までずっと choosenim を使ってインストールしていた処理を、すべてシェルスクリプトでインストールするように実装を変更する

変更の詳細

  1. カスタムアクションのランタイムを node20 から composite に変更
  2. typescript で実装していたインストール処理をシェルスクリプトに変更
    1. Linux, Windows はビルド済みコンパイラが存在するため、コンパイラの取得処理のみ
    2. Mac はビルド済みコンパイラがなさそうだったため、homebrew のインストール処理と、Nim 公式リポジトリのインストール処理を参考に、CI 上でコンパイラをビルドするようにした
      1. build_all.sh は古いバージョンの nim だとそもそもスクリプトが存在しなかったため、build_all.sh の実装をそのまま移植するような形で実装した
  3. Nim コンパイラはカレントディレクトリ配下に隠しフォルダとして配置するように変更
    1. このインストール先は inputs の nim-install-directory にて変更可能
  4. $PWD/隠しフォルダ/bin$HOME/.nimble/bin に PATH を通すように変更
  5. choosenim 用に用意していた inputs の no-coleryes が不要になったため、非推奨パラメータとした
    1. いきなり削除すると CI が壊れるところもありそうだったため、一旦非推奨で残す
  6. 実装の変更にあわせて CI によるテスト内容を変更
    1. macOS-latest ( macOS-14 ) は CPU アーキテクチャが arm64 のみ提供されている ( https://github.com/actions/runner-images/issues/9741 )
    2. macOS-13 は x64 のまま。そのため macOS runner でのみ macOS-13 と 14 をテストするようにした

破壊的変更 🔥

  1. ランタイムを node20 から composite に変更
    1. 依存ライブラリなどが変化するため、なんらか node ランタイムに依存していたプロジェクトが存在した場合問題が発生するかもしれない
  2. Nim コンパイラはカレントディレクトリ配下に隠しフォルダとして配置するように変更
    1. もしカレントディレクトリで .nim_runtime といったフォルダを作ったりする処理があった場合、影響がでるかもしれない

リリースフロー

  1. 今回の変更は初めてのメジャーバージョンアップであり、破壊的変更を伴うため慎重にバージョンを上げる
  2. devel ブランチを切り、そこで v2-beta タグを発行する
  3. 次に自身のいくつかのリポジトリで v2-beta に切り替えて CI を動作して、処理時間を確認する
  4. 483 にて共有し、自分以外の方に動作確認の協力を仰ぐ

  5. 動作に問題がなければ master マージして v2 タグを発行する

未対応の事項

  1. Typescript 周りのソースコードの削除はあとで対応する
  2. devel バージョンを指定されても、現状正常に動作しないが、後で対応する

483

jiro4989 commented 4 months ago

複合アクションで choosenim をインストールした場合でも非常に遅い。 どうしようもなさそうだから、自前でスクリプトごりごり書いてインストールするしかないかもしれない

jiro4989 commented 4 months ago

Linux は一応動きそう。速度も良さそう。ただし明らかな破壊的変更になるから setup-nim-action は v2 にメジャーバージョンアップせざるを得ないか

jiro4989 commented 4 months ago

macOS-latest は macos-14 で、現状 intel arch ランナーを用意する予定はないらしい。したがって arm64 しか提供されていない。

macos-13 を使う必要がある https://github.com/actions/runner-images/issues/9741

jiro4989 commented 4 months ago

brew install nim の中身

https://github.com/Homebrew/homebrew-core/blob/736836cf038c04e304e635ccd04dcd0bdff8f57b/Formula/n/nim.rb

jiro4989 commented 4 months ago

MacOS の場合はビルド済みのコンパイラが配布されてなさそうだったので、CI 上でビルドするようにした

jiro4989 commented 4 months ago

これで macOS-13 (x86) も macOS-14 (arm64) もどちらも CI がパスしたので大丈夫なはず

jiro4989 commented 4 months ago

Mac 用のコンパイラはビルドに6分ほどか。長いけれど、それでも20分かかるよりはずっとまし

jiro4989 commented 4 months ago

あとは 1.x とか 1.6.x って記法に対応しないといけない

jiro4989 commented 4 months ago

v2-beta タグを発行した

https://github.com/jiro4989/setup-nim-action/releases/tag/v2-beta

jiro4989 commented 4 months ago

動かしてみたらいきなりこけてら...。スクリプトがないのか

https://github.com/jiro4989/nimjson/actions/runs/9810245523/job/27089976573?pr=44

github.action_path が必要らしい

https://docs.github.com/ja/actions/creating-actions/creating-a-composite-action

jiro4989 commented 4 months ago

nimjson の CI は大丈夫そうかな

jiro4989 commented 4 months ago

faker も大丈夫そう

jiro4989 commented 4 months ago

envconfig も大丈夫

jiro4989 commented 4 months ago

よし、これでいけそうだな

jiro4989 commented 4 months ago

TODO

jiro4989 commented 4 months ago

devel build OK.

Nim Compiler Version 2.1.1 [Linux: amd64]
Compiled at 2024-07-05
Copyright (c) 2006-2024 by Andreas Rumpf
git hash: 05df263b84de9008266b3d53e2c28b009890ca61
active boot switches: -d:release

devel commit hash of nim repository is 05df263b84de9008266b3d53e2c28b009890ca61

jiro4989 commented 4 months ago

devel のビルドは 6 分ってとこか。これは Mac のと大体同じ

jiro4989 commented 4 months ago

nimjson でも devel build が通った

jiro4989 commented 4 months ago

TODO:

jiro4989 commented 4 months ago

だいたい書けたな

github-actions[bot] commented 4 months ago

🏷️ [bumpr] Next version:v3.0.0 Changes:v2-beta...jiro4989:hotfix/mac-slow-installation

jiro4989 commented 4 months ago

なんで v3 になってるんだ...

jiro4989 commented 4 months ago

仕方ないので手で v2 タグを切ろう