web_bonsaiの日記

web開発の学習日記です。誰に見せるためでもないただの日記です。

GitHub Actionsでテストを自動化する | Mac + Docker + Rails その0028

参考にさせていただいたページ

今日の環境

ローカル

  • M1 Mac
  • macOS Monterey
  • docker 20.10.14
  • docker-compose 2.5.0

リモート

  • さくらのVPS
  • CentOS 9
  • docker 20.10.16
  • docker-compose 1.29.2

概要

二つのjobを並列で実行するようにしました。

共通の処理はaction.ymlにまとめました。

.github/workflows/rails_test.ymlの作成とその記述内容

ワークフローのディレクトリとファイルを作成します。

% mkdir -p .github/workflows/
% vim .github/workflows/rails_test.yml

以下の通り記述します。

name: Rails Test Workflow
on: push
jobs:
  rubocop:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: setup_docker_compose_services
        uses: ./.github/actions/setup_docker_compose_services
      - name: docker-compose run --rm app rubocop
        run: docker-compose run --rm app rubocop
  rspec:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: setup_docker_compose_services
        uses: ./.github/actions/setup_docker_compose_services
      - name: docker-compose run --rm app rspec
        run: docker-compose run --rm app rspec

.github/actions/setup_docker_compose_services/action.ymlの作成とその記述内容

actionを格納するディレクトリとファイルを作成します。

% mkdir -p .github/actions/setup_docker_compose_services/
% vim .github/actions/setup_docker_compose_services/action.yml

以下の通り記述します。

name: "setup_docker_compose_services"
runs:
  using: "Composite"
  steps:
    - name: create docker-compose.yml
      run: cp docker-compose.sample.yml docker-compose.yml
      shell: bash
    - name: create nginx.conf
      run: cp nginx/nginx.sample.conf nginx/nginx.conf
      shell: bash
    - name: create nginx log files
      run: touch nginx/log/nginx/access.log && touch nginx/log/nginx/error.log
      shell: bash
    - name: create rails database.yml
      run: cp rails/config/database.sample.yml rails/config/database.yml
      shell: bash
    - name: docker-compose run --rm app bundle install
      run: docker-compose run --rm app bundle install
      shell: bash
    - name: docker-compose build
      run: docker-compose build
      shell: bash
    - name: docker-compose run app rails db:create
      run: docker-compose run app rails db:create
      shell: bash
    - name: docker-compose -v action
      run: docker-compose -v
      shell: bash