diff --git a/.github/scripts/generate_table_versions.rb b/.github/scripts/generate_table_versions.rb deleted file mode 100644 index 958e54a53a8..00000000000 --- a/.github/scripts/generate_table_versions.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'json' - -input_file = 'gem_output.json' -output_file = 'integration_versions.md' - -data = JSON.parse(File.read(input_file)) - -comment = "# Integrations\n\n" -header = "| Integration | Ruby Min | Ruby Max | JRuby Min | JRuby Max |\n" -separator = "|-------------|----------|-----------|----------|----------|\n" -rows = data.map do |integration_name, versions| - ruby_min, ruby_max, jruby_min, jruby_max = versions.map do |v| - v || "None" - end - "| #{integration_name} | #{ruby_min} | #{ruby_max} | #{jruby_min} | #{jruby_max} |" -end - -File.open(output_file, 'w') do |file| - file.puts comment - file.puts header - file.puts separator - rows.each { |row| file.puts row } -end diff --git a/.github/scripts/find_gem_version_bounds.rb b/.github/scripts/update_supported_versions.rb similarity index 57% rename from .github/scripts/find_gem_version_bounds.rb rename to .github/scripts/update_supported_versions.rb index 6663c957182..d216912f238 100644 --- a/.github/scripts/find_gem_version_bounds.rb +++ b/.github/scripts/update_supported_versions.rb @@ -14,6 +14,13 @@ class GemfileProcessor EXCLUDED_INTEGRATIONS = ["configuration", "propagation", "utils"].freeze def initialize(directory: 'gemfiles/', contrib_dir: 'lib/datadog/tracing/contrib/') + unless Dir.exist?(directory) + warn("Directory #{directory} does not exist") + end + + unless Dir.exist?(contrib_dir) + warn("Directory #{contrib_dir} does not exist") + end @directory = directory @contrib_dir = contrib_dir @min_gems = { 'ruby' => {}, 'jruby' => {} } @@ -25,7 +32,7 @@ def process parse_gemfiles process_integrations include_hardcoded_versions - write_output + write_markdown_output end private @@ -106,18 +113,18 @@ def process_integrations def include_hardcoded_versions # `httpx` is maintained externally @integration_json_mapping['httpx'] = [ - '0.11', # Min version Ruby - 'infinity', # Max version Ruby - '0.11', # Min version JRuby - 'infinity' # Max version JRuby + '[3rd-party support](https://honeyryderchuck.gitlab.io/httpx/)', # Min version Ruby + '[3rd-party support](https://honeyryderchuck.gitlab.io/httpx/)', # Max version Ruby + '[3rd-party support](https://honeyryderchuck.gitlab.io/httpx/)', # Min version JRuby + '[3rd-party support](https://honeyryderchuck.gitlab.io/httpx/)', # Max version JRuby ] # `makara` is part of `activerecord` @integration_json_mapping['makara'] = [ - '0.3.5', # Min version Ruby - 'infinity', # Max version Ruby - '0.3.5', # Min version JRuby - 'infinity' # Max version JRuby + '0.5.1', # Min version Ruby + '0.5.1', # Max version Ruby + '0.5.1', # Min version JRuby + '0.5.1' # Max version JRuby ] end @@ -131,10 +138,60 @@ def resolve_integration_name(integration) integration end - def write_output - @integration_json_mapping = @integration_json_mapping.sort.to_h - File.write("gem_output.json", JSON.pretty_generate(@integration_json_mapping)) + def write_markdown_output + output_file = 'docs/integration_versions.md' + comment = <<~COMMENT + + COMMENT + column_widths = { + integration: 24, + ruby_min: 19, + ruby_max: 19, + jruby_min: 19, + jruby_max: 19 + } + columns = { + integration: "Integration", + ruby_min: "Ruby Min", + ruby_max: "Ruby Max", + jruby_min: "JRuby Min", + jruby_max: "JRuby Max" + } + + adjusted_widths = columns.transform_values.with_index do |title, index| + [title.length, column_widths.values[index]].max + end + + header = "| " + columns.map { |key, title| title.ljust(adjusted_widths[key]) }.join(" | ") + " |" + separator = "|-" + adjusted_widths.map { |_, width| "-" * width }.join("-|-") + "-|" + rows = @integration_json_mapping + .sort_by { |name, _versions| name.downcase } + .map do |name, versions| + integration_name = name.ljust(column_widths[:integration]) + ruby_min = (versions[0] || "None").ljust(column_widths[:ruby_min]) + ruby_max = (versions[1] == 'infinity' ? 'latest' : versions[1] || 'None').ljust(column_widths[:ruby_max]) + jruby_min = (versions[2] || "None").ljust(column_widths[:jruby_min]) + jruby_max = (versions[3] == 'infinity' ? 'latest' : versions[3] || 'None').ljust(column_widths[:jruby_max]) + + "| #{integration_name} | #{ruby_min} | #{ruby_max} | #{jruby_min} | #{jruby_max} |" + end + + File.open(output_file, 'w') do |file| + file.puts comment + file.puts header + file.puts separator + rows.each { |row| file.puts row } + end end end + GemfileProcessor.new.process \ No newline at end of file diff --git a/.github/workflows/generate-supported-versions.yml b/.github/workflows/generate-supported-versions.yml index ae64be78c6f..9dcfc3e090e 100644 --- a/.github/workflows/generate-supported-versions.yml +++ b/.github/workflows/generate-supported-versions.yml @@ -24,10 +24,7 @@ jobs: ruby-version: "3.3" - name: Update latest - run: bundle exec ruby .github/scripts/find_gem_version_bounds.rb - - - name: Generate versions table - run: ruby .github/scripts/generate_table_versions.rb + run: bundle exec ruby .github/scripts/update_supported_versions.rb - run: git diff @@ -44,6 +41,10 @@ jobs: delete-branch: true body: | This is a PR to update the table for supported integration versions. + The supported versions markdown is generated from the minimum and maximum tested versions of each integration, + as defined from the `gemfile.lock` gem declarations. + Workflow run: [Generate Supported Versions](https://github.com/DataDog/dd-trace-rb/actions/workflows/generate-supported-versions.yml) + This should be tied to tracer releases, or triggered manually.