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

BREAKING_CHANGES: installing nim without choosenim 🔥 #483 #491

Merged
merged 60 commits into from
Jul 6, 2024

Conversation

jiro4989
Copy link
Owner

@jiro4989 jiro4989 commented Jul 4, 2024

概要

  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 のみ提供されている ( macos 14 is only arm64 actions/runner-images#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. [Bug]: Nim installation is too long! #483 にて共有し、自分以外の方に動作確認の協力を仰ぐ
  5. 動作に問題がなければ master マージして v2 タグを発行する

未対応の事項

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

#483

@jiro4989 jiro4989 force-pushed the hotfix/mac-slow-installation branch from ddd802f to 9493af2 Compare July 4, 2024 22:58
@jiro4989 jiro4989 changed the title Hotfix/mac slow installation feat: Using Composite action #483 Jul 4, 2024
@jiro4989
Copy link
Owner Author

jiro4989 commented Jul 4, 2024

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

@jiro4989
Copy link
Owner Author

jiro4989 commented Jul 4, 2024

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

@jiro4989
Copy link
Owner Author

jiro4989 commented Jul 5, 2024

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

macos-13 を使う必要がある
actions/runner-images#9741

@jiro4989
Copy link
Owner Author

jiro4989 commented Jul 5, 2024

TODO

  • cache を使っていると v2 への切り替え直後はエラーになることがある。README と Releases に書くこと
  • devel を使うには git switch と build が必須なので、新しく分岐を追加する

@jiro4989
Copy link
Owner Author

jiro4989 commented Jul 5, 2024

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
Copy link
Owner Author

jiro4989 commented Jul 5, 2024

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

@jiro4989
Copy link
Owner Author

jiro4989 commented Jul 5, 2024

nimjson でも devel build が通った

@jiro4989
Copy link
Owner Author

jiro4989 commented Jul 5, 2024

TODO:

  • Cache 削除方法を README で案内すること
  • README のトップに v2 にメジャーバージョンアップした理由を説明すること

@jiro4989 jiro4989 force-pushed the hotfix/mac-slow-installation branch from fdcba69 to 15245fa Compare July 6, 2024 00:24
@jiro4989 jiro4989 force-pushed the hotfix/mac-slow-installation branch from 4c9932a to 191fc15 Compare July 6, 2024 00:29
@jiro4989
Copy link
Owner Author

jiro4989 commented Jul 6, 2024

だいたい書けたな

Copy link

github-actions bot commented Jul 6, 2024

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

@jiro4989
Copy link
Owner Author

jiro4989 commented Jul 6, 2024

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

@jiro4989
Copy link
Owner Author

jiro4989 commented Jul 6, 2024

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

@jiro4989 jiro4989 changed the title BREAKING_CHANGES: installing nim with only shell script 🔥 #483 BREAKING_CHANGES: installing nim without choosenim 🔥 #483 Jul 6, 2024
@jiro4989 jiro4989 merged commit 2910000 into master Jul 6, 2024
16 checks passed
@jiro4989 jiro4989 deleted the hotfix/mac-slow-installation branch July 6, 2024 01:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant