Skip to content

Commit

Permalink
[NO-TICKET] RFC: Add logger gem as dependency to prepare for future…
Browse files Browse the repository at this point in the history
… Ruby versions

**What does this PR do?**

This PR declares a dependency from the `datadog` gem to the `logger`
gem.

While every PR is an RFC, I explicitly marked this one as such since
adding a new dependency should never be done lightly.

**Motivation:**

This is needed to avoid a warning:

> lib/datadog/core/configuration/settings.rb:3: warning: logger was
> loaded from the standard library, but will no longer be part of the
> default gems starting from Ruby 3.5.0.
> You can add logger to your Gemfile or gemspec to silence this warning.

**Additional Notes:**

`logger` is just the latest in a long line of gems that have been
refactored out in this way. See
ruby/ruby@d7e558e
and https://stdgems.org/ (not yet updated for 3.5 as of this writing).

While in the past we've avoided adding extra dependencies due to this
extraction work, I think this one does make sense to add:

1. It's supported on every Ruby version we currently support (>= 2.5)
2. It's not a small amount of code to shed/rewrite. And on the other
   side, I don't see a strong reason for embedding instead of depending
   on it.

We're getting warnings for two more gems: `ostruct` and `benchmark`.

From our internal discussions, we can probably get rid of our usage
of them, rather than promote them to a dependency, so that's why I
did not touch those warnings in this PR.

**How to test the change?**

The following script can be used (on Ruby 3.4 and above) to trigger
the warning, and to confirm it's gone once `logger` is added as
a dependency:

```ruby
require 'bundler/inline'

gemfile do
  source 'https://rubygems.org'

  gem 'datadog', path: '.'
end

puts RUBY_DESCRIPTION
require 'datadog'
puts Datadog::VERSION::STRING
```

Make sure to run with just `ruby example.rb` and not with
`bundle exec`.
  • Loading branch information
ivoanjo committed Jan 6, 2025
1 parent ee94c0e commit 2863eae
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .gitlab/install_datadog_deps.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,14 @@
'DD_PROFILING_NO_EXTENSION' => 'true',
}

# ADD NEW DEPENDENCIES HERE
[
'datadog-ruby_core_source',
'ffi',
'libddwaf',
'msgpack',
'libdatadog', # libdatadog MUST be installed before datadog to ensure libdatadog native extension is compiled
'logger',
'datadog',
].each do |gem|
version = gem_version_mapping.delete(gem)
Expand Down
10 changes: 10 additions & 0 deletions datadog.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,16 @@ Gem::Specification.new do |spec|
# (and yes we have a test for it)
spec.add_dependency 'libdatadog', '~> 14.3.1.1.0'

# Will no longer be a default gem on Ruby 3.5, see
# https://github.com/ruby/ruby/commit/d7e558e3c48c213d0e8bedca4fb547db55613f7c and
# https://stdgems.org/ .
# We support all versions of this gem and don't particularly require any version restriction.
spec.add_dependency 'logger'

# Tip: When adding or remove dependencies, search the codebase for the string
# ADD NEW DEPENDENCIES HERE
# to find out a few more places that need to be kept in-sync.

spec.extensions = [
'ext/datadog_profiling_native_extension/extconf.rb',
'ext/datadog_profiling_loader/extconf.rb',
Expand Down
2 changes: 2 additions & 0 deletions lib-injection/host_inject_main.rb
Original file line number Diff line number Diff line change
Expand Up @@ -175,12 +175,14 @@ def bundler_supported?
injection_failure = false

# This is order dependent
# ADD NEW DEPENDENCIES HERE
[
'msgpack',
'ffi',
'datadog-ruby_core_source',
'libdatadog',
'libddwaf',
'logger',
'datadog'
].each do |gem|
fork do
Expand Down
4 changes: 3 additions & 1 deletion spec/datadog/release_gem_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,15 @@
# check `install_datadog_deps.rb` for details
expect(gem_version_mapping.keys).to contain_exactly(
# This list MUST NOT derive from the `gemspec.dependencies`,
# since it is used to alarm when dependencies modified.
# since it is used to alarm when dependencies are modified.
# ADD NEW DEPENDENCIES HERE
'datadog',
'datadog-ruby_core_source',
'ffi',
'libdatadog',
'libddwaf',
'msgpack',
'logger',
)
end
end
Expand Down

0 comments on commit 2863eae

Please sign in to comment.