トップ «前の日記(2025/03/04 (火) ) 最新 次の日記(2025/03/06 (木) )» 編集 RSS feed

HsbtDiary


2025/03/05 (水) [長年日記]

GitHub Actions を使って WSL の環境でテストをする

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-alltest-spec も刺さったり落ちまくるのでテストを回すという用途にはまだまだ足りないものがあるようだった。手元でも Ruby CI の方でも WSL2 では全てのテストがパスするのでなんだろうなあ。

Copilot の Agent mode を使って gem を作ってみた

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 は入れるな、とかそういうのをいちいち指示するのはめちゃくちゃ無駄なので指示書を最初から食わせるというのは理にかなってるな、と感じた。

流石にこれは簡単すぎるので、もう少し複雑なやつもやっているところ。