Skip to content

Instantly share code, notes, and snippets.

@6temes
Last active June 8, 2021 21:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 6temes/045bda99eb54a1f99fa9dae5d74739f4 to your computer and use it in GitHub Desktop.
Save 6temes/045bda99eb54a1f99fa9dae5d74739f4 to your computer and use it in GitHub Desktop.
Github actions setup with Rspec and static code analysis for Ruby on Rails
env:
PGHOST: localhost
PGPASS: runner
PGUSER: runner
RAILS_ENV: test
DATABASE_URL: postgresql://runner:runner@localhost
name: Rails Tests
on: [push, pull_request_review]
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: traceroute
command: bin/traceroute --ci
requires_yarn: false
requires_gems: true
requires_db: false
- name: brakeman
command: bin/brakeman --ci
requires_yarn: false
requires_gems: true
requires_db: false
- name: database_consistency
command: bin/database_consistency --ci
requires_yarn: false
requires_gems: true
requires_db: true
- name: erblint
command: bin/erblint --ci
requires_yarn: false
requires_gems: true
requires_db: false
- name: rspec
command: bin/rspec --ci
requires_yarn: true
requires_gems: true
requires_db: true
- name: rubocop
command: bin/rubocop --ci
requires_yarn: false
requires_gems: true
requires_db: false
- name: eslint
command: bin/eslint --ci
requires_yarn: true
requires_gems: false
requires_db: false
- name: jest
command: bin/jest --ci
requires_yarn: true
requires_gems: false
requires_db: false
- name: stylelint
command: bin/stylelint --ci
requires_yarn: true
requires_gems: false
requires_db: false
name: ${{ matrix.name }}
services:
postgres:
image: postgres:11
env:
POSTGRES_USER: ${{ env.PGUSER }}
POSTGRES_PASSWORD: ${{ env.PGPASS }}
ports:
- 5432:5432
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Ruby
uses: ruby/setup-ruby@v1
if: ${{ matrix.requires_gems }}
- name: Ruby gem cache
uses: actions/cache@v2
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: ${{ runner.os }}-gems-
if: ${{ matrix.requires_gems }}
- name: Install gems
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
if: ${{ matrix.requires_gems }}
- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: '12'
if: ${{ matrix.requires_yarn }}
- name: Find yarn cache location
id: yarn-cache
run: echo "::set-output name=dir::$(yarn cache dir)"
if: ${{ matrix.requires_yarn }}
- name: JS package cache
uses: actions/cache@v2
with:
path: ${{ steps.yarn-cache.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-yarn-
if: ${{ matrix.requires_yarn }}
- name: Install packages
run: yarn install --pure-lockfile
if: ${{ matrix.requires_yarn }}
- name: Setup test database
run: bin/rails db:setup
if: ${{ matrix.requires_db }}
- name: Run ${{ matrix.name }}
run: ${{ matrix.command }}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment