GitHub Actions

Episode #258 by Teacher's Avatar David Kimura

Summary

GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. In this episode, learn to set up GitHub Actions on your Ruby on Rails application with automated tests, code coverage reporting, and security testings.
ci/cd rails 13:20

Resources

Download Source Code

Summary

.github/workflows/main.yml
name: CI

on:
  push:
    branches: [ master, develop ]
  pull_request:
    branches: [ master, develop ]

jobs:
  test:
    # services:
    #   db:
    #     image: postgres:11
    #     ports: ['5432:5432']
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Setup Ruby
        uses: ruby/setup-ruby@v1.45.0
        with:
          ruby-version: 2.7.1

      - uses: Borales/actions-yarn@v2.3.0
        with:
          cmd: install

      - name: Install Dependencies
        run: |
          # sudo apt install -yqq libpq-dev
          gem install bundler

      - name: Install Gems
        run: |
          bundle install

      - name: Prepare Database
        run: |
          bundle exec rails db:prepare

      - name: Run Tests
        # env:
        #   DATABASE_URL: postgres://postgres:@localhost:5432/databasename
        #   RAILS_MASTER_KEY: ${{secrets.RAILS_MASTER_KEY}}
        run: |
          bundle exec rails test

      - name: Create Coverage Artifact
        uses: actions/upload-artifact@v2
        with:
          name: code-coverage
          path: coverage/

  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Setup Ruby
        uses: ruby/setup-ruby@v1.45.0
        with:
          ruby-version: 2.7.1

      - name: Install Brakeman
        run: |
          gem install brakeman

      - name: Run Brakeman
        run: |
          brakeman -f json > tmp/brakeman.json || exit 0

      - name: Brakeman Report
        uses: devmasx/brakeman-linter-action@v1.0.0
        env:
          REPORT_PATH: tmp/brakeman.json
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}