Skip to content

Conversation

@dependabot
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Jan 16, 2026

Bumps sentry-ruby from 5.26.0 to 6.3.0.

Changelog

Sourced from sentry-ruby's changelog.

6.3.0

Features

  • Implement new Sentry.metrics functionality (#2818)

    The SDK now supports Sentry's new Trace Connected Metrics product.

     Sentry.metrics.count("button.click", 1, attributes: { button_id: "submit" })
     Sentry.metrics.distribution("response.time", 120.5, unit: "millisecond")
     Sentry.metrics.gauge("cpu.usage", 75.2, unit: "percent")

    Metrics is enabled by default and only activates once you use the above APIs. To disable completely:

    Sentry.init do |config|
      # ...
      config.enable_metrics = false
    end
  • Support for tracing Sequel queries (#2814)

    require "sentry"
    require "sentry/sequel"
    Sentry.init do |config|
    config.enabled_patches << :sequel
    end
    DB = Sequel.sqlite
    DB.extension(:sentry)

  • Add support for OpenTelemetry messaging/queue system spans (#2685)

  • Add support for config.std_lib_logger_filter proc (#2829)

    Sentry.init do |config|
      config.std_lib_logger_filter = proc do |logger, message, severity|
        # Only send ERROR and above messages
        severity == :error || severity == :fatal
      end
    config.enabled_patches = [:std_lib_logger]
    end

... (truncated)

Commits
  • babf7aa release: 6.3.0
  • 8c43650 Enable metrics by default (#2835)
  • 9cd6a06 Lazily start TelemetryEventBuffer threads (#2832)
  • 8db45ed Max drop limit for TelemetryEventBuffer after which we completely drop events...
  • a354683 Unify LogEventBuffer and MetricEventBuffer logic (#2830)
  • 8b8bad5 feat(std_lib_logger): add support for filtering (#2829)
  • 846c2ba Unify Logs and Metrics implementations (#2826)
  • c11a499 fix: prevent SDK crash when SDK logging fails (#2817)
  • 854f4ca Handle more extra attribute types when logging (#2815)
  • 4fcb941 Implement new Sentry.metrics functionality (#2818)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [sentry-ruby](https://github.com/getsentry/sentry-ruby) from 5.26.0 to 6.3.0.
- [Release notes](https://github.com/getsentry/sentry-ruby/releases)
- [Changelog](https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md)
- [Commits](getsentry/sentry-ruby@5.26.0...6.3.0)

---
updated-dependencies:
- dependency-name: sentry-ruby
  dependency-version: 6.3.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot added dependencies ruby Pull requests that update Ruby code labels Jan 16, 2026
@github-actions
Copy link
Contributor

4 similar comments
@github-actions
Copy link
Contributor

@github-actions
Copy link
Contributor

@github-actions
Copy link
Contributor

@github-actions
Copy link
Contributor

@github-actions
Copy link
Contributor

gem compare concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT date:
    1.3.5: 2025-01-15 00:00:00 UTC
    1.3.6: 2025-12-13 00:00:00 UTC
  DIFFERENT rubygems_version:
    1.3.5: 3.3.26
    1.3.6: 3.3.27
  DIFFERENT version:
    1.3.5: 1.3.5
    1.3.6: 1.3.6
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
            lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
            lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
      * Changed:
            CHANGELOG.md +6/-0
            README.md +4/-2
            lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
            lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
            lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
            lib/concurrent-ruby/concurrent/executors.rb +0/-1
            lib/concurrent-ruby/concurrent/mvar.rb +4/-4
            lib/concurrent-ruby/concurrent/promise.rb +1/-1
            lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
            lib/concurrent-ruby/concurrent/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    1.3.5->1.3.6:
      * Changed:
            README.md +4/-2
            CHANGELOG.md +6/-0

4 similar comments
@github-actions
Copy link
Contributor

gem compare concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT date:
    1.3.5: 2025-01-15 00:00:00 UTC
    1.3.6: 2025-12-13 00:00:00 UTC
  DIFFERENT rubygems_version:
    1.3.5: 3.3.26
    1.3.6: 3.3.27
  DIFFERENT version:
    1.3.5: 1.3.5
    1.3.6: 1.3.6
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
            lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
            lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
      * Changed:
            CHANGELOG.md +6/-0
            README.md +4/-2
            lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
            lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
            lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
            lib/concurrent-ruby/concurrent/executors.rb +0/-1
            lib/concurrent-ruby/concurrent/mvar.rb +4/-4
            lib/concurrent-ruby/concurrent/promise.rb +1/-1
            lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
            lib/concurrent-ruby/concurrent/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    1.3.5->1.3.6:
      * Changed:
            README.md +4/-2
            CHANGELOG.md +6/-0

@github-actions
Copy link
Contributor

gem compare concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT date:
    1.3.5: 2025-01-15 00:00:00 UTC
    1.3.6: 2025-12-13 00:00:00 UTC
  DIFFERENT rubygems_version:
    1.3.5: 3.3.26
    1.3.6: 3.3.27
  DIFFERENT version:
    1.3.5: 1.3.5
    1.3.6: 1.3.6
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
            lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
            lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
      * Changed:
            CHANGELOG.md +6/-0
            README.md +4/-2
            lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
            lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
            lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
            lib/concurrent-ruby/concurrent/executors.rb +0/-1
            lib/concurrent-ruby/concurrent/mvar.rb +4/-4
            lib/concurrent-ruby/concurrent/promise.rb +1/-1
            lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
            lib/concurrent-ruby/concurrent/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    1.3.5->1.3.6:
      * Changed:
            README.md +4/-2
            CHANGELOG.md +6/-0

@github-actions
Copy link
Contributor

gem compare concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT date:
    1.3.5: 2025-01-15 00:00:00 UTC
    1.3.6: 2025-12-13 00:00:00 UTC
  DIFFERENT rubygems_version:
    1.3.5: 3.3.26
    1.3.6: 3.3.27
  DIFFERENT version:
    1.3.5: 1.3.5
    1.3.6: 1.3.6
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
            lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
            lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
      * Changed:
            CHANGELOG.md +6/-0
            README.md +4/-2
            lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
            lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
            lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
            lib/concurrent-ruby/concurrent/executors.rb +0/-1
            lib/concurrent-ruby/concurrent/mvar.rb +4/-4
            lib/concurrent-ruby/concurrent/promise.rb +1/-1
            lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
            lib/concurrent-ruby/concurrent/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    1.3.5->1.3.6:
      * Changed:
            README.md +4/-2
            CHANGELOG.md +6/-0

@github-actions
Copy link
Contributor

gem compare concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT date:
    1.3.5: 2025-01-15 00:00:00 UTC
    1.3.6: 2025-12-13 00:00:00 UTC
  DIFFERENT rubygems_version:
    1.3.5: 3.3.26
    1.3.6: 3.3.27
  DIFFERENT version:
    1.3.5: 1.3.5
    1.3.6: 1.3.6
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
            lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
            lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
      * Changed:
            CHANGELOG.md +6/-0
            README.md +4/-2
            lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
            lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
            lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
            lib/concurrent-ruby/concurrent/executors.rb +0/-1
            lib/concurrent-ruby/concurrent/mvar.rb +4/-4
            lib/concurrent-ruby/concurrent/promise.rb +1/-1
            lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
            lib/concurrent-ruby/concurrent/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    1.3.5->1.3.6:
      * Changed:
            README.md +4/-2
            CHANGELOG.md +6/-0

@github-actions
Copy link
Contributor

gem compare --diff concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
        lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
                --- /tmp/20260116-925-32bbd	2026-01-16 03:33:18.269408121 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb	2026-01-16 03:33:18.259408103 +0000
                @@ -0,0 +1,55 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro ruby_timeout_queue
                +    class RubyTimeoutQueue < ::Queue
                +      def initialize(*args)
                +        if RUBY_VERSION >= '3.2'
                +          raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
                +        end
                +
                +        super(*args)
                +
                +        @mutex = Mutex.new
                +        @cond_var = ConditionVariable.new
                +      end
                +
                +      def push(obj)
                +        @mutex.synchronize do
                +          super(obj)
                +          @cond_var.signal
                +        end
                +      end
                +      alias_method :enq, :push
                +      alias_method :<<, :push
                +
                +      def pop(non_block = false, timeout: nil)
                +        if non_block && timeout
                +          raise ArgumentError, "can't set a timeout if non_block is enabled"
                +        end
                +
                +        if non_block
                +          super(true)
                +        elsif timeout
                +          @mutex.synchronize do
                +            deadline = Concurrent.monotonic_time + timeout
                +            while (now = Concurrent.monotonic_time) < deadline && empty?
                +              @cond_var.wait(@mutex, deadline - now)
                +            end
                +            begin
                +              return super(true)
                +            rescue ThreadError
                +              # still empty
                +              nil
                +            end
                +          end
                +        else
                +          super(false)
                +        end
                +      end
                +      alias_method :deq, :pop
                +      alias_method :shift, :pop
                +    end
                +    private_constant :RubyTimeoutQueue
                +  end
                +end
        lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
                --- /tmp/20260116-925-z952nz	2026-01-16 03:33:18.271408125 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb	2026-01-16 03:33:18.260408105 +0000
                @@ -0,0 +1,18 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro internal_implementation_note
                +    TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
                +                                   ::Queue
                +                                 else
                +                                   require 'concurrent/collection/ruby_timeout_queue'
                +                                   RubyTimeoutQueue
                +                                 end
                +    private_constant :TimeoutQueueImplementation
                +
                +    # @!visibility private
                +    # @!macro timeout_queue
                +    class TimeoutQueue < TimeoutQueueImplementation
                +    end
                +  end
                +end
      * Changed:
        CHANGELOG.md
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/CHANGELOG.md	2026-01-16 03:33:18.233408056 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/CHANGELOG.md	2026-01-16 03:33:18.251408088 +0000
                @@ -2,0 +3,6 @@
                +## Release v1.3.6 (13 December 2025)
                +
                +concurrent-ruby:
                +
                +* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
                +
        README.md
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/README.md	2026-01-16 03:33:18.234408058 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/README.md	2026-01-16 03:33:18.252408090 +0000
                @@ -210 +210 @@
                -keep backward compatibility (there may also lack tests and documentation). Semantic versions will
                +keep backward compatibility (they may also lack tests and documentation). Semantic versions will
                @@ -361 +361,2 @@
                -* Install Docker, required for Windows builds
                +* Install Docker or Podman, required for Windows builds
                +* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
                @@ -380,0 +382 @@
                +* [Joshua Young](https://github.com/joshuay03)
        lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-01-16 03:33:18.240408069 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-01-16 03:33:18.257408099 +0000
                @@ -8,0 +9 @@
                +    return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
        lib/concurrent-ruby/concurrent/concurrent_ruby.jar
                Binary files /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
        lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-01-16 03:33:18.244408076 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-01-16 03:33:18.262408108 +0000
                @@ -84,4 +84,2 @@
                -  #   This is a no-op on some pool implementation (e.g. the Java one).  The Ruby
                -  #   pool will auto-prune each time a new job is posted. You will need to call
                -  #   this method explicitly in case your application post jobs in bursts (a
                -  #   lot of jobs and then nothing for long periods)
                +  #   This is a no-op on all pool implementations as they prune themselves
                +  #   automatically, and has been deprecated.
        lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-01-16 03:33:18.244408076 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-01-16 03:33:18.262408108 +0000
                @@ -48,0 +49 @@
                +          wait_for_termination
        lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-01-16 03:33:18.245408078 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-01-16 03:33:18.263408110 +0000
                @@ -10,0 +11 @@
                +      include Concern::Deprecation
                @@ -102,0 +104 @@
                +        deprecated "#prune_pool has no effect and will be removed in the next release."
        lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-01-16 03:33:18.245408078 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-01-16 03:33:18.263408110 +0000
                @@ -1,0 +2 @@
                +require 'concurrent/executor/serial_executor_service'
                @@ -8,0 +10 @@
                +    include SerialExecutorService
        lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-01-16 03:33:18.245408078 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-01-16 03:33:18.263408110 +0000
                @@ -5,0 +6 @@
                +require 'concurrent/collection/timeout_queue'
                @@ -12,0 +14 @@
                +    include Concern::Deprecation
                @@ -96,0 +99,4 @@
                +    # removes the worker if it can be pruned
                +    #
                +    # @return [true, false] if the worker was pruned
                +    #
                @@ -98,2 +104,17 @@
                -    def remove_busy_worker(worker)
                -      synchronize { ns_remove_busy_worker worker }
                +    def prune_worker(worker)
                +      synchronize do
                +        if ns_prunable_capacity > 0
                +          remove_worker worker
                +          true
                +        else
                +          false
                +        end
                +      end
                +    end
                +
                +    # @!visibility private
                +    def remove_worker(worker)
                +      synchronize do
                +        ns_remove_ready_worker worker
                +        ns_remove_busy_worker worker
                +      end
                @@ -119 +140 @@
                -      synchronize { ns_prune_pool }
                +      deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
                @@ -149,3 +169,0 @@
                -
                -      @gc_interval  = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                @@ -164,0 +183 @@
                +        nil
                @@ -166 +185 @@
                -        return fallback_action(*args, &task)
                +        fallback_action(*args, &task)
                @@ -168,3 +186,0 @@
                -
                -      ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
                -      nil
                @@ -221 +237 @@
                -      
                +
                @@ -268 +284 @@
                -    # removes a worker which is not in not tracked in @ready
                +    # removes a worker which is not tracked in @ready
                @@ -277,2 +292,0 @@
                -    # try oldest worker if it is idle for enough time, it's returned back at the start
                -    #
                @@ -280,11 +294,3 @@
                -    def ns_prune_pool
                -      now = Concurrent.monotonic_time
                -      stopped_workers = 0
                -      while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
                -        worker, last_message = @ready.first
                -        if now - last_message > self.idletime
                -          stopped_workers += 1
                -          @ready.shift
                -          worker << :stop
                -        else break
                -        end
                +    def ns_remove_ready_worker(worker)
                +      if index = @ready.index { |rw, _| rw == worker }
                +        @ready.delete_at(index)
                @@ -291,0 +298,2 @@
                +      true
                +    end
                @@ -293 +301,10 @@
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                +    # @return [Integer] number of excess idle workers which can be removed without
                +    #                   going below min_length, or all workers if not running
                +    #
                +    # @!visibility private
                +    def ns_prunable_capacity
                +      if running?
                +        [@pool.size - @min_length, @ready.size].min
                +      else
                +        @pool.size
                +      end
                @@ -295,0 +313 @@
                +    # @!visibility private
                @@ -315 +333 @@
                -        @queue  = Queue.new
                +        @queue  = Collection::TimeoutQueue.new
                @@ -341 +359 @@
                -            loop do
                +            prunable = true
                @@ -343 +361,6 @@
                -              case message = my_queue.pop
                +            loop do
                +              timeout = prunable && my_pool.running? ? my_idletime : nil
                +              case message = my_queue.pop(timeout: timeout)
                +              when nil
                +                throw :stop if my_pool.prune_worker(self)
                +                prunable = false
                @@ -345 +368 @@
                -                my_pool.remove_busy_worker(self)
                +                my_pool.remove_worker(self)
                @@ -347 +369,0 @@
                -
                @@ -351,0 +374 @@
                +                prunable = true
        lib/concurrent-ruby/concurrent/executor/timer_set.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-01-16 03:33:18.246408079 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-01-16 03:33:18.264408112 +0000
                @@ -63,0 +64 @@
                +      @timer_executor.kill
                @@ -125 +126,3 @@
                -      @timer_executor.kill
                +      @condition.set
                +      @condition.reset
                +      @timer_executor.shutdown
        lib/concurrent-ruby/concurrent/executors.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb	2026-01-16 03:33:18.246408079 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb	2026-01-16 03:33:18.264408112 +0000
                @@ -13 +12,0 @@
                -require 'concurrent/executor/cached_thread_pool'
        lib/concurrent-ruby/concurrent/mvar.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb	2026-01-16 03:33:18.247408081 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb	2026-01-16 03:33:18.265408114 +0000
                @@ -12 +12 @@
                -  # `#mutate` that is atomic with respect to operations on the same instance.
                +  # `#modify` that is atomic with respect to operations on the same instance.
                @@ -90 +90 @@
                -        # if we timeoud out we'll still be empty
                +        # If we timed out we'll still be empty
                @@ -119 +119 @@
                -    # `put` the transformed value. Returns the transformed value. A timeout can
                +    # `put` the transformed value. Returns the pre-transform value. A timeout can
                @@ -122 +122 @@
                -    # @return [Object] the transformed value, or `TIMEOUT`
                +    # @return [Object] the pre-transform value, or `TIMEOUT`
        lib/concurrent-ruby/concurrent/promise.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb	2026-01-16 03:33:18.247408081 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb	2026-01-16 03:33:18.265408114 +0000
                @@ -170 +170 @@
                -  # c1.value       #=> 45
                +  # c1.value       #=> 42
        lib/concurrent-ruby/concurrent/timer_task.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb	2026-01-16 03:33:18.250408087 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb	2026-01-16 03:33:18.268408119 +0000
                @@ -4,0 +5 @@
                +require 'concurrent/atomic/atomic_fixnum'
                @@ -238,0 +240 @@
                +          @age.increment
                @@ -311,0 +314 @@
                +      @age = Concurrent::AtomicFixnum.new(0)
                @@ -331 +334 @@
                -      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
                +      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
                @@ -336 +339 @@
                -    def execute_task(completion)
                +    def execute_task(completion, age_when_scheduled)
                @@ -337,0 +341,2 @@
                +      return nil unless @age.value == age_when_scheduled
                +
        lib/concurrent-ruby/concurrent/version.rb
                --- /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb	2026-01-16 03:33:18.251408088 +0000
                +++ /tmp/d20260116-925-h8akqo/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb	2026-01-16 03:33:18.268408119 +0000
                @@ -2 +2 @@
                -  VERSION = '1.3.5'
                +  VERSION = '1.3.6'

@github-actions
Copy link
Contributor

gem compare --diff concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
        lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
                --- /tmp/20260116-889-kdn5	2026-01-16 03:33:25.423547227 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb	2026-01-16 03:33:25.414547109 +0000
                @@ -0,0 +1,55 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro ruby_timeout_queue
                +    class RubyTimeoutQueue < ::Queue
                +      def initialize(*args)
                +        if RUBY_VERSION >= '3.2'
                +          raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
                +        end
                +
                +        super(*args)
                +
                +        @mutex = Mutex.new
                +        @cond_var = ConditionVariable.new
                +      end
                +
                +      def push(obj)
                +        @mutex.synchronize do
                +          super(obj)
                +          @cond_var.signal
                +        end
                +      end
                +      alias_method :enq, :push
                +      alias_method :<<, :push
                +
                +      def pop(non_block = false, timeout: nil)
                +        if non_block && timeout
                +          raise ArgumentError, "can't set a timeout if non_block is enabled"
                +        end
                +
                +        if non_block
                +          super(true)
                +        elsif timeout
                +          @mutex.synchronize do
                +            deadline = Concurrent.monotonic_time + timeout
                +            while (now = Concurrent.monotonic_time) < deadline && empty?
                +              @cond_var.wait(@mutex, deadline - now)
                +            end
                +            begin
                +              return super(true)
                +            rescue ThreadError
                +              # still empty
                +              nil
                +            end
                +          end
                +        else
                +          super(false)
                +        end
                +      end
                +      alias_method :deq, :pop
                +      alias_method :shift, :pop
                +    end
                +    private_constant :RubyTimeoutQueue
                +  end
                +end
        lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
                --- /tmp/20260116-889-j51w6k	2026-01-16 03:33:25.425547253 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb	2026-01-16 03:33:25.414547109 +0000
                @@ -0,0 +1,18 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro internal_implementation_note
                +    TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
                +                                   ::Queue
                +                                 else
                +                                   require 'concurrent/collection/ruby_timeout_queue'
                +                                   RubyTimeoutQueue
                +                                 end
                +    private_constant :TimeoutQueueImplementation
                +
                +    # @!visibility private
                +    # @!macro timeout_queue
                +    class TimeoutQueue < TimeoutQueueImplementation
                +    end
                +  end
                +end
      * Changed:
        CHANGELOG.md
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/CHANGELOG.md	2026-01-16 03:33:25.387546756 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/CHANGELOG.md	2026-01-16 03:33:25.406547004 +0000
                @@ -2,0 +3,6 @@
                +## Release v1.3.6 (13 December 2025)
                +
                +concurrent-ruby:
                +
                +* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
                +
        README.md
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/README.md	2026-01-16 03:33:25.387546756 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/README.md	2026-01-16 03:33:25.406547004 +0000
                @@ -210 +210 @@
                -keep backward compatibility (there may also lack tests and documentation). Semantic versions will
                +keep backward compatibility (they may also lack tests and documentation). Semantic versions will
                @@ -361 +361,2 @@
                -* Install Docker, required for Windows builds
                +* Install Docker or Podman, required for Windows builds
                +* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
                @@ -380,0 +382 @@
                +* [Joshua Young](https://github.com/joshuay03)
        lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-01-16 03:33:25.394546847 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-01-16 03:33:25.412547083 +0000
                @@ -8,0 +9 @@
                +    return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
        lib/concurrent-ruby/concurrent/concurrent_ruby.jar
                Binary files /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
        lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-01-16 03:33:25.398546900 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-01-16 03:33:25.416547135 +0000
                @@ -84,4 +84,2 @@
                -  #   This is a no-op on some pool implementation (e.g. the Java one).  The Ruby
                -  #   pool will auto-prune each time a new job is posted. You will need to call
                -  #   this method explicitly in case your application post jobs in bursts (a
                -  #   lot of jobs and then nothing for long periods)
                +  #   This is a no-op on all pool implementations as they prune themselves
                +  #   automatically, and has been deprecated.
        lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-01-16 03:33:25.399546913 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-01-16 03:33:25.417547149 +0000
                @@ -48,0 +49 @@
                +          wait_for_termination
        lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-01-16 03:33:25.399546913 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-01-16 03:33:25.417547149 +0000
                @@ -10,0 +11 @@
                +      include Concern::Deprecation
                @@ -102,0 +104 @@
                +        deprecated "#prune_pool has no effect and will be removed in the next release."
        lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-01-16 03:33:25.399546913 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-01-16 03:33:25.417547149 +0000
                @@ -1,0 +2 @@
                +require 'concurrent/executor/serial_executor_service'
                @@ -8,0 +10 @@
                +    include SerialExecutorService
        lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-01-16 03:33:25.399546913 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-01-16 03:33:25.417547149 +0000
                @@ -5,0 +6 @@
                +require 'concurrent/collection/timeout_queue'
                @@ -12,0 +14 @@
                +    include Concern::Deprecation
                @@ -96,0 +99,4 @@
                +    # removes the worker if it can be pruned
                +    #
                +    # @return [true, false] if the worker was pruned
                +    #
                @@ -98,2 +104,17 @@
                -    def remove_busy_worker(worker)
                -      synchronize { ns_remove_busy_worker worker }
                +    def prune_worker(worker)
                +      synchronize do
                +        if ns_prunable_capacity > 0
                +          remove_worker worker
                +          true
                +        else
                +          false
                +        end
                +      end
                +    end
                +
                +    # @!visibility private
                +    def remove_worker(worker)
                +      synchronize do
                +        ns_remove_ready_worker worker
                +        ns_remove_busy_worker worker
                +      end
                @@ -119 +140 @@
                -      synchronize { ns_prune_pool }
                +      deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
                @@ -149,3 +169,0 @@
                -
                -      @gc_interval  = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                @@ -164,0 +183 @@
                +        nil
                @@ -166 +185 @@
                -        return fallback_action(*args, &task)
                +        fallback_action(*args, &task)
                @@ -168,3 +186,0 @@
                -
                -      ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
                -      nil
                @@ -221 +237 @@
                -      
                +
                @@ -268 +284 @@
                -    # removes a worker which is not in not tracked in @ready
                +    # removes a worker which is not tracked in @ready
                @@ -277,2 +292,0 @@
                -    # try oldest worker if it is idle for enough time, it's returned back at the start
                -    #
                @@ -280,11 +294,3 @@
                -    def ns_prune_pool
                -      now = Concurrent.monotonic_time
                -      stopped_workers = 0
                -      while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
                -        worker, last_message = @ready.first
                -        if now - last_message > self.idletime
                -          stopped_workers += 1
                -          @ready.shift
                -          worker << :stop
                -        else break
                -        end
                +    def ns_remove_ready_worker(worker)
                +      if index = @ready.index { |rw, _| rw == worker }
                +        @ready.delete_at(index)
                @@ -291,0 +298,2 @@
                +      true
                +    end
                @@ -293 +301,10 @@
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                +    # @return [Integer] number of excess idle workers which can be removed without
                +    #                   going below min_length, or all workers if not running
                +    #
                +    # @!visibility private
                +    def ns_prunable_capacity
                +      if running?
                +        [@pool.size - @min_length, @ready.size].min
                +      else
                +        @pool.size
                +      end
                @@ -295,0 +313 @@
                +    # @!visibility private
                @@ -315 +333 @@
                -        @queue  = Queue.new
                +        @queue  = Collection::TimeoutQueue.new
                @@ -341 +359 @@
                -            loop do
                +            prunable = true
                @@ -343 +361,6 @@
                -              case message = my_queue.pop
                +            loop do
                +              timeout = prunable && my_pool.running? ? my_idletime : nil
                +              case message = my_queue.pop(timeout: timeout)
                +              when nil
                +                throw :stop if my_pool.prune_worker(self)
                +                prunable = false
                @@ -345 +368 @@
                -                my_pool.remove_busy_worker(self)
                +                my_pool.remove_worker(self)
                @@ -347 +369,0 @@
                -
                @@ -351,0 +374 @@
                +                prunable = true
        lib/concurrent-ruby/concurrent/executor/timer_set.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-01-16 03:33:25.400546926 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-01-16 03:33:25.418547162 +0000
                @@ -63,0 +64 @@
                +      @timer_executor.kill
                @@ -125 +126,3 @@
                -      @timer_executor.kill
                +      @condition.set
                +      @condition.reset
                +      @timer_executor.shutdown
        lib/concurrent-ruby/concurrent/executors.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb	2026-01-16 03:33:25.400546926 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb	2026-01-16 03:33:25.418547162 +0000
                @@ -13 +12,0 @@
                -require 'concurrent/executor/cached_thread_pool'
        lib/concurrent-ruby/concurrent/mvar.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb	2026-01-16 03:33:25.401546939 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb	2026-01-16 03:33:25.419547175 +0000
                @@ -12 +12 @@
                -  # `#mutate` that is atomic with respect to operations on the same instance.
                +  # `#modify` that is atomic with respect to operations on the same instance.
                @@ -90 +90 @@
                -        # if we timeoud out we'll still be empty
                +        # If we timed out we'll still be empty
                @@ -119 +119 @@
                -    # `put` the transformed value. Returns the transformed value. A timeout can
                +    # `put` the transformed value. Returns the pre-transform value. A timeout can
                @@ -122 +122 @@
                -    # @return [Object] the transformed value, or `TIMEOUT`
                +    # @return [Object] the pre-transform value, or `TIMEOUT`
        lib/concurrent-ruby/concurrent/promise.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb	2026-01-16 03:33:25.401546939 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb	2026-01-16 03:33:25.419547175 +0000
                @@ -170 +170 @@
                -  # c1.value       #=> 45
                +  # c1.value       #=> 42
        lib/concurrent-ruby/concurrent/timer_task.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb	2026-01-16 03:33:25.404546978 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb	2026-01-16 03:33:25.422547214 +0000
                @@ -4,0 +5 @@
                +require 'concurrent/atomic/atomic_fixnum'
                @@ -238,0 +240 @@
                +          @age.increment
                @@ -311,0 +314 @@
                +      @age = Concurrent::AtomicFixnum.new(0)
                @@ -331 +334 @@
                -      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
                +      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
                @@ -336 +339 @@
                -    def execute_task(completion)
                +    def execute_task(completion, age_when_scheduled)
                @@ -337,0 +341,2 @@
                +      return nil unless @age.value == age_when_scheduled
                +
        lib/concurrent-ruby/concurrent/version.rb
                --- /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb	2026-01-16 03:33:25.405546991 +0000
                +++ /tmp/d20260116-889-ejn4c/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb	2026-01-16 03:33:25.423547227 +0000
                @@ -2 +2 @@
                -  VERSION = '1.3.5'
                +  VERSION = '1.3.6'

@github-actions
Copy link
Contributor

gem compare --diff concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
        lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
                --- /tmp/20260116-903-kkn2p7	2026-01-16 03:33:26.290042457 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb	2026-01-16 03:33:26.273042422 +0000
                @@ -0,0 +1,55 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro ruby_timeout_queue
                +    class RubyTimeoutQueue < ::Queue
                +      def initialize(*args)
                +        if RUBY_VERSION >= '3.2'
                +          raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
                +        end
                +
                +        super(*args)
                +
                +        @mutex = Mutex.new
                +        @cond_var = ConditionVariable.new
                +      end
                +
                +      def push(obj)
                +        @mutex.synchronize do
                +          super(obj)
                +          @cond_var.signal
                +        end
                +      end
                +      alias_method :enq, :push
                +      alias_method :<<, :push
                +
                +      def pop(non_block = false, timeout: nil)
                +        if non_block && timeout
                +          raise ArgumentError, "can't set a timeout if non_block is enabled"
                +        end
                +
                +        if non_block
                +          super(true)
                +        elsif timeout
                +          @mutex.synchronize do
                +            deadline = Concurrent.monotonic_time + timeout
                +            while (now = Concurrent.monotonic_time) < deadline && empty?
                +              @cond_var.wait(@mutex, deadline - now)
                +            end
                +            begin
                +              return super(true)
                +            rescue ThreadError
                +              # still empty
                +              nil
                +            end
                +          end
                +        else
                +          super(false)
                +        end
                +      end
                +      alias_method :deq, :pop
                +      alias_method :shift, :pop
                +    end
                +    private_constant :RubyTimeoutQueue
                +  end
                +end
        lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
                --- /tmp/20260116-903-va0c69	2026-01-16 03:33:26.292042461 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb	2026-01-16 03:33:26.273042422 +0000
                @@ -0,0 +1,18 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro internal_implementation_note
                +    TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
                +                                   ::Queue
                +                                 else
                +                                   require 'concurrent/collection/ruby_timeout_queue'
                +                                   RubyTimeoutQueue
                +                                 end
                +    private_constant :TimeoutQueueImplementation
                +
                +    # @!visibility private
                +    # @!macro timeout_queue
                +    class TimeoutQueue < TimeoutQueueImplementation
                +    end
                +  end
                +end
      * Changed:
        CHANGELOG.md
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/CHANGELOG.md	2026-01-16 03:33:26.236042348 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/CHANGELOG.md	2026-01-16 03:33:26.264042404 +0000
                @@ -2,0 +3,6 @@
                +## Release v1.3.6 (13 December 2025)
                +
                +concurrent-ruby:
                +
                +* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
                +
        README.md
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/README.md	2026-01-16 03:33:26.237042350 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/README.md	2026-01-16 03:33:26.265042406 +0000
                @@ -210 +210 @@
                -keep backward compatibility (there may also lack tests and documentation). Semantic versions will
                +keep backward compatibility (they may also lack tests and documentation). Semantic versions will
                @@ -361 +361,2 @@
                -* Install Docker, required for Windows builds
                +* Install Docker or Podman, required for Windows builds
                +* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
                @@ -380,0 +382 @@
                +* [Joshua Young](https://github.com/joshuay03)
        lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-01-16 03:33:26.246042368 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-01-16 03:33:26.271042418 +0000
                @@ -8,0 +9 @@
                +    return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
        lib/concurrent-ruby/concurrent/concurrent_ruby.jar
                Binary files /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
        lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-01-16 03:33:26.251042378 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-01-16 03:33:26.276042428 +0000
                @@ -84,4 +84,2 @@
                -  #   This is a no-op on some pool implementation (e.g. the Java one).  The Ruby
                -  #   pool will auto-prune each time a new job is posted. You will need to call
                -  #   this method explicitly in case your application post jobs in bursts (a
                -  #   lot of jobs and then nothing for long periods)
                +  #   This is a no-op on all pool implementations as they prune themselves
                +  #   automatically, and has been deprecated.
        lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-01-16 03:33:26.251042378 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-01-16 03:33:26.276042428 +0000
                @@ -48,0 +49 @@
                +          wait_for_termination
        lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-01-16 03:33:26.252042380 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-01-16 03:33:26.276042428 +0000
                @@ -10,0 +11 @@
                +      include Concern::Deprecation
                @@ -102,0 +104 @@
                +        deprecated "#prune_pool has no effect and will be removed in the next release."
        lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-01-16 03:33:26.252042380 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-01-16 03:33:26.277042431 +0000
                @@ -1,0 +2 @@
                +require 'concurrent/executor/serial_executor_service'
                @@ -8,0 +10 @@
                +    include SerialExecutorService
        lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-01-16 03:33:26.252042380 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-01-16 03:33:26.277042431 +0000
                @@ -5,0 +6 @@
                +require 'concurrent/collection/timeout_queue'
                @@ -12,0 +14 @@
                +    include Concern::Deprecation
                @@ -96,0 +99,4 @@
                +    # removes the worker if it can be pruned
                +    #
                +    # @return [true, false] if the worker was pruned
                +    #
                @@ -98,2 +104,17 @@
                -    def remove_busy_worker(worker)
                -      synchronize { ns_remove_busy_worker worker }
                +    def prune_worker(worker)
                +      synchronize do
                +        if ns_prunable_capacity > 0
                +          remove_worker worker
                +          true
                +        else
                +          false
                +        end
                +      end
                +    end
                +
                +    # @!visibility private
                +    def remove_worker(worker)
                +      synchronize do
                +        ns_remove_ready_worker worker
                +        ns_remove_busy_worker worker
                +      end
                @@ -119 +140 @@
                -      synchronize { ns_prune_pool }
                +      deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
                @@ -149,3 +169,0 @@
                -
                -      @gc_interval  = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                @@ -164,0 +183 @@
                +        nil
                @@ -166 +185 @@
                -        return fallback_action(*args, &task)
                +        fallback_action(*args, &task)
                @@ -168,3 +186,0 @@
                -
                -      ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
                -      nil
                @@ -221 +237 @@
                -      
                +
                @@ -268 +284 @@
                -    # removes a worker which is not in not tracked in @ready
                +    # removes a worker which is not tracked in @ready
                @@ -277,2 +292,0 @@
                -    # try oldest worker if it is idle for enough time, it's returned back at the start
                -    #
                @@ -280,11 +294,3 @@
                -    def ns_prune_pool
                -      now = Concurrent.monotonic_time
                -      stopped_workers = 0
                -      while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
                -        worker, last_message = @ready.first
                -        if now - last_message > self.idletime
                -          stopped_workers += 1
                -          @ready.shift
                -          worker << :stop
                -        else break
                -        end
                +    def ns_remove_ready_worker(worker)
                +      if index = @ready.index { |rw, _| rw == worker }
                +        @ready.delete_at(index)
                @@ -291,0 +298,2 @@
                +      true
                +    end
                @@ -293 +301,10 @@
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                +    # @return [Integer] number of excess idle workers which can be removed without
                +    #                   going below min_length, or all workers if not running
                +    #
                +    # @!visibility private
                +    def ns_prunable_capacity
                +      if running?
                +        [@pool.size - @min_length, @ready.size].min
                +      else
                +        @pool.size
                +      end
                @@ -295,0 +313 @@
                +    # @!visibility private
                @@ -315 +333 @@
                -        @queue  = Queue.new
                +        @queue  = Collection::TimeoutQueue.new
                @@ -341 +359 @@
                -            loop do
                +            prunable = true
                @@ -343 +361,6 @@
                -              case message = my_queue.pop
                +            loop do
                +              timeout = prunable && my_pool.running? ? my_idletime : nil
                +              case message = my_queue.pop(timeout: timeout)
                +              when nil
                +                throw :stop if my_pool.prune_worker(self)
                +                prunable = false
                @@ -345 +368 @@
                -                my_pool.remove_busy_worker(self)
                +                my_pool.remove_worker(self)
                @@ -347 +369,0 @@
                -
                @@ -351,0 +374 @@
                +                prunable = true
        lib/concurrent-ruby/concurrent/executor/timer_set.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-01-16 03:33:26.253042382 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-01-16 03:33:26.281042439 +0000
                @@ -63,0 +64 @@
                +      @timer_executor.kill
                @@ -125 +126,3 @@
                -      @timer_executor.kill
                +      @condition.set
                +      @condition.reset
                +      @timer_executor.shutdown
        lib/concurrent-ruby/concurrent/executors.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb	2026-01-16 03:33:26.253042382 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb	2026-01-16 03:33:26.281042439 +0000
                @@ -13 +12,0 @@
                -require 'concurrent/executor/cached_thread_pool'
        lib/concurrent-ruby/concurrent/mvar.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb	2026-01-16 03:33:26.256042388 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb	2026-01-16 03:33:26.283042443 +0000
                @@ -12 +12 @@
                -  # `#mutate` that is atomic with respect to operations on the same instance.
                +  # `#modify` that is atomic with respect to operations on the same instance.
                @@ -90 +90 @@
                -        # if we timeoud out we'll still be empty
                +        # If we timed out we'll still be empty
                @@ -119 +119 @@
                -    # `put` the transformed value. Returns the transformed value. A timeout can
                +    # `put` the transformed value. Returns the pre-transform value. A timeout can
                @@ -122 +122 @@
                -    # @return [Object] the transformed value, or `TIMEOUT`
                +    # @return [Object] the pre-transform value, or `TIMEOUT`
        lib/concurrent-ruby/concurrent/promise.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb	2026-01-16 03:33:26.258042392 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb	2026-01-16 03:33:26.283042443 +0000
                @@ -170 +170 @@
                -  # c1.value       #=> 45
                +  # c1.value       #=> 42
        lib/concurrent-ruby/concurrent/timer_task.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb	2026-01-16 03:33:26.262042401 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb	2026-01-16 03:33:26.288042453 +0000
                @@ -4,0 +5 @@
                +require 'concurrent/atomic/atomic_fixnum'
                @@ -238,0 +240 @@
                +          @age.increment
                @@ -311,0 +314 @@
                +      @age = Concurrent::AtomicFixnum.new(0)
                @@ -331 +334 @@
                -      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
                +      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
                @@ -336 +339 @@
                -    def execute_task(completion)
                +    def execute_task(completion, age_when_scheduled)
                @@ -337,0 +341,2 @@
                +      return nil unless @age.value == age_when_scheduled
                +
        lib/concurrent-ruby/concurrent/version.rb
                --- /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb	2026-01-16 03:33:26.263042402 +0000
                +++ /tmp/d20260116-903-nyv78q/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb	2026-01-16 03:33:26.289042455 +0000
                @@ -2 +2 @@
                -  VERSION = '1.3.5'
                +  VERSION = '1.3.6'

@github-actions
Copy link
Contributor

gem compare sentry-ruby 5.26.0 6.3.0

Compared versions: ["5.26.0", "6.3.0"]
  DIFFERENT homepage:
    5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
    6.3.0: https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby
  DIFFERENT metadata:
    5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
    6.3.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.3.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.3.0"}
  DIFFERENT required_ruby_version:
    5.26.0: >= 2.4
    6.3.0: >= 2.7
  DIFFERENT rubygems_version:
    5.26.0: 3.6.7
    6.3.0: 3.6.9
  DIFFERENT version:
    5.26.0: 5.26.0
    6.3.0: 6.3.0
  DIFFERENT files:
    5.26.0->6.3.0:
      * Deleted:
            lib/sentry/metrics/aggregator.rb
            lib/sentry/metrics/configuration.rb
            lib/sentry/metrics/counter_metric.rb
            lib/sentry/metrics/distribution_metric.rb
            lib/sentry/metrics/gauge_metric.rb
            lib/sentry/metrics/local_aggregator.rb
            lib/sentry/metrics/metric.rb
            lib/sentry/metrics/set_metric.rb
            lib/sentry/metrics/timing.rb
      * Added:
            lib/sentry/backtrace/line.rb +99/-0
            lib/sentry/debug_structured_logger.rb +94/-0
            lib/sentry/metric_event.rb +49/-0
            lib/sentry/metric_event_buffer.rb +28/-0
            lib/sentry/sequel.rb +35/-0
            lib/sentry/telemetry_event_buffer.rb +130/-0
            lib/sentry/transport/debug_transport.rb +70/-0
            lib/sentry/utils/sample_rand.rb +97/-0
            lib/sentry/utils/telemetry_attributes.rb +30/-0
      * Changed:
            Gemfile +26/-4
            README.md +2/-2
            lib/sentry-ruby.rb +24/-29
            lib/sentry/background_worker.rb +1/-4
            lib/sentry/backtrace.rb +44/-76
            lib/sentry/breadcrumb.rb +1/-1
            lib/sentry/breadcrumb_buffer.rb +2/-2
            lib/sentry/check_in_event.rb +2/-2
            lib/sentry/client.rb +59/-136
            lib/sentry/configuration.rb +168/-78
            lib/sentry/cron/monitor_check_ins.rb +3/-3
            lib/sentry/cron/monitor_config.rb +2/-2
            lib/sentry/cron/monitor_schedule.rb +2/-2
            lib/sentry/dsn.rb +32/-0
            lib/sentry/envelope/item.rb +3/-3
            lib/sentry/error_event.rb +3/-3
            lib/sentry/event.rb +4/-10
            lib/sentry/graphql.rb +1/-1
            lib/sentry/hub.rb +29/-5
            lib/sentry/interface.rb +1/-1
            lib/sentry/interfaces/exception.rb +2/-2
            lib/sentry/interfaces/request.rb +2/-0
            lib/sentry/interfaces/single_exception.rb +4/-4
            lib/sentry/interfaces/stacktrace.rb +3/-3
            lib/sentry/interfaces/stacktrace_builder.rb +0/-8
            lib/sentry/interfaces/threads.rb +2/-2
            lib/sentry/log_event.rb +32/-137
            lib/sentry/log_event_buffer.rb +13/-60
            lib/sentry/metrics.rb +47/-42
            lib/sentry/profiler.rb +4/-5
            lib/sentry/propagation_context.rb +55/-18
            lib/sentry/rspec.rb +1/-1
            lib/sentry/scope.rb +32/-5
            lib/sentry/span.rb +2/-17
            lib/sentry/std_lib_logger.rb +10/-1
            lib/sentry/test_helper.rb +30/-0
            lib/sentry/transaction.rb +72/-95
            lib/sentry/transaction_event.rb +4/-9
            lib/sentry/transport.rb +3/-5
            lib/sentry/transport/dummy_transport.rb +1/-0
            lib/sentry/transport/http_transport.rb +9/-5
            lib/sentry/utils/encoding_helper.rb +6/-0
            lib/sentry/utils/logging_helper.rb +25/-9
            lib/sentry/vernier/profiler.rb +4/-3
            lib/sentry/version.rb +1/-1
            sentry-ruby-core.gemspec +1/-1
            sentry-ruby.gemspec +1/-1
  DIFFERENT extra_rdoc_files:
    5.26.0->6.3.0:
      * Changed:
            README.md +2/-2
  DIFFERENT Gemfile dependencies
    5.26.0->6.3.0:
      * Added:
            graphql [">= 2.2.6"] (runtime)
            sequel [">= 0"] (development)
            activerecord-jdbcmysql-adapter [">= 0"] (development)
            jdbc-sqlite3 [">= 0"] (development)

1 similar comment
@github-actions
Copy link
Contributor

gem compare sentry-ruby 5.26.0 6.3.0

Compared versions: ["5.26.0", "6.3.0"]
  DIFFERENT homepage:
    5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
    6.3.0: https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby
  DIFFERENT metadata:
    5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
    6.3.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.3.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.3.0"}
  DIFFERENT required_ruby_version:
    5.26.0: >= 2.4
    6.3.0: >= 2.7
  DIFFERENT rubygems_version:
    5.26.0: 3.6.7
    6.3.0: 3.6.9
  DIFFERENT version:
    5.26.0: 5.26.0
    6.3.0: 6.3.0
  DIFFERENT files:
    5.26.0->6.3.0:
      * Deleted:
            lib/sentry/metrics/aggregator.rb
            lib/sentry/metrics/configuration.rb
            lib/sentry/metrics/counter_metric.rb
            lib/sentry/metrics/distribution_metric.rb
            lib/sentry/metrics/gauge_metric.rb
            lib/sentry/metrics/local_aggregator.rb
            lib/sentry/metrics/metric.rb
            lib/sentry/metrics/set_metric.rb
            lib/sentry/metrics/timing.rb
      * Added:
            lib/sentry/backtrace/line.rb +99/-0
            lib/sentry/debug_structured_logger.rb +94/-0
            lib/sentry/metric_event.rb +49/-0
            lib/sentry/metric_event_buffer.rb +28/-0
            lib/sentry/sequel.rb +35/-0
            lib/sentry/telemetry_event_buffer.rb +130/-0
            lib/sentry/transport/debug_transport.rb +70/-0
            lib/sentry/utils/sample_rand.rb +97/-0
            lib/sentry/utils/telemetry_attributes.rb +30/-0
      * Changed:
            Gemfile +26/-4
            README.md +2/-2
            lib/sentry-ruby.rb +24/-29
            lib/sentry/background_worker.rb +1/-4
            lib/sentry/backtrace.rb +44/-76
            lib/sentry/breadcrumb.rb +1/-1
            lib/sentry/breadcrumb_buffer.rb +2/-2
            lib/sentry/check_in_event.rb +2/-2
            lib/sentry/client.rb +59/-136
            lib/sentry/configuration.rb +168/-78
            lib/sentry/cron/monitor_check_ins.rb +3/-3
            lib/sentry/cron/monitor_config.rb +2/-2
            lib/sentry/cron/monitor_schedule.rb +2/-2
            lib/sentry/dsn.rb +32/-0
            lib/sentry/envelope/item.rb +3/-3
            lib/sentry/error_event.rb +3/-3
            lib/sentry/event.rb +4/-10
            lib/sentry/graphql.rb +1/-1
            lib/sentry/hub.rb +29/-5
            lib/sentry/interface.rb +1/-1
            lib/sentry/interfaces/exception.rb +2/-2
            lib/sentry/interfaces/request.rb +2/-0
            lib/sentry/interfaces/single_exception.rb +4/-4
            lib/sentry/interfaces/stacktrace.rb +3/-3
            lib/sentry/interfaces/stacktrace_builder.rb +0/-8
            lib/sentry/interfaces/threads.rb +2/-2
            lib/sentry/log_event.rb +32/-137
            lib/sentry/log_event_buffer.rb +13/-60
            lib/sentry/metrics.rb +47/-42
            lib/sentry/profiler.rb +4/-5
            lib/sentry/propagation_context.rb +55/-18
            lib/sentry/rspec.rb +1/-1
            lib/sentry/scope.rb +32/-5
            lib/sentry/span.rb +2/-17
            lib/sentry/std_lib_logger.rb +10/-1
            lib/sentry/test_helper.rb +30/-0
            lib/sentry/transaction.rb +72/-95
            lib/sentry/transaction_event.rb +4/-9
            lib/sentry/transport.rb +3/-5
            lib/sentry/transport/dummy_transport.rb +1/-0
            lib/sentry/transport/http_transport.rb +9/-5
            lib/sentry/utils/encoding_helper.rb +6/-0
            lib/sentry/utils/logging_helper.rb +25/-9
            lib/sentry/vernier/profiler.rb +4/-3
            lib/sentry/version.rb +1/-1
            sentry-ruby-core.gemspec +1/-1
            sentry-ruby.gemspec +1/-1
  DIFFERENT extra_rdoc_files:
    5.26.0->6.3.0:
      * Changed:
            README.md +2/-2
  DIFFERENT Gemfile dependencies
    5.26.0->6.3.0:
      * Added:
            graphql [">= 2.2.6"] (runtime)
            sequel [">= 0"] (development)
            activerecord-jdbcmysql-adapter [">= 0"] (development)
            jdbc-sqlite3 [">= 0"] (development)

@github-actions
Copy link
Contributor

gem compare --diff concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
        lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
                --- /tmp/20260116-885-reo7ft	2026-01-16 03:33:37.726228942 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb	2026-01-16 03:33:37.717228899 +0000
                @@ -0,0 +1,55 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro ruby_timeout_queue
                +    class RubyTimeoutQueue < ::Queue
                +      def initialize(*args)
                +        if RUBY_VERSION >= '3.2'
                +          raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
                +        end
                +
                +        super(*args)
                +
                +        @mutex = Mutex.new
                +        @cond_var = ConditionVariable.new
                +      end
                +
                +      def push(obj)
                +        @mutex.synchronize do
                +          super(obj)
                +          @cond_var.signal
                +        end
                +      end
                +      alias_method :enq, :push
                +      alias_method :<<, :push
                +
                +      def pop(non_block = false, timeout: nil)
                +        if non_block && timeout
                +          raise ArgumentError, "can't set a timeout if non_block is enabled"
                +        end
                +
                +        if non_block
                +          super(true)
                +        elsif timeout
                +          @mutex.synchronize do
                +            deadline = Concurrent.monotonic_time + timeout
                +            while (now = Concurrent.monotonic_time) < deadline && empty?
                +              @cond_var.wait(@mutex, deadline - now)
                +            end
                +            begin
                +              return super(true)
                +            rescue ThreadError
                +              # still empty
                +              nil
                +            end
                +          end
                +        else
                +          super(false)
                +        end
                +      end
                +      alias_method :deq, :pop
                +      alias_method :shift, :pop
                +    end
                +    private_constant :RubyTimeoutQueue
                +  end
                +end
        lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
                --- /tmp/20260116-885-dc9553	2026-01-16 03:33:37.728228952 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb	2026-01-16 03:33:37.717228899 +0000
                @@ -0,0 +1,18 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro internal_implementation_note
                +    TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
                +                                   ::Queue
                +                                 else
                +                                   require 'concurrent/collection/ruby_timeout_queue'
                +                                   RubyTimeoutQueue
                +                                 end
                +    private_constant :TimeoutQueueImplementation
                +
                +    # @!visibility private
                +    # @!macro timeout_queue
                +    class TimeoutQueue < TimeoutQueueImplementation
                +    end
                +  end
                +end
      * Changed:
        CHANGELOG.md
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/CHANGELOG.md	2026-01-16 03:33:37.691228774 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/CHANGELOG.md	2026-01-16 03:33:37.709228861 +0000
                @@ -2,0 +3,6 @@
                +## Release v1.3.6 (13 December 2025)
                +
                +concurrent-ruby:
                +
                +* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
                +
        README.md
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/README.md	2026-01-16 03:33:37.691228774 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/README.md	2026-01-16 03:33:37.709228861 +0000
                @@ -210 +210 @@
                -keep backward compatibility (there may also lack tests and documentation). Semantic versions will
                +keep backward compatibility (they may also lack tests and documentation). Semantic versions will
                @@ -361 +361,2 @@
                -* Install Docker, required for Windows builds
                +* Install Docker or Podman, required for Windows builds
                +* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
                @@ -380,0 +382 @@
                +* [Joshua Young](https://github.com/joshuay03)
        lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-01-16 03:33:37.697228803 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-01-16 03:33:37.715228890 +0000
                @@ -8,0 +9 @@
                +    return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
        lib/concurrent-ruby/concurrent/concurrent_ruby.jar
                Binary files /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
        lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-01-16 03:33:37.702228827 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-01-16 03:33:37.720228914 +0000
                @@ -84,4 +84,2 @@
                -  #   This is a no-op on some pool implementation (e.g. the Java one).  The Ruby
                -  #   pool will auto-prune each time a new job is posted. You will need to call
                -  #   this method explicitly in case your application post jobs in bursts (a
                -  #   lot of jobs and then nothing for long periods)
                +  #   This is a no-op on all pool implementations as they prune themselves
                +  #   automatically, and has been deprecated.
        lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-01-16 03:33:37.702228827 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-01-16 03:33:37.720228914 +0000
                @@ -48,0 +49 @@
                +          wait_for_termination
        lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-01-16 03:33:37.702228827 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-01-16 03:33:37.720228914 +0000
                @@ -10,0 +11 @@
                +      include Concern::Deprecation
                @@ -102,0 +104 @@
                +        deprecated "#prune_pool has no effect and will be removed in the next release."
        lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-01-16 03:33:37.703228832 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-01-16 03:33:37.720228914 +0000
                @@ -1,0 +2 @@
                +require 'concurrent/executor/serial_executor_service'
                @@ -8,0 +10 @@
                +    include SerialExecutorService
        lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-01-16 03:33:37.703228832 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-01-16 03:33:37.720228914 +0000
                @@ -5,0 +6 @@
                +require 'concurrent/collection/timeout_queue'
                @@ -12,0 +14 @@
                +    include Concern::Deprecation
                @@ -96,0 +99,4 @@
                +    # removes the worker if it can be pruned
                +    #
                +    # @return [true, false] if the worker was pruned
                +    #
                @@ -98,2 +104,17 @@
                -    def remove_busy_worker(worker)
                -      synchronize { ns_remove_busy_worker worker }
                +    def prune_worker(worker)
                +      synchronize do
                +        if ns_prunable_capacity > 0
                +          remove_worker worker
                +          true
                +        else
                +          false
                +        end
                +      end
                +    end
                +
                +    # @!visibility private
                +    def remove_worker(worker)
                +      synchronize do
                +        ns_remove_ready_worker worker
                +        ns_remove_busy_worker worker
                +      end
                @@ -119 +140 @@
                -      synchronize { ns_prune_pool }
                +      deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
                @@ -149,3 +169,0 @@
                -
                -      @gc_interval  = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                @@ -164,0 +183 @@
                +        nil
                @@ -166 +185 @@
                -        return fallback_action(*args, &task)
                +        fallback_action(*args, &task)
                @@ -168,3 +186,0 @@
                -
                -      ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
                -      nil
                @@ -221 +237 @@
                -      
                +
                @@ -268 +284 @@
                -    # removes a worker which is not in not tracked in @ready
                +    # removes a worker which is not tracked in @ready
                @@ -277,2 +292,0 @@
                -    # try oldest worker if it is idle for enough time, it's returned back at the start
                -    #
                @@ -280,11 +294,3 @@
                -    def ns_prune_pool
                -      now = Concurrent.monotonic_time
                -      stopped_workers = 0
                -      while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
                -        worker, last_message = @ready.first
                -        if now - last_message > self.idletime
                -          stopped_workers += 1
                -          @ready.shift
                -          worker << :stop
                -        else break
                -        end
                +    def ns_remove_ready_worker(worker)
                +      if index = @ready.index { |rw, _| rw == worker }
                +        @ready.delete_at(index)
                @@ -291,0 +298,2 @@
                +      true
                +    end
                @@ -293 +301,10 @@
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                +    # @return [Integer] number of excess idle workers which can be removed without
                +    #                   going below min_length, or all workers if not running
                +    #
                +    # @!visibility private
                +    def ns_prunable_capacity
                +      if running?
                +        [@pool.size - @min_length, @ready.size].min
                +      else
                +        @pool.size
                +      end
                @@ -295,0 +313 @@
                +    # @!visibility private
                @@ -315 +333 @@
                -        @queue  = Queue.new
                +        @queue  = Collection::TimeoutQueue.new
                @@ -341 +359 @@
                -            loop do
                +            prunable = true
                @@ -343 +361,6 @@
                -              case message = my_queue.pop
                +            loop do
                +              timeout = prunable && my_pool.running? ? my_idletime : nil
                +              case message = my_queue.pop(timeout: timeout)
                +              when nil
                +                throw :stop if my_pool.prune_worker(self)
                +                prunable = false
                @@ -345 +368 @@
                -                my_pool.remove_busy_worker(self)
                +                my_pool.remove_worker(self)
                @@ -347 +369,0 @@
                -
                @@ -351,0 +374 @@
                +                prunable = true
        lib/concurrent-ruby/concurrent/executor/timer_set.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-01-16 03:33:37.703228832 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-01-16 03:33:37.721228918 +0000
                @@ -63,0 +64 @@
                +      @timer_executor.kill
                @@ -125 +126,3 @@
                -      @timer_executor.kill
                +      @condition.set
                +      @condition.reset
                +      @timer_executor.shutdown
        lib/concurrent-ruby/concurrent/executors.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb	2026-01-16 03:33:37.703228832 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb	2026-01-16 03:33:37.721228918 +0000
                @@ -13 +12,0 @@
                -require 'concurrent/executor/cached_thread_pool'
        lib/concurrent-ruby/concurrent/mvar.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb	2026-01-16 03:33:37.704228837 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb	2026-01-16 03:33:37.722228923 +0000
                @@ -12 +12 @@
                -  # `#mutate` that is atomic with respect to operations on the same instance.
                +  # `#modify` that is atomic with respect to operations on the same instance.
                @@ -90 +90 @@
                -        # if we timeoud out we'll still be empty
                +        # If we timed out we'll still be empty
                @@ -119 +119 @@
                -    # `put` the transformed value. Returns the transformed value. A timeout can
                +    # `put` the transformed value. Returns the pre-transform value. A timeout can
                @@ -122 +122 @@
                -    # @return [Object] the transformed value, or `TIMEOUT`
                +    # @return [Object] the pre-transform value, or `TIMEOUT`
        lib/concurrent-ruby/concurrent/promise.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb	2026-01-16 03:33:37.705228842 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb	2026-01-16 03:33:37.722228923 +0000
                @@ -170 +170 @@
                -  # c1.value       #=> 45
                +  # c1.value       #=> 42
        lib/concurrent-ruby/concurrent/timer_task.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb	2026-01-16 03:33:37.708228856 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb	2026-01-16 03:33:37.725228938 +0000
                @@ -4,0 +5 @@
                +require 'concurrent/atomic/atomic_fixnum'
                @@ -238,0 +240 @@
                +          @age.increment
                @@ -311,0 +314 @@
                +      @age = Concurrent::AtomicFixnum.new(0)
                @@ -331 +334 @@
                -      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
                +      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
                @@ -336 +339 @@
                -    def execute_task(completion)
                +    def execute_task(completion, age_when_scheduled)
                @@ -337,0 +341,2 @@
                +      return nil unless @age.value == age_when_scheduled
                +
        lib/concurrent-ruby/concurrent/version.rb
                --- /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb	2026-01-16 03:33:37.708228856 +0000
                +++ /tmp/d20260116-885-szbkav/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb	2026-01-16 03:33:37.726228942 +0000
                @@ -2 +2 @@
                -  VERSION = '1.3.5'
                +  VERSION = '1.3.6'

@github-actions
Copy link
Contributor

gem compare sentry-ruby 5.26.0 6.3.0

Compared versions: ["5.26.0", "6.3.0"]
  DIFFERENT homepage:
    5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
    6.3.0: https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby
  DIFFERENT metadata:
    5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
    6.3.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.3.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.3.0"}
  DIFFERENT required_ruby_version:
    5.26.0: >= 2.4
    6.3.0: >= 2.7
  DIFFERENT rubygems_version:
    5.26.0: 3.6.7
    6.3.0: 3.6.9
  DIFFERENT version:
    5.26.0: 5.26.0
    6.3.0: 6.3.0
  DIFFERENT files:
    5.26.0->6.3.0:
      * Deleted:
            lib/sentry/metrics/aggregator.rb
            lib/sentry/metrics/configuration.rb
            lib/sentry/metrics/counter_metric.rb
            lib/sentry/metrics/distribution_metric.rb
            lib/sentry/metrics/gauge_metric.rb
            lib/sentry/metrics/local_aggregator.rb
            lib/sentry/metrics/metric.rb
            lib/sentry/metrics/set_metric.rb
            lib/sentry/metrics/timing.rb
      * Added:
            lib/sentry/backtrace/line.rb +99/-0
            lib/sentry/debug_structured_logger.rb +94/-0
            lib/sentry/metric_event.rb +49/-0
            lib/sentry/metric_event_buffer.rb +28/-0
            lib/sentry/sequel.rb +35/-0
            lib/sentry/telemetry_event_buffer.rb +130/-0
            lib/sentry/transport/debug_transport.rb +70/-0
            lib/sentry/utils/sample_rand.rb +97/-0
            lib/sentry/utils/telemetry_attributes.rb +30/-0
      * Changed:
            Gemfile +26/-4
            README.md +2/-2
            lib/sentry-ruby.rb +24/-29
            lib/sentry/background_worker.rb +1/-4
            lib/sentry/backtrace.rb +44/-76
            lib/sentry/breadcrumb.rb +1/-1
            lib/sentry/breadcrumb_buffer.rb +2/-2
            lib/sentry/check_in_event.rb +2/-2
            lib/sentry/client.rb +59/-136
            lib/sentry/configuration.rb +168/-78
            lib/sentry/cron/monitor_check_ins.rb +3/-3
            lib/sentry/cron/monitor_config.rb +2/-2
            lib/sentry/cron/monitor_schedule.rb +2/-2
            lib/sentry/dsn.rb +32/-0
            lib/sentry/envelope/item.rb +3/-3
            lib/sentry/error_event.rb +3/-3
            lib/sentry/event.rb +4/-10
            lib/sentry/graphql.rb +1/-1
            lib/sentry/hub.rb +29/-5
            lib/sentry/interface.rb +1/-1
            lib/sentry/interfaces/exception.rb +2/-2
            lib/sentry/interfaces/request.rb +2/-0
            lib/sentry/interfaces/single_exception.rb +4/-4
            lib/sentry/interfaces/stacktrace.rb +3/-3
            lib/sentry/interfaces/stacktrace_builder.rb +0/-8
            lib/sentry/interfaces/threads.rb +2/-2
            lib/sentry/log_event.rb +32/-137
            lib/sentry/log_event_buffer.rb +13/-60
            lib/sentry/metrics.rb +47/-42
            lib/sentry/profiler.rb +4/-5
            lib/sentry/propagation_context.rb +55/-18
            lib/sentry/rspec.rb +1/-1
            lib/sentry/scope.rb +32/-5
            lib/sentry/span.rb +2/-17
            lib/sentry/std_lib_logger.rb +10/-1
            lib/sentry/test_helper.rb +30/-0
            lib/sentry/transaction.rb +72/-95
            lib/sentry/transaction_event.rb +4/-9
            lib/sentry/transport.rb +3/-5
            lib/sentry/transport/dummy_transport.rb +1/-0
            lib/sentry/transport/http_transport.rb +9/-5
            lib/sentry/utils/encoding_helper.rb +6/-0
            lib/sentry/utils/logging_helper.rb +25/-9
            lib/sentry/vernier/profiler.rb +4/-3
            lib/sentry/version.rb +1/-1
            sentry-ruby-core.gemspec +1/-1
            sentry-ruby.gemspec +1/-1
  DIFFERENT extra_rdoc_files:
    5.26.0->6.3.0:
      * Changed:
            README.md +2/-2
  DIFFERENT Gemfile dependencies
    5.26.0->6.3.0:
      * Added:
            graphql [">= 2.2.6"] (runtime)
            sequel [">= 0"] (development)
            activerecord-jdbcmysql-adapter [">= 0"] (development)
            jdbc-sqlite3 [">= 0"] (development)

@github-actions
Copy link
Contributor

gem compare --diff sentry-ruby 5.26.0 6.3.0

Diff too large (133540 chars)

@github-actions
Copy link
Contributor

gem compare --diff concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
        lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
                --- /tmp/20260116-918-bzlsx1	2026-01-16 03:33:45.593708498 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb	2026-01-16 03:33:45.582708504 +0000
                @@ -0,0 +1,55 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro ruby_timeout_queue
                +    class RubyTimeoutQueue < ::Queue
                +      def initialize(*args)
                +        if RUBY_VERSION >= '3.2'
                +          raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
                +        end
                +
                +        super(*args)
                +
                +        @mutex = Mutex.new
                +        @cond_var = ConditionVariable.new
                +      end
                +
                +      def push(obj)
                +        @mutex.synchronize do
                +          super(obj)
                +          @cond_var.signal
                +        end
                +      end
                +      alias_method :enq, :push
                +      alias_method :<<, :push
                +
                +      def pop(non_block = false, timeout: nil)
                +        if non_block && timeout
                +          raise ArgumentError, "can't set a timeout if non_block is enabled"
                +        end
                +
                +        if non_block
                +          super(true)
                +        elsif timeout
                +          @mutex.synchronize do
                +            deadline = Concurrent.monotonic_time + timeout
                +            while (now = Concurrent.monotonic_time) < deadline && empty?
                +              @cond_var.wait(@mutex, deadline - now)
                +            end
                +            begin
                +              return super(true)
                +            rescue ThreadError
                +              # still empty
                +              nil
                +            end
                +          end
                +        else
                +          super(false)
                +        end
                +      end
                +      alias_method :deq, :pop
                +      alias_method :shift, :pop
                +    end
                +    private_constant :RubyTimeoutQueue
                +  end
                +end
        lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
                --- /tmp/20260116-918-mj49ym	2026-01-16 03:33:45.595708497 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb	2026-01-16 03:33:45.582708504 +0000
                @@ -0,0 +1,18 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro internal_implementation_note
                +    TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
                +                                   ::Queue
                +                                 else
                +                                   require 'concurrent/collection/ruby_timeout_queue'
                +                                   RubyTimeoutQueue
                +                                 end
                +    private_constant :TimeoutQueueImplementation
                +
                +    # @!visibility private
                +    # @!macro timeout_queue
                +    class TimeoutQueue < TimeoutQueueImplementation
                +    end
                +  end
                +end
      * Changed:
        CHANGELOG.md
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/CHANGELOG.md	2026-01-16 03:33:45.554708519 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/CHANGELOG.md	2026-01-16 03:33:45.573708509 +0000
                @@ -2,0 +3,6 @@
                +## Release v1.3.6 (13 December 2025)
                +
                +concurrent-ruby:
                +
                +* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
                +
        README.md
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/README.md	2026-01-16 03:33:45.554708519 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/README.md	2026-01-16 03:33:45.573708509 +0000
                @@ -210 +210 @@
                -keep backward compatibility (there may also lack tests and documentation). Semantic versions will
                +keep backward compatibility (they may also lack tests and documentation). Semantic versions will
                @@ -361 +361,2 @@
                -* Install Docker, required for Windows builds
                +* Install Docker or Podman, required for Windows builds
                +* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
                @@ -380,0 +382 @@
                +* [Joshua Young](https://github.com/joshuay03)
        lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-01-16 03:33:45.561708515 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-01-16 03:33:45.579708505 +0000
                @@ -8,0 +9 @@
                +    return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
        lib/concurrent-ruby/concurrent/concurrent_ruby.jar
                Binary files /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
        lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-01-16 03:33:45.566708513 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-01-16 03:33:45.584708503 +0000
                @@ -84,4 +84,2 @@
                -  #   This is a no-op on some pool implementation (e.g. the Java one).  The Ruby
                -  #   pool will auto-prune each time a new job is posted. You will need to call
                -  #   this method explicitly in case your application post jobs in bursts (a
                -  #   lot of jobs and then nothing for long periods)
                +  #   This is a no-op on all pool implementations as they prune themselves
                +  #   automatically, and has been deprecated.
        lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-01-16 03:33:45.566708513 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-01-16 03:33:45.585708502 +0000
                @@ -48,0 +49 @@
                +          wait_for_termination
        lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-01-16 03:33:45.566708513 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-01-16 03:33:45.585708502 +0000
                @@ -10,0 +11 @@
                +      include Concern::Deprecation
                @@ -102,0 +104 @@
                +        deprecated "#prune_pool has no effect and will be removed in the next release."
        lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-01-16 03:33:45.566708513 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-01-16 03:33:45.585708502 +0000
                @@ -1,0 +2 @@
                +require 'concurrent/executor/serial_executor_service'
                @@ -8,0 +10 @@
                +    include SerialExecutorService
        lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-01-16 03:33:45.566708513 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-01-16 03:33:45.585708502 +0000
                @@ -5,0 +6 @@
                +require 'concurrent/collection/timeout_queue'
                @@ -12,0 +14 @@
                +    include Concern::Deprecation
                @@ -96,0 +99,4 @@
                +    # removes the worker if it can be pruned
                +    #
                +    # @return [true, false] if the worker was pruned
                +    #
                @@ -98,2 +104,17 @@
                -    def remove_busy_worker(worker)
                -      synchronize { ns_remove_busy_worker worker }
                +    def prune_worker(worker)
                +      synchronize do
                +        if ns_prunable_capacity > 0
                +          remove_worker worker
                +          true
                +        else
                +          false
                +        end
                +      end
                +    end
                +
                +    # @!visibility private
                +    def remove_worker(worker)
                +      synchronize do
                +        ns_remove_ready_worker worker
                +        ns_remove_busy_worker worker
                +      end
                @@ -119 +140 @@
                -      synchronize { ns_prune_pool }
                +      deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
                @@ -149,3 +169,0 @@
                -
                -      @gc_interval  = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                @@ -164,0 +183 @@
                +        nil
                @@ -166 +185 @@
                -        return fallback_action(*args, &task)
                +        fallback_action(*args, &task)
                @@ -168,3 +186,0 @@
                -
                -      ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
                -      nil
                @@ -221 +237 @@
                -      
                +
                @@ -268 +284 @@
                -    # removes a worker which is not in not tracked in @ready
                +    # removes a worker which is not tracked in @ready
                @@ -277,2 +292,0 @@
                -    # try oldest worker if it is idle for enough time, it's returned back at the start
                -    #
                @@ -280,11 +294,3 @@
                -    def ns_prune_pool
                -      now = Concurrent.monotonic_time
                -      stopped_workers = 0
                -      while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
                -        worker, last_message = @ready.first
                -        if now - last_message > self.idletime
                -          stopped_workers += 1
                -          @ready.shift
                -          worker << :stop
                -        else break
                -        end
                +    def ns_remove_ready_worker(worker)
                +      if index = @ready.index { |rw, _| rw == worker }
                +        @ready.delete_at(index)
                @@ -291,0 +298,2 @@
                +      true
                +    end
                @@ -293 +301,10 @@
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                +    # @return [Integer] number of excess idle workers which can be removed without
                +    #                   going below min_length, or all workers if not running
                +    #
                +    # @!visibility private
                +    def ns_prunable_capacity
                +      if running?
                +        [@pool.size - @min_length, @ready.size].min
                +      else
                +        @pool.size
                +      end
                @@ -295,0 +313 @@
                +    # @!visibility private
                @@ -315 +333 @@
                -        @queue  = Queue.new
                +        @queue  = Collection::TimeoutQueue.new
                @@ -341 +359 @@
                -            loop do
                +            prunable = true
                @@ -343 +361,6 @@
                -              case message = my_queue.pop
                +            loop do
                +              timeout = prunable && my_pool.running? ? my_idletime : nil
                +              case message = my_queue.pop(timeout: timeout)
                +              when nil
                +                throw :stop if my_pool.prune_worker(self)
                +                prunable = false
                @@ -345 +368 @@
                -                my_pool.remove_busy_worker(self)
                +                my_pool.remove_worker(self)
                @@ -347 +369,0 @@
                -
                @@ -351,0 +374 @@
                +                prunable = true
        lib/concurrent-ruby/concurrent/executor/timer_set.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-01-16 03:33:45.567708512 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-01-16 03:33:45.586708502 +0000
                @@ -63,0 +64 @@
                +      @timer_executor.kill
                @@ -125 +126,3 @@
                -      @timer_executor.kill
                +      @condition.set
                +      @condition.reset
                +      @timer_executor.shutdown
        lib/concurrent-ruby/concurrent/executors.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb	2026-01-16 03:33:45.567708512 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb	2026-01-16 03:33:45.586708502 +0000
                @@ -13 +12,0 @@
                -require 'concurrent/executor/cached_thread_pool'
        lib/concurrent-ruby/concurrent/mvar.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb	2026-01-16 03:33:45.568708511 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb	2026-01-16 03:33:45.587708501 +0000
                @@ -12 +12 @@
                -  # `#mutate` that is atomic with respect to operations on the same instance.
                +  # `#modify` that is atomic with respect to operations on the same instance.
                @@ -90 +90 @@
                -        # if we timeoud out we'll still be empty
                +        # If we timed out we'll still be empty
                @@ -119 +119 @@
                -    # `put` the transformed value. Returns the transformed value. A timeout can
                +    # `put` the transformed value. Returns the pre-transform value. A timeout can
                @@ -122 +122 @@
                -    # @return [Object] the transformed value, or `TIMEOUT`
                +    # @return [Object] the pre-transform value, or `TIMEOUT`
        lib/concurrent-ruby/concurrent/promise.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb	2026-01-16 03:33:45.568708511 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb	2026-01-16 03:33:45.587708501 +0000
                @@ -170 +170 @@
                -  # c1.value       #=> 45
                +  # c1.value       #=> 42
        lib/concurrent-ruby/concurrent/timer_task.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb	2026-01-16 03:33:45.571708510 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb	2026-01-16 03:33:45.591708499 +0000
                @@ -4,0 +5 @@
                +require 'concurrent/atomic/atomic_fixnum'
                @@ -238,0 +240 @@
                +          @age.increment
                @@ -311,0 +314 @@
                +      @age = Concurrent::AtomicFixnum.new(0)
                @@ -331 +334 @@
                -      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
                +      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
                @@ -336 +339 @@
                -    def execute_task(completion)
                +    def execute_task(completion, age_when_scheduled)
                @@ -337,0 +341,2 @@
                +      return nil unless @age.value == age_when_scheduled
                +
        lib/concurrent-ruby/concurrent/version.rb
                --- /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb	2026-01-16 03:33:45.572708509 +0000
                +++ /tmp/d20260116-918-l165rp/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb	2026-01-16 03:33:45.592708499 +0000
                @@ -2 +2 @@
                -  VERSION = '1.3.5'
                +  VERSION = '1.3.6'

@github-actions
Copy link
Contributor

gem compare --diff sentry-ruby 5.26.0 6.3.0

Diff too large (133540 chars)

@github-actions
Copy link
Contributor

gem compare sentry-ruby 5.26.0 6.3.0

Compared versions: ["5.26.0", "6.3.0"]
  DIFFERENT homepage:
    5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
    6.3.0: https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby
  DIFFERENT metadata:
    5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
    6.3.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.3.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.3.0"}
  DIFFERENT required_ruby_version:
    5.26.0: >= 2.4
    6.3.0: >= 2.7
  DIFFERENT rubygems_version:
    5.26.0: 3.6.7
    6.3.0: 3.6.9
  DIFFERENT version:
    5.26.0: 5.26.0
    6.3.0: 6.3.0
  DIFFERENT files:
    5.26.0->6.3.0:
      * Deleted:
            lib/sentry/metrics/aggregator.rb
            lib/sentry/metrics/configuration.rb
            lib/sentry/metrics/counter_metric.rb
            lib/sentry/metrics/distribution_metric.rb
            lib/sentry/metrics/gauge_metric.rb
            lib/sentry/metrics/local_aggregator.rb
            lib/sentry/metrics/metric.rb
            lib/sentry/metrics/set_metric.rb
            lib/sentry/metrics/timing.rb
      * Added:
            lib/sentry/backtrace/line.rb +99/-0
            lib/sentry/debug_structured_logger.rb +94/-0
            lib/sentry/metric_event.rb +49/-0
            lib/sentry/metric_event_buffer.rb +28/-0
            lib/sentry/sequel.rb +35/-0
            lib/sentry/telemetry_event_buffer.rb +130/-0
            lib/sentry/transport/debug_transport.rb +70/-0
            lib/sentry/utils/sample_rand.rb +97/-0
            lib/sentry/utils/telemetry_attributes.rb +30/-0
      * Changed:
            Gemfile +26/-4
            README.md +2/-2
            lib/sentry-ruby.rb +24/-29
            lib/sentry/background_worker.rb +1/-4
            lib/sentry/backtrace.rb +44/-76
            lib/sentry/breadcrumb.rb +1/-1
            lib/sentry/breadcrumb_buffer.rb +2/-2
            lib/sentry/check_in_event.rb +2/-2
            lib/sentry/client.rb +59/-136
            lib/sentry/configuration.rb +168/-78
            lib/sentry/cron/monitor_check_ins.rb +3/-3
            lib/sentry/cron/monitor_config.rb +2/-2
            lib/sentry/cron/monitor_schedule.rb +2/-2
            lib/sentry/dsn.rb +32/-0
            lib/sentry/envelope/item.rb +3/-3
            lib/sentry/error_event.rb +3/-3
            lib/sentry/event.rb +4/-10
            lib/sentry/graphql.rb +1/-1
            lib/sentry/hub.rb +29/-5
            lib/sentry/interface.rb +1/-1
            lib/sentry/interfaces/exception.rb +2/-2
            lib/sentry/interfaces/request.rb +2/-0
            lib/sentry/interfaces/single_exception.rb +4/-4
            lib/sentry/interfaces/stacktrace.rb +3/-3
            lib/sentry/interfaces/stacktrace_builder.rb +0/-8
            lib/sentry/interfaces/threads.rb +2/-2
            lib/sentry/log_event.rb +32/-137
            lib/sentry/log_event_buffer.rb +13/-60
            lib/sentry/metrics.rb +47/-42
            lib/sentry/profiler.rb +4/-5
            lib/sentry/propagation_context.rb +55/-18
            lib/sentry/rspec.rb +1/-1
            lib/sentry/scope.rb +32/-5
            lib/sentry/span.rb +2/-17
            lib/sentry/std_lib_logger.rb +10/-1
            lib/sentry/test_helper.rb +30/-0
            lib/sentry/transaction.rb +72/-95
            lib/sentry/transaction_event.rb +4/-9
            lib/sentry/transport.rb +3/-5
            lib/sentry/transport/dummy_transport.rb +1/-0
            lib/sentry/transport/http_transport.rb +9/-5
            lib/sentry/utils/encoding_helper.rb +6/-0
            lib/sentry/utils/logging_helper.rb +25/-9
            lib/sentry/vernier/profiler.rb +4/-3
            lib/sentry/version.rb +1/-1
            sentry-ruby-core.gemspec +1/-1
            sentry-ruby.gemspec +1/-1
  DIFFERENT extra_rdoc_files:
    5.26.0->6.3.0:
      * Changed:
            README.md +2/-2
  DIFFERENT Gemfile dependencies
    5.26.0->6.3.0:
      * Added:
            graphql [">= 2.2.6"] (runtime)
            sequel [">= 0"] (development)
            activerecord-jdbcmysql-adapter [">= 0"] (development)
            jdbc-sqlite3 [">= 0"] (development)

@github-actions
Copy link
Contributor

gem compare --diff sentry-ruby 5.26.0 6.3.0

Diff too large (133540 chars)

@github-actions
Copy link
Contributor

gem compare sentry-ruby 5.26.0 6.3.0

Compared versions: ["5.26.0", "6.3.0"]
  DIFFERENT homepage:
    5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
    6.3.0: https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby
  DIFFERENT metadata:
    5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
    6.3.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.3.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.3.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.3.0"}
  DIFFERENT required_ruby_version:
    5.26.0: >= 2.4
    6.3.0: >= 2.7
  DIFFERENT rubygems_version:
    5.26.0: 3.6.7
    6.3.0: 3.6.9
  DIFFERENT version:
    5.26.0: 5.26.0
    6.3.0: 6.3.0
  DIFFERENT files:
    5.26.0->6.3.0:
      * Deleted:
            lib/sentry/metrics/aggregator.rb
            lib/sentry/metrics/configuration.rb
            lib/sentry/metrics/counter_metric.rb
            lib/sentry/metrics/distribution_metric.rb
            lib/sentry/metrics/gauge_metric.rb
            lib/sentry/metrics/local_aggregator.rb
            lib/sentry/metrics/metric.rb
            lib/sentry/metrics/set_metric.rb
            lib/sentry/metrics/timing.rb
      * Added:
            lib/sentry/backtrace/line.rb +99/-0
            lib/sentry/debug_structured_logger.rb +94/-0
            lib/sentry/metric_event.rb +49/-0
            lib/sentry/metric_event_buffer.rb +28/-0
            lib/sentry/sequel.rb +35/-0
            lib/sentry/telemetry_event_buffer.rb +130/-0
            lib/sentry/transport/debug_transport.rb +70/-0
            lib/sentry/utils/sample_rand.rb +97/-0
            lib/sentry/utils/telemetry_attributes.rb +30/-0
      * Changed:
            Gemfile +26/-4
            README.md +2/-2
            lib/sentry-ruby.rb +24/-29
            lib/sentry/background_worker.rb +1/-4
            lib/sentry/backtrace.rb +44/-76
            lib/sentry/breadcrumb.rb +1/-1
            lib/sentry/breadcrumb_buffer.rb +2/-2
            lib/sentry/check_in_event.rb +2/-2
            lib/sentry/client.rb +59/-136
            lib/sentry/configuration.rb +168/-78
            lib/sentry/cron/monitor_check_ins.rb +3/-3
            lib/sentry/cron/monitor_config.rb +2/-2
            lib/sentry/cron/monitor_schedule.rb +2/-2
            lib/sentry/dsn.rb +32/-0
            lib/sentry/envelope/item.rb +3/-3
            lib/sentry/error_event.rb +3/-3
            lib/sentry/event.rb +4/-10
            lib/sentry/graphql.rb +1/-1
            lib/sentry/hub.rb +29/-5
            lib/sentry/interface.rb +1/-1
            lib/sentry/interfaces/exception.rb +2/-2
            lib/sentry/interfaces/request.rb +2/-0
            lib/sentry/interfaces/single_exception.rb +4/-4
            lib/sentry/interfaces/stacktrace.rb +3/-3
            lib/sentry/interfaces/stacktrace_builder.rb +0/-8
            lib/sentry/interfaces/threads.rb +2/-2
            lib/sentry/log_event.rb +32/-137
            lib/sentry/log_event_buffer.rb +13/-60
            lib/sentry/metrics.rb +47/-42
            lib/sentry/profiler.rb +4/-5
            lib/sentry/propagation_context.rb +55/-18
            lib/sentry/rspec.rb +1/-1
            lib/sentry/scope.rb +32/-5
            lib/sentry/span.rb +2/-17
            lib/sentry/std_lib_logger.rb +10/-1
            lib/sentry/test_helper.rb +30/-0
            lib/sentry/transaction.rb +72/-95
            lib/sentry/transaction_event.rb +4/-9
            lib/sentry/transport.rb +3/-5
            lib/sentry/transport/dummy_transport.rb +1/-0
            lib/sentry/transport/http_transport.rb +9/-5
            lib/sentry/utils/encoding_helper.rb +6/-0
            lib/sentry/utils/logging_helper.rb +25/-9
            lib/sentry/vernier/profiler.rb +4/-3
            lib/sentry/version.rb +1/-1
            sentry-ruby-core.gemspec +1/-1
            sentry-ruby.gemspec +1/-1
  DIFFERENT extra_rdoc_files:
    5.26.0->6.3.0:
      * Changed:
            README.md +2/-2
  DIFFERENT Gemfile dependencies
    5.26.0->6.3.0:
      * Added:
            graphql [">= 2.2.6"] (runtime)
            sequel [">= 0"] (development)
            activerecord-jdbcmysql-adapter [">= 0"] (development)
            jdbc-sqlite3 [">= 0"] (development)

@github-actions
Copy link
Contributor

gem compare --diff sentry-ruby 5.26.0 6.3.0

Diff too large (133437 chars)

@github-actions
Copy link
Contributor

gem compare --diff sentry-ruby 5.26.0 6.3.0

Diff too large (133540 chars)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies ruby Pull requests that update Ruby code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant