diff --git a/.github/actions/test_gem/action.yml b/.github/actions/test_gem/action.yml index b0d5832a91..a96797fd6d 100644 --- a/.github/actions/test_gem/action.yml +++ b/.github/actions/test_gem/action.yml @@ -14,6 +14,11 @@ inputs: required: false type: boolean default: false + minimum_coverage: + description: Minimum test coverage + required: false + type: string + default: 85 rubocop: description: Run Rubocop required: false @@ -93,9 +98,9 @@ runs: if [[ -f "Appraisals" ]]; then for i in `bundle exec appraisal list | sed 's/-/_/g' `; do echo "::group::🔎 Appraising ${i}" - BUNDLE_GEMFILE=gemfiles/${i}.gemfile bundle install --quiet --jobs=3 --retry=4 && \ - BUNDLE_GEMFILE=gemfiles/${i}.gemfile bundle show && \ - BUNDLE_GEMFILE=gemfiles/${i}.gemfile bundle exec rake test + SIMPLECOV_COMMAND_NAME="appraisal_${i}" BUNDLE_GEMFILE=gemfiles/${i}.gemfile bundle install --quiet --jobs=3 --retry=4 && \ + SIMPLECOV_COMMAND_NAME="appraisal_${i}" BUNDLE_GEMFILE=gemfiles/${i}.gemfile bundle show && \ + SIMPLECOV_COMMAND_NAME="appraisal_${i}" BUNDLE_GEMFILE=gemfiles/${i}.gemfile bundle exec rake test echo "::endgroup::" done else @@ -111,6 +116,21 @@ runs: bundle exec rake yard working-directory: "${{ steps.setup.outputs.gem_dir }}" + - name: Coverage + shell: bash + if: "${{!startsWith(inputs.ruby, 'truffleruby')}}" + # This starts a new simplecov run which tracks nothing of its own, + # but merges with the existing coverage reports generated during testing. + env: + MINIMUM_COVERAGE: ${{ inputs.minimum_coverage || 85 }} + run: 'bundle exec ruby -e ''require "simplecov"; SimpleCov.minimum_coverage(ENV["MINIMUM_COVERAGE"].to_i); SimpleCov.collate Dir["coverage/**/.resultset.json"];''' + working-directory: "${{ steps.setup.outputs.gem_dir }}" + + - name: Cleanup coverage artifacts + shell: bash + run: rm -rf coverage + working-directory: "${{ steps.setup.outputs.gem_dir }}" + - name: Rubocop shell: bash if: "${{ inputs.rubocop == 'true' }}" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 02a8dd5a3a..70c82312cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,6 +47,7 @@ jobs: with: gem: "${{ matrix.gem }}" ruby: "3.4" + minimum_coverage: 62 - name: "Test Ruby 3.3" uses: ./.github/actions/test_gem with: @@ -55,18 +56,21 @@ jobs: yard: true rubocop: true build: true + minimum_coverage: 62 - name: "Test JRuby" if: startsWith(matrix.os, 'ubuntu') uses: ./.github/actions/test_gem with: gem: "${{ matrix.gem }}" ruby: "jruby" + minimum_coverage: 62 - name: "Test truffleruby" if: startsWith(matrix.os, 'ubuntu') uses: ./.github/actions/test_gem with: gem: "${{ matrix.gem }}" ruby: "truffleruby" + minimum_coverage: 62 exporters: if: ${{ github.repository == 'open-telemetry/opentelemetry-ruby' }} @@ -98,6 +102,7 @@ jobs: with: gem: "${{ matrix.gem }}" ruby: "3.4" + minimum_coverage: 58 - name: "Test Ruby 3.3" uses: ./.github/actions/test_gem with: @@ -106,12 +111,14 @@ jobs: yard: true rubocop: true build: true + minimum_coverage: 58 - name: "Test Zipkin with JRuby" if: "${{ startsWith(matrix.os, 'ubuntu') && matrix.gem == 'opentelemetry-exporter-zipkin' }}" uses: ./.github/actions/test_gem with: gem: "${{ matrix.gem }}" ruby: "jruby" + minimum_coverage: 58 - name: "Truffleruby Filter" id: truffleruby_skip shell: bash @@ -126,6 +133,7 @@ jobs: with: gem: "${{ matrix.gem }}" ruby: "truffleruby" + minimum_coverage: 58 propagators: if: ${{ github.repository == 'open-telemetry/opentelemetry-ruby' }} diff --git a/.simplecov b/.simplecov new file mode 100644 index 0000000000..f6cd629430 --- /dev/null +++ b/.simplecov @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require 'digest' + +digest = Digest::MD5.new +digest.update('test') +digest.update(ENV.fetch('BUNDLE_GEMFILE', 'gemfile')) if ENV['APPRAISAL_INITIALIZED'] + +ENV['ENABLE_COVERAGE'] ||= '1' + +if ENV['ENABLE_COVERAGE'].to_i.positive? + SimpleCov.command_name(ENV['SIMPLECOV_COMMAND_NAME'] || digest.hexdigest) + SimpleCov.start do + add_filter %r{^/test/} + end +end diff --git a/api/test/test_helper.rb b/api/test/test_helper.rb index afc676d044..03d84857fc 100644 --- a/api/test/test_helper.rb +++ b/api/test/test_helper.rb @@ -4,12 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start - SimpleCov.minimum_coverage 85 -end - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry' require 'minitest/autorun' diff --git a/common/test/test_helper.rb b/common/test/test_helper.rb index bfce52523d..587257c742 100644 --- a/common/test/test_helper.rb +++ b/common/test/test_helper.rb @@ -4,11 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start -end - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry/common' require 'minitest/autorun' diff --git a/exporter/jaeger/test/test_helper.rb b/exporter/jaeger/test/test_helper.rb index 4f32309b8f..5038695fce 100644 --- a/exporter/jaeger/test/test_helper.rb +++ b/exporter/jaeger/test/test_helper.rb @@ -4,11 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start -end - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry/exporter/jaeger' require 'minitest/autorun' diff --git a/exporter/otlp-common/test/test_helper.rb b/exporter/otlp-common/test/test_helper.rb index 42f7d50502..15fdbd9527 100644 --- a/exporter/otlp-common/test/test_helper.rb +++ b/exporter/otlp-common/test/test_helper.rb @@ -4,11 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start -end - +require 'simplecov' require 'opentelemetry/sdk' require 'opentelemetry-test-helpers' require 'opentelemetry-exporter-otlp-common' diff --git a/exporter/otlp-grpc/test/test_helper.rb b/exporter/otlp-grpc/test/test_helper.rb index 6fc3a3018b..06c25504c1 100644 --- a/exporter/otlp-grpc/test/test_helper.rb +++ b/exporter/otlp-grpc/test/test_helper.rb @@ -4,11 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start -end - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry/exporter/otlp/grpc' require 'minitest/autorun' diff --git a/exporter/otlp-http/test/test_helper.rb b/exporter/otlp-http/test/test_helper.rb index e5272ac507..e156d3cb30 100644 --- a/exporter/otlp-http/test/test_helper.rb +++ b/exporter/otlp-http/test/test_helper.rb @@ -4,11 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start -end - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry-exporter-otlp-http' require 'minitest/autorun' diff --git a/exporter/otlp-logs/test/test_helper.rb b/exporter/otlp-logs/test/test_helper.rb index 2ab9f61361..c44a0b6185 100644 --- a/exporter/otlp-logs/test/test_helper.rb +++ b/exporter/otlp-logs/test/test_helper.rb @@ -4,16 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start do - enable_coverage :branch - add_filter '/test/' - end - - SimpleCov.minimum_coverage 85 -end - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry/exporter/otlp_logs' require 'minitest/autorun' diff --git a/exporter/otlp-metrics/test/test_helper.rb b/exporter/otlp-metrics/test/test_helper.rb index 9db443b396..820a87734f 100644 --- a/exporter/otlp-metrics/test/test_helper.rb +++ b/exporter/otlp-metrics/test/test_helper.rb @@ -4,11 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start -end - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry/exporter/otlp_metrics' require 'minitest/autorun' diff --git a/exporter/otlp/test/test_helper.rb b/exporter/otlp/test/test_helper.rb index 13f3a55dc7..434eb1e8cf 100644 --- a/exporter/otlp/test/test_helper.rb +++ b/exporter/otlp/test/test_helper.rb @@ -4,11 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start -end - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry/exporter/otlp' require 'minitest/autorun' diff --git a/exporter/zipkin/test/test_helper.rb b/exporter/zipkin/test/test_helper.rb index 9d760d051d..9958a53d0a 100644 --- a/exporter/zipkin/test/test_helper.rb +++ b/exporter/zipkin/test/test_helper.rb @@ -4,11 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start -end - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry/exporter/zipkin' require 'minitest/autorun' diff --git a/logs_api/test/test_helper.rb b/logs_api/test/test_helper.rb index a141bff9aa..ca81c230b8 100644 --- a/logs_api/test/test_helper.rb +++ b/logs_api/test/test_helper.rb @@ -5,13 +5,5 @@ # SPDX-License-Identifier: Apache-2.0 require 'simplecov' - -SimpleCov.start do - enable_coverage :branch - add_filter '/test/' -end - -SimpleCov.minimum_coverage 85 - require 'opentelemetry-logs-api' require 'minitest/autorun' diff --git a/logs_sdk/test/test_helper.rb b/logs_sdk/test/test_helper.rb index 7f11ee9508..9b9c32d9a9 100644 --- a/logs_sdk/test/test_helper.rb +++ b/logs_sdk/test/test_helper.rb @@ -5,14 +5,6 @@ # SPDX-License-Identifier: Apache-2.0 require 'simplecov' - -SimpleCov.start do - enable_coverage :branch - add_filter '/test/' -end - -SimpleCov.minimum_coverage 85 - require 'opentelemetry-logs-api' require 'opentelemetry-logs-sdk' require 'opentelemetry-test-helpers' diff --git a/metrics_api/test/test_helper.rb b/metrics_api/test/test_helper.rb index 888b9f3c38..0d309ae4db 100644 --- a/metrics_api/test/test_helper.rb +++ b/metrics_api/test/test_helper.rb @@ -4,10 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -# require 'simplecov' -# # SimpleCov.start -# # SimpleCov.minimum_coverage 85 - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry-metrics-api' require 'minitest/autorun' diff --git a/metrics_sdk/test/test_helper.rb b/metrics_sdk/test/test_helper.rb index 8658831961..7e7ecf0bb1 100644 --- a/metrics_sdk/test/test_helper.rb +++ b/metrics_sdk/test/test_helper.rb @@ -4,10 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -# require 'simplecov' -# # SimpleCov.start -# # SimpleCov.minimum_coverage 85 - +require 'simplecov' require 'opentelemetry-metrics-sdk' require 'opentelemetry-test-helpers' require 'minitest/autorun' diff --git a/propagator/b3/test/test_helper.rb b/propagator/b3/test/test_helper.rb index 331f49d207..5ef5f794c3 100644 --- a/propagator/b3/test/test_helper.rb +++ b/propagator/b3/test/test_helper.rb @@ -4,5 +4,6 @@ # # SPDX-License-Identifier: Apache-2.0 +require 'simplecov' require 'minitest/autorun' require 'opentelemetry-propagator-b3' diff --git a/propagator/jaeger/test/test_helper.rb b/propagator/jaeger/test/test_helper.rb index 9f33f3711c..d90efd3c7e 100644 --- a/propagator/jaeger/test/test_helper.rb +++ b/propagator/jaeger/test/test_helper.rb @@ -4,5 +4,6 @@ # # SPDX-License-Identifier: Apache-2.0 +require 'simplecov' require 'minitest/autorun' require 'opentelemetry-propagator-jaeger' diff --git a/registry/test/test_helper.rb b/registry/test/test_helper.rb index 3ade6eb5a9..b99725133a 100644 --- a/registry/test/test_helper.rb +++ b/registry/test/test_helper.rb @@ -4,6 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 +require 'simplecov' require 'opentelemetry-registry' require 'minitest/autorun' require 'rspec/mocks/minitest_integration' diff --git a/sdk/test/test_helper.rb b/sdk/test/test_helper.rb index 62f558db1f..05afac1238 100644 --- a/sdk/test/test_helper.rb +++ b/sdk/test/test_helper.rb @@ -4,12 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start - SimpleCov.minimum_coverage 85 -end - +require 'simplecov' require 'opentelemetry-test-helpers' require 'opentelemetry-sdk' require 'opentelemetry-instrumentation-base' diff --git a/sdk_experimental/test/test_helper.rb b/sdk_experimental/test/test_helper.rb index cb46b69df7..1fea58f66b 100644 --- a/sdk_experimental/test/test_helper.rb +++ b/sdk_experimental/test/test_helper.rb @@ -4,10 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -# require 'simplecov' -# # SimpleCov.start -# # SimpleCov.minimum_coverage 85 - +require 'simplecov' require 'opentelemetry-sdk-experimental' require 'opentelemetry-test-helpers' require 'minitest/autorun' diff --git a/semantic_conventions/test/test_helper.rb b/semantic_conventions/test/test_helper.rb index 45c9cea8ec..6d5bf54d7e 100644 --- a/semantic_conventions/test/test_helper.rb +++ b/semantic_conventions/test/test_helper.rb @@ -4,12 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start - SimpleCov.minimum_coverage 85 -end - +require 'simplecov' require 'minitest/autorun' Dir[File.join(File.dirname(__FILE__), '..', 'lib', 'opentelemetry', '**', '*.rb')].each { |file| require file } diff --git a/test_helpers/test/test_helper.rb b/test_helpers/test/test_helper.rb index f0018c7043..42097a1dbb 100644 --- a/test_helpers/test/test_helper.rb +++ b/test_helpers/test/test_helper.rb @@ -4,12 +4,7 @@ # # SPDX-License-Identifier: Apache-2.0 +require 'simplecov' require 'opentelemetry-sdk' require 'opentelemetry-test-helpers' require 'minitest/autorun' - -if RUBY_ENGINE == 'ruby' - require 'simplecov' - SimpleCov.start - SimpleCov.minimum_coverage 85 -end