Skip to content

feat: add gem for auto-instrumentation in otel-operator#1384

Open
xuan-cao-swi wants to merge 93 commits intoopen-telemetry:mainfrom
xuan-cao-swi:auto-instrumentation
Open

feat: add gem for auto-instrumentation in otel-operator#1384
xuan-cao-swi wants to merge 93 commits intoopen-telemetry:mainfrom
xuan-cao-swi:auto-instrumentation

Conversation

@xuan-cao-swi
Copy link
Copy Markdown
Contributor

@xuan-cao-swi xuan-cao-swi commented Jan 30, 2025

Description

This PR aims to contribute a script/gem that can load the necessary OpenTelemetry-related gems and initialize the SDK for the opentelemetry-operator. The script/gem also includes a resource detector as part of its features.

The main idea was inspired by new_relic, which prepends the bundler.require function and places the loading script at the end of the loading procedure. For apps or scripts that don't use Bundler or a Gemfile, more details on variations of app loading can be found in the README. Currently, the goal is to ensure that Rails apps can work, with future improvements in mind.

The reason behind creating this gem is to facilitate easy installation and dependency enforcement. Although for the OpenTelemetry-Operator Node.js, it puts the loading script directly in the src folder (and then copy over to binding volume), it still relies on the auto-instrumentation-node package to install all required packages (e.g., API/SDK and instrumentation packages).

The main purpose of the gem is to serve the OpenTelemetry-Operator, which requires more configuration changes (see the configuration section in the README). Users don't need to modify their Ruby app codebase while using the instrumentation from OpenTelemetry-Ruby, but anyone can still use it in any environment.

The gem name, file structure, and implementation need more suggestions to make them more reasonable. I have tested it with rails and sinatra (through rackup), and I currently still in the process of testing against the opentelemetry operator cluster locally. Once the operator testing done, I will mark the pr as ready.

Related to open-telemetry/opentelemetry-operator#3756

@xuan-cao-swi
Copy link
Copy Markdown
Contributor Author

We don't need to push to make the gem ready/release, but the script file need to get some review first.

@github-actions
Copy link
Copy Markdown
Contributor

👋 This pull request has been marked as stale because it has been open with no activity. You can: comment on the issue or remove the stale label to hold stale off for a while, add the keep label to hold stale off permanently, or do nothing. If you do nothing this pull request will be closed eventually by the stale bot

@github-actions github-actions Bot added the stale Marks an issue/PR stale label Mar 29, 2025
@kaylareopelle kaylareopelle removed the stale Marks an issue/PR stale label Apr 2, 2025
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 3, 2025

👋 This pull request has been marked as stale because it has been open with no activity. You can: comment on the issue or remove the stale label to hold stale off for a while, add the keep label to hold stale off permanently, or do nothing. If you do nothing this pull request will be closed eventually by the stale bot

@github-actions github-actions Bot added the stale Marks an issue/PR stale label May 3, 2025
Comment thread .cspell.yml Outdated
Comment on lines +84 to +91
- Triager
- triagers
- Untrace
- vitess
- webmocks
- yardoc
- rackup
- traceparent
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we sure all of these are needed, I believe I added some of these to cspell ie yard

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure about what is needed; feel free to suggest which one to remove.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My suggestion would be to remove them all & then see which one's you get warnings for.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed these words

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just checking on this one as I can still see them.

Copy link
Copy Markdown
Contributor

@thompson-tomo thompson-tomo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we also need to add it to toys for the release process?

Comment thread packages/auto-instrumentation/CHANGELOG.md Outdated
xuan-cao-swi and others added 6 commits April 13, 2026 11:10
Co-authored-by: Ariel Valentin <arielvalentin@users.noreply.github.com>
Co-authored-by: James Thompson <thompson.tomo@outlook.com>
…lemetry-ruby-contrib into auto-instrumentation
Copy link
Copy Markdown
Contributor

@thompson-tomo thompson-tomo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note we are still needing it to be added to labeller & release process. I have drafted updated docs to help guide this process aka #2219.

Comment on lines +2 to +5
Naming/FileName:
Enabled: false
Gemspec/DevelopmentDependencies:
Enabled: false
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Naming/FileName:
Enabled: false
Gemspec/DevelopmentDependencies:
Enabled: false

If naming is an issue add an exclusion rather than disable entire cop.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated.


if spec.respond_to?(:metadata)
spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md"
spec.metadata['source_code_uri'] = 'https://github.com/open-telemetry/opentelemetry-ruby-contrib/auto-instrumentation'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update to match existing instrumentations ie use tag and directory.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

Comment thread packages/auto-instrumentation/Gemfile Outdated
gemspec

group :test do
gem 'bundler'
Copy link
Copy Markdown
Contributor

@thompson-tomo thompson-tomo Apr 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should have a version if we in fact need it no other gem list it.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the bundler

Copy link
Copy Markdown
Contributor

@kaylareopelle kaylareopelle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is so close! I noticed a few things in my review today.

module OTelInitializer
@initialized = false

OTEL_INSTRUMENTATION_MAP = {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are there any new instrumentations we should add here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated. I will create a workflow that keep track of this OTEL_INSTRUMENTATION_MAP later.

Copy link
Copy Markdown
Contributor Author

@xuan-cao-swi xuan-cao-swi Apr 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's worth to explore what James comment to have separate repo for this gem.

When I look at the github org I see the following repos for auto instrumentation:
https://github.com/open-telemetry/opentelemetry-go-instrumentation
https://github.com/open-telemetry/opentelemetry-java-instrumentation
https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation
https://github.com/open-telemetry/opentelemetry-php-instrumentation

Since it will have dependabot that need to track the latest sdk and instrumentation gem, I don't want to pollute the PR pages.

require 'version'

Gem::Specification.new do |spec|
spec.name = 'auto-instrumentation'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think about calling the gem opentelemetry-auto-instrumentation? Without the opentelemetry prefix it feels very broad.

I remember talking about naming a long time ago, but haven't found that conversation.

@thompson-tomo made a similar comment in the changelog about updating the name.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated to opentelemetry-auto-instrumentation. Let me know if you want the folder name also changed to opentelemetry-auto-instrumentation

Comment thread packages/auto-instrumentation/README.md Outdated
opentelemetry-instrumentation-all
opentelemetry-exporter-otlp
opentelemetry-helpers-mysql
opentelemetry-helpers-sql-obfuscation
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we want to replace the sql-obfuscation gem with opentelemetry-helpers-sql-processor

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated.

opentelemetry-helpers-sql-obfuscation
opentelemetry-resource-detector-azure
opentelemetry-resource-detector-container
opentelemetry-resource-detector-aws
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We also have a GCP resource detector. Does that make sense to include?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The GCP resource detector depends on the extra google-cloud-env gem, which can introduce version conflicts. I’m leaning toward only copying the OTEL‑related gems into the operator.
That gem mainly pulls GCP metadata, whereas the other resource detectors use more self‑contained methods like fetching metadata from a local URL.

Comment thread packages/auto-instrumentation/README.md Outdated

## Configuration

The following environment variables are specific to this gem (not standard OpenTelemetry variables):
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think about mentioning that all other OTEL environment variables can still be used for configuration with this gem?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated


require 'test_helper'

describe 'AutoInstrumentation' do
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
describe 'AutoInstrumentation' do
describe 'OpenTelemetry::AutoInstrumentation' do

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

Comment on lines +10 to +11
require 'opentelemetry-sdk'
require 'opentelemetry-instrumentation-all'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we require these and opentelemetry/resource/detector here, could we be getting false positives? (just thinking about open-telemetry/opentelemetry-ruby#1956)

The tests seem to pass even if we remove those requires.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, these gem are not need to require here (removed).

Comment on lines +88 to +93
warn '[OpenTelemetry] WARNING: Detected OpenTelemetry gems in your Gemfile: ' \
"#{gem_names}. When using auto-instrumentation, OpenTelemetry gems are loaded " \
'from the auto-instrumentation gem path, NOT from your bundle. The gem versions ' \
'in your Gemfile/Gemfile.lock are not used and may cause version conflicts or ' \
'unexpected behavior. Please remove these gems from your Gemfile when using ' \
'auto-instrumentation.'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this mean that people who want to use metrics or logs can't use auto instrumentation? If that's the case, what do you think about adding a note to the README?

Copy link
Copy Markdown
Contributor Author

@xuan-cao-swi xuan-cao-swi Apr 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added the metrics and logs sdk support in the autoinstrumentation (also include the example in rails-example)

Comment on lines +8 to +10
gem 'rake', '13.0.6'
gem 'bigdecimal', '3.1.3'
gem 'logger', '1.5.3'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are these versions locked?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was the main problem I encountered with the rails example. I was using Ruby 3.4 and these versions are older than the latest versions. If I commented these versions out and regenerated the Gemfile.lock, everything worked fine.

When I tried to follow the instructions in the example README and installed the versions it asked for specifically, I kept getting the same error.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the issue of version conflict between user gem env and the auto-instrumentation env.
I added the note that this won't be an issue in operator because we only copy otel-related gem to operator.
To make this example run, you may need to manually update the system gem (e.g. gem update rake/gem install rake -v 13.4.1) when you see something like

You have already activated rake 13.4.2, but your Gemfile requires rake 13.4.1. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)

Comment thread Dockerfile Outdated
@arielvalentin
Copy link
Copy Markdown
Contributor

@xuan-cao-swi can I ask you to resolve conflicts?

@arielvalentin arielvalentin requested review from Copilot and removed request for marcotc April 18, 2026 14:57
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new opentelemetry-auto-instrumentation Ruby gem/package intended to support OpenTelemetry Operator-style zero-code auto-instrumentation (via RUBYOPT), along with examples, tests, and CI wiring.

Changes:

  • Introduces the opentelemetry-auto-instrumentation gem (gemspec, loader/initializer, versioning, docs, rake tasks, rubocop config).
  • Adds Minitest coverage that runs initialization in a forked subprocess and validates traces/metrics/logs and Bundler warning behavior.
  • Updates repo CI to run this new package’s checks and adjusts Docker build dependencies/base image.
Show a summary per file
File Description
packages/auto-instrumentation/test/test_helper.rb Adds subprocess test harness for isolated auto-instrumentation initialization.
packages/auto-instrumentation/test/opentelemetry-auto-instrumentation_test.rb Adds Minitest specs for initialization, signal emission, and Bundler Gemfile warning behavior.
packages/auto-instrumentation/opentelemetry-auto-instrumentation.gemspec Defines new gem metadata and runtime dependencies.
packages/auto-instrumentation/lib/version.rb Introduces gem version constant.
packages/auto-instrumentation/lib/opentelemetry-auto-instrumentation.rb Implements Bundler hook + SDK/config initialization + resource detection wiring.
packages/auto-instrumentation/example/simple-example/app.rb Adds minimal script demonstrating HTTP client instrumentation.
packages/auto-instrumentation/example/simple-example/Gemfile Adds Gemfile scaffold for the simple example.
packages/auto-instrumentation/example/rails-example/config.ru Adds rackup entrypoint for Rails example.
packages/auto-instrumentation/example/rails-example/app.rb Adds Rails example application emitting metrics/logs.
packages/auto-instrumentation/example/rails-example/Gemfile Adds dependencies for Rails example.
packages/auto-instrumentation/example/README.md Documents how to run the included examples.
packages/auto-instrumentation/Rakefile Adds test/rubocop/yard tasks for the new package.
packages/auto-instrumentation/README.md Adds package-level documentation and configuration reference.
packages/auto-instrumentation/LICENSE Adds license file for the new package.
packages/auto-instrumentation/Gemfile Adds development/test dependencies for the new package.
packages/auto-instrumentation/CHANGELOG.md Adds changelog scaffold.
packages/auto-instrumentation/.rubocop.yml Adds package-specific RuboCop config/exclusions.
Dockerfile Updates base image and adds yaml-dev dependency.
.github/workflows/ci-contrib.yml Adds CI job and path filters for packages, including this new gem.
.cspell.yml Removes an extraneous entry/line.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comments suppressed due to low confidence (1)

packages/auto-instrumentation/example/rails-example/app.rb:55

  • The RuboCop directive comment is malformed (# rubocop enable:). RuboCop expects # rubocop:enable ..., so this line won't actually re-enable the cop (and the disable above won’t work either).
# rubocop enable:Style/OneClassPerFile
  • Files reviewed: 20/20 changed files
  • Comments generated: 9

Comment on lines +31 to +32
# rubocop disable:Style/OneClassPerFile
class ApplicationController < ActionController::API
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The RuboCop directive comment is malformed (# rubocop disable:). RuboCop expects # rubocop:disable ..., so this line won't actually suppress the cop.

This issue also appears on line 55 of the same file.

Copilot uses AI. Check for mistakes.

if spec.respond_to?(:metadata)
spec.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{spec.name}/#{spec.version}/file/CHANGELOG.md"
spec.metadata['source_code_uri'] = "https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/#{spec.name}/v#{spec.version}/packages/opentelemetry-auto-instrumentation"
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

spec.metadata['source_code_uri'] points to packages/opentelemetry-auto-instrumentation, but this gem lives under packages/auto-instrumentation in the repository. This makes the published metadata link incorrect.

Suggested change
spec.metadata['source_code_uri'] = "https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/#{spec.name}/v#{spec.version}/packages/opentelemetry-auto-instrumentation"
spec.metadata['source_code_uri'] = "https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/#{spec.name}/v#{spec.version}/packages/auto-instrumentation"

Copilot uses AI. Check for mistakes.
Comment on lines +7 to +10
url = URI.parse('http://catfact.ninja/fact')
req = Net::HTTP::Get.new(url.to_s)
Net::HTTP.start(url.host, url.port) do |http|
http.request(req)
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This example uses URI.parse and Net::HTTP without requiring the stdlib modules (require 'uri' and require 'net/http'), so it will raise NameError in a clean Ruby process.

Copilot uses AI. Check for mistakes.
Comment thread Dockerfile
name: "auto-instrumentation / ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This job pins actions/checkout to a different commit (# v6.0.1) than the rest of the workflow (# v6.0.2 at lines 49/90/130/168/206). To keep dependency management consistent, pin this step to the same SHA/version used elsewhere in the repo.

Suggested change
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

Copilot uses AI. Check for mistakes.
Comment on lines +80 to +81

env.split(',').map { |instrumentation| OTEL_INSTRUMENTATION_MAP[instrumentation] }
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_otel_determine_enabled_instrumentation can return nil entries (unknown keys or whitespace like "redis, mysql2"), which later leads to c.use nil raising. Consider normalizing tokens (strip/downcase) and dropping/handling unknown instrumentations (e.g., compact + warning in debug mode).

Suggested change
env.split(',').map { |instrumentation| OTEL_INSTRUMENTATION_MAP[instrumentation] }
unknown_instrumentations = []
enabled_instrumentation = env.split(',').map do |instrumentation|
normalized_instrumentation = instrumentation.strip.downcase
next if normalized_instrumentation.empty?
mapped_instrumentation = OTEL_INSTRUMENTATION_MAP[normalized_instrumentation]
unknown_instrumentations << instrumentation if mapped_instrumentation.nil?
mapped_instrumentation
end.compact
if ENV['OTEL_RUBY_AUTO_INSTRUMENTATION_DEBUG'] == 'true' && unknown_instrumentations.any?
warn '[OpenTelemetry] WARNING: Ignoring unknown instrumentations from ' \
"OTEL_RUBY_ENABLED_INSTRUMENTATIONS: #{unknown_instrumentations.join(', ')}"
end
enabled_instrumentation

Copilot uses AI. Check for mistakes.
| `OTEL_RUBY_ENABLED_INSTRUMENTATIONS` | Only load specific instrumentations (comma-separated). Omit to load all available. | `redis,mysql2,faraday` |
| `OTEL_RUBY_ADDITIONAL_GEM_PATH` | Custom gem installation path for OpenTelemetry Operator environments. | `/custom/gem/path` |
| `OTEL_RUBY_AUTO_INSTRUMENTATION_DEBUG` | Set to `true` for debug output during initialization. | `true` |
| `OTEL_RUBY_UNLOAD_LIBRARY` | Prevent specific gems from being preloaded (e.g., `google-protobuf`). | `google-protobuf` |
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OTEL_RUBY_UNLOAD_LIBRARY is documented here, but there is no corresponding implementation in the gem (no code references this env var). Either implement the behavior or remove it from the configuration table to avoid misleading users.

Suggested change
| `OTEL_RUBY_UNLOAD_LIBRARY` | Prevent specific gems from being preloaded (e.g., `google-protobuf`). | `google-protobuf` |

Copilot uses AI. Check for mistakes.

# /otel-auto-instrumentation-ruby is default path for otel operator (ruby.go)
# If requires different gem path to load gem, set env OTEL_RUBY_ADDITIONAL_GEM_PATH
gem_path = ENV['OTEL_RUBY_ADDITIONAL_GEM_PATH'] || '/otel-auto-instrumentation-ruby' || Gem.dir
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gem_path fallback is incorrect: ENV[...] || '/otel-auto-instrumentation-ruby' || Gem.dir will never reach Gem.dir because the string literal is always truthy. This prevents falling back to the default RubyGems directory when OTEL_RUBY_ADDITIONAL_GEM_PATH is unset (or when the operator path doesn't exist).

Suggested change
gem_path = ENV['OTEL_RUBY_ADDITIONAL_GEM_PATH'] || '/otel-auto-instrumentation-ruby' || Gem.dir
gem_path_candidates = [
ENV['OTEL_RUBY_ADDITIONAL_GEM_PATH'],
'/otel-auto-instrumentation-ruby',
Gem.dir
].compact
gem_path = gem_path_candidates.find { |path| File.directory?(path) } || Gem.dir

Copilot uses AI. Check for mistakes.

lib = File.expand_path('lib', __dir__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'version'
Copy link

Copilot AI Apr 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gemspec version loading deviates from established repo convention: gemspecs require a fully namespaced version file (e.g. helpers/sql/opentelemetry-helpers-sql.gemspec:9). Requiring plain 'version' risks load path collisions with other gems/files named version.rb.

Suggested change
require 'version'
require 'opentelemetry/auto/instrumentation/version'

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci keep Ensures stale-bot keeps this issue/PR open

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants