From e4d198504228317ee7e8505165407a5a7d03f60a Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 25 Mar 2026 09:17:00 -0500 Subject: [PATCH 1/3] feat: auto-discover new Ruby minor series in autobump workflow Instead of a hardcoded list of minor versions (3.2, 3.3, 3.4), the autobump workflow now dynamically discovers all minor series from ruby/ruby releases. This means 4.1, 5.0, etc. will be picked up automatically without workflow changes. Also adds the Ruby 4.0.2 formula and fixes tag matching to handle both old underscore format (v3_4_2) and new dot format (v4.0.2). Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/autobump.yml | 48 +++++++++++++++++++++++++++------- Formula/jdx-ruby@4.0.2.rb | 6 +++++ 2 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 Formula/jdx-ruby@4.0.2.rb diff --git a/.github/workflows/autobump.yml b/.github/workflows/autobump.yml index fe4a68b..54e1987 100644 --- a/.github/workflows/autobump.yml +++ b/.github/workflows/autobump.yml @@ -29,11 +29,29 @@ jobs: env: GITHUB_TOKEN: ${{ github.token }} run: | - # Get latest patch versions for each minor series we support - for minor in 3.2 3.3 3.4; do + # Discover all minor series with stable releases from ruby/ruby + all_tags=$(gh release list --repo ruby/ruby --limit 200 --json tagName --jq '.[].tagName') + + # Extract unique minor versions (e.g., 3.2, 3.3, 3.4, 4.0) from stable release tags + # Handles both old format (v3_2_0) and new format (v4.0.0) + minor_versions=$(echo "$all_tags" | grep -v -iE '(preview|rc)' | \ + sed 's/^v//; s/_/./g' | \ + grep -oE '^[0-9]+\.[0-9]+' | \ + sort -V -u) + + # Only process 3.2+ (older versions aren't supported) + minor_versions=$(echo "$minor_versions" | awk -F. '$1 > 3 || ($1 == 3 && $2 >= 2)') + + echo "Discovered minor series: $(echo $minor_versions | tr '\n' ' ')" + + for minor in $minor_versions; do # Get latest release for this minor version from ruby/ruby - latest=$(gh release list --repo ruby/ruby --limit 100 --json tagName --jq '.[].tagName' | \ - grep "^v${minor//./_}_" | \ + # Match both old format (v3_2_0) and new format (v4.0.0) + underscore_prefix="v${minor//./_}_" + dot_prefix="v${minor}." + latest=$(echo "$all_tags" | \ + grep -E "^(${underscore_prefix}|${dot_prefix})" | \ + grep -viE '(preview|rc)' | \ sed 's/^v//; s/_/./g' | \ grep -E "^${minor}\.[0-9]+$" | \ sort -V | tail -1) @@ -66,9 +84,18 @@ jobs: abstract_num="${minor//./}" class_version="${latest//./}" + # Use version-specific abstract class if it exists, otherwise use base + if [[ -f "Abstract/jdx-ruby-${abstract_num}.rb" ]]; then + abstract_file="jdx-ruby-${abstract_num}" + abstract_class="JdxRuby${abstract_num}" + else + abstract_file="jdx-ruby" + abstract_class="JdxRuby" + fi + echo "Creating formula for Ruby $latest" - printf 'require File.expand_path("../Abstract/jdx-ruby-%s", __dir__)\n\nclass JdxRubyAT%s < JdxRuby%s\n url "%s"\n sha256 "%s"\nend\n' \ - "$abstract_num" "$class_version" "$abstract_num" "$tarball_url" "$sha256" > "$formula_file" + printf 'require File.expand_path("../Abstract/%s", __dir__)\n\nclass JdxRubyAT%s < %s\n url "%s"\n sha256 "%s"\nend\n' \ + "$abstract_file" "$class_version" "$abstract_class" "$tarball_url" "$sha256" > "$formula_file" git add "$formula_file" git commit -m "Add jdx-ruby@${latest}" @@ -83,7 +110,7 @@ jobs: # Only pick up prereleases for minor versions that don't have stable releases yet # Get all releases once - all_releases=$(gh release list --repo ruby/ruby --limit 100 --json tagName --jq '.[].tagName') + all_releases=$(gh release list --repo ruby/ruby --limit 200 --json tagName --jq '.[].tagName') echo "$all_releases" | while read -r tag; do # Skip if not a prerelease (must contain preview or rc) @@ -105,9 +132,10 @@ jobs: minor=$(echo "$version" | grep -oE '^[0-9]+\.[0-9]+') # Skip if this minor version already has a stable release - # Check for tags like v3_5_0, v3_5_1, etc. (stable = no preview/rc suffix) - minor_pattern="^v${minor//./_}_[0-9]+$" - if echo "$all_releases" | grep -qE "$minor_pattern"; then + # Check for tags like v3_5_0, v3_5_1, v4.0.0, etc. (stable = no preview/rc suffix) + underscore_pattern="^v${minor//./_}_[0-9]+$" + dot_pattern="^v${minor}\.[0-9]+$" + if echo "$all_releases" | grep -qE "(${underscore_pattern}|${dot_pattern})"; then echo "Skipping $version - stable releases exist for $minor series" continue fi diff --git a/Formula/jdx-ruby@4.0.2.rb b/Formula/jdx-ruby@4.0.2.rb new file mode 100644 index 0000000..0e35e5a --- /dev/null +++ b/Formula/jdx-ruby@4.0.2.rb @@ -0,0 +1,6 @@ +require File.expand_path("../Abstract/jdx-ruby", __dir__) + +class JdxRubyAT402 < JdxRuby + url "https://cache.ruby-lang.org/pub/ruby/4.0/ruby-4.0.2.tar.gz" + sha256 "51502b26b50b68df4963336ca41e368cde92c928faf91654de4c4c1791f82aac" +end From 07cec480b3b6c21d37c2bc3e6465026298407733 Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 25 Mar 2026 09:28:05 -0500 Subject: [PATCH 2/3] fix: escape dots in regex patterns for version matching MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes unescaped dots in grep -E patterns where the minor version (e.g., 4.0) is interpolated — the dot could match any character. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/autobump.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/autobump.yml b/.github/workflows/autobump.yml index 54e1987..0310ead 100644 --- a/.github/workflows/autobump.yml +++ b/.github/workflows/autobump.yml @@ -48,7 +48,7 @@ jobs: # Get latest release for this minor version from ruby/ruby # Match both old format (v3_2_0) and new format (v4.0.0) underscore_prefix="v${minor//./_}_" - dot_prefix="v${minor}." + dot_prefix="v${minor//./\\.}\\." latest=$(echo "$all_tags" | \ grep -E "^(${underscore_prefix}|${dot_prefix})" | \ grep -viE '(preview|rc)' | \ @@ -134,7 +134,7 @@ jobs: # Skip if this minor version already has a stable release # Check for tags like v3_5_0, v3_5_1, v4.0.0, etc. (stable = no preview/rc suffix) underscore_pattern="^v${minor//./_}_[0-9]+$" - dot_pattern="^v${minor}\.[0-9]+$" + dot_pattern="^v${minor//./\\.}\.[0-9]+$" if echo "$all_releases" | grep -qE "(${underscore_pattern}|${dot_pattern})"; then echo "Skipping $version - stable releases exist for $minor series" continue From 51ca11f941a438ecf35eab5c1da279f5a1f3301f Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Wed, 25 Mar 2026 09:35:38 -0500 Subject: [PATCH 3/3] chore: remove 4.0.2 formula, let autobump create it after merge Co-Authored-By: Claude Opus 4.6 (1M context) --- Formula/jdx-ruby@4.0.2.rb | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 Formula/jdx-ruby@4.0.2.rb diff --git a/Formula/jdx-ruby@4.0.2.rb b/Formula/jdx-ruby@4.0.2.rb deleted file mode 100644 index 0e35e5a..0000000 --- a/Formula/jdx-ruby@4.0.2.rb +++ /dev/null @@ -1,6 +0,0 @@ -require File.expand_path("../Abstract/jdx-ruby", __dir__) - -class JdxRubyAT402 < JdxRuby - url "https://cache.ruby-lang.org/pub/ruby/4.0/ruby-4.0.2.tar.gz" - sha256 "51502b26b50b68df4963336ca41e368cde92c928faf91654de4c4c1791f82aac" -end