なにこれ?
Github Actions で Ruby on Rails の CI をやりたい、という話をする。ただ、ちょっとマニアックな路線でいこうと思う。
コード
今回のコードは Github のレポジトリ にもあります。
アジェンダ
Github Actions は .github/workflows/
にあるコードを読んで実行してくれるみたいなので、プロジェクトのルートディレクトリ傘下に前記の階層を作り、その後 rails_test.yaml
でも作成して CI のコードを書けば、docker-compose up したらローカル環境と同じ条件で rails test がうごく、この記事を書き始めるまでは、そう思っていたのです。
何が悪かったのか
コンテナのホスト側とコンテナ側の user id の不一致のせいで、mkdir
とかが実行されず、テストが実行できなかった。
解決した方法
docker-compose
で起動したときに uid と gid をコンテナとホストで一致させてやると、この問題は解決できそうだったので、下記のようにした。
# docker-compose.yaml
services:
application-server:
user: "${USER_ID}:${GROUP_ID}"
そんでもって、こうすると Github Actions の CI で動いてくれるみたいだ
$ USER_ID=$(id -u) GROUP_ID=$(id -g) docker-compose build
$ USER_ID=$(id -u) GROUP_ID=$(id -g) docker-compose run -T application-server yarn install --check-file
$ USER_ID=$(id -u) GROUP_ID=$(id -g) docker-compose run -T application-server bundle exec rails db:migrate:reset
$ USER_ID=$(id -u) GROUP_ID=$(id -g) docker-compose run -T application-server bundle exec rails test
おわりに
CI 関連、地味に時間が取られるのが辛い...