datadog-ci 0.3.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +89 -1
 - data/README.md +57 -34
 - data/lib/datadog/ci/concurrent_span.rb +59 -0
 - data/lib/datadog/ci/configuration/components.rb +40 -1
 - data/lib/datadog/ci/configuration/extensions.rb +21 -0
 - data/lib/datadog/ci/configuration/settings.rb +7 -1
 - data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +12 -1
 - data/lib/datadog/ci/contrib/cucumber/formatter.rb +22 -29
 - data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +10 -1
 - data/lib/datadog/ci/contrib/minitest/hooks.rb +15 -25
 - data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +10 -1
 - data/lib/datadog/ci/contrib/rspec/example.rb +13 -18
 - data/lib/datadog/ci/contrib/settings.rb +2 -0
 - data/lib/datadog/ci/ext/app_types.rb +5 -0
 - data/lib/datadog/ci/ext/environment/extractor.rb +5 -10
 - data/lib/datadog/ci/ext/environment/providers/github_actions.rb +13 -4
 - data/lib/datadog/ci/ext/settings.rb +11 -0
 - data/lib/datadog/ci/ext/test.rb +12 -1
 - data/lib/datadog/ci/null_span.rb +63 -0
 - data/lib/datadog/ci/span.rb +117 -0
 - data/lib/datadog/ci/test.rb +25 -0
 - data/lib/datadog/ci/test_module.rb +23 -0
 - data/lib/datadog/ci/test_session.rb +36 -0
 - data/lib/datadog/ci/test_suite.rb +25 -0
 - data/lib/datadog/ci/test_visibility/context/global.rb +82 -0
 - data/lib/datadog/ci/test_visibility/context/local.rb +52 -0
 - data/lib/datadog/ci/test_visibility/recorder.rb +293 -0
 - data/lib/datadog/ci/test_visibility/serializers/base.rb +100 -12
 - data/lib/datadog/ci/test_visibility/serializers/factories/test_suite_level.rb +37 -0
 - data/lib/datadog/ci/test_visibility/serializers/span.rb +2 -16
 - data/lib/datadog/ci/test_visibility/serializers/test_module.rb +46 -0
 - data/lib/datadog/ci/test_visibility/serializers/test_session.rb +46 -0
 - data/lib/datadog/ci/test_visibility/serializers/test_suite.rb +46 -0
 - data/lib/datadog/ci/test_visibility/serializers/test_v1.rb +3 -17
 - data/lib/datadog/ci/test_visibility/serializers/test_v2.rb +38 -0
 - data/lib/datadog/ci/test_visibility/transport.rb +4 -4
 - data/lib/datadog/ci/utils/test_run.rb +15 -0
 - data/lib/datadog/ci/utils/url.rb +15 -0
 - data/lib/datadog/ci/version.rb +2 -2
 - data/lib/datadog/ci.rb +378 -7
 - data/sig/datadog/ci/concurrent_span.rbs +23 -0
 - data/sig/datadog/ci/configuration/components.rbs +6 -0
 - data/sig/datadog/ci/configuration/extensions.rbs +9 -0
 - data/sig/datadog/ci/ext/app_types.rbs +6 -1
 - data/sig/datadog/ci/ext/environment/extractor.rbs +0 -2
 - data/sig/datadog/ci/ext/environment/providers/github_actions.rbs +5 -0
 - data/sig/datadog/ci/ext/settings.rbs +3 -0
 - data/sig/datadog/ci/ext/test.rbs +15 -0
 - data/sig/datadog/ci/null_span.rbs +37 -0
 - data/sig/datadog/ci/span.rbs +39 -0
 - data/sig/datadog/ci/test.rbs +7 -0
 - data/sig/datadog/ci/test_module.rbs +6 -0
 - data/sig/datadog/ci/test_session.rbs +9 -0
 - data/sig/datadog/ci/test_suite.rbs +6 -0
 - data/sig/datadog/ci/test_visibility/context/global.rbs +39 -0
 - data/sig/datadog/ci/test_visibility/context/local.rbs +23 -0
 - data/sig/datadog/ci/test_visibility/recorder.rbs +85 -0
 - data/sig/datadog/ci/test_visibility/serializers/base.rbs +26 -5
 - data/sig/datadog/ci/test_visibility/serializers/factories/test_suite_level.rbs +13 -0
 - data/sig/datadog/ci/test_visibility/serializers/test_module.rbs +26 -0
 - data/sig/datadog/ci/test_visibility/serializers/test_session.rbs +26 -0
 - data/sig/datadog/ci/test_visibility/serializers/test_suite.rbs +26 -0
 - data/sig/datadog/ci/test_visibility/serializers/test_v1.rbs +1 -1
 - data/sig/datadog/ci/test_visibility/serializers/test_v2.rbs +25 -0
 - data/sig/datadog/ci/test_visibility/transport.rbs +3 -3
 - data/sig/datadog/ci/utils/test_run.rbs +11 -0
 - data/sig/datadog/ci/utils/url.rbs +9 -0
 - data/sig/datadog/ci.rbs +31 -3
 - metadata +38 -6
 - data/lib/datadog/ci/extensions.rb +0 -19
 - data/lib/datadog/ci/recorder.rb +0 -83
 - data/sig/datadog/ci/extensions.rbs +0 -7
 - data/sig/datadog/ci/recorder.rbs +0 -18
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 85bb3584dc8081e8f6e8531d2a600e3948f4f9ea23d551dd99df0eab9daf2a3c
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: b6f686d49d3dbb1695c0f6e20b434b77648a118c32e1691f4a0f30b13d38dc62
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 8e8ae716ea7c7408c59c11efa5a3bc30e0767a02c659e231f1cec2a02d5494d451c1e2b43c7c16240cbe7c9418f004ead32faa09b08c83bcd878156fa1062ae9
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 15bdfb45e32660356fcc4c5726c4a640c78cfc2d5007807623f532a0b7c321f0b11a32d0a75f571a64ae263159d4b86b0a750dda5d7e8a5c33f9c110bf7682a0
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,5 +1,70 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ## [Unreleased]
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## [0.5.1] - 2023-12-11
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ### Fixed
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            * do not collect environment tags when CI is not enabled ([#87][])
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            * Move private classes and modules deeper in module hierarchy ([#85][])
         
     | 
| 
      
 12 
     | 
    
         
            +
            * update appraisal dependencies ([#84][])
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            ## [0.5.0] - 2023-12-06
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            ### Test suite level visibility
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            This release includes experimental manual API for [test suite level visibility](https://docs.datadoghq.com/continuous_integration/explorer/?tab=testruns#sessions) in Ruby.
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            Currently test suite level visibility is not used by our instrumentation: it will be released in v0.6.
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            ### Added
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            * Test suite level visibility: add test session public API ([#72][])
         
     | 
| 
      
 25 
     | 
    
         
            +
            * Test suite level visibility: test module support ([#76][])
         
     | 
| 
      
 26 
     | 
    
         
            +
            * Test suite level visibility: test suites support ([#77][])
         
     | 
| 
      
 27 
     | 
    
         
            +
            * add YARD documentation ([#82][])
         
     | 
| 
      
 28 
     | 
    
         
            +
            * support validation errors for CI spans ([#78][])
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            * Validate DD_SITE variable ([#79][])
         
     | 
| 
      
 33 
     | 
    
         
            +
            * Document how to use WebMock with datadog-ci ([#80][])
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            ### Fixed
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            * Datadog::CI.trace_test always starts a new trace ([#74][])
         
     | 
| 
      
 38 
     | 
    
         
            +
            * Skip tracing when CI mode disabled and manual API is used ([#75][])
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            ### Removed
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            * Deprecate operation name setting, change service_name to service in public API ([#81][])
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            ## [0.4.1] - 2023-11-22
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            ### Fixed
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            * disable 128-bit trace id generation in CI mode ([#70][])
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            ## [0.4.0] - 2023-11-21
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            ### Added
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            * Public API for manual test instrumentation ([#64][]) ([#61][])
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            ### Changed
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            * fix tracing instrumentation example in readme ([#60][])
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            ### Fixed
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            * Remove user credentials from ssh URLs and from GITHUB_REPO_URL environment variable ([#66][])
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            ### Removed
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            * Remove _dd.measured tag from spans ([#65][])
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
       3 
68 
     | 
    
         
             
            ## [0.3.0] - 2023-10-25
         
     | 
| 
       4 
69 
     | 
    
         | 
| 
       5 
70 
     | 
    
         
             
            ### Added
         
     | 
| 
         @@ -47,7 +112,11 @@ 
     | 
|
| 
       47 
112 
     | 
    
         | 
| 
       48 
113 
     | 
    
         
             
            * Ruby versions < 2.7 no longer supported ([#8][])
         
     | 
| 
       49 
114 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
            [Unreleased]: https://github.com/DataDog/datadog-ci-rb/compare/v0. 
     | 
| 
      
 115 
     | 
    
         
            +
            [Unreleased]: https://github.com/DataDog/datadog-ci-rb/compare/v0.5.1...main
         
     | 
| 
      
 116 
     | 
    
         
            +
            [0.5.1]: https://github.com/DataDog/datadog-ci-rb/compare/v0.5.0...v0.5.1
         
     | 
| 
      
 117 
     | 
    
         
            +
            [0.5.0]: https://github.com/DataDog/datadog-ci-rb/compare/v0.4.1...v0.5.0
         
     | 
| 
      
 118 
     | 
    
         
            +
            [0.4.1]: https://github.com/DataDog/datadog-ci-rb/compare/v0.4.0...v0.4.1
         
     | 
| 
      
 119 
     | 
    
         
            +
            [0.4.0]: https://github.com/DataDog/datadog-ci-rb/compare/v0.3.0...v0.4.0
         
     | 
| 
       51 
120 
     | 
    
         
             
            [0.3.0]: https://github.com/DataDog/datadog-ci-rb/compare/v0.2.0...v0.3.0
         
     | 
| 
       52 
121 
     | 
    
         
             
            [0.2.0]: https://github.com/DataDog/datadog-ci-rb/compare/v0.1.1...v0.2.0
         
     | 
| 
       53 
122 
     | 
    
         
             
            [0.1.1]: https://github.com/DataDog/datadog-ci-rb/compare/v0.1.0...v0.1.1
         
     | 
| 
         @@ -66,3 +135,22 @@ 
     | 
|
| 
       66 
135 
     | 
    
         
             
            [#49]: https://github.com/DataDog/datadog-ci-rb/issues/49
         
     | 
| 
       67 
136 
     | 
    
         
             
            [#51]: https://github.com/DataDog/datadog-ci-rb/issues/51
         
     | 
| 
       68 
137 
     | 
    
         
             
            [#54]: https://github.com/DataDog/datadog-ci-rb/issues/54
         
     | 
| 
      
 138 
     | 
    
         
            +
            [#60]: https://github.com/DataDog/datadog-ci-rb/issues/60
         
     | 
| 
      
 139 
     | 
    
         
            +
            [#61]: https://github.com/DataDog/datadog-ci-rb/issues/61
         
     | 
| 
      
 140 
     | 
    
         
            +
            [#64]: https://github.com/DataDog/datadog-ci-rb/issues/64
         
     | 
| 
      
 141 
     | 
    
         
            +
            [#65]: https://github.com/DataDog/datadog-ci-rb/issues/65
         
     | 
| 
      
 142 
     | 
    
         
            +
            [#66]: https://github.com/DataDog/datadog-ci-rb/issues/66
         
     | 
| 
      
 143 
     | 
    
         
            +
            [#70]: https://github.com/DataDog/datadog-ci-rb/issues/70
         
     | 
| 
      
 144 
     | 
    
         
            +
            [#72]: https://github.com/DataDog/datadog-ci-rb/issues/72
         
     | 
| 
      
 145 
     | 
    
         
            +
            [#74]: https://github.com/DataDog/datadog-ci-rb/issues/74
         
     | 
| 
      
 146 
     | 
    
         
            +
            [#75]: https://github.com/DataDog/datadog-ci-rb/issues/75
         
     | 
| 
      
 147 
     | 
    
         
            +
            [#76]: https://github.com/DataDog/datadog-ci-rb/issues/76
         
     | 
| 
      
 148 
     | 
    
         
            +
            [#77]: https://github.com/DataDog/datadog-ci-rb/issues/77
         
     | 
| 
      
 149 
     | 
    
         
            +
            [#78]: https://github.com/DataDog/datadog-ci-rb/issues/78
         
     | 
| 
      
 150 
     | 
    
         
            +
            [#79]: https://github.com/DataDog/datadog-ci-rb/issues/79
         
     | 
| 
      
 151 
     | 
    
         
            +
            [#80]: https://github.com/DataDog/datadog-ci-rb/issues/80
         
     | 
| 
      
 152 
     | 
    
         
            +
            [#81]: https://github.com/DataDog/datadog-ci-rb/issues/81
         
     | 
| 
      
 153 
     | 
    
         
            +
            [#82]: https://github.com/DataDog/datadog-ci-rb/issues/82
         
     | 
| 
      
 154 
     | 
    
         
            +
            [#84]: https://github.com/DataDog/datadog-ci-rb/issues/84
         
     | 
| 
      
 155 
     | 
    
         
            +
            [#85]: https://github.com/DataDog/datadog-ci-rb/issues/85
         
     | 
| 
      
 156 
     | 
    
         
            +
            [#87]: https://github.com/DataDog/datadog-ci-rb/issues/87
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Datadog CI Visibility for Ruby
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            [](https://badge.fury.io/rb/datadog-ci)
         
     | 
| 
      
 4 
     | 
    
         
            +
            [](https://datadoghq.dev/datadog-ci-rb/)
         
     | 
| 
       4 
5 
     | 
    
         
             
            [](https://app.codecov.io/gh/DataDog/datadog-ci-rb/branch/main)
         
     | 
| 
       5 
6 
     | 
    
         
             
            [](https://dl.circleci.com/status-badge/redirect/gh/DataDog/datadog-ci-rb/tree/main)
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
         @@ -30,18 +31,18 @@ To activate `RSpec` integration, add this to the `spec_helper.rb` file: 
     | 
|
| 
       30 
31 
     | 
    
         
             
            require 'rspec'
         
     | 
| 
       31 
32 
     | 
    
         
             
            require 'datadog/ci'
         
     | 
| 
       32 
33 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
               
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
              c.ci.enabled = true
         
     | 
| 
      
 34 
     | 
    
         
            +
            # Only activates test instrumentation on CI
         
     | 
| 
      
 35 
     | 
    
         
            +
            if ENV["DD_ENV"] == "ci"
         
     | 
| 
      
 36 
     | 
    
         
            +
              Datadog.configure do |c|
         
     | 
| 
      
 37 
     | 
    
         
            +
                # Configures the tracer to ensure results delivery
         
     | 
| 
      
 38 
     | 
    
         
            +
                c.ci.enabled = true
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
      
 40 
     | 
    
         
            +
                # The name of the service or library under test
         
     | 
| 
      
 41 
     | 
    
         
            +
                c.service = 'my-ruby-app'
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
                # Enables the RSpec instrumentation
         
     | 
| 
      
 44 
     | 
    
         
            +
                c.ci.instrument :rspec, **options
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
       45 
46 
     | 
    
         
             
            end
         
     | 
| 
       46 
47 
     | 
    
         
             
            ```
         
     | 
| 
       47 
48 
     | 
    
         | 
| 
         @@ -51,7 +52,7 @@ end 
     | 
|
| 
       51 
52 
     | 
    
         
             
            | --- | ----------- | ------- |
         
     | 
| 
       52 
53 
     | 
    
         
             
            | `enabled` | Defines whether RSpec tests should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
         
     | 
| 
       53 
54 
     | 
    
         
             
            | `service_name` | Service name used for `rspec` instrumentation. | `'rspec'` |
         
     | 
| 
       54 
     | 
    
         
            -
            | `operation_name` | Operation name used for `rspec` instrumentation 
     | 
| 
      
 55 
     | 
    
         
            +
            | `operation_name` | *DEPRECATED, to be removed in 1.0* Operation name used for `rspec` instrumentation (has no effect in agentless mode or when using newer agent versions). | `'rspec.example'` |
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
       56 
57 
     | 
    
         
             
            ### Minitest
         
     | 
| 
       57 
58 
     | 
    
         | 
| 
         @@ -63,18 +64,18 @@ To activate your integration, use the `Datadog.configure` method: 
     | 
|
| 
       63 
64 
     | 
    
         
             
            require 'minitest'
         
     | 
| 
       64 
65 
     | 
    
         
             
            require 'datadog/ci'
         
     | 
| 
       65 
66 
     | 
    
         | 
| 
      
 67 
     | 
    
         
            +
            # Only activates test instrumentation on CI
         
     | 
| 
      
 68 
     | 
    
         
            +
            if ENV["DD_ENV"] == "ci"
         
     | 
| 
       66 
69 
     | 
    
         
             
            # Configure default Minitest integration
         
     | 
| 
       67 
     | 
    
         
            -
            Datadog.configure do |c|
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
              # Configures the tracer to ensure results delivery
         
     | 
| 
       72 
     | 
    
         
            -
              c.ci.enabled = true
         
     | 
| 
      
 70 
     | 
    
         
            +
              Datadog.configure do |c|
         
     | 
| 
      
 71 
     | 
    
         
            +
                # Configures the tracer to ensure results delivery
         
     | 
| 
      
 72 
     | 
    
         
            +
                c.ci.enabled = true
         
     | 
| 
       73 
73 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
      
 74 
     | 
    
         
            +
                # The name of the service or library under test
         
     | 
| 
      
 75 
     | 
    
         
            +
                c.service = 'my-ruby-app'
         
     | 
| 
       76 
76 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
      
 77 
     | 
    
         
            +
                c.ci.instrument :minitest, **options
         
     | 
| 
      
 78 
     | 
    
         
            +
              end
         
     | 
| 
       78 
79 
     | 
    
         
             
            end
         
     | 
| 
       79 
80 
     | 
    
         
             
            ```
         
     | 
| 
       80 
81 
     | 
    
         | 
| 
         @@ -84,7 +85,7 @@ end 
     | 
|
| 
       84 
85 
     | 
    
         
             
            | --- | ----------- | ------- |
         
     | 
| 
       85 
86 
     | 
    
         
             
            | `enabled` | Defines whether Minitest tests should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
         
     | 
| 
       86 
87 
     | 
    
         
             
            | `service_name` | Service name used for `minitest` instrumentation. | `'minitest'` |
         
     | 
| 
       87 
     | 
    
         
            -
            | `operation_name` | Operation name used for `minitest` instrumentation 
     | 
| 
      
 88 
     | 
    
         
            +
            | `operation_name` | *DEPRECATED, to be removed in 1.0* Operation name used for `minitest` instrumentation (has no effect in agentless mode or when using newer agent versions). | `'minitest.test'` |
         
     | 
| 
       88 
89 
     | 
    
         | 
| 
       89 
90 
     | 
    
         
             
            ### Cucumber
         
     | 
| 
       90 
91 
     | 
    
         | 
| 
         @@ -94,18 +95,18 @@ Activate `Cucumber` integration with configuration 
     | 
|
| 
       94 
95 
     | 
    
         
             
            require 'cucumber'
         
     | 
| 
       95 
96 
     | 
    
         
             
            require 'datadog/ci'
         
     | 
| 
       96 
97 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
               
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
              c.ci.enabled = true
         
     | 
| 
      
 98 
     | 
    
         
            +
            # Only activates test instrumentation on CI
         
     | 
| 
      
 99 
     | 
    
         
            +
            if ENV["DD_ENV"] == "ci"
         
     | 
| 
      
 100 
     | 
    
         
            +
              Datadog.configure do |c|
         
     | 
| 
      
 101 
     | 
    
         
            +
                # Configures the tracer to ensure results delivery
         
     | 
| 
      
 102 
     | 
    
         
            +
                c.ci.enabled = true
         
     | 
| 
       103 
103 
     | 
    
         | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
      
 104 
     | 
    
         
            +
                # The name of the service or library under test
         
     | 
| 
      
 105 
     | 
    
         
            +
                c.service = 'my-ruby-app'
         
     | 
| 
       106 
106 
     | 
    
         | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
      
 107 
     | 
    
         
            +
                # Enables the Cucumber instrumentation
         
     | 
| 
      
 108 
     | 
    
         
            +
                c.ci.instrument :cucumber, **options
         
     | 
| 
      
 109 
     | 
    
         
            +
              end
         
     | 
| 
       109 
110 
     | 
    
         
             
            end
         
     | 
| 
       110 
111 
     | 
    
         
             
            ```
         
     | 
| 
       111 
112 
     | 
    
         | 
| 
         @@ -115,7 +116,7 @@ end 
     | 
|
| 
       115 
116 
     | 
    
         
             
            | --- | ----------- | ------- |
         
     | 
| 
       116 
117 
     | 
    
         
             
            | `enabled` | Defines whether Cucumber tests should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
         
     | 
| 
       117 
118 
     | 
    
         
             
            | `service_name` | Service name used for `cucumber` instrumentation. | `'cucumber'` |
         
     | 
| 
       118 
     | 
    
         
            -
            | `operation_name` | Operation name used for `cucumber` instrumentation 
     | 
| 
      
 119 
     | 
    
         
            +
            | `operation_name` | *DEPRECATED, to be removed in 1.0* Operation name used for `cucumber` instrumentation (has no effect in agentless mode or when using newer agent versions). | `'cucumber.test'` |
         
     | 
| 
       119 
120 
     | 
    
         | 
| 
       120 
121 
     | 
    
         
             
            ## Agentless mode
         
     | 
| 
       121 
122 
     | 
    
         | 
| 
         @@ -145,8 +146,8 @@ In order to achieve this you can configure ddtrace instrumentations in your conf 
     | 
|
| 
       145 
146 
     | 
    
         
             
            ```ruby
         
     | 
| 
       146 
147 
     | 
    
         
             
            Datadog.configure do |c|
         
     | 
| 
       147 
148 
     | 
    
         
             
              #  ... ci configs and instrumentation here ...
         
     | 
| 
       148 
     | 
    
         
            -
              c.instrument :redis
         
     | 
| 
       149 
     | 
    
         
            -
              c.instrument :pg
         
     | 
| 
      
 149 
     | 
    
         
            +
              c.tracing.instrument :redis
         
     | 
| 
      
 150 
     | 
    
         
            +
              c.tracing.instrument :pg
         
     | 
| 
       150 
151 
     | 
    
         
             
            end
         
     | 
| 
       151 
152 
     | 
    
         
             
            ```
         
     | 
| 
       152 
153 
     | 
    
         | 
| 
         @@ -161,6 +162,28 @@ they will **not** show up in Datadog APM. 
     | 
|
| 
       161 
162 
     | 
    
         | 
| 
       162 
163 
     | 
    
         
             
            For the full list of available instrumentations see [ddtrace documentation](https://github.com/DataDog/dd-trace-rb/blob/master/docs/GettingStarted.md)
         
     | 
| 
       163 
164 
     | 
    
         | 
| 
      
 165 
     | 
    
         
            +
            ### WebMock
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
            [WebMock](https://github.com/bblimke/webmock)
         
     | 
| 
      
 168 
     | 
    
         
            +
            is a popular Ruby library that stubs HTTP requests when running tests.
         
     | 
| 
      
 169 
     | 
    
         
            +
            By default it fails when used together with datadog-ci as traces are being sent
         
     | 
| 
      
 170 
     | 
    
         
            +
            to Datadog via HTTP calls.
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
            In order to allow HTTP connections for Datadog backend you would need to configure
         
     | 
| 
      
 173 
     | 
    
         
            +
            Webmock accordingly.
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 176 
     | 
    
         
            +
            # when using agentless mode
         
     | 
| 
      
 177 
     | 
    
         
            +
            # note to use the correct datadog site (e.g. datadoghq.eu, etc)
         
     | 
| 
      
 178 
     | 
    
         
            +
            WebMock.disable_net_connect!(:allow => "citestcycle-intake.datadoghq.com")
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
            # when using agent
         
     | 
| 
      
 181 
     | 
    
         
            +
            WebMock.disable_net_connect!(:allow_localhost => true)
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
            # or for more granular setting set your agent URL
         
     | 
| 
      
 184 
     | 
    
         
            +
            WebMock.disable_net_connect!(:allow => "localhost:8126")
         
     | 
| 
      
 185 
     | 
    
         
            +
            ```
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
       164 
187 
     | 
    
         
             
            ### Disabling startup logs
         
     | 
| 
       165 
188 
     | 
    
         | 
| 
       166 
189 
     | 
    
         
             
            Startup logs produce a report of tracing state when the application is initially configured.
         
     | 
| 
         @@ -0,0 +1,59 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative "span"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Datadog
         
     | 
| 
      
 6 
     | 
    
         
            +
              module CI
         
     | 
| 
      
 7 
     | 
    
         
            +
                # Represents a single part of a test run that can be safely shared between threads.
         
     | 
| 
      
 8 
     | 
    
         
            +
                # Examples of shared objects are: TestSession, TestModule, TestSpan.
         
     | 
| 
      
 9 
     | 
    
         
            +
                #
         
     | 
| 
      
 10 
     | 
    
         
            +
                # @public_api
         
     | 
| 
      
 11 
     | 
    
         
            +
                class ConcurrentSpan < Span
         
     | 
| 
      
 12 
     | 
    
         
            +
                  def initialize(tracer_span)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    super
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    @mutex = Mutex.new
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  # Gets tag value by key. This method is thread-safe.
         
     | 
| 
      
 19 
     | 
    
         
            +
                  # @param [String] key the key of the tag.
         
     | 
| 
      
 20 
     | 
    
         
            +
                  # @return [String] the value of the tag.
         
     | 
| 
      
 21 
     | 
    
         
            +
                  def get_tag(key)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    synchronize { super }
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  # Sets tag value by key. This method is thread-safe.
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # @param [String] key the key of the tag.
         
     | 
| 
      
 27 
     | 
    
         
            +
                  # @param [String] value the value of the tag.
         
     | 
| 
      
 28 
     | 
    
         
            +
                  # @return [void]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  def set_tag(key, value)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    synchronize { super }
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  # Sets metric value by key. This method is thread-safe.
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # @param [String] key the key of the metric.
         
     | 
| 
      
 35 
     | 
    
         
            +
                  # @param [Numeric] value the value of the metric.
         
     | 
| 
      
 36 
     | 
    
         
            +
                  # @return [void]
         
     | 
| 
      
 37 
     | 
    
         
            +
                  def set_metric(key, value)
         
     | 
| 
      
 38 
     | 
    
         
            +
                    synchronize { super }
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  # Finishes the span. This method is thread-safe.
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # @return [void]
         
     | 
| 
      
 43 
     | 
    
         
            +
                  def finish
         
     | 
| 
      
 44 
     | 
    
         
            +
                    synchronize { super }
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  # Sets multiple tags at once. This method is thread-safe.
         
     | 
| 
      
 48 
     | 
    
         
            +
                  # @param [Hash[String, String]] tags the tags to set.
         
     | 
| 
      
 49 
     | 
    
         
            +
                  # @return [void]
         
     | 
| 
      
 50 
     | 
    
         
            +
                  def set_tags(tags)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    synchronize { super }
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                  def synchronize
         
     | 
| 
      
 55 
     | 
    
         
            +
                    @mutex.synchronize { yield }
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -4,7 +4,11 @@ require "datadog/core/configuration/agent_settings_resolver" 
     | 
|
| 
       4 
4 
     | 
    
         
             
            require "datadog/core/remote/negotiation"
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            require_relative "../ext/transport"
         
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative "../ext/settings"
         
     | 
| 
       7 
8 
     | 
    
         
             
            require_relative "../test_visibility/flush"
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_relative "../test_visibility/recorder"
         
     | 
| 
      
 10 
     | 
    
         
            +
            require_relative "../test_visibility/serializers/factories/test_level"
         
     | 
| 
      
 11 
     | 
    
         
            +
            require_relative "../test_visibility/serializers/factories/test_suite_level"
         
     | 
| 
       8 
12 
     | 
    
         
             
            require_relative "../test_visibility/transport"
         
     | 
| 
       9 
13 
     | 
    
         
             
            require_relative "../transport/api/builder"
         
     | 
| 
       10 
14 
     | 
    
         | 
| 
         @@ -13,10 +17,17 @@ module Datadog 
     | 
|
| 
       13 
17 
     | 
    
         
             
                module Configuration
         
     | 
| 
       14 
18 
     | 
    
         
             
                  # Adds CI behavior to Datadog trace components
         
     | 
| 
       15 
19 
     | 
    
         
             
                  module Components
         
     | 
| 
      
 20 
     | 
    
         
            +
                    attr_reader :ci_recorder
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
       16 
22 
     | 
    
         
             
                    def initialize(settings)
         
     | 
| 
       17 
23 
     | 
    
         
             
                      # Activate CI mode if enabled
         
     | 
| 
       18 
24 
     | 
    
         
             
                      activate_ci!(settings) if settings.ci.enabled
         
     | 
| 
       19 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
                      @ci_recorder = TestVisibility::Recorder.new(
         
     | 
| 
      
 27 
     | 
    
         
            +
                        enabled: settings.ci.enabled,
         
     | 
| 
      
 28 
     | 
    
         
            +
                        test_suite_level_visibility_enabled: settings.ci.experimental_test_suite_level_visibility_enabled
         
     | 
| 
      
 29 
     | 
    
         
            +
                      )
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       20 
31 
     | 
    
         
             
                      # Initialize normally
         
     | 
| 
       21 
32 
     | 
    
         
             
                      super
         
     | 
| 
       22 
33 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -26,9 +37,12 @@ module Datadog 
     | 
|
| 
       26 
37 
     | 
    
         
             
                      agent_settings = Datadog::Core::Configuration::AgentSettingsResolver.call(settings)
         
     | 
| 
       27 
38 
     | 
    
         | 
| 
       28 
39 
     | 
    
         
             
                      if settings.ci.agentless_mode_enabled
         
     | 
| 
      
 40 
     | 
    
         
            +
                        check_dd_site(settings)
         
     | 
| 
       29 
41 
     | 
    
         
             
                        test_visibility_transport = build_agentless_transport(settings)
         
     | 
| 
       30 
42 
     | 
    
         
             
                      elsif can_use_evp_proxy?(settings, agent_settings)
         
     | 
| 
       31 
43 
     | 
    
         
             
                        test_visibility_transport = build_evp_proxy_transport(settings, agent_settings)
         
     | 
| 
      
 44 
     | 
    
         
            +
                      else
         
     | 
| 
      
 45 
     | 
    
         
            +
                        settings.ci.experimental_test_suite_level_visibility_enabled = false
         
     | 
| 
       32 
46 
     | 
    
         
             
                      end
         
     | 
| 
       33 
47 
     | 
    
         | 
| 
       34 
48 
     | 
    
         
             
                      # Deactivate telemetry
         
     | 
| 
         @@ -37,11 +51,15 @@ module Datadog 
     | 
|
| 
       37 
51 
     | 
    
         
             
                      # Deactivate remote configuration
         
     | 
| 
       38 
52 
     | 
    
         
             
                      settings.remote.enabled = false
         
     | 
| 
       39 
53 
     | 
    
         | 
| 
      
 54 
     | 
    
         
            +
                      # do not use 128-bit trace ids for CI visibility
         
     | 
| 
      
 55 
     | 
    
         
            +
                      # they are used for OTEL compatibility in Datadog tracer
         
     | 
| 
      
 56 
     | 
    
         
            +
                      settings.tracing.trace_id_128_bit_generation_enabled = false
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
       40 
58 
     | 
    
         
             
                      # Activate underlying tracing test mode
         
     | 
| 
       41 
59 
     | 
    
         
             
                      settings.tracing.test_mode.enabled = true
         
     | 
| 
       42 
60 
     | 
    
         | 
| 
       43 
61 
     | 
    
         
             
                      # Choose user defined TraceFlush or default to CI TraceFlush
         
     | 
| 
       44 
     | 
    
         
            -
                      settings.tracing.test_mode.trace_flush = settings.ci.trace_flush || CI::TestVisibility::Flush:: 
     | 
| 
      
 62 
     | 
    
         
            +
                      settings.tracing.test_mode.trace_flush = settings.ci.trace_flush || CI::TestVisibility::Flush::Partial.new
         
     | 
| 
       45 
63 
     | 
    
         | 
| 
       46 
64 
     | 
    
         
             
                      writer_options = settings.ci.writer_options
         
     | 
| 
       47 
65 
     | 
    
         
             
                      if test_visibility_transport
         
     | 
| 
         @@ -80,6 +98,7 @@ module Datadog 
     | 
|
| 
       80 
98 
     | 
    
         | 
| 
       81 
99 
     | 
    
         
             
                        Datadog::CI::TestVisibility::Transport.new(
         
     | 
| 
       82 
100 
     | 
    
         
             
                          api: Transport::Api::Builder.build_ci_test_cycle_api(settings),
         
     | 
| 
      
 101 
     | 
    
         
            +
                          serializers_factory: serializers_factory(settings),
         
     | 
| 
       83 
102 
     | 
    
         
             
                          dd_env: settings.env
         
     | 
| 
       84 
103 
     | 
    
         
             
                        )
         
     | 
| 
       85 
104 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -90,9 +109,29 @@ module Datadog 
     | 
|
| 
       90 
109 
     | 
    
         | 
| 
       91 
110 
     | 
    
         
             
                      Datadog::CI::TestVisibility::Transport.new(
         
     | 
| 
       92 
111 
     | 
    
         
             
                        api: Transport::Api::Builder.build_evp_proxy_api(agent_settings),
         
     | 
| 
      
 112 
     | 
    
         
            +
                        serializers_factory: serializers_factory(settings),
         
     | 
| 
       93 
113 
     | 
    
         
             
                        dd_env: settings.env
         
     | 
| 
       94 
114 
     | 
    
         
             
                      )
         
     | 
| 
       95 
115 
     | 
    
         
             
                    end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                    def serializers_factory(settings)
         
     | 
| 
      
 118 
     | 
    
         
            +
                      if settings.ci.experimental_test_suite_level_visibility_enabled
         
     | 
| 
      
 119 
     | 
    
         
            +
                        Datadog::CI::TestVisibility::Serializers::Factories::TestSuiteLevel
         
     | 
| 
      
 120 
     | 
    
         
            +
                      else
         
     | 
| 
      
 121 
     | 
    
         
            +
                        Datadog::CI::TestVisibility::Serializers::Factories::TestLevel
         
     | 
| 
      
 122 
     | 
    
         
            +
                      end
         
     | 
| 
      
 123 
     | 
    
         
            +
                    end
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                    def check_dd_site(settings)
         
     | 
| 
      
 126 
     | 
    
         
            +
                      return if settings.site.nil?
         
     | 
| 
      
 127 
     | 
    
         
            +
                      return if Ext::Settings::DD_SITE_ALLOWLIST.include?(settings.site)
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                      Datadog.logger.warn(
         
     | 
| 
      
 130 
     | 
    
         
            +
                        "CI VISIBILITY CONFIGURATION " \
         
     | 
| 
      
 131 
     | 
    
         
            +
                        "Agentless mode was enabled but DD_SITE is not set to one of the following: #{Ext::Settings::DD_SITE_ALLOWLIST.join(", ")}. " \
         
     | 
| 
      
 132 
     | 
    
         
            +
                        "Please make sure to set valid site in DD_SITE environment variable"
         
     | 
| 
      
 133 
     | 
    
         
            +
                      )
         
     | 
| 
      
 134 
     | 
    
         
            +
                    end
         
     | 
| 
       96 
135 
     | 
    
         
             
                  end
         
     | 
| 
       97 
136 
     | 
    
         
             
                end
         
     | 
| 
       98 
137 
     | 
    
         
             
              end
         
     | 
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "datadog/core/configuration/settings"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "datadog/core/configuration/components"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require_relative "settings"
         
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative "components"
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            module Datadog
         
     | 
| 
      
 10 
     | 
    
         
            +
              module CI
         
     | 
| 
      
 11 
     | 
    
         
            +
                module Configuration
         
     | 
| 
      
 12 
     | 
    
         
            +
                  # Extends Datadog tracing with CI features
         
     | 
| 
      
 13 
     | 
    
         
            +
                  module Extensions
         
     | 
| 
      
 14 
     | 
    
         
            +
                    def self.activate!
         
     | 
| 
      
 15 
     | 
    
         
            +
                      Core::Configuration::Settings.extend(CI::Configuration::Settings)
         
     | 
| 
      
 16 
     | 
    
         
            +
                      Core::Configuration::Components.prepend(CI::Configuration::Components)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -34,6 +34,12 @@ module Datadog 
     | 
|
| 
       34 
34 
     | 
    
         
             
                            o.env CI::Ext::Settings::ENV_AGENTLESS_URL
         
     | 
| 
       35 
35 
     | 
    
         
             
                          end
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
      
 37 
     | 
    
         
            +
                          option :experimental_test_suite_level_visibility_enabled do |o|
         
     | 
| 
      
 38 
     | 
    
         
            +
                            o.type :bool
         
     | 
| 
      
 39 
     | 
    
         
            +
                            o.env CI::Ext::Settings::ENV_EXPERIMENTAL_TEST_SUITE_LEVEL_VISIBILITY_ENABLED
         
     | 
| 
      
 40 
     | 
    
         
            +
                            o.default false
         
     | 
| 
      
 41 
     | 
    
         
            +
                          end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
       37 
43 
     | 
    
         
             
                          define_method(:instrument) do |integration_name, options = {}, &block|
         
     | 
| 
       38 
44 
     | 
    
         
             
                            return unless enabled
         
     | 
| 
       39 
45 
     | 
    
         | 
| 
         @@ -56,7 +62,7 @@ module Datadog 
     | 
|
| 
       56 
62 
     | 
    
         
             
                            fetch_integration(integration_name).configuration
         
     | 
| 
       57 
63 
     | 
    
         
             
                          end
         
     | 
| 
       58 
64 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                          #  
     | 
| 
      
 65 
     | 
    
         
            +
                          # @deprecated Will be removed on datadog-ci-rb 1.0.
         
     | 
| 
       60 
66 
     | 
    
         
             
                          alias_method :use, :instrument
         
     | 
| 
       61 
67 
     | 
    
         | 
| 
       62 
68 
     | 
    
         
             
                          option :trace_flush
         
     | 
| 
         @@ -1,5 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require "datadog/core"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            require_relative "../ext"
         
     | 
| 
       4 
6 
     | 
    
         
             
            require_relative "../../settings"
         
     | 
| 
       5 
7 
     | 
    
         | 
| 
         @@ -9,7 +11,7 @@ module Datadog 
     | 
|
| 
       9 
11 
     | 
    
         
             
                  module Cucumber
         
     | 
| 
       10 
12 
     | 
    
         
             
                    module Configuration
         
     | 
| 
       11 
13 
     | 
    
         
             
                      # Custom settings for the Cucumber integration
         
     | 
| 
       12 
     | 
    
         
            -
                      #  
     | 
| 
      
 14 
     | 
    
         
            +
                      # @public_api
         
     | 
| 
       13 
15 
     | 
    
         
             
                      class Settings < Datadog::CI::Contrib::Settings
         
     | 
| 
       14 
16 
     | 
    
         
             
                        option :enabled do |o|
         
     | 
| 
       15 
17 
     | 
    
         
             
                          o.type :bool
         
     | 
| 
         @@ -22,10 +24,19 @@ module Datadog 
     | 
|
| 
       22 
24 
     | 
    
         
             
                          o.default { Datadog.configuration.service_without_fallback || Ext::SERVICE_NAME }
         
     | 
| 
       23 
25 
     | 
    
         
             
                        end
         
     | 
| 
       24 
26 
     | 
    
         | 
| 
      
 27 
     | 
    
         
            +
                        # @deprecated Will be removed in 1.0
         
     | 
| 
       25 
28 
     | 
    
         
             
                        option :operation_name do |o|
         
     | 
| 
       26 
29 
     | 
    
         
             
                          o.type :string
         
     | 
| 
       27 
30 
     | 
    
         
             
                          o.env Ext::ENV_OPERATION_NAME
         
     | 
| 
       28 
31 
     | 
    
         
             
                          o.default Ext::OPERATION_NAME
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                          o.after_set do |value|
         
     | 
| 
      
 34 
     | 
    
         
            +
                            if value && value != Ext::OPERATION_NAME
         
     | 
| 
      
 35 
     | 
    
         
            +
                              Datadog::Core.log_deprecation do
         
     | 
| 
      
 36 
     | 
    
         
            +
                                "The operation_name setting has no effect and will be removed in 1.0"
         
     | 
| 
      
 37 
     | 
    
         
            +
                              end
         
     | 
| 
      
 38 
     | 
    
         
            +
                            end
         
     | 
| 
      
 39 
     | 
    
         
            +
                          end
         
     | 
| 
       29 
40 
     | 
    
         
             
                        end
         
     | 
| 
       30 
41 
     | 
    
         
             
                      end
         
     | 
| 
       31 
42 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -1,6 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            require_relative "../../recorder"
         
     | 
| 
       4 
3 
     | 
    
         
             
            require_relative "../../ext/test"
         
     | 
| 
       5 
4 
     | 
    
         
             
            require_relative "ext"
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
         @@ -28,56 +27,50 @@ module Datadog 
     | 
|
| 
       28 
27 
     | 
    
         
             
                      end
         
     | 
| 
       29 
28 
     | 
    
         | 
| 
       30 
29 
     | 
    
         
             
                      def on_test_case_started(event)
         
     | 
| 
       31 
     | 
    
         
            -
                         
     | 
| 
       32 
     | 
    
         
            -
                           
     | 
| 
       33 
     | 
    
         
            -
                           
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                            test_name: event.test_case.name,
         
     | 
| 
       41 
     | 
    
         
            -
                            test_suite: event.test_case.location.file,
         
     | 
| 
       42 
     | 
    
         
            -
                            test_type: Ext::TEST_TYPE
         
     | 
| 
       43 
     | 
    
         
            -
                          }
         
     | 
| 
      
 30 
     | 
    
         
            +
                        CI.start_test(
         
     | 
| 
      
 31 
     | 
    
         
            +
                          event.test_case.name,
         
     | 
| 
      
 32 
     | 
    
         
            +
                          event.test_case.location.file,
         
     | 
| 
      
 33 
     | 
    
         
            +
                          tags: {
         
     | 
| 
      
 34 
     | 
    
         
            +
                            CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK,
         
     | 
| 
      
 35 
     | 
    
         
            +
                            CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Cucumber::Integration.version.to_s,
         
     | 
| 
      
 36 
     | 
    
         
            +
                            CI::Ext::Test::TAG_TYPE => Ext::TEST_TYPE
         
     | 
| 
      
 37 
     | 
    
         
            +
                          },
         
     | 
| 
      
 38 
     | 
    
         
            +
                          service: configuration[:service_name]
         
     | 
| 
       44 
39 
     | 
    
         
             
                        )
         
     | 
| 
       45 
40 
     | 
    
         
             
                      end
         
     | 
| 
       46 
41 
     | 
    
         | 
| 
       47 
42 
     | 
    
         
             
                      def on_test_case_finished(event)
         
     | 
| 
       48 
     | 
    
         
            -
                         
     | 
| 
      
 43 
     | 
    
         
            +
                        test_span = CI.active_test
         
     | 
| 
      
 44 
     | 
    
         
            +
                        return if test_span.nil?
         
     | 
| 
       49 
45 
     | 
    
         | 
| 
       50 
46 
     | 
    
         
             
                        if event.result.skipped?
         
     | 
| 
       51 
     | 
    
         
            -
                           
     | 
| 
      
 47 
     | 
    
         
            +
                          test_span.skipped!
         
     | 
| 
       52 
48 
     | 
    
         
             
                        elsif event.result.ok?
         
     | 
| 
       53 
     | 
    
         
            -
                           
     | 
| 
      
 49 
     | 
    
         
            +
                          test_span.passed!
         
     | 
| 
       54 
50 
     | 
    
         
             
                        elsif event.result.failed?
         
     | 
| 
       55 
     | 
    
         
            -
                           
     | 
| 
      
 51 
     | 
    
         
            +
                          test_span.failed!
         
     | 
| 
       56 
52 
     | 
    
         
             
                        end
         
     | 
| 
       57 
53 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
                         
     | 
| 
      
 54 
     | 
    
         
            +
                        test_span.finish
         
     | 
| 
       59 
55 
     | 
    
         
             
                      end
         
     | 
| 
       60 
56 
     | 
    
         | 
| 
       61 
57 
     | 
    
         
             
                      def on_test_step_started(event)
         
     | 
| 
       62 
     | 
    
         
            -
                         
     | 
| 
       63 
     | 
    
         
            -
                          resource: event.test_step.to_s,
         
     | 
| 
       64 
     | 
    
         
            -
                          span_type: Ext::STEP_SPAN_TYPE
         
     | 
| 
       65 
     | 
    
         
            -
                        }
         
     | 
| 
       66 
     | 
    
         
            -
                        @current_step_span = Tracing.trace(Ext::STEP_SPAN_TYPE, **trace_options)
         
     | 
| 
      
 58 
     | 
    
         
            +
                        CI.trace(Ext::STEP_SPAN_TYPE, event.test_step.to_s)
         
     | 
| 
       67 
59 
     | 
    
         
             
                      end
         
     | 
| 
       68 
60 
     | 
    
         | 
| 
       69 
61 
     | 
    
         
             
                      def on_test_step_finished(event)
         
     | 
| 
       70 
     | 
    
         
            -
                         
     | 
| 
      
 62 
     | 
    
         
            +
                        current_step_span = CI.active_span(Ext::STEP_SPAN_TYPE)
         
     | 
| 
      
 63 
     | 
    
         
            +
                        return if current_step_span.nil?
         
     | 
| 
       71 
64 
     | 
    
         | 
| 
       72 
65 
     | 
    
         
             
                        if event.result.skipped?
         
     | 
| 
       73 
     | 
    
         
            -
                           
     | 
| 
      
 66 
     | 
    
         
            +
                          current_step_span.skipped!
         
     | 
| 
       74 
67 
     | 
    
         
             
                        elsif event.result.ok?
         
     | 
| 
       75 
     | 
    
         
            -
                           
     | 
| 
      
 68 
     | 
    
         
            +
                          current_step_span.passed!
         
     | 
| 
       76 
69 
     | 
    
         
             
                        elsif event.result.failed?
         
     | 
| 
       77 
     | 
    
         
            -
                           
     | 
| 
      
 70 
     | 
    
         
            +
                          current_step_span.failed!(exception: event.result.exception)
         
     | 
| 
       78 
71 
     | 
    
         
             
                        end
         
     | 
| 
       79 
72 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
                         
     | 
| 
      
 73 
     | 
    
         
            +
                        current_step_span.finish
         
     | 
| 
       81 
74 
     | 
    
         
             
                      end
         
     | 
| 
       82 
75 
     | 
    
         | 
| 
       83 
76 
     | 
    
         
             
                      private
         
     | 
| 
         @@ -9,7 +9,7 @@ module Datadog 
     | 
|
| 
       9 
9 
     | 
    
         
             
                  module Minitest
         
     | 
| 
       10 
10 
     | 
    
         
             
                    module Configuration
         
     | 
| 
       11 
11 
     | 
    
         
             
                      # Custom settings for the Minitest integration
         
     | 
| 
       12 
     | 
    
         
            -
                      #  
     | 
| 
      
 12 
     | 
    
         
            +
                      # @public_api
         
     | 
| 
       13 
13 
     | 
    
         
             
                      class Settings < Datadog::CI::Contrib::Settings
         
     | 
| 
       14 
14 
     | 
    
         
             
                        option :enabled do |o|
         
     | 
| 
       15 
15 
     | 
    
         
             
                          o.type :bool
         
     | 
| 
         @@ -22,10 +22,19 @@ module Datadog 
     | 
|
| 
       22 
22 
     | 
    
         
             
                          o.default { Datadog.configuration.service_without_fallback || Ext::SERVICE_NAME }
         
     | 
| 
       23 
23 
     | 
    
         
             
                        end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
      
 25 
     | 
    
         
            +
                        # @deprecated Will be removed in 1.0
         
     | 
| 
       25 
26 
     | 
    
         
             
                        option :operation_name do |o|
         
     | 
| 
       26 
27 
     | 
    
         
             
                          o.type :string
         
     | 
| 
       27 
28 
     | 
    
         
             
                          o.env Ext::ENV_OPERATION_NAME
         
     | 
| 
       28 
29 
     | 
    
         
             
                          o.default Ext::OPERATION_NAME
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                          o.after_set do |value|
         
     | 
| 
      
 32 
     | 
    
         
            +
                            if value && value != Ext::OPERATION_NAME
         
     | 
| 
      
 33 
     | 
    
         
            +
                              Datadog::Core.log_deprecation do
         
     | 
| 
      
 34 
     | 
    
         
            +
                                "The operation_name setting has no effect and will be removed in 1.0"
         
     | 
| 
      
 35 
     | 
    
         
            +
                              end
         
     | 
| 
      
 36 
     | 
    
         
            +
                            end
         
     | 
| 
      
 37 
     | 
    
         
            +
                          end
         
     | 
| 
       29 
38 
     | 
    
         
             
                        end
         
     | 
| 
       30 
39 
     | 
    
         
             
                      end
         
     | 
| 
       31 
40 
     | 
    
         
             
                    end
         
     |