binarylogic/authlogic

View on GitHub
.github/workflows/test.yml

Summary

Maintainability
Test Coverage
name: gha-workflow-authlogic-test
on: [push, pull_request]
jobs:
  # Linting is a separate job, primary because it only needs to be done once,
  # and secondarily because jobs are performed concurrently.
  gha-job-authlogic-lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout source
        uses: actions/checkout@v4
      - name: Setup ruby
        uses: ruby/setup-ruby@v1
        with:
          # Set to `TargetRubyVersion` in `.rubocop.yml`
          ruby-version: 2.6
      - name: Bundle
        run: |
          gem install bundler -v 2.4.22
          bundle install --jobs 4 --retry 3
      - name: Lint
        run: bundle exec rubocop

  # The test job is a matrix of ruby/rails versions.
  gha-job-authlogic-test:
    name: Ruby ${{ matrix.ruby }}, ${{ matrix.gemfile }}.rb
    runs-on: ubuntu-latest
    services:
      gha-service-authlogic-mysql:
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_DATABASE: authlogic
        image: mysql:8.0
        options: >-
          --health-cmd="mysqladmin ping"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=3
        ports:
          - 3306:3306
      gha-service-authlogic-postgres:
        env:
          POSTGRES_PASSWORD: asdfasdf
        image: postgres
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432
    strategy:
      # Unlike TravisCI, the database will not be part of the matrix. Each
      # sub-job in the matrix tests all three databases. Alternatively, we could
      # have set this up with each database as a separate job, but then we'd be
      # duplicating the matrix configuration three times.
      matrix:
        gemfile:
          ["rails_5.2", "rails_6.0", "rails_6.1", "rails_7.0", "rails_7.1"]

        # To keep matrix size down, only test highest and lowest rubies. In
        # `.rubocopy.yml`, set `TargetRubyVersion`, to the lowest ruby version
        # tested here.
        ruby: ["2.6", "2.7"]

        exclude:
          # rails 7 requires ruby >= 2.7.0
          - ruby: "2.6"
            gemfile: "rails_7.0"
          - ruby: "2.6"
            gemfile: "rails_7.1"
    steps:
      - name: Checkout source
        uses: actions/checkout@v2
      - name: Setup ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
      - name: Bundle
        run: |
          gem install bundler -v 2.4.22
          bundle install --jobs 4 --retry 3
        env:
          BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.rb

      # MySQL db was created above, sqlite will be created during test suite,
      # when migrations occur, so we only need to create the postgres db. I
      # tried something like `cd .....dummy_app && ....db:create`, but couldn't
      # get that to work.
      - name: Create postgres database
        run: |
          createdb \
            --host=$POSTGRES_HOST \
            --port=$POSTGRES_PORT \
            --username=postgres \
            authlogic
        env:
          PGPASSWORD: asdfasdf
          POSTGRES_HOST: localhost
          POSTGRES_PORT: 5432

      # The following three steps finally run the tests.
      # We run `rake test` instead of the default task, which includes rubocop,
      # because rubocop is done (once!) in a separate job above.
      - name: Test, sqlite
        run: bundle exec rake test
        env:
          BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.rb
          DB: sqlite
      - name: Test, mysql
        run: bundle exec rake test
        env:
          BACKTRACE: 1
          BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.rb
          DB: mysql
          AUTHLOGIC_DB_NAME: authlogic
          AUTHLOGIC_DB_USER: root
          AUTHLOGIC_DB_HOST: 127.0.0.1
          AUTHLOGIC_DB_PORT: 3306
      - name: Test, postgres
        run: bundle exec rake test
        env:
          BACKTRACE: 1
          BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.rb
          DB: postgres
          AUTHLOGIC_DB_NAME: authlogic
          AUTHLOGIC_DB_USER: postgres
          AUTHLOGIC_DB_HOST: 127.0.0.1
          AUTHLOGIC_DB_PORT: 5432
          AUTHLOGIC_DB_PASSWORD: asdfasdf