コピペコードで快適生活

明日使えるソースを自分のために

GithubActionsの設定

忘れる自信があるので、ymlの書き方をメモしておく。

# ファイルパス: .github/workflows/xxx.yml

name: CI
on:
  push:
    branches:
      master    # masterブランチへのpush,merge時に発火
  pull_request: # PR作成,更新時に発火

jobs:
  test:                   # 実行するJOBの識別子
    name: Test            # JOBの名前
    runs-on: self-hosted  # 指定の環境で実行する
    container: ruby:3.0.0 # JOBを動かすコンテナ
    env:
      RAILS_ENV: test
      MYSQL_HOST: mysql
    services: # メインコンテナとは別でコンテナを立ち上げる場合
      mysql:
        image: mysql:5.7.33
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
    steps:                        # ここで実行する処理やコマンドを指定する
      - uses: actions/checkout@v2 # リポジトリからのチェックアウトを行う「actions/checkout」アクションを実行する
        with:
          token: ${{ secrets.XXX_TOKEN }}
          submodules: true
      - name: Build               # ステップの1つ run の中で実際に実行するコマンドを指定する
        run: |
          bundle install --quiet --path vendor/bundle --without production
          bundle exec rake db:migrate
      - name: Rubocop
        run: |
          bundle exec rubocop -D
      - name: Rspec
        run: |
          bundle exec rspec spec
  deploy:
    name: Deploy
    runs-on: self-hosted
    container: ruby:3.0.0
    needs: [test]                         # 「test」のJOBが成功した場合のみ実行
    if: github.ref == 'refs/heads/master' # 指定ブランチの更新時のみ発火
    steps:
      - uses: actions/checkout@v2
        with:
          token: ${{ secrets.XXX_TOKEN }}
      - name: Deploy
        env:
          GITHUB_PERSONAL_ACCESS_TOKEN: ${{ secrets.XXX_TOKEN }}
        run: |
          mkdir ~/.ssh
          echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_rsa
          chmod 400 ~/.ssh/id_rsa
          eval `ssh-agent`
          ssh-add ~/.ssh/id_rsa
          bundle install --quiet --path vendor/bundle
          bundle exec cap production deploy