From 37e4658614b781bd4d7b294a6a1f5670f69e383d Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 29 May 2024 16:50:44 +0200 Subject: [PATCH] automatically detect timecop when configuring CI mode and set time_now_provider to Time.now_without_mock_time --- Appraisals | 11 ++ Rakefile | 6 +- Steepfile | 1 + gemfiles/jruby_9.4_timecop_0.gemfile | 31 ++++ gemfiles/jruby_9.4_timecop_0.gemfile.lock | 142 +++++++++++++++++ gemfiles/ruby_2.7_timecop_0.gemfile | 32 ++++ gemfiles/ruby_2.7_timecop_0.gemfile.lock | 141 +++++++++++++++++ gemfiles/ruby_3.0_timecop_0.gemfile | 32 ++++ gemfiles/ruby_3.0_timecop_0.gemfile.lock | 141 +++++++++++++++++ gemfiles/ruby_3.1_timecop_0.gemfile | 32 ++++ gemfiles/ruby_3.1_timecop_0.gemfile.lock | 141 +++++++++++++++++ gemfiles/ruby_3.2_timecop_0.gemfile | 32 ++++ gemfiles/ruby_3.2_timecop_0.gemfile.lock | 141 +++++++++++++++++ gemfiles/ruby_3.3_timecop_0.gemfile | 32 ++++ gemfiles/ruby_3.3_timecop_0.gemfile.lock | 145 ++++++++++++++++++ lib/datadog/ci/configuration/components.rb | 15 ++ sig/datadog/ci/configuration/components.rbs | 2 + .../contrib/timecop/instrumentation_spec.rb | 34 ++++ vendor/rbs/timecop/0/timecop.rbs | 6 + 19 files changed, 1116 insertions(+), 1 deletion(-) create mode 100644 gemfiles/jruby_9.4_timecop_0.gemfile create mode 100644 gemfiles/jruby_9.4_timecop_0.gemfile.lock create mode 100644 gemfiles/ruby_2.7_timecop_0.gemfile create mode 100644 gemfiles/ruby_2.7_timecop_0.gemfile.lock create mode 100644 gemfiles/ruby_3.0_timecop_0.gemfile create mode 100644 gemfiles/ruby_3.0_timecop_0.gemfile.lock create mode 100644 gemfiles/ruby_3.1_timecop_0.gemfile create mode 100644 gemfiles/ruby_3.1_timecop_0.gemfile.lock create mode 100644 gemfiles/ruby_3.2_timecop_0.gemfile create mode 100644 gemfiles/ruby_3.2_timecop_0.gemfile.lock create mode 100644 gemfiles/ruby_3.3_timecop_0.gemfile create mode 100644 gemfiles/ruby_3.3_timecop_0.gemfile.lock create mode 100644 spec/datadog/ci/contrib/timecop/instrumentation_spec.rb create mode 100644 vendor/rbs/timecop/0/timecop.rbs diff --git a/Appraisals b/Appraisals index 4e02f6e1..87ae4f44 100644 --- a/Appraisals +++ b/Appraisals @@ -149,6 +149,16 @@ def self.with_selenium_gem(selenium_versions: 4, capybara_versions: 3) end end +def self.with_timecop_gem(timecop_versions: 0) + Array(timecop_versions).each do |timecop_v| + appraise "timecop-#{timecop_v}" do + gem "timecop", "~> #{timecop_v}" + + gem "minitest", "~> 5" + end + end +end + ruby_version = Gem::Version.new(RUBY_ENGINE_VERSION) major, minor, = ruby_version.segments @@ -161,6 +171,7 @@ with_minitest_shoulda_context_gem if ruby_version >= Gem::Version.new("3.1") with_active_support_gem(versions: 4..7) with_knapsack_pro_rspec_gem with_selenium_gem if ruby_version >= Gem::Version.new("3.0") +with_timecop_gem ruby_runtime = "#{RUBY_ENGINE}-#{major}.#{minor}" diff --git a/Rakefile b/Rakefile index 202ebb06..845fd5da 100644 --- a/Rakefile +++ b/Rakefile @@ -67,6 +67,9 @@ TEST_METADATA = { }, "selenium" => { "selenium-4-capybara-3" => "❌ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ jruby" + }, + "timecop" => { + "timecop-0" => "✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ jruby" } } @@ -140,7 +143,8 @@ namespace :spec do :ci_queue_rspec, :knapsack_rspec, :knapsack_rspec_go, - :selenium + :selenium, + :timecop ].each do |contrib| desc "" # "Explicitly hiding from `rake -T`" RSpec::Core::RakeTask.new(contrib) do |t, args| diff --git a/Steepfile b/Steepfile index aa7b1c13..6f4fa2ab 100644 --- a/Steepfile +++ b/Steepfile @@ -29,4 +29,5 @@ target :lib do library "bundler" library "selenium-webdriver" library "capybara" + library "timecop" end diff --git a/gemfiles/jruby_9.4_timecop_0.gemfile b/gemfiles/jruby_9.4_timecop_0.gemfile new file mode 100644 index 00000000..0efb9a5c --- /dev/null +++ b/gemfiles/jruby_9.4_timecop_0.gemfile @@ -0,0 +1,31 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "pry" +gem "rake" +gem "os" +gem "rake-compiler" +gem "climate_control" +gem "rspec" +gem "rspec-collection_matchers" +gem "rspec_junit_formatter" +gem "appraisal" +gem "timecop", "~> 0" +gem "standard", "~> 1.31" +gem "yard" +gem "webrick" +gem "pimpmychangelog", ">= 0.1.2" +gem "simplecov" +gem "simplecov-cobertura", "~> 2.1.0" +gem "minitest", "~> 5" + +group :check do + +end + +group :development do + +end + +gemspec path: "../" diff --git a/gemfiles/jruby_9.4_timecop_0.gemfile.lock b/gemfiles/jruby_9.4_timecop_0.gemfile.lock new file mode 100644 index 00000000..bf931139 --- /dev/null +++ b/gemfiles/jruby_9.4_timecop_0.gemfile.lock @@ -0,0 +1,142 @@ +PATH + remote: .. + specs: + datadog-ci (1.0.0.beta6) + datadog (~> 2.0.0.beta2) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + appraisal (2.5.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + climate_control (1.2.0) + coderay (1.1.3) + datadog (2.0.0.rc1) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 9.0.0.1.0) + libddwaf (~> 1.14.0.0.0) + msgpack + debase-ruby_core_source (3.3.1) + diff-lcs (1.5.1) + docile (1.4.0) + ffi (1.16.3-java) + json (2.7.2-java) + language_server-protocol (3.17.0.3) + libdatadog (9.0.0.1.0) + libddwaf (1.14.0.0.0-java) + ffi (~> 1.0) + lint_roller (1.1.0) + method_source (1.1.0) + minitest (5.23.1) + msgpack (1.7.2-java) + os (1.1.4) + parallel (1.24.0) + parser (3.3.1.0) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2-java) + coderay (~> 1.1) + method_source (~> 1.0) + spoon (~> 0.0) + racc (1.8.0-java) + rainbow (3.1.1) + rake (13.2.1) + rake-compiler (1.2.7) + rake + regexp_parser (2.9.2) + rexml (3.2.8) + strscan (>= 3.0.9) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rubocop (1.63.5) + json (~> 2.3) + language_server-protocol (>= 3.17.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) + rubocop-performance (1.21.0) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (1.13.0) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + spoon (0.0.6) + ffi + standard (1.36.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.63.0) + standard-custom (~> 1.0.0) + standard-performance (~> 1.4) + standard-custom (1.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.50) + standard-performance (1.4.0) + lint_roller (~> 1.1) + rubocop-performance (~> 1.21.0) + strscan (3.1.0-java) + thor (1.3.1) + timecop (0.9.8) + unicode-display_width (2.5.0) + webrick (1.8.1) + yard (0.9.36) + +PLATFORMS + universal-java-11 + +DEPENDENCIES + appraisal + climate_control + datadog-ci! + minitest (~> 5) + os + pimpmychangelog (>= 0.1.2) + pry + rake + rake-compiler + rspec + rspec-collection_matchers + rspec_junit_formatter + simplecov + simplecov-cobertura (~> 2.1.0) + standard (~> 1.31) + timecop (~> 0) + webrick + yard + +BUNDLED WITH + 2.3.26 diff --git a/gemfiles/ruby_2.7_timecop_0.gemfile b/gemfiles/ruby_2.7_timecop_0.gemfile new file mode 100644 index 00000000..d761adfe --- /dev/null +++ b/gemfiles/ruby_2.7_timecop_0.gemfile @@ -0,0 +1,32 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "pry" +gem "rake" +gem "os" +gem "rake-compiler" +gem "climate_control" +gem "rspec" +gem "rspec-collection_matchers" +gem "rspec_junit_formatter" +gem "appraisal" +gem "timecop", "~> 0" +gem "standard", "~> 1.31" +gem "yard" +gem "redcarpet" +gem "webrick" +gem "pimpmychangelog", ">= 0.1.2" +gem "simplecov" +gem "simplecov-cobertura", "~> 2.1.0" +gem "minitest", "~> 5" + +group :check do + +end + +group :development do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_2.7_timecop_0.gemfile.lock b/gemfiles/ruby_2.7_timecop_0.gemfile.lock new file mode 100644 index 00000000..bca638a8 --- /dev/null +++ b/gemfiles/ruby_2.7_timecop_0.gemfile.lock @@ -0,0 +1,141 @@ +PATH + remote: .. + specs: + datadog-ci (1.0.0.beta6) + datadog (~> 2.0.0.beta2) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + appraisal (2.5.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + climate_control (1.2.0) + coderay (1.1.3) + datadog (2.0.0.rc1) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 9.0.0.1.0) + libddwaf (~> 1.14.0.0.0) + msgpack + debase-ruby_core_source (3.3.1) + diff-lcs (1.5.1) + docile (1.4.0) + ffi (1.16.3) + json (2.7.2) + language_server-protocol (3.17.0.3) + libdatadog (9.0.0.1.0-aarch64-linux) + libddwaf (1.14.0.0.0-aarch64-linux) + ffi (~> 1.0) + lint_roller (1.1.0) + method_source (1.1.0) + minitest (5.23.1) + msgpack (1.7.2) + os (1.1.4) + parallel (1.24.0) + parser (3.3.1.0) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + racc (1.8.0) + rainbow (3.1.1) + rake (13.2.1) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.2) + rexml (3.2.8) + strscan (>= 3.0.9) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rubocop (1.63.5) + json (~> 2.3) + language_server-protocol (>= 3.17.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) + rubocop-performance (1.21.0) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (1.13.0) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + standard (1.36.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.63.0) + standard-custom (~> 1.0.0) + standard-performance (~> 1.4) + standard-custom (1.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.50) + standard-performance (1.4.0) + lint_roller (~> 1.1) + rubocop-performance (~> 1.21.0) + strscan (3.1.0) + thor (1.3.1) + timecop (0.9.8) + unicode-display_width (2.5.0) + webrick (1.8.1) + yard (0.9.36) + +PLATFORMS + aarch64-linux + +DEPENDENCIES + appraisal + climate_control + datadog-ci! + minitest (~> 5) + os + pimpmychangelog (>= 0.1.2) + pry + rake + rake-compiler + redcarpet + rspec + rspec-collection_matchers + rspec_junit_formatter + simplecov + simplecov-cobertura (~> 2.1.0) + standard (~> 1.31) + timecop (~> 0) + webrick + yard + +BUNDLED WITH + 2.3.26 diff --git a/gemfiles/ruby_3.0_timecop_0.gemfile b/gemfiles/ruby_3.0_timecop_0.gemfile new file mode 100644 index 00000000..d761adfe --- /dev/null +++ b/gemfiles/ruby_3.0_timecop_0.gemfile @@ -0,0 +1,32 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "pry" +gem "rake" +gem "os" +gem "rake-compiler" +gem "climate_control" +gem "rspec" +gem "rspec-collection_matchers" +gem "rspec_junit_formatter" +gem "appraisal" +gem "timecop", "~> 0" +gem "standard", "~> 1.31" +gem "yard" +gem "redcarpet" +gem "webrick" +gem "pimpmychangelog", ">= 0.1.2" +gem "simplecov" +gem "simplecov-cobertura", "~> 2.1.0" +gem "minitest", "~> 5" + +group :check do + +end + +group :development do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.0_timecop_0.gemfile.lock b/gemfiles/ruby_3.0_timecop_0.gemfile.lock new file mode 100644 index 00000000..bca638a8 --- /dev/null +++ b/gemfiles/ruby_3.0_timecop_0.gemfile.lock @@ -0,0 +1,141 @@ +PATH + remote: .. + specs: + datadog-ci (1.0.0.beta6) + datadog (~> 2.0.0.beta2) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + appraisal (2.5.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + climate_control (1.2.0) + coderay (1.1.3) + datadog (2.0.0.rc1) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 9.0.0.1.0) + libddwaf (~> 1.14.0.0.0) + msgpack + debase-ruby_core_source (3.3.1) + diff-lcs (1.5.1) + docile (1.4.0) + ffi (1.16.3) + json (2.7.2) + language_server-protocol (3.17.0.3) + libdatadog (9.0.0.1.0-aarch64-linux) + libddwaf (1.14.0.0.0-aarch64-linux) + ffi (~> 1.0) + lint_roller (1.1.0) + method_source (1.1.0) + minitest (5.23.1) + msgpack (1.7.2) + os (1.1.4) + parallel (1.24.0) + parser (3.3.1.0) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + racc (1.8.0) + rainbow (3.1.1) + rake (13.2.1) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.2) + rexml (3.2.8) + strscan (>= 3.0.9) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rubocop (1.63.5) + json (~> 2.3) + language_server-protocol (>= 3.17.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) + rubocop-performance (1.21.0) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (1.13.0) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + standard (1.36.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.63.0) + standard-custom (~> 1.0.0) + standard-performance (~> 1.4) + standard-custom (1.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.50) + standard-performance (1.4.0) + lint_roller (~> 1.1) + rubocop-performance (~> 1.21.0) + strscan (3.1.0) + thor (1.3.1) + timecop (0.9.8) + unicode-display_width (2.5.0) + webrick (1.8.1) + yard (0.9.36) + +PLATFORMS + aarch64-linux + +DEPENDENCIES + appraisal + climate_control + datadog-ci! + minitest (~> 5) + os + pimpmychangelog (>= 0.1.2) + pry + rake + rake-compiler + redcarpet + rspec + rspec-collection_matchers + rspec_junit_formatter + simplecov + simplecov-cobertura (~> 2.1.0) + standard (~> 1.31) + timecop (~> 0) + webrick + yard + +BUNDLED WITH + 2.3.26 diff --git a/gemfiles/ruby_3.1_timecop_0.gemfile b/gemfiles/ruby_3.1_timecop_0.gemfile new file mode 100644 index 00000000..d761adfe --- /dev/null +++ b/gemfiles/ruby_3.1_timecop_0.gemfile @@ -0,0 +1,32 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "pry" +gem "rake" +gem "os" +gem "rake-compiler" +gem "climate_control" +gem "rspec" +gem "rspec-collection_matchers" +gem "rspec_junit_formatter" +gem "appraisal" +gem "timecop", "~> 0" +gem "standard", "~> 1.31" +gem "yard" +gem "redcarpet" +gem "webrick" +gem "pimpmychangelog", ">= 0.1.2" +gem "simplecov" +gem "simplecov-cobertura", "~> 2.1.0" +gem "minitest", "~> 5" + +group :check do + +end + +group :development do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.1_timecop_0.gemfile.lock b/gemfiles/ruby_3.1_timecop_0.gemfile.lock new file mode 100644 index 00000000..bca638a8 --- /dev/null +++ b/gemfiles/ruby_3.1_timecop_0.gemfile.lock @@ -0,0 +1,141 @@ +PATH + remote: .. + specs: + datadog-ci (1.0.0.beta6) + datadog (~> 2.0.0.beta2) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + appraisal (2.5.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + climate_control (1.2.0) + coderay (1.1.3) + datadog (2.0.0.rc1) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 9.0.0.1.0) + libddwaf (~> 1.14.0.0.0) + msgpack + debase-ruby_core_source (3.3.1) + diff-lcs (1.5.1) + docile (1.4.0) + ffi (1.16.3) + json (2.7.2) + language_server-protocol (3.17.0.3) + libdatadog (9.0.0.1.0-aarch64-linux) + libddwaf (1.14.0.0.0-aarch64-linux) + ffi (~> 1.0) + lint_roller (1.1.0) + method_source (1.1.0) + minitest (5.23.1) + msgpack (1.7.2) + os (1.1.4) + parallel (1.24.0) + parser (3.3.1.0) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + racc (1.8.0) + rainbow (3.1.1) + rake (13.2.1) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.2) + rexml (3.2.8) + strscan (>= 3.0.9) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rubocop (1.63.5) + json (~> 2.3) + language_server-protocol (>= 3.17.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) + rubocop-performance (1.21.0) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (1.13.0) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + standard (1.36.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.63.0) + standard-custom (~> 1.0.0) + standard-performance (~> 1.4) + standard-custom (1.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.50) + standard-performance (1.4.0) + lint_roller (~> 1.1) + rubocop-performance (~> 1.21.0) + strscan (3.1.0) + thor (1.3.1) + timecop (0.9.8) + unicode-display_width (2.5.0) + webrick (1.8.1) + yard (0.9.36) + +PLATFORMS + aarch64-linux + +DEPENDENCIES + appraisal + climate_control + datadog-ci! + minitest (~> 5) + os + pimpmychangelog (>= 0.1.2) + pry + rake + rake-compiler + redcarpet + rspec + rspec-collection_matchers + rspec_junit_formatter + simplecov + simplecov-cobertura (~> 2.1.0) + standard (~> 1.31) + timecop (~> 0) + webrick + yard + +BUNDLED WITH + 2.3.26 diff --git a/gemfiles/ruby_3.2_timecop_0.gemfile b/gemfiles/ruby_3.2_timecop_0.gemfile new file mode 100644 index 00000000..d761adfe --- /dev/null +++ b/gemfiles/ruby_3.2_timecop_0.gemfile @@ -0,0 +1,32 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "pry" +gem "rake" +gem "os" +gem "rake-compiler" +gem "climate_control" +gem "rspec" +gem "rspec-collection_matchers" +gem "rspec_junit_formatter" +gem "appraisal" +gem "timecop", "~> 0" +gem "standard", "~> 1.31" +gem "yard" +gem "redcarpet" +gem "webrick" +gem "pimpmychangelog", ">= 0.1.2" +gem "simplecov" +gem "simplecov-cobertura", "~> 2.1.0" +gem "minitest", "~> 5" + +group :check do + +end + +group :development do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.2_timecop_0.gemfile.lock b/gemfiles/ruby_3.2_timecop_0.gemfile.lock new file mode 100644 index 00000000..bca638a8 --- /dev/null +++ b/gemfiles/ruby_3.2_timecop_0.gemfile.lock @@ -0,0 +1,141 @@ +PATH + remote: .. + specs: + datadog-ci (1.0.0.beta6) + datadog (~> 2.0.0.beta2) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + appraisal (2.5.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + climate_control (1.2.0) + coderay (1.1.3) + datadog (2.0.0.rc1) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 9.0.0.1.0) + libddwaf (~> 1.14.0.0.0) + msgpack + debase-ruby_core_source (3.3.1) + diff-lcs (1.5.1) + docile (1.4.0) + ffi (1.16.3) + json (2.7.2) + language_server-protocol (3.17.0.3) + libdatadog (9.0.0.1.0-aarch64-linux) + libddwaf (1.14.0.0.0-aarch64-linux) + ffi (~> 1.0) + lint_roller (1.1.0) + method_source (1.1.0) + minitest (5.23.1) + msgpack (1.7.2) + os (1.1.4) + parallel (1.24.0) + parser (3.3.1.0) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + racc (1.8.0) + rainbow (3.1.1) + rake (13.2.1) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.2) + rexml (3.2.8) + strscan (>= 3.0.9) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rubocop (1.63.5) + json (~> 2.3) + language_server-protocol (>= 3.17.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) + rubocop-performance (1.21.0) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (1.13.0) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + standard (1.36.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.63.0) + standard-custom (~> 1.0.0) + standard-performance (~> 1.4) + standard-custom (1.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.50) + standard-performance (1.4.0) + lint_roller (~> 1.1) + rubocop-performance (~> 1.21.0) + strscan (3.1.0) + thor (1.3.1) + timecop (0.9.8) + unicode-display_width (2.5.0) + webrick (1.8.1) + yard (0.9.36) + +PLATFORMS + aarch64-linux + +DEPENDENCIES + appraisal + climate_control + datadog-ci! + minitest (~> 5) + os + pimpmychangelog (>= 0.1.2) + pry + rake + rake-compiler + redcarpet + rspec + rspec-collection_matchers + rspec_junit_formatter + simplecov + simplecov-cobertura (~> 2.1.0) + standard (~> 1.31) + timecop (~> 0) + webrick + yard + +BUNDLED WITH + 2.3.26 diff --git a/gemfiles/ruby_3.3_timecop_0.gemfile b/gemfiles/ruby_3.3_timecop_0.gemfile new file mode 100644 index 00000000..d761adfe --- /dev/null +++ b/gemfiles/ruby_3.3_timecop_0.gemfile @@ -0,0 +1,32 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "pry" +gem "rake" +gem "os" +gem "rake-compiler" +gem "climate_control" +gem "rspec" +gem "rspec-collection_matchers" +gem "rspec_junit_formatter" +gem "appraisal" +gem "timecop", "~> 0" +gem "standard", "~> 1.31" +gem "yard" +gem "redcarpet" +gem "webrick" +gem "pimpmychangelog", ">= 0.1.2" +gem "simplecov" +gem "simplecov-cobertura", "~> 2.1.0" +gem "minitest", "~> 5" + +group :check do + +end + +group :development do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.3_timecop_0.gemfile.lock b/gemfiles/ruby_3.3_timecop_0.gemfile.lock new file mode 100644 index 00000000..878fde52 --- /dev/null +++ b/gemfiles/ruby_3.3_timecop_0.gemfile.lock @@ -0,0 +1,145 @@ +PATH + remote: .. + specs: + datadog-ci (1.0.0.beta6) + datadog (~> 2.0.0.beta2) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + appraisal (2.5.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + climate_control (1.2.0) + coderay (1.1.3) + datadog (2.0.0.rc1) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 9.0.0.1.0) + libddwaf (~> 1.14.0.0.0) + msgpack + debase-ruby_core_source (3.3.1) + diff-lcs (1.5.1) + docile (1.4.0) + ffi (1.16.3) + json (2.7.2) + language_server-protocol (3.17.0.3) + libdatadog (9.0.0.1.0) + libdatadog (9.0.0.1.0-aarch64-linux) + libddwaf (1.14.0.0.0-aarch64-linux) + ffi (~> 1.0) + libddwaf (1.14.0.0.0-arm64-darwin) + ffi (~> 1.0) + lint_roller (1.1.0) + method_source (1.1.0) + minitest (5.23.1) + msgpack (1.7.2) + os (1.1.4) + parallel (1.24.0) + parser (3.3.1.0) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + racc (1.8.0) + rainbow (3.1.1) + rake (13.2.1) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.2) + rexml (3.2.8) + strscan (>= 3.0.9) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rubocop (1.63.5) + json (~> 2.3) + language_server-protocol (>= 3.17.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.3) + parser (>= 3.3.1.0) + rubocop-performance (1.21.0) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + ruby-progressbar (1.13.0) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + standard (1.36.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.63.0) + standard-custom (~> 1.0.0) + standard-performance (~> 1.4) + standard-custom (1.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.50) + standard-performance (1.4.0) + lint_roller (~> 1.1) + rubocop-performance (~> 1.21.0) + strscan (3.1.0) + thor (1.3.1) + timecop (0.9.8) + unicode-display_width (2.5.0) + webrick (1.8.1) + yard (0.9.36) + +PLATFORMS + aarch64-linux + arm64-darwin-23 + +DEPENDENCIES + appraisal + climate_control + datadog-ci! + minitest (~> 5) + os + pimpmychangelog (>= 0.1.2) + pry + rake + rake-compiler + redcarpet + rspec + rspec-collection_matchers + rspec_junit_formatter + simplecov + simplecov-cobertura (~> 2.1.0) + standard (~> 1.31) + timecop (~> 0) + webrick + yard + +BUNDLED WITH + 2.4.19 diff --git a/lib/datadog/ci/configuration/components.rb b/lib/datadog/ci/configuration/components.rb index 86aff6f6..a9f97891 100644 --- a/lib/datadog/ci/configuration/components.rb +++ b/lib/datadog/ci/configuration/components.rb @@ -70,6 +70,17 @@ def activate_ci!(settings) # Choose user defined TraceFlush or default to CI TraceFlush settings.tracing.test_mode.trace_flush = settings.ci.trace_flush || CI::TestVisibility::Flush::Partial.new + # When timecop is present, Time.now is mocked and .now_without_mock_time is added on Time to + # get the current time without the mock. + if timecop? + settings.time_now_provider = -> do + Time.now_without_mock_time + rescue NoMethodError + # fallback to normal Time.now if Time.now_without_mock_time is not defined for any reason + Time.now + end + end + # startup logs are useless for CI visibility and create noise settings.diagnostics.startup_logs.enabled = false @@ -191,6 +202,10 @@ def check_dd_site(settings) "Please make sure to set valid site in DD_SITE environment variable" end end + + def timecop? + Gem.loaded_specs.key?("timecop") || defined?(Timecop) + end end end end diff --git a/sig/datadog/ci/configuration/components.rbs b/sig/datadog/ci/configuration/components.rbs index 09f548c3..87fd8b11 100644 --- a/sig/datadog/ci/configuration/components.rbs +++ b/sig/datadog/ci/configuration/components.rbs @@ -17,6 +17,8 @@ module Datadog def serializers_factory: (untyped settings) -> (singleton(Datadog::CI::TestVisibility::Serializers::Factories::TestSuiteLevel) | singleton(Datadog::CI::TestVisibility::Serializers::Factories::TestLevel)) def check_dd_site: (untyped settings) -> void + + def timecop?: () -> bool end end end diff --git a/spec/datadog/ci/contrib/timecop/instrumentation_spec.rb b/spec/datadog/ci/contrib/timecop/instrumentation_spec.rb new file mode 100644 index 00000000..c44defb2 --- /dev/null +++ b/spec/datadog/ci/contrib/timecop/instrumentation_spec.rb @@ -0,0 +1,34 @@ +require "minitest" + +RSpec.describe "Minitest instrumentation" do + include_context "CI mode activated" do + let(:integration_name) { :minitest } + let(:integration_options) { {service_name: "ltest"} } + + let(:itr_enabled) { true } + let(:code_coverage_enabled) { true } + let(:tests_skipping_enabled) { true } + end + let(:time_1990) { Time.utc(1990) } + + before do + # required to call .runnable_methods + Minitest.seed = 1 + Minitest::Runnable.reset + + Timecop.freeze(time_1990) + + class SomeTest < Minitest::Test + def test_pass + assert true + end + end + + Minitest.run([]) + end + + it "does not set frozen time when setting start time for traces" do + expect(first_test_span.start_time).not_to eq(time_1990) + expect(test_session_span.start_time).not_to eq(time_1990) + end +end diff --git a/vendor/rbs/timecop/0/timecop.rbs b/vendor/rbs/timecop/0/timecop.rbs new file mode 100644 index 00000000..1b723f19 --- /dev/null +++ b/vendor/rbs/timecop/0/timecop.rbs @@ -0,0 +1,6 @@ +class Time + def self.now_without_mock_time: () -> Time +end + +class Timecop +end