icpc-jag / rime

Rime: Automation Tool for Programming Contest Organizers
MIT License
45 stars 28 forks source link

コンテスト準備時のGitHub Actions整備について #73

Open tokoharu opened 4 years ago

tokoharu commented 4 years ago

現在 @not522 さんの助言もあり、標題の件について検討しています。 ここで取り組みたいことは、push時の各種情報のArtifact化であり、成果物はexample以下に配置しようと考えています。

ここでArtifact化させる情報は次の二点を想定しています。

現在実験的にコードを書いており、下記のような形で動作することができています。 https://github.com/tokoharu/rime/runs/685658254

現在の問題点は次の点かと思います。コメントなどいただければ幸いです。

blue-jam commented 4 years ago

エラーメッセージを見る限り、kotlinのコンパイラであるkotlincが見つけられていないようです。sdkmanでのインストールは成功しているっぽいので、kotlincがあるディレクトリにPATHが通っていないんじゃないでしょうか。

参考になるかはわかりませんが、以前自分がdockerでrimeを動かそうとしたとき、kotlincとkotlinを無理やりシンボリックリンクで/binに追加しています。(参考)

追記: 今日はもう遅いので明日の夜にでも試してみます。

blue-jam commented 4 years ago

あまり美しくないですが、とりあえず動かす方法を見つけました。kotlincが必要になるステップで、次のコマンドを最初に実行すると成功します。(実際のworkflowファイル

source "${HOME}/.sdkman/bin/sdkman-init.sh"

以降は、色々調べたり、試したりしたことのメモです。

sdkmanはインストール時に.bashrc, .bash_profile, または .zshrcsdkman-init.shを読み込む行を追加します。(これはインストールスクリプトを読むとわかる)このsdkman-init.shはsdkman自身と、それがインストールしたツール郡へPATHを通すスクリプトです。(おそらく)

一方、GitHub Actionsの実行環境では、.bashrcなどを読み込むような設定になっていないようです。(ここを斜め読みするとそれっぽいことが書いてあった)「ツールをインストールする専用のActionを作り、シェル起動時のスクリプトに頼らずに、PATHを通していけ」という思想らしいです。

リンク先の議論にある、shell: bash -l {0}を追加して実行してみるというのも試してみましたが、うまく動きませんでした。sdkman-init.shの代わりに.bashrcを直接読み込んでみるのも試してみましたが、そちらもうまく動きませんでした。たぶん、まだどこかに罠があるんだと思います。

追記: /binにシンボリックリンクを追加するやつは、パーミッションがねえぞと怒られました。

tokoharu commented 4 years ago

@blue-jam 色々試していただきありがとうございます!書き換えたら確かに動きました!! 動いたワークフロー (AC)

こういうことに取り組んだことが無くて知りませんでしたが、環境をクリーンに保つ思想はこういう時に面倒になるんですね。