juliaでGitHubActionsを学んでみる
GitHub Actionsについて,雑誌を参考に少し操作してみたのですが,Goに慣れてなさすぎてしっくりこなかったため,ある程度慣れてる言語から挑戦してみました.
CIにあたる単体テストまではなんとか完了したので,備忘を書きます.
Pkg.generate("$作業用フォルダ名")
REPLから以下でも良いのですが,これやりましょう.
pkg> getnerate hoge
Project.tomlがないとエラーが出ましたので.
久々にちゃんとJuliaのプログラム書いたので,色々忘れてましたね…
勝手に作業用フォルダ作って,色々いじってましたがちゃんとプロジェクトファイルが必要ってことですね…
諸々設定ファイル記載
プロジェクト用のディレクトリは以下にしました
test_julia
├ .git
├ .github
└ workflows
└ julia.yaml
├ Manifest.toml
├ Project.toml
├ README.md
├ src
└ test_julia.jl
└ test
└ runtests.jl
srcディレクトリ内にtest_julia.jlというファイルを,testディレクトリ内にruntests.jlを作成しました.
最初はこれでgithub actionの動きを確認していたのですが,そもそもJuliaのテストのやり方がわからず,これだとエラーなく走り切ることの確認しかできてなかったです.
module test_julia
greet() = print("Hello World!")
end # module
using Test
include("../src/test_julia.jl")
初めて使ったのですが,Test.jlは標準ライブラリに含まれている単体テスト用のパッケージらしいです.
ディレクトリを分けていたことを忘れていて,test_julia.jlのみ記載したらエラーになりました.include関数に渡す引数は関数呼び出し元から相対パスで指定になるそうです.
Testを使うならもっとイメージつきやすくしようと思って,test_julia.jlとruntests.jlを書き直しました.
module test_julia
function f(x,y)
return x^2+y^2
end
end # module
using Test
using test_julia
@test test_julia.f(1,2) == 5
@test test_julia.f(2,3) == 13
@testのマクロにてtrueになればテストケースは通ったことになるそうです.githubのGUIでも確認できました.
でもって最後というか,このactionの大元になる.github/workflows/julia.yamlについてですね.
以下サイトを参照しました.
name: Julia test
on:
push:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v1
with:
version: '1.7'
- uses: julia-actions/cache@v1
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1
push時にトリガーされます.
actions/checkout@v4はGithub Actionsの機能で,リポジトリからgit cloneしてくるらしいです.
v4の4はメジャーバージョンでマイナーバージョンに当たる部分は最新のものを使っているらしいです.指定していないので.
バージョンそのものを指定しないと最新バージョンを使うらしいですが,セキュリティ上よろしくないので,固定したほうが良いらしいです.
juliaのバージョンは1.7,buildpkgは文字通りbuildステップで,runtestでようやく今回のメインであるテストを実施します.
雑感
機能の初歩の初歩しか触れてないですし,juliaのコードも本当に簡単な処理でしかないですが,github actionsでpushしたらテストが自動でまわることを体感できました.
現職だとインフラ部分なのですがテストケースをエクセルに書いて,1個1個消化していくようなスタイルで行っております.
過去の実績に倣いながら,テスト項目を作ったことがあるのですが,改めてgithub actionsみたいな自動化の余地もあるとは思いました.
linuxやWindowsでコマンドを打ってテストする項目もいくつかありますから.
Discussion