AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

CI を CircleCI から GithubAction に移した

倒産した会社の organization で作っていた CI に依存しているプロジェクトがあったので、決済ができずビルドの無料枠が枯渇して PR が死んだりしていた。

「おい誰がやるんだよ……」という雰囲気で棚上げされそうだったので、ガッと GithubAction に移行した。

CircleCI から GithubAction への移行

docs.github.com

Github 公式のドキュメントもあるにはあるのだが、結局「がんばってください」という具合で、コンバーターなどを提供しているわけではなさそう。

こういう単一ファイルのマイグレーションはそう、 Copilot くんに任せるのが一番ですね。

ということで現在の .circleci/config.ymlGithub 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 でバージョンが異なってしまったようで、依存ライブラリが不足しているらしい。

sakurawi.hateblo.jp

www.chazine.com

stackoverflow.com

雑に ln -s でリンクしても動くらしくて、バギーではあるけど動くことが重要なのでこれで回避した。

感想

Github くんはコンバーターを用意してください。

おまけ

Copilot くんの対応外になった所をちまちまと直して「動いた〜」などという感じで、結局一日かかったりしていた。

ただこれシークレットを追加する必要があったらしく、後日レビューの時にコミット積んでもらったら失敗していた spec が通ったりしていたので、ヤハリ開発にメインで参加しないとこのあたりパッと出てこなくてダメだな〜、と反省したりしていた。