Github Actionsが使えるようになったので、ChiselのCI環境を構築できないかを試してみる。
とりあえずGithub Actionsをお試し
最初にやるべきっぽい"Simple workflow"を実行してみる。
最初は"Start Commit"を押した際にプルリクを使った。
この際に何をどう間違えたのかワークフローの設定用のYAMLファイルがリポジトリの直下に登録されてしまい、その状態でgit pull
を実行しても何も起こらなかった。
再度トライ
もう一度セットアップをしてみた所".github/workflows"の下に"main.yaml"が生成されていた。
この状態でコミットしてプッシュしてみる。
なんか動いた!
タスクの詳細を開いてみると" successful 10 minutes ago in 4s "と出て成功していた。
main.yamlを確認
実行されたCIワークフローは以下の様なもの。 github actionsで実際に実行されたワークフローと併せて確認すると、何も知らなくてもなんとなく読める感じ。
name: CI # ワークフローの名称 on: [push] # トリガーアクション。今回はpush時に実行 jobs: build: runs-on: ubuntu-latest # 最新版のUbuntuで実行する steps: - uses: actions/checkout@v1 # どうもこれで仮想環境化に対象リポジトリのデータがcloneされている様子 - name: Run a one-line script # 1行のスクリプトを実行 run: echo Hello, world! - name: Run a multi-line script # 複数行のスクリプトを実行 run: | # | を入れておくと、複数のコマンドが書けるみたい echo Add other actions to build, echo test, and deploy your project.
uses
ってので他の人が定義した各種処理をインポートして実行できる、、という感じに見えた。
もう少し調べてみる
先ほどのmain.yaml
のruns-on
の部分から何となくはわかると思うがGithub Actionsで自動実行するワークフローは仮想環境上で動作するようだ。
ということで幾つか気になることを調べてみた。
OSのバージョン
まずはubuntu-latest
ってどれになるの?という話から。以降に示す情報はsteps
の部分にそれらを調べるためのコマンドを追加して実際に実行した結果。
CPUの情報
次はCPUの情報。これは/proc/cpuinfoを表示させたもの。 ちょっと情報が多かったのでテキストで。
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 79 model name : Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz stepping : 1 microcode : 0xffffffff cpu MHz : 2294.681 cache size : 51200 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 20 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs bogomips : 4589.36 clflush size : 64 cache_alignment : 64 address sizes : 44 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 79 model name : Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz stepping : 1 microcode : 0xffffffff cpu MHz : 2294.681 cache size : 51200 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 20 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs bogomips : 4589.36 clflush size : 64 cache_alignment : 64 address sizes : 44 bits physical, 48 bits virtual power management:
ということでXeonの2-core。
aptは使えるかどうか
結論から書くと使えた。以下のような処理が正常に終了する。
- name: Build verilator run: | sudo apt install flex bison
ここまでわかればとりあえず環境を作ることは可能なので試してみた。
Chisel-templateの環境で自動テスト実行
というわけでこちらが今日のメインの話。Chisel-templateの環境には最初からGCDのChiselモジュールとそれに対してのテストが実装されているので、これを自動実行する環境を作ってみた。
まずは適当なリポジトリをgithubに作って、そこにChisel-templateのデータを展開したものを準備。
そのリポジトリの直下に".github/workflows"というディレクトリを追加して、そこに自動テスト用のYAMLファイルを追加する。 中身は以下のようなもの。(2019/10/13修正:sbtのインストールをapt経由にしました)
- chisel-test.yaml
name: Chisel-test on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Build verilator run: | sudo apt install flex bison gpg wget https://www.veripool.org/ftp/verilator-4.018.tgz tar xf verilator-4.018.tgz cd verilator-4.018 ./configure make -j 2 sudo make install verilator --version - name: Install sbt run: | echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823 sudo apt update sudo apt install sbt - name: Run test run: sbt "test"
とりあえず今回は自分で色々必要なデータをかき集めて、実行する形にしている。Javaは最初からインストールされていたので
- verilator
- sbt
が主に必要なもの。
実行結果
GCDのテストがFAILするようにしたもの/PASSするようにしたものをそれぞれコミット&プッシュして自動実行した際の画面が以下。
- テストがFAILするようにしたもの
- テストがPASSするようにしたもの
ただverilatorのビルドに6分半かかってるので、そこが若干ネック。バージョンが新しいものでなくても大丈夫ならapt
コマンドでインストールすることも可能なので、そちらのほうが早いはず。
またこの辺の作業をツイッターでつぶやいていた所、Docker hubにchisel3-toolsというのがあるよーと教えて頂いた。
actions自体はよく分かりませんが、
— Nikolay Nez (@nikolay_nez) October 6, 2019
もしdocker hubのイメージ使えたりできたら、ucbbar/chisel3-toolsにしておくとそれっぽいverilatorとsbtが既に入っているからそのまま使えますよ。
chisel3のcircleciがそうやって動いてますhttps://t.co/1A8anBbmhC
試してみて、とりあえずpull&runが出来ることは確認できているのだが、まだうまくフローに組み込めていないのでもう少し調査してみようと思う。 こちらはDockerを動かすのに2分半くらいだったので、うまく動けばこちらを使った方が確実に早くなる、、ハズ!