Ruby では WSL でもまともに動くように、と Ruby CI で Azure 上に作った VM で WSL2 を動かしそこでテストを回しているものの、ライセンスであるとか、プロビジョニングが複雑ということもありなんとかできないかなと思い GitHub Actions で WSL を動かしてテストを回してみた。
https://github.com/ruby/ruby/pull/12846
jobs:
wsl:
runs-on: windows-latest
steps:
- name: Install winget
uses: Cyberboss/install-winget@v1
- name: Install or update WSL
uses: Ubuntu/WSL/.github/actions/wsl-install@main
with:
distro: Ubuntu-24.04
- name: Install dependencies
uses: Ubuntu/WSL/.github/actions/wsl-bash@main
with:
distro: Ubuntu-24.04
working-dir: /tmp/github/
exec: |
DEBIAN_FRONTEND=noninteractive sudo apt update
DEBIAN_FRONTEND=noninteractive sudo apt install -y ruby build-essential autoconf libssl-dev libyaml-dev zlib1g-dev libgmp-dev libffi-dev
- name: Check out the repository
uses: Ubuntu/WSL/.github/actions/wsl-checkout@main
with:
distro: Ubuntu-24.04
working-dir: /tmp/github/
submodules: true
- name: Build
uses: Ubuntu/WSL/.github/actions/wsl-bash@main
with:
distro: Ubuntu-24.04
working-dir: /tmp/github/
exec: |
./autogen.sh
./configure --disable-install-doc
make ruby -j4
make extract-gems
make -j4
- name: Test
uses: Ubuntu/WSL/.github/actions/wsl-bash@main
with:
distro: Ubuntu-24.04
working-dir: /tmp/github/
exec: |
./ruby -v
# make check TESTS="-j4" MSPECOPT="-j"
元々これは https://github.com/ubuntu/WSL という Ubuntu が WSL イメージを作っているリポジトリを見つけて、そこを眺めている時に見つけたものなんだけど、ビルドだけならこれで全然いける、ということがわかった。なお、GitHub Actions の Windows runner には winget が入っておらず、Ubuntu/WSL では winget を必要とするので先頭で強引にねじ込んでいる。どうやら Ubuntu では Windows runner を使わずに専用の Azure VM を別途作ってるみたいだった。
ただ上記をそのまま実行するだけだと test-all
も test-spec
も刺さったり落ちまくるのでテストを回すという用途にはまだまだ足りないものがあるようだった。手元でも Ruby CI の方でも WSL2 では全てのテストがパスするのでなんだろうなあ。
Cline などに金を払って試すほどではないものの、身体性の拡張という意味で Coding support としての AI Agent には興味がある。そんなわけで自分でコードを書くのは基本やらずに VScode の Copilot を Agent mode で動かして主に Claude 3.7 Sonnet を使いつつ rate limit になったら 3.5 に切り替えてコードを書かせるって感じで作ってみた。
お題はインストールしている gem 全部のソースコードを取得するワンライナーをファイルに保存して context として与えた上で「gem install ごとに gem のソースコードを ghq get を使って clone する rubygems の plugin を作って」と依頼してできたのがこれ。
https://github.com/hsbt/rubygems-ghq
この程度ならほぼ一発でディレクトリ構造から作成してくれた。おかしいところとして rake release
が使えなかったりしたので、「bundler の rake task を使って rake release できるようにして」とか「ruby org の下で入れているような trusted publisher の github actions を入れて」くらいで完成した。
他の人も書いてるけど、プロジェクトのレイアウトをこうしてくれ、とか trailing white-space は入れるな、とかそういうのをいちいち指示するのはめちゃくちゃ無駄なので指示書を最初から食わせるというのは理にかなってるな、と感じた。
流石にこれは簡単すぎるので、もう少し複雑なやつもやっているところ。