From 71ad829c920fc95810a99d9ead17d7591695bdce Mon Sep 17 00:00:00 2001 From: Mateusz Grotek Date: Tue, 25 Jun 2024 14:51:33 +0100 Subject: [PATCH] Check ruby test coverage before merging PRs --- .github/workflows/ci.yml | 7 ++++++ .github/workflows/minitest.yml | 7 ++++++ .github/workflows/pact-verify.yml | 7 ++++++ .../store-test-coverage-percentage.yml | 0 .github/workflows/test-coverage.yml | 22 +++++++++++++++++++ lib/tasks/test_coverage.rake | 7 ++++++ test/test_coverage.rb | 12 ++++++++++ test/test_helper.rb | 4 +--- 8 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/store-test-coverage-percentage.yml create mode 100644 .github/workflows/test-coverage.yml create mode 100644 lib/tasks/test_coverage.rake create mode 100644 test/test_coverage.rb diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 08a813b098..932fdcdbee 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,3 +61,10 @@ jobs: uses: ./.github/workflows/pact-verify.yml with: ref: ${{ github.ref }} + + test-coverage: + name: Check test coverage + needs: + - test-ruby + - pact-tests + uses: ./.github/workflows/test-coverage.yml diff --git a/.github/workflows/minitest.yml b/.github/workflows/minitest.yml index 10e4788fca..fc877d9f66 100644 --- a/.github/workflows/minitest.yml +++ b/.github/workflows/minitest.yml @@ -47,3 +47,10 @@ jobs: RAILS_ENV: test GOVUK_CONTENT_SCHEMAS_PATH: vendor/publishing-api/content_schemas run: bundle exec rake test + + - name: Store test coverage percentage + uses: actions/upload-artifact@v4 + with: + name: minitest-test-coverage + path: coverage/percentage.txt + retention-days: 1 diff --git a/.github/workflows/pact-verify.yml b/.github/workflows/pact-verify.yml index cc36d0c5a6..f941855c82 100644 --- a/.github/workflows/pact-verify.yml +++ b/.github/workflows/pact-verify.yml @@ -64,3 +64,10 @@ jobs: - if: inputs.pact_artifact != '' run: bundle exec rake pact:verify:at[tmp/pacts/${{ inputs.pact_artifact_file_to_verify }}] + + - name: Store test coverage percentage + uses: actions/upload-artifact@v4 + with: + name: pact-test-coverage + path: coverage/percentage.txt + retention-days: 1 diff --git a/.github/workflows/store-test-coverage-percentage.yml b/.github/workflows/store-test-coverage-percentage.yml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml new file mode 100644 index 0000000000..c4323e2f64 --- /dev/null +++ b/.github/workflows/test-coverage.yml @@ -0,0 +1,22 @@ +name: Check test coverage + +on: + workflow_call: + +jobs: + check_ruby_test_coverage: + name: Check Ruby test coverage + runs-on: ubuntu-latest + steps: + - name: Retrieve minitest test coverage + uses: actions/download-artifact@v4 + with: + name: minitest-test-coverage + path: minitest-test-coverage + - name: Retrieve pact test coverage + uses: actions/download-artifact@v4 + with: + name: pact-test-coverage + path: pact-test-coverage + - name: Check Ruby test coverage + run: ls -R diff --git a/lib/tasks/test_coverage.rake b/lib/tasks/test_coverage.rake new file mode 100644 index 0000000000..1ef95ee822 --- /dev/null +++ b/lib/tasks/test_coverage.rake @@ -0,0 +1,7 @@ +desc "Start test coverage tool" +task :test_coverage do + require_relative "../../test/test_coverage" +end + +Rake::Task["pact:verify"].enhance %w[test_coverage] +Rake::Task["pact:verify:at"].enhance %w[test_coverage] diff --git a/test/test_coverage.rb b/test/test_coverage.rb new file mode 100644 index 0000000000..b9212aaad3 --- /dev/null +++ b/test/test_coverage.rb @@ -0,0 +1,12 @@ +unless defined?(TEST_COVERAGE_ACTIVATED) + TEST_COVERAGE_ACTIVATED = true + require "simplecov" + SimpleCov.at_exit do + SimpleCov.result.format! + File.write( + Rails.root.join("coverage/percentage.txt"), + SimpleCov.result.coverage_statistics[:line].percent.to_s, + ) + end + SimpleCov.start "rails" +end diff --git a/test/test_helper.rb b/test/test_helper.rb index fb0ff388a2..480c4941c6 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,6 +1,4 @@ -require "simplecov" -SimpleCov.start "rails" - +require_relative "test_coverage" require "i18n/coverage" require "i18n/coverage/printers/file_printer" I18n::Coverage.config.printer = I18n::Coverage::Printers::FilePrinter