結論
.github/workflows/test.yml
というファイルを作成して以下の内容を記述すると、GitHub ActionsのworkflowsでDatabaseとしてPostgreSQLを利用してrails testを実行することが出来ます。
name: test
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 30
services:
postgres:
image: postgres:14
ports:
- 5432:5432
env:
POSTGRES_PASSWORD: your_password
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v4
- name: Set up Ruby 3.1
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.1
bundler-cache: true
- name: Create and migrate database
run: |
bundle exec rails db:create RAILS_ENV=test
bundle exec rails db:migrate RAILS_ENV=test
- name: Run rails test
run: |
bundle exec rails test
動作はRails 7.0.4で確認しています。なお、Rails 6以前でnodeやyarnを利用している場合には、もう少しrunの記述が必要になると思われます。
ちょっとした説明
PostgreSQLのサービスについては以下を参考にしました。
PostgreSQLサービスコンテナの作成 - GitHub Docs
ワークフローで利用するPostgreSQLサービスコンテナを作成できます。 このガイドでは、コンテナで実行されるジョブか、ランナーマシン上で直接実行されるジョブのためのPostgreSQLサービスの作成例を紹介します。
bundler-cache: true
を設定することで、bundle install
が走るようにしています。詳細は以下を参照して下さい。
GitHub - ruby/setup-ruby: An action to download a prebuilt Ruby and add it to the PATH in 5 seconds
An action to download a prebuilt Ruby and add it to the PATH in 5 seconds - ruby/setup-ruby
更新履歴
- 2024/01/26: actions/checkout@v3では「Node.js 16 actions are deprecated」という警告が出るようになったため、actions/checkout@v4に変更
Rails関連のその他Tips
Railsでの開発に関係する様々なTips(短めの技術情報)をTechTipsで発信しています。ご興味があればぜひご覧ください。
Ruby