rails testをPostgreSQLをDBに使ってGitHub Actionsで実行する

開発ブログ

結論

.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
タイトルとURLをコピーしました