From 65a484578072f86586f250ae28712930da14cf53 Mon Sep 17 00:00:00 2001 From: Jeff Zhang Date: Tue, 13 Jan 2026 20:06:01 -0500 Subject: [PATCH 1/6] ZJIT: Constant-fold LoadField/GuardBitEquals from known-frozen object Resolves https://github.com/Shopify/ruby/issues/915 When we have `LoadField` with a `Shape` return type, we can fold it similar to the object case. `GuardBitEquals` can be removed when the argument is `Const` and the values are equal. The behaviors for loading instances variables from frozen/dynamic objects are already covered in existing tests so no new tests were added. --- zjit/src/hir.rs | 24 ++++++++++++++++ zjit/src/hir/opt_tests.rs | 60 ++++++++++++++------------------------- 2 files changed, 45 insertions(+), 39 deletions(-) diff --git a/zjit/src/hir.rs b/zjit/src/hir.rs index a959ab07f413f4..8c7c8389009344 100644 --- a/zjit/src/hir.rs +++ b/zjit/src/hir.rs @@ -3798,6 +3798,30 @@ impl Function { _ => insn_id, } } + Insn::LoadField { recv, offset, return_type, .. } if return_type.is_subtype(types::CShape) && + u32::try_from(offset).is_ok() => { + let offset = (offset as u32).to_usize(); + let recv_type = self.type_of(recv); + match recv_type.ruby_object() { + Some(recv_obj) if recv_obj.is_frozen() => { + let recv_ptr = recv_obj.as_ptr() as *const u32; + let val = unsafe { recv_ptr.byte_add(offset).read() }; + self.new_insn(Insn::Const { val: Const::CShape(ShapeId(val)) }) + } + _ => insn_id, + } + } + Insn::GuardBitEquals { val, expected, .. } => { + match self.find(val) { + // TODO: Refactor this into a more general method like + // has_value(Const) that can check on the value specialization + // of the Type instead + Insn::Const { val: const_val } if const_val == expected => { + continue; + } + _ => insn_id + } + } Insn::AnyToString { str, .. } if self.is_a(str, types::String) => { self.make_equal_to(insn_id, str); // Don't bother re-inferring the type of str; we already know it. diff --git a/zjit/src/hir/opt_tests.rs b/zjit/src/hir/opt_tests.rs index 1d360bed71b44c..8d49353b30eaf4 100644 --- a/zjit/src/hir/opt_tests.rs +++ b/zjit/src/hir/opt_tests.rs @@ -9927,11 +9927,9 @@ mod hir_opt_tests { v20:HeapObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(TestFrozen@0x1010, a@0x1018, cme:0x1020) PatchPoint NoSingletonClass(TestFrozen@0x1010) - v25:CShape = LoadField v20, :_shape_id@0x1048 - v26:CShape[0x1049] = GuardBitEquals v25, CShape(0x1049) - v28:Fixnum[1] = Const Value(1) + v29:Fixnum[1] = Const Value(1) CheckInterrupts - Return v28 + Return v29 "); } @@ -9969,11 +9967,9 @@ mod hir_opt_tests { v20:HeapObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(TestMultiIvars@0x1010, b@0x1018, cme:0x1020) PatchPoint NoSingletonClass(TestMultiIvars@0x1010) - v25:CShape = LoadField v20, :_shape_id@0x1048 - v26:CShape[0x1049] = GuardBitEquals v25, CShape(0x1049) - v28:Fixnum[20] = Const Value(20) + v29:Fixnum[20] = Const Value(20) CheckInterrupts - Return v28 + Return v29 "); } @@ -10009,11 +10005,9 @@ mod hir_opt_tests { v20:HeapObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(TestFrozenStr@0x1010, name@0x1018, cme:0x1020) PatchPoint NoSingletonClass(TestFrozenStr@0x1010) - v25:CShape = LoadField v20, :_shape_id@0x1048 - v26:CShape[0x1049] = GuardBitEquals v25, CShape(0x1049) - v28:StringExact[VALUE(0x1050)] = Const Value(VALUE(0x1050)) + v29:StringExact[VALUE(0x1048)] = Const Value(VALUE(0x1048)) CheckInterrupts - Return v28 + Return v29 "); } @@ -10049,11 +10043,9 @@ mod hir_opt_tests { v20:HeapObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(TestFrozenNil@0x1010, value@0x1018, cme:0x1020) PatchPoint NoSingletonClass(TestFrozenNil@0x1010) - v25:CShape = LoadField v20, :_shape_id@0x1048 - v26:CShape[0x1049] = GuardBitEquals v25, CShape(0x1049) - v28:NilClass = Const Value(nil) + v29:NilClass = Const Value(nil) CheckInterrupts - Return v28 + Return v29 "); } @@ -10129,11 +10121,9 @@ mod hir_opt_tests { v20:HeapObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(TestAttrReader@0x1010, value@0x1018, cme:0x1020) PatchPoint NoSingletonClass(TestAttrReader@0x1010) - v25:CShape = LoadField v20, :_shape_id@0x1048 - v26:CShape[0x1049] = GuardBitEquals v25, CShape(0x1049) - v28:Fixnum[42] = Const Value(42) + v29:Fixnum[42] = Const Value(42) CheckInterrupts - Return v28 + Return v29 "); } @@ -10169,11 +10159,9 @@ mod hir_opt_tests { v20:HeapObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(TestFrozenSym@0x1010, sym@0x1018, cme:0x1020) PatchPoint NoSingletonClass(TestFrozenSym@0x1010) - v25:CShape = LoadField v20, :_shape_id@0x1048 - v26:CShape[0x1049] = GuardBitEquals v25, CShape(0x1049) - v28:StaticSymbol[:hello] = Const Value(VALUE(0x1050)) + v29:StaticSymbol[:hello] = Const Value(VALUE(0x1048)) CheckInterrupts - Return v28 + Return v29 "); } @@ -10209,11 +10197,9 @@ mod hir_opt_tests { v20:HeapObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(TestFrozenBool@0x1010, flag@0x1018, cme:0x1020) PatchPoint NoSingletonClass(TestFrozenBool@0x1010) - v25:CShape = LoadField v20, :_shape_id@0x1048 - v26:CShape[0x1049] = GuardBitEquals v25, CShape(0x1049) - v28:TrueClass = Const Value(true) + v29:TrueClass = Const Value(true) CheckInterrupts - Return v28 + Return v29 "); } @@ -10288,22 +10274,18 @@ mod hir_opt_tests { v28:HeapObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) PatchPoint MethodRedefined(TestNestedAccess@0x1010, x@0x1018, cme:0x1020) PatchPoint NoSingletonClass(TestNestedAccess@0x1010) - v39:CShape = LoadField v28, :_shape_id@0x1048 - v40:CShape[0x1049] = GuardBitEquals v39, CShape(0x1049) - v52:Fixnum[100] = Const Value(100) + v53:Fixnum[100] = Const Value(100) PatchPoint SingleRactorMode - PatchPoint StableConstantNames(0x1050, NESTED_FROZEN) + PatchPoint StableConstantNames(0x1048, NESTED_FROZEN) v34:HeapObject[VALUE(0x1008)] = Const Value(VALUE(0x1008)) - PatchPoint MethodRedefined(TestNestedAccess@0x1010, y@0x1058, cme:0x1060) + PatchPoint MethodRedefined(TestNestedAccess@0x1010, y@0x1050, cme:0x1058) PatchPoint NoSingletonClass(TestNestedAccess@0x1010) - v43:CShape = LoadField v34, :_shape_id@0x1048 - v44:CShape[0x1049] = GuardBitEquals v43, CShape(0x1049) - v53:Fixnum[200] = Const Value(200) - PatchPoint MethodRedefined(Integer@0x1088, +@0x1090, cme:0x1098) - v54:Fixnum[300] = Const Value(300) + v55:Fixnum[200] = Const Value(200) + PatchPoint MethodRedefined(Integer@0x1080, +@0x1088, cme:0x1090) + v56:Fixnum[300] = Const Value(300) IncrCounter inline_cfunc_optimized_send_count CheckInterrupts - Return v54 + Return v56 "); } From 6e61496531afea45ec53ebfd1a5db12635fc6ed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Hasi=C5=84ski?= Date: Wed, 14 Jan 2026 02:41:00 +0100 Subject: [PATCH 2/6] Pre-allocate IO.select result arrays based on input size (#15850) io.c: pre-allocate IO.select result arrays based on input size The ternary (rp?rb_ary_new():rb_ary_new2(0)) became pointless after commit a51f30c671 (Variable Width Allocation, Mar 2022) made both rb_ary_new() and rb_ary_new2(0) equivalent. Instead of just removing the dead code, improve on the original intent by pre-allocating based on the actual input array size. This avoids reallocations when many FDs are ready. Benchmark (100 ready FDs): ~8% improvement (5.59 -> 5.11 us/op) --- io.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/io.c b/io.c index 95664c023098b4..25c66550f5c382 100644 --- a/io.c +++ b/io.c @@ -10758,9 +10758,9 @@ select_internal(VALUE read, VALUE write, VALUE except, struct timeval *tp, rb_fd if (!pending && n == 0) return Qnil; /* returns nil on timeout */ res = rb_ary_new2(3); - rb_ary_push(res, rp?rb_ary_new():rb_ary_new2(0)); - rb_ary_push(res, wp?rb_ary_new():rb_ary_new2(0)); - rb_ary_push(res, ep?rb_ary_new():rb_ary_new2(0)); + rb_ary_push(res, rp ? rb_ary_new_capa(RARRAY_LEN(read)) : rb_ary_new()); + rb_ary_push(res, wp ? rb_ary_new_capa(RARRAY_LEN(write)) : rb_ary_new()); + rb_ary_push(res, ep ? rb_ary_new_capa(RARRAY_LEN(except)) : rb_ary_new()); if (rp) { list = RARRAY_AREF(res, 0); From 49ce12d2ef4fb52d52a7e1e47148081cfebcedba Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 14 Jan 2026 13:55:35 +0900 Subject: [PATCH 3/6] Silence building rubyspec-capiext [ci skip] --- defs/gmake.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defs/gmake.mk b/defs/gmake.mk index 2fc0ff8733af63..f4b3d799902379 100644 --- a/defs/gmake.mk +++ b/defs/gmake.mk @@ -517,7 +517,7 @@ fix-depends check-depends: all hello # because the same named directory exists in the source tree. $(RUBYSPEC_CAPIEXT)/%.$(DLEXT): $(srcdir)/$(RUBYSPEC_CAPIEXT)/%.c $(RUBYSPEC_CAPIEXT_DEPS) \ | build-ext - $(ECHO) building $@ + $(no_silence:no=$(ECHO) building $@) $(Q) $(MAKEDIRS) $(@D) $(Q) $(DLDSHARED) -L. $(XDLDFLAGS) $(XLDFLAGS) $(LDFLAGS) $(INCFLAGS) $(CPPFLAGS) $(OUTFLAG)$@ $< $(LIBRUBYARG) ifneq ($(POSTLINK),) From 3aa4aed0cb496b2cc1bf32cbda62093a89fa3a6d Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 14 Jan 2026 14:44:14 +0900 Subject: [PATCH 4/6] Skip Onigumo to check latest version --- tool/sync_default_gems.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tool/sync_default_gems.rb b/tool/sync_default_gems.rb index b37c75e704bb4a..ce07a8e998efc5 100755 --- a/tool/sync_default_gems.rb +++ b/tool/sync_default_gems.rb @@ -440,7 +440,7 @@ def sync_default_gems(gem) end def check_prerelease_version(gem) - return if ["rubygems", "mmtk", "cgi", "pathname"].include?(gem) + return if ["rubygems", "mmtk", "cgi", "pathname", "Onigmo"].include?(gem) require "net/https" require "json" From ab522c8876da582fe3d100ef398d59ffdd875130 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 14 Jan 2026 14:47:06 +0900 Subject: [PATCH 5/6] Stop to sync tsort changes --- tool/sync_default_gems.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/tool/sync_default_gems.rb b/tool/sync_default_gems.rb index ce07a8e998efc5..fb928410a6e960 100755 --- a/tool/sync_default_gems.rb +++ b/tool/sync_default_gems.rb @@ -304,7 +304,6 @@ def lib((upstream, branch), gemspec_in_subdir: false) time: lib("ruby/time"), timeout: lib("ruby/timeout"), tmpdir: lib("ruby/tmpdir"), - tsort: lib("ruby/tsort"), un: lib("ruby/un"), uri: lib("ruby/uri", gemspec_in_subdir: true), weakref: lib("ruby/weakref"), From 323ad363ca0b27da781c3bc8edb7b98b94520d83 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 14 Jan 2026 15:21:54 +0900 Subject: [PATCH 6/6] Switch filename of release and publish workflows --- .github/workflows/publish.yml | 103 +++++++++++++++++++++++++++++++--- .github/workflows/release.yml | 103 +++------------------------------- 2 files changed, 103 insertions(+), 103 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5d4474d978f51a..3caeee9a3b8796 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,18 +1,107 @@ -name: Start release workflow +name: Publish Ruby packages + on: - push: - tags: - - '*' + repository_dispatch: + types: + - release + workflow_dispatch: + inputs: + version: + description: 'Version of the Ruby package to release' + required: true + default: '3.3.4' jobs: - notify: + release: runs-on: ubuntu-latest steps: - - name: Build release package + - uses: actions/checkout@v6.0.1 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: 3.3.4 + + - name: Store Ruby version + run: | + echo "RUBY_VERSION=${{ github.event.client_payload.version || github.event.inputs.version }}" >> $GITHUB_ENV + + - name: Store ABI version + run: echo "ABI_VERSION=$(echo ${{ env.RUBY_VERSION }} | cut -d '.' -f 1-2)" >> $GITHUB_ENV + + - name: Copy draft package `/tmp` to `/pub` directory + run: tool/release.sh ${{ env.RUBY_VERSION }} + env: + AWS_ACCESS_KEY_ID: ${{ secrets.FTP_R_L_O_AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.FTP_R_L_O_AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: us-west-2 + + - name: Purge URLs of release package + run: | + curl -X POST \ + -H "Fastly-Key: ${{ secrets.FASTLY_PURGE_TOKEN }}" \ + https://api.fastly.com/purge/cache.ruby-lang.org/pub/ruby/${{ env.ABI_VERSION }}/ruby-${{ env.RUBY_VERSION }}.tar.gz + curl -X POST \ + -H "Fastly-Key: ${{ secrets.FASTLY_PURGE_TOKEN }}" \ + https://api.fastly.com/purge/cache.ruby-lang.org/pub/ruby/${{ env.ABI_VERSION }}/ruby-${{ env.RUBY_VERSION }}.tar.xz + curl -X POST \ + -H "Fastly-Key: ${{ secrets.FASTLY_PURGE_TOKEN }}" \ + https://api.fastly.com/purge/cache.ruby-lang.org/pub/ruby/${{ env.ABI_VERSION }}/ruby-${{ env.RUBY_VERSION }}.zip + + - name: Create a release on GitHub + run: | + RELEASE_TAG=$(ruby tool/ruby-version.rb tag "${{ env.RUBY_VERSION }}") + echo $RELEASE_TAG + PREVIOUS_RELEASE_TAG=$(ruby tool/ruby-version.rb previous-tag "${{ env.RUBY_VERSION }}") + echo $PREVIOUS_RELEASE_TAG + tool/gen-github-release.rb $PREVIOUS_RELEASE_TAG $RELEASE_TAG --no-dry-run + env: + GITHUB_TOKEN: ${{ secrets.MATZBOT_AUTO_UPDATE_TOKEN }} + + - name: Update versions index run: | curl -L -X POST \ -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/ruby/actions/dispatches \ - -d '{"event_type": "${{ github.ref }}"}' + -d '{"event_type": "update_index"}' + + - name: Build and push Docker images + run: | + curl -L -X POST \ + -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/ruby/docker-images/actions/workflows/build.yml/dispatches \ + -d '{"ref": "master", "inputs": {"ruby_version": "${{ env.RUBY_VERSION }}"}}' + + - name: Build snapcraft packages + run: | + curl -L -X POST \ + -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/ruby/snap.ruby/dispatches \ + -d '{"event_type": "build", "client_payload": {"ruby_version": "${{ env.RUBY_VERSION }}"}}' + + - name: Store the latest LTS version of OpenSSL + run: | + echo "OPENSSL_VERSION=`curl -s https://api.github.com/repos/openssl/openssl/releases | jq -r '.[].tag_name | select(startswith("openssl-3.0"))' | sort -Vr | head -n1 | cut -d'-' -f2`" >> $GITHUB_ENV + + - name: Update ruby-build definition + run: | + curl -L -X POST \ + -H "Authorization: Bearer ${{ secrets.RUBY_BUILD_WORKFLOW_TOKEN }}" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/rbenv/ruby-build/dispatches \ + -d '{"event_type": "update-ruby", "client_payload": {"ruby_version": "${{ env.RUBY_VERSION }}", "openssl_version": "${{ env.OPENSSL_VERSION }}"}}' + + - name: Update all-ruby definition + run: | + curl -L -X POST \ + -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/ruby/all-ruby/dispatches \ + -d '{"event_type": "update"}' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3caeee9a3b8796..5d4474d978f51a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,107 +1,18 @@ -name: Publish Ruby packages - +name: Start release workflow on: - repository_dispatch: - types: - - release - workflow_dispatch: - inputs: - version: - description: 'Version of the Ruby package to release' - required: true - default: '3.3.4' + push: + tags: + - '*' jobs: - release: + notify: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6.0.1 - - - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3.3.4 - - - name: Store Ruby version - run: | - echo "RUBY_VERSION=${{ github.event.client_payload.version || github.event.inputs.version }}" >> $GITHUB_ENV - - - name: Store ABI version - run: echo "ABI_VERSION=$(echo ${{ env.RUBY_VERSION }} | cut -d '.' -f 1-2)" >> $GITHUB_ENV - - - name: Copy draft package `/tmp` to `/pub` directory - run: tool/release.sh ${{ env.RUBY_VERSION }} - env: - AWS_ACCESS_KEY_ID: ${{ secrets.FTP_R_L_O_AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.FTP_R_L_O_AWS_SECRET_ACCESS_KEY }} - AWS_DEFAULT_REGION: us-west-2 - - - name: Purge URLs of release package - run: | - curl -X POST \ - -H "Fastly-Key: ${{ secrets.FASTLY_PURGE_TOKEN }}" \ - https://api.fastly.com/purge/cache.ruby-lang.org/pub/ruby/${{ env.ABI_VERSION }}/ruby-${{ env.RUBY_VERSION }}.tar.gz - curl -X POST \ - -H "Fastly-Key: ${{ secrets.FASTLY_PURGE_TOKEN }}" \ - https://api.fastly.com/purge/cache.ruby-lang.org/pub/ruby/${{ env.ABI_VERSION }}/ruby-${{ env.RUBY_VERSION }}.tar.xz - curl -X POST \ - -H "Fastly-Key: ${{ secrets.FASTLY_PURGE_TOKEN }}" \ - https://api.fastly.com/purge/cache.ruby-lang.org/pub/ruby/${{ env.ABI_VERSION }}/ruby-${{ env.RUBY_VERSION }}.zip - - - name: Create a release on GitHub - run: | - RELEASE_TAG=$(ruby tool/ruby-version.rb tag "${{ env.RUBY_VERSION }}") - echo $RELEASE_TAG - PREVIOUS_RELEASE_TAG=$(ruby tool/ruby-version.rb previous-tag "${{ env.RUBY_VERSION }}") - echo $PREVIOUS_RELEASE_TAG - tool/gen-github-release.rb $PREVIOUS_RELEASE_TAG $RELEASE_TAG --no-dry-run - env: - GITHUB_TOKEN: ${{ secrets.MATZBOT_AUTO_UPDATE_TOKEN }} - - - name: Update versions index + - name: Build release package run: | curl -L -X POST \ -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/ruby/actions/dispatches \ - -d '{"event_type": "update_index"}' - - - name: Build and push Docker images - run: | - curl -L -X POST \ - -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/ruby/docker-images/actions/workflows/build.yml/dispatches \ - -d '{"ref": "master", "inputs": {"ruby_version": "${{ env.RUBY_VERSION }}"}}' - - - name: Build snapcraft packages - run: | - curl -L -X POST \ - -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/ruby/snap.ruby/dispatches \ - -d '{"event_type": "build", "client_payload": {"ruby_version": "${{ env.RUBY_VERSION }}"}}' - - - name: Store the latest LTS version of OpenSSL - run: | - echo "OPENSSL_VERSION=`curl -s https://api.github.com/repos/openssl/openssl/releases | jq -r '.[].tag_name | select(startswith("openssl-3.0"))' | sort -Vr | head -n1 | cut -d'-' -f2`" >> $GITHUB_ENV - - - name: Update ruby-build definition - run: | - curl -L -X POST \ - -H "Authorization: Bearer ${{ secrets.RUBY_BUILD_WORKFLOW_TOKEN }}" \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/rbenv/ruby-build/dispatches \ - -d '{"event_type": "update-ruby", "client_payload": {"ruby_version": "${{ env.RUBY_VERSION }}", "openssl_version": "${{ env.OPENSSL_VERSION }}"}}' - - - name: Update all-ruby definition - run: | - curl -L -X POST \ - -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \ - -H "Accept: application/vnd.github+json" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/ruby/all-ruby/dispatches \ - -d '{"event_type": "update"}' + -d '{"event_type": "${{ github.ref }}"}'