Growstuff/growstuff

View on GitHub
.github/workflows/ci.yml

Summary

Maintainability
Test Coverage
name: CI

on: [pull_request]

jobs:
  contributors:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install ruby version specified in .ruby-version
        uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true
      - name: Install gem bundle
        run: |
          gem install bundler
          bundle install
      - name: Check contributors
        run: |
          bundle exec script/check_contributors_md.rb
  rspec:
    runs-on: ubuntu-latest
    services:
      db:
        image: postgres
        env:
          ##
          # The Postgres service fails its docker health check unless you
          # specify these environment variables
          #
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: growstuff_test
        ports: ['5432:5432']
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    env:
      APP_DOMAIN_NAME: localhost:3000
      APP_PROTOCOL: http
      CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
      DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
      DEVISE_SECRET_KEY: secret
      ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
      GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
      GROWSTUFF_FLICKR_KEY: secretkey"
      GROWSTUFF_FLICKR_SECRET: secretsecret
      GROWSTUFF_SITE_NAME: "Growstuff (travis)"
      RAILS_ENV: test
      RAILS_SECRET_TOKEN: supersecret

    steps:
      - name: Checkout this repo
        uses: actions/checkout@v4

      - name: Configure sysctl limits
        run: |
          sudo swapoff -a
          sudo sysctl -w vm.swappiness=1
          sudo sysctl -w fs.file-max=262144
          sudo sysctl -w vm.max_map_count=262144

      - name: Start Elasticsearch
        uses: elastic/elastic-github-actions/elasticsearch@master
        with:
          stack-version: 7.5.1

      ##
      # Cache Yarn modules
      #
      # See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
      #
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"
      - name: Setup yarn cache
        uses: actions/cache@v4
        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - name: Install required OS packages
        run: |
          sudo apt-get -y install libpq-dev google-chrome-stable

      - name: Install NodeJS
        uses: actions/setup-node@v4
        with:
          node-version: '12'

      - name: Install Ruby (version given by .ruby-version) and Bundler
        uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true

      - name: Install required JS packages
        run: yarn install

      - name: install chrome
        run: sudo apt-get install google-chrome-stable

      - name: Prepare database for testing
        run: bundle exec rails db:prepare
        
      - name: precompile assets
        run: bundle exec rails assets:precompile
        
      - name: index into elastic search
        run: bundle exec rails search:reindex

      - name: Run rspec (report results to Percy.io and CodeClimate)
        run: bundle exec rspec spec -fd

      - name: Report to code climate
        run: |
          gem install codeclimate-test-reporter
          codeclimate-test-reporter