はじめに
Haxe ビルド環境をセットアップするための krdlab/setup-haxe
を作成して Marketplace に公開しました.
背景
仕事の方で Haxe を使っているリポジトリ*1があって,このリポジトリから共通ライブラリが生成されている状況にあるのですが,これまではこの生成作業が手動で行われていました.
しかし作業自体はコマンド化されていること,またリリースのタイミングに規則性があることから自動化が可能であると判断し,関係者と相談した上で GitHub Actions を利用して自動化することにしました.
このとき setup アクションの Haxe 版があると便利なのですが,あいにくと Marketplace ではみつからなかったため,自宅に戻ってから調べて作成してみました.
アクションの作り方
krdlab/setup-haxe
は TypeScript で記述した JavaScript アクションです.公式の情報が大分充実しているため,基本的にはそれほど詰まらずに作成できます.
- https://help.github.com/en/actions/building-actions/creating-a-javascript-action
- https://github.com/actions/typescript-action
- TypeScript で書く場合のベース
- https://github.com/actions/toolkit
- アクションの開発に使う公式のライブラリ
- https://github.com/actions/setup-node
- 実装例の一つとして参考になる
@zeit/ncc
が便利
今回初めて使ったのですが,単純にコードをまとめたいだけならばとても便利でした.ncc build
とするだけで package.json
の main
フィールドを読み取って必要な依存関係をすべてまとめて,dist/index.js
として出力してくれます.
Haxe release asset の解凍
Haxe binaries の *.tar.gz
や *.zip
を解凍すると haxe_20191217082701_67feacebc
のような圧縮ファイル名からは推測しにくい名前のディレクトリが出現します.なので extractTar
や extractZip
の後に exec
で ls
を呼び出してディレクトリ名を解決させています*2.
Windows 環境におけるコマンドの実行
Windows Server 2019 にインストール済のソフトウェア一覧 からはぱっと見分からなかったのですが,実行ログに出力されたパスからすると Git for Windows が入っているみたいです.
あと extract 系の処理は ubuntu-latest
や macos-latest
だとコマンドが実行されるのですが,windows-latest
では PowerShell から .Net のクラスを利用して処理されていました.なるほど.
C:\windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command "$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('D:\a\_temp\6253d2a8-f1a0-4596-8e12-7b7dbcf71ad8', 'haxe-3.4.7-win64')" "C:\Program Files\Git\usr\bin\ls.exe" -1 haxe-3.4.7-win64
動作確認の方法
Linux 環境に対する動作確認であれば Docker イメージを利用して簡単に実施可能です.
$ docker run -it --rm -v $PWD:/work ubuntu bash root@xxx:/# cd work #=> 必要なツールがあれば事前に apt-get install root@xxx:/# env INPUT_HAXE-VERSION=4.0.5 node dist/index.js
アクション内部で @actions/core
の getInput
から値を取得している場合は,例えばキーが "haxe-version"
であれば環境変数として INPUT_HAXE-VERSION
を与えるとアクション側のコードでその値が取得できます.
Windows 環境対応がうまくいかない……
現時点で krdlab/setup-haxe
は runs-on: windows-*
に対応していません.以前対応を試みたとき,Haxe コマンドにパスは通るのですが haxelib setup
すると以下のようなエラーが発生してしまうため一旦対応コードを削除しました.
C:\hostedtoolcache\windows\haxe\3.4.7\x64\haxelib.exe setup C:\hostedtoolcache\windows\haxe\3.4.7\x64\lib ##[error]The process 'C:\hostedtoolcache\windows\haxe\3.4.7\x64\haxelib.exe' failed with exit code 3221225595
3221225595
は 0xC000007B
なので STATUS_INVALID_IMAGE_FORMAT
ですかね?ここは日を改めて再調査予定です*3.
おわりに
krdlab/setup-haxe
を作成したことで Haxe コードのビルドを GitHub Actions で手軽に実行できるようになりました.
Windows 環境向けにはまだ問題が残っている状態ですが,いずれは解決したいと考えています.