DataDog / dd-trace-rb

Datadog Tracing Ruby Client
https://docs.datadoghq.com/tracing/
Other
304 stars 373 forks source link

[NO-TICKET] Bootstrap Ruby 3.4.0-preview1 image for early testing #3711

Closed ivoanjo closed 3 months ago

ivoanjo commented 3 months ago

What does this PR do?

This PR does the minimal amount of work to enable us to start tackling Ruby 3.4 testing.

There's a number of tests failing just in the core test suite:

4328 examples, 15 failures, 48 pending

Failed examples:

rspec ./spec/datadog/core/utils/safe_dup_spec.rb:49 # Datadog::Core::Utils::SafeDup String .frozen_dup when given a string returns a frozen duplicate
rspec ./spec/datadog/core/utils/safe_dup_spec.rb:20 # Datadog::Core::Utils::SafeDup String .frozen_or_dup when given a string returns a non-frozen dupliacte
rspec ./spec/datadog/core/error_spec.rb:87 # Datadog::Core::Error.build_from with an exception with a cause reports nested errors
rspec ./spec/datadog/core/telemetry/event_spec.rb:31 # Datadog::Core::Telemetry::Event AppStarted is expected to match {:products=>{:appsec=>{:enabled=>false}, :profiler=>{:enabled=>false, :error=>#<RSpec::Mocks::ArgumentMatchers::AnyArgMatcher:0x0000705250507db0>}}, :configuration=>[{:name=>"DD_AGENT_HOST", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>"1.2.3.4"}, {:name=>"DD_AGENT_TRANSPORT", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>"TCP"}, {:name=>"DD_TRACE_SAMPLE_RATE", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>"0.5"}, {:name=>"DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>true}, {:name=>"DD_TRACE_PEER_SERVICE_MAPPING", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>"foo:bar"}, {:name=>"logger.level", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>0}, {:name=>"profiling.advanced.code_provenance_enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>true}, {:name=>"profiling.advanced.endpoint.collection.enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>true}, {:name=>"profiling.enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>false}, {:name=>"runtime_metrics.enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>false}, {:name=>"tracing.analytics.enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>true}, {:name=>"tracing.propagation_style_extract", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>"[\"datadog\", \"tracecontext\"]"}, {:name=>"tracing.propagation_style_inject", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>"[\"datadog\", \"tracecontext\"]"}, {:name=>"tracing.enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>true}, {:name=>"tracing.log_injection", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>true}, {:name=>"tracing.partial_flush.enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>false}, {:name=>"tracing.partial_flush.min_spans_threshold", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>500}, {:name=>"tracing.report_hostname", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>false}, {:name=>"tracing.sampling.rate_limit", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>100}, {:name=>"tracing.auto_instrument.enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>false}, {:name=>"tracing.writer_options.buffer_size", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>123}, {:name=>"tracing.writer_options.flush_interval", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>456}, {:name=>"tracing.opentelemetry.enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>false}, {:name=>"logger.instance", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>"MyLogger"}, {:name=>"appsec.enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>false}, {:name=>"appsec.sca_enabled", :origin=>"code", :seq_id=>#<Double "seq_id">, :value=>false}], :install_signature=>{:install_id=>"id", :install_time=>"time", :install_type=>"type"}}
rspec ./spec/datadog/tracing/remote_spec.rb:33 # Datadog::Tracing::Remote#process_config with an empty content sets errored apply state
rspec ./spec/datadog/release_gem_spec.rb:8 # gem release process datadog.gemspec files includes all important files
rspec ./spec/datadog/core/environment/execution_spec.rb:69 # Datadog::Core::Environment::Execution.development? when not in an RSpec test when in a Pry session returns true
rspec ./spec/datadog/tracing/trace_segment_spec.rb:207 # Datadog::Tracing::TraceSegment::new given tags :origin is expected to have attributes {:origin => (be a copy of "synthetics")}
rspec ./spec/datadog/tracing/trace_segment_spec.rb:230 # Datadog::Tracing::TraceSegment::new given tags :resource is expected to have attributes {:resource => (be a copy of "generate_report")}
rspec ./spec/datadog/tracing/trace_segment_spec.rb:200 # Datadog::Tracing::TraceSegment::new given tags :name is expected to have attributes {:name => (be a copy of "job.work")}
rspec ./spec/datadog/tracing/trace_segment_spec.rb:276 # Datadog::Tracing::TraceSegment::new given tags :service is expected to have attributes {:service => (be a copy of "job-worker")}
rspec ./spec/datadog/tracing/trace_segment_spec.rb:150 # Datadog::Tracing::TraceSegment::new given arguments :service is expected to have attributes {:service => (be a copy of "job-worker")}
rspec ./spec/datadog/tracing/trace_segment_spec.rb:87 # Datadog::Tracing::TraceSegment::new given arguments :name is expected to have attributes {:name => (be a copy of "job.work")}
rspec ./spec/datadog/tracing/trace_segment_spec.rb:94 # Datadog::Tracing::TraceSegment::new given arguments :origin is expected to have attributes {:origin => (be a copy of "synthetics")}
rspec ./spec/datadog/tracing/trace_segment_spec.rb:115 # Datadog::Tracing::TraceSegment::new given arguments :resource is expected to have attributes {:resource => (be a copy of "generate_report")}

Motivation:

Start working on supporting Ruby 3.4.

Additional Notes:

We'll need to later do the full onboarding: add appraisals, integration apps, write up CI, etc (e.g. see #2863 as inspiration).

How to test the change?

This change only affects testing. You can use docker-compose run --rm tracer-3.4 /bin/bash --init-file .config to start experimenting with Ruby 3.4.

ivoanjo commented 3 months ago

Note: I'll need to publish the images (https://github.com/DataDog/dd-trace-rb/blob/master/.circleci/images/primary/README.md#publishing-updates-to-images) before you can run with 3.4 in docker -- I built the image locally for my own testing.

ivoanjo commented 3 months ago

Triggered github action to build Ruby 3.4 image: https://github.com/DataDog/dd-trace-rb/actions/runs/9485896901