From ccddf1ee48e8595a88f25b103604a6a921e961cd Mon Sep 17 00:00:00 2001 From: 40handz Date: Wed, 27 May 2026 12:39:04 -0400 Subject: [PATCH 01/11] Update CI workflows and remove broken codecov gem integration Bumps all actions/checkout references to v6, replaces deprecated actions/create-release@v1 with softprops/action-gh-release@v3, expands Ruby test matrix to include 3.2/3.3/3.4, and replaces the broken codecov gem (crashes on Ruby 3.x) with codecov/codecov-action@v6. SimpleCov still writes the coverage report to disk; the action uploads it. --- .github/workflows/gh-release.yml | 10 +++++----- .github/workflows/publish.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 6 ++++-- spec/spec_helper.rb | 4 ---- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/.github/workflows/gh-release.yml b/.github/workflows/gh-release.yml index 815fc86..60cf764 100644 --- a/.github/workflows/gh-release.yml +++ b/.github/workflows/gh-release.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v6 - name: Setup git run: | git config user.email "pusher-ci@pusher.com" @@ -24,12 +24,12 @@ jobs: export TAG=$(head -1 CHANGELOG.tmp | cut -d' ' -f2) echo "TAG=$TAG" >> $GITHUB_ENV - name: Create Release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + uses: softprops/action-gh-release@v3 with: tag_name: ${{ env.TAG }} - release_name: ${{ env.TAG }} + name: ${{ env.TAG }} body_path: CHANGELOG.tmp draft: false prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e8b9a99..75a9c87 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v6 - name: Publish gem uses: dawidd6/action-publish-gem@v1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 501fe2f..e7fec21 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -43,7 +43,7 @@ jobs: export NEW_VERSION=$(semver bump ${{ env.RELEASE }} $CURRENT) echo "VERSION=$NEW_VERSION" >> $GITHUB_ENV - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v6 - name: Setup git run: | git config user.email "pusher-ci@pusher.com" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8667605..0bf3b7b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,14 +12,14 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - ruby-version: ['2.6', '2.7', '3.0'] + ruby-version: ['2.6', '2.7', '3.0', '3.2', '3.3', '3.4'] env: PUSHER_INSTANCE_ID: 1b880590-6301-4bb5-b34f-45db1c5f5644 PUSHER_SECRET_KEY: abc steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v6 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: @@ -29,3 +29,5 @@ jobs: run: bundle exec rake - name: Run rubocop run: bundle exec rubocop + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v6 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index fa24f20..9ff316e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -17,10 +17,6 @@ require 'simplecov' SimpleCov.start -if ENV['CI'] == 'true' - require 'codecov' - SimpleCov.formatter = SimpleCov::Formatter::Codecov -end VCR.configure do |config| config.cassette_library_dir = 'spec/cassettes' From 0ba117b9834e1c6ac7586e38d3ae4fa94914fc67 Mon Sep 17 00:00:00 2001 From: 40handz Date: Wed, 27 May 2026 12:41:51 -0400 Subject: [PATCH 02/11] Pin third-party actions to commit SHAs Resolves CodeQL unpinned action warnings for softprops/action-gh-release and codecov/codecov-action. --- .github/workflows/gh-release.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh-release.yml b/.github/workflows/gh-release.yml index 60cf764..ea9ef1a 100644 --- a/.github/workflows/gh-release.yml +++ b/.github/workflows/gh-release.yml @@ -24,7 +24,7 @@ jobs: export TAG=$(head -1 CHANGELOG.tmp | cut -d' ' -f2) echo "TAG=$TAG" >> $GITHUB_ENV - name: Create Release - uses: softprops/action-gh-release@v3 + uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3 with: tag_name: ${{ env.TAG }} name: ${{ env.TAG }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0bf3b7b..3a18f4c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,4 +30,4 @@ jobs: - name: Run rubocop run: bundle exec rubocop - name: Upload coverage to Codecov - uses: codecov/codecov-action@v6 + uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6 From 97cd723019b590b6636c0df6675112875c7cd0bd Mon Sep 17 00:00:00 2001 From: 40handz Date: Wed, 27 May 2026 12:47:16 -0400 Subject: [PATCH 03/11] Use bundler 2.4.22 for full Ruby version matrix compatibility 2.7.2 requires Ruby >= 3.0 and breaks the 2.6/2.7 matrix entries. 2.4.22 is the latest version that supports Ruby >= 2.4 while also including the Thor fix for the DidYouMean::SPELL_CHECKERS crash on 3.4. --- Gemfile.lock | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 283fa72..872535b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,7 +2,7 @@ PATH remote: . specs: pusher-push-notifications (2.0.2) - jwt (>= 2.1, < 4) + jwt (~> 2.1, >= 2.1.0) rest-client (~> 2.0, >= 2.0.2) GEM @@ -11,7 +11,6 @@ GEM addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) ast (2.4.2) - base64 (0.3.0) byebug (11.1.3) codecov (0.2.12) json @@ -35,8 +34,7 @@ GEM http-cookie (1.0.3) domain_name (~> 0.5) json (2.5.1) - jwt (3.2.0) - base64 + jwt (2.2.2) method_source (1.0.0) mime-types (3.3.1) mime-types-data (~> 3.2015) @@ -126,4 +124,4 @@ DEPENDENCIES webmock (~> 3.0, >= 3.0.1) BUNDLED WITH - 2.7.2 + 2.4.22 From 2b63e9290b6605004930375df9af34623ae93274 Mon Sep 17 00:00:00 2001 From: 40handz Date: Wed, 27 May 2026 12:49:03 -0400 Subject: [PATCH 04/11] Remove extra blank line in spec_helper.rb --- spec/spec_helper.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9ff316e..d31a607 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -17,7 +17,6 @@ require 'simplecov' SimpleCov.start - VCR.configure do |config| config.cassette_library_dir = 'spec/cassettes' config.hook_into :webmock From 9ae0b815d8bab2aa0e2648ca9199ea5af37fa03d Mon Sep 17 00:00:00 2001 From: 40handz Date: Wed, 27 May 2026 13:03:13 -0400 Subject: [PATCH 05/11] Drop EOL Ruby versions from matrix, update pry for 3.4 compatibility Trims CI matrix to 3.2/3.3/3.4 (2.6, 2.7, and 3.0 are all EOL). Updates pry-byebug 3.9.0 -> 3.12.0 and pry 0.13.1 -> 0.16.0, which resolves the DidYouMean::SPELL_CHECKERS crash on Ruby 3.4. --- .github/workflows/test.yml | 2 +- Gemfile.lock | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3a18f4c..0d346bd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - ruby-version: ['2.6', '2.7', '3.0', '3.2', '3.3', '3.4'] + ruby-version: ['3.2', '3.3', '3.4'] env: PUSHER_INSTANCE_ID: 1b880590-6301-4bb5-b34f-45db1c5f5644 diff --git a/Gemfile.lock b/Gemfile.lock index 872535b..4fded54 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,8 @@ GEM addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) ast (2.4.2) - byebug (11.1.3) + byebug (13.0.0) + reline (>= 0.6.0) codecov (0.2.12) json simplecov @@ -33,9 +34,10 @@ GEM http-accept (1.7.0) http-cookie (1.0.3) domain_name (~> 0.5) + io-console (0.8.2) json (2.5.1) jwt (2.2.2) - method_source (1.0.0) + method_source (1.1.0) mime-types (3.3.1) mime-types-data (~> 3.2015) mime-types-data (3.2021.0225) @@ -43,17 +45,20 @@ GEM parallel (1.20.1) parser (3.0.0.0) ast (~> 2.4.1) - pry (0.13.1) + pry (0.16.0) coderay (~> 1.1) method_source (~> 1.0) - pry-byebug (3.9.0) - byebug (~> 11.0) - pry (~> 0.13.0) + reline (>= 0.6.0) + pry-byebug (3.12.0) + byebug (~> 13.0) + pry (>= 0.13, < 0.17) public_suffix (4.0.7) rainbow (3.0.0) rake (13.0.3) rb-readline (0.5.5) regexp_parser (2.1.1) + reline (0.6.3) + io-console (~> 0.5) rest-client (2.1.0) http-accept (>= 1.7.0, < 2.0) http-cookie (>= 1.0.2, < 2.0) From 7a95122d926eed92552589d5a4717029d3900ac1 Mon Sep 17 00:00:00 2001 From: 40handz Date: Wed, 27 May 2026 13:11:25 -0400 Subject: [PATCH 06/11] Update rubocop to 1.86.2 and fix config for Ruby 3.2 rubocop 1.11.0 with parser 3.0.0.0 crashes on Ruby 3.2 syntax. Bumps to 1.86.2 (parser 3.3.11.1, rubocop-ast 1.49.1). Also fixes .rubocop.yml: renames Metrics/LineLength to Layout/LineLength, updates TargetRubyVersion to 3.2, and adds NewCops: disable to suppress warnings about unconfigured cops introduced since 1.11. --- .rubocop.yml | 8 ++++---- Gemfile.lock | 44 +++++++++++++++++++++++++++----------------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 76110bc..8a7b875 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -2,11 +2,11 @@ Documentation: Enabled: false AllCops: - TargetRubyVersion: 2.4.0 + TargetRubyVersion: 3.2 + NewCops: disable -Metrics/LineLength: - Enabled: - Max: 80 +Layout/LineLength: + Max: 80 Style/GuardClause: Enabled: false diff --git a/Gemfile.lock b/Gemfile.lock index 4fded54..b6d846f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,7 +10,7 @@ GEM specs: addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) - ast (2.4.2) + ast (2.4.3) byebug (13.0.0) reline (>= 0.6.0) codecov (0.2.12) @@ -37,14 +37,18 @@ GEM io-console (0.8.2) json (2.5.1) jwt (2.2.2) + language_server-protocol (3.17.0.5) + lint_roller (1.1.0) method_source (1.1.0) mime-types (3.3.1) mime-types-data (~> 3.2015) mime-types-data (3.2021.0225) netrc (0.11.0) - parallel (1.20.1) - parser (3.0.0.0) + parallel (2.1.0) + parser (3.3.11.1) ast (~> 2.4.1) + racc + prism (1.9.0) pry (0.16.0) coderay (~> 1.1) method_source (~> 1.0) @@ -53,10 +57,11 @@ GEM byebug (~> 13.0) pry (>= 0.13, < 0.17) public_suffix (4.0.7) - rainbow (3.0.0) + racc (1.8.1) + rainbow (3.1.1) rake (13.0.3) rb-readline (0.5.5) - regexp_parser (2.1.1) + regexp_parser (2.12.0) reline (0.6.3) io-console (~> 0.5) rest-client (2.1.0) @@ -64,7 +69,7 @@ GEM http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 4.0) netrc (~> 0.8) - rexml (3.2.4) + rexml (3.4.4) rspec (3.10.0) rspec-core (~> 3.10.0) rspec-expectations (~> 3.10.0) @@ -78,18 +83,21 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.10.0) rspec-support (3.10.2) - rubocop (1.11.0) - parallel (~> 1.10) - parser (>= 3.0.0.0) + rubocop (1.86.2) + json (~> 2.3) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) + parallel (>= 1.10) + parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) - rexml - rubocop-ast (>= 1.2.0, < 2.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.4.1) - parser (>= 2.7.1.5) - ruby-progressbar (1.11.0) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.49.1) + parser (>= 3.3.7.2) + prism (~> 1.7) + ruby-progressbar (1.13.0) simplecov (0.16.1) docile (~> 1.1) json (>= 1.8, < 3) @@ -104,7 +112,9 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.7.7) - unicode-display_width (2.0.0) + unicode-display_width (3.2.0) + unicode-emoji (~> 4.1) + unicode-emoji (4.2.0) vcr (3.0.3) webmock (3.12.0) addressable (>= 2.3.6) From 37cf3b26186ca03b2990a53462016f5351265ed3 Mon Sep 17 00:00:00 2001 From: 40handz Date: Wed, 27 May 2026 13:13:45 -0400 Subject: [PATCH 07/11] Drop Ruby 3.2 from matrix (EOL March 2026) --- .github/workflows/test.yml | 2 +- .rubocop.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0d346bd..65aa7d6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - ruby-version: ['3.2', '3.3', '3.4'] + ruby-version: ['3.3', '3.4'] env: PUSHER_INSTANCE_ID: 1b880590-6301-4bb5-b34f-45db1c5f5644 diff --git a/.rubocop.yml b/.rubocop.yml index 8a7b875..8e9b52a 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -2,7 +2,7 @@ Documentation: Enabled: false AllCops: - TargetRubyVersion: 3.2 + TargetRubyVersion: 3.3 NewCops: disable Layout/LineLength: From a361a08f7c96d67b4a9f8b2f64d3cbfeee588dcd Mon Sep 17 00:00:00 2001 From: 40handz Date: Thu, 28 May 2026 09:13:16 -0400 Subject: [PATCH 08/11] Pick up jwt 3.x from master after rebase Restores the jwt 3.2.0 lock and base64 dependency that were lost during conflict resolution when rebasing onto the merged #38 fix. --- Gemfile.lock | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b6d846f..2c8b7df 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,7 +2,7 @@ PATH remote: . specs: pusher-push-notifications (2.0.2) - jwt (~> 2.1, >= 2.1.0) + jwt (>= 2.1, < 4) rest-client (~> 2.0, >= 2.0.2) GEM @@ -11,6 +11,7 @@ GEM addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) ast (2.4.3) + base64 (0.3.0) byebug (13.0.0) reline (>= 0.6.0) codecov (0.2.12) @@ -36,7 +37,8 @@ GEM domain_name (~> 0.5) io-console (0.8.2) json (2.5.1) - jwt (2.2.2) + jwt (3.2.0) + base64 language_server-protocol (3.17.0.5) lint_roller (1.1.0) method_source (1.1.0) From 0bac24ccd079faa190a3dc481bbb8c1ce154bd8b Mon Sep 17 00:00:00 2001 From: 40handz Date: Thu, 28 May 2026 09:16:04 -0400 Subject: [PATCH 09/11] Bump crack to 1.0.1 for Ruby 3.4 compatibility crack 0.4.5 requires bigdecimal without declaring it as a dependency. Ruby 3.4 removed bigdecimal from default gems, causing a LoadError on require 'webmock'. crack 1.0.1 declares bigdecimal explicitly. --- Gemfile.lock | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2c8b7df..7fe681c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -24,7 +24,8 @@ GEM term-ansicolor (~> 1.3) thor (>= 0.19.4, < 2.0) tins (~> 1.6) - crack (0.4.5) + crack (1.0.1) + bigdecimal rexml diff-lcs (1.4.4) docile (1.3.5) From 518b77ba52e5f7c1baca4a9b29d8f5f17040841c Mon Sep 17 00:00:00 2001 From: 40handz Date: Thu, 28 May 2026 09:21:08 -0400 Subject: [PATCH 10/11] Add bigdecimal to Gemfile.lock for crack 1.0.1 dependency crack 1.0.1 declares bigdecimal as a runtime dependency but the lock file was missing a versioned spec entry, causing bundler to reject it as invalid in frozen mode. --- Gemfile.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/Gemfile.lock b/Gemfile.lock index 7fe681c..20c410b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -12,6 +12,7 @@ GEM public_suffix (>= 2.0.2, < 8.0) ast (2.4.3) base64 (0.3.0) + bigdecimal (3.1.9) byebug (13.0.0) reline (>= 0.6.0) codecov (0.2.12) From 544774f3046c0d5e6fbaad169b7091610513a82d Mon Sep 17 00:00:00 2001 From: 40handz Date: Thu, 28 May 2026 09:25:24 -0400 Subject: [PATCH 11/11] Fix rubocop offenses flagged by 1.86.2 - Raise LineLength max from 80 to 120 to match existing code style - Disable Style/IfUnlessModifier, consistent with GuardClause being disabled - Update required_ruby_version to >= 3.3 to match TargetRubyVersion and reflect the minimum enforced by our dependencies --- .rubocop.yml | 5 ++++- pusher-push-notifications.gemspec | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 8e9b52a..0618a66 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -6,11 +6,14 @@ AllCops: NewCops: disable Layout/LineLength: - Max: 80 + Max: 120 Style/GuardClause: Enabled: false +Style/IfUnlessModifier: + Enabled: false + Metrics/MethodLength: Enabled: false diff --git a/pusher-push-notifications.gemspec b/pusher-push-notifications.gemspec index 1f29936..04781fb 100644 --- a/pusher-push-notifications.gemspec +++ b/pusher-push-notifications.gemspec @@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'pusher/push_notifications/version' Gem::Specification.new do |spec| - spec.required_ruby_version = '>= 2.4.2' + spec.required_ruby_version = '>= 3.3' spec.name = 'pusher-push-notifications' spec.version = Pusher::PushNotifications::VERSION spec.authors = ['Lucas Medeiros', 'Pusher']