jbox-web/ajax-datatables-rails

View on GitHub
.github/workflows/ci.yml

Summary

Maintainability
Test Coverage
---
name: CI

on:
  push:
    branches:
      - '**'
  pull_request:
    branches:
      - '**'
  schedule:
    - cron: '0 4 1 * *'

jobs:
  rspec:
    runs-on: ubuntu-latest

    env:
      ORACLE_COOKIE: sqldev
      ORACLE_FILE: oracle11g/xe/oracle-xe-11.2.0-1.0.x86_64.rpm.zip
      ORACLE_HOME: /u01/app/oracle/product/11.2.0/xe
      ORACLE_SID: XE

    services:
      postgres:
        image: 'postgres:16'
        ports: ['5432:5432']
        env:
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: ajax_datatables_rails
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

      # Using docker image fails with
      # invalid reference format
      # mariadb:
      #   image: 'mariadb:10.3'
      #   ports: ['3306:3306']
      #   env:
      #     MYSQL_ROOT_PASSWORD: root
      #     MYSQL_DATABASE: ajax_datatables_rails
      #   options: >-
      #     --health-cmd 'mysqladmin ping'
      #     --health-interval 10s
      #     --health-timeout 5s
      #     --health-retries 3

    strategy:
      fail-fast: false
      matrix:
        ruby:
          - '3.3'
          - '3.2'
          - '3.1'
          - '3.0'
          - 'head'
        rails:
          - rails_7.1.0
          - rails_7.0.8
          - rails_6.1.7
        adapter:
          - sqlite3
          - postgresql
          - mysql2
          - oracle_enhanced
          - postgis
          # - trilogy
        exclude:
          - rails: rails_7.1.0
            adapter: oracle_enhanced

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

      - name: Setup Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}

      - name: Set DB Adapter
        env:
          RAILS_VERSION: ${{ matrix.rails }}
          DB_ADAPTER: ${{ matrix.adapter }}
          CUSTOM_ORACLE_FILE: ${{ secrets.CUSTOM_ORACLE_FILE }}

        # See: https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md#mysql
        run: |
          if [[ "${DB_ADAPTER}" == "mysql2" ]] || [[ "${DB_ADAPTER}" == "trilogy" ]]; then
            sudo systemctl start mysql.service
            mysql -u root -proot -e 'create database ajax_datatables_rails;'
          fi

          if [[ "${DB_ADAPTER}" == "oracle_enhanced" ]]; then
            ./spec/install_oracle.sh
            # Fix error : libnnz11.so: cannot open shared object file: No such file or directory
            sudo ln -s ${ORACLE_HOME}/lib/libnnz11.so /usr/lib/libnnz11.so
          fi

      - name: Setup Ruby cache
        uses: actions/cache@v4
        with:
          path: vendor/bundle
          key: ${{ runner.os }}-gems-${{ matrix.ruby }}-${{ matrix.rails }}-${{ matrix.adapter }}-${{ hashFiles('**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-gems-${{ matrix.ruby }}-${{ matrix.rails }}-${{ matrix.adapter }}-

      - name: Bundle
        env:
          RUBY_VERSION: ${{ matrix.ruby }}
          RAILS_VERSION: ${{ matrix.rails }}
          DB_ADAPTER: ${{ matrix.adapter }}
          BUNDLE_GEMFILE: gemfiles/${{ matrix.rails }}.gemfile
        run: |
          gem install bundler
          bundle config path vendor/bundle
          bundle install --jobs 4 --retry 3

      - name: RSpec & publish code coverage
        uses: paambaati/codeclimate-action@v5.0.0
        env:
          RAILS_VERSION: ${{ matrix.rails }}
          DB_ADAPTER: ${{ matrix.adapter }}
          BUNDLE_GEMFILE: gemfiles/${{ matrix.rails }}.gemfile
          CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
        with:
          coverageCommand: bin/rake