name: Main on: push: branches: [ "main" ] pull_request: branches: [ "main" ] workflow_dispatch: permissions: contents: read env: CC_TEST_REPORTER_ID: "ac477089fe20ab4fc7e0d304cab75f72d73d58a7596d366935d18fcc7d51f8f9" # `github.ref` points to the *merge commit* when running tests on a pull request, which will be a commit # that doesn't exists in our code base. Since this workflow triggers from a PR, we use the HEAD SHA instead. # # NOTE: These are both used by Code Climate (cc-test-reporter). GIT_COMMIT_SHA: ${{ github.event.pull_request.head.sha }} GIT_BRANCH: ${{ github.head_ref }} jobs: matrix-test: runs-on: ubuntu-latest continue-on-error: ${{ matrix.allow-failure || false }} strategy: fail-fast: false matrix: ruby-version: - '3.1' - '3.2' - '3.3' - 'jruby-9.3.10' # oldest supported jruby - 'jruby' include: # HEAD-versions - ruby-version: 'head' allow-failure: true - ruby-version: 'jruby-head' allow-failure: true - ruby-version: 'truffleruby-head' allow-failure: true steps: - uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: rubygems: latest ruby-version: ${{ matrix.ruby-version }} bundler-cache: ${{ !startsWith(matrix.ruby-version, 'jruby') }} - name: Bundler install (JRuby workaround) if: ${{ startsWith(matrix.ruby-version, 'jruby') }} run: | gem install psych bundle install - name: Run tests run: bundle exec rspec test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: rubygems: latest ruby-version: 'ruby' bundler-cache: true - name: "Download cc-test-reporter from codeclimate.com" run: | curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter chmod +x ./cc-test-reporter - name: "Report to Code Climate that we will send a coverage report." run: ./cc-test-reporter before-build - name: Run tests run: bundle exec rspec env: COVERAGE: 1 - name: Upload code coverage to Code Climate run: | ./cc-test-reporter after-build \ --coverage-input-type simplecov \ ./coverage/.resultset.json rubocop: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: rubygems: default ruby-version: 'ruby' bundler-cache: false - run: bundle install - name: Run RuboCop run: bundle exec rubocop required-checks: runs-on: ubuntu-latest if: ${{ always() }} needs: - test - matrix-test - rubocop steps: - name: failure if: ${{ failure() || contains(needs.*.result, 'failure') }} run: exit 1 - name: success run: exit 0