倒産した会社の organization で作っていた CI に依存しているプロジェクトがあったので、決済ができずビルドの無料枠が枯渇して PR が死んだりしていた。
「おい誰がやるんだよ……」という雰囲気で棚上げされそうだったので、ガッと GithubAction に移行した。
CircleCI から GithubAction への移行
Github 公式のドキュメントもあるにはあるのだが、結局「がんばってください」という具合で、コンバーターなどを提供しているわけではなさそう。
こういう単一ファイルのマイグレーションはそう、 Copilot くんに任せるのが一番ですね。
ということで現在の .circleci/config.yml を Github Copilot (Claude sonnet4 が選択されてた) 読み込ませて雑に変更した。
修正なしで一応動いた
概ね動いたけど、 Rspec が途中で謎の死を遂げると全ての処理が終わってしまう。 ので、Copilot に雑に提案させて修正をした。
on-failure などで制御すると途中で死んだ時にフォロー出来ないので、 exit code を自前で制御します、などという話だった。
rspec: name: RSpec Tests runs-on: ubuntu-latest needs: build ... steps: - name: Run RSpec run: | mkdir -p /tmp/test-results/rspec set +e # Disable exit on error temporarily bundle exec rspec --color --require spec_helper spec \ --format documentation \ --format RspecJunitFormatter --out /tmp/test-results/rspec/rspec.xml \ --format html --out /tmp/test-results/rspec/rspec.html \ --format json --out /tmp/test-results/rspec/rspec.json RSPEC_EXIT_CODE=$? set -e # Re-enable exit on error # Always ensure the XML file exists for reporting, even if empty if [ ! -f "/tmp/test-results/rspec/rspec.xml" ]; then echo '<?xml version="1.0" encoding="UTF-8"?><testsuites><testsuite name="RSpec" tests="0" failures="0" errors="1"><testcase name="Test execution failed"><error message="RSpec ex> fi # Exit with the original RSpec exit code to preserve CI status exit $RSPEC_EXIT_CODE ...
libffi.so.6 がない
Ubuntu-latest を指定している都合上、 CircleCI と GithubActions でバージョンが異なってしまったようで、依存ライブラリが不足しているらしい。
雑に ln -s でリンクしても動くらしくて、バギーではあるけど動くことが重要なのでこれで回避した。
感想
おまけ
Copilot くんの対応外になった所をちまちまと直して「動いた〜」などという感じで、結局一日かかったりしていた。
ただこれシークレットを追加する必要があったらしく、後日レビューの時にコミット積んでもらったら失敗していた spec が通ったりしていたので、ヤハリ開発にメインで参加しないとこのあたりパッと出てこなくてダメだな〜、と反省したりしていた。