From 74a801fd7ca361ddb7e78185f16a0c1be7cdde7e Mon Sep 17 00:00:00 2001 From: Ian Maia Date: Mon, 30 Mar 2026 23:35:24 +0200 Subject: [PATCH 1/8] Remove activesupport < 8 constraint from gemspec --- CHANGELOG.md | 2 +- Gemfile.lock | 201 +++++++++++----------- fastlane-plugin-wpmreleasetoolkit.gemspec | 1 - spec/spec_helper.rb | 1 + 4 files changed, 106 insertions(+), 99 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 882522750..f81a26240 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ _None_ ### Internal Changes -_None_ +- Remove explicit `activesupport` version constraint (`< 8`) from gemspec to avoid forcing downstream projects to downgrade their ActiveSupport version. [#709] ## 14.3.0 diff --git a/Gemfile.lock b/Gemfile.lock index d1c5e33bc..8c487b397 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,7 +2,6 @@ PATH remote: . specs: fastlane-plugin-wpmreleasetoolkit (14.3.0) - activesupport (>= 6.1.7.1, < 8) buildkit (~> 1.5) chroma (= 0.2.0) diffy (~> 3.3) @@ -23,10 +22,7 @@ PATH GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.7) - base64 - nkf - rexml + CFPropertyList (3.0.8) abbrev (0.1.2) activesupport (7.2.3.1) base64 @@ -40,17 +36,17 @@ GEM minitest (>= 5.1, < 6) securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) + addressable (2.8.9) + public_suffix (>= 2.0.2, < 8.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) artifactory (3.0.17) - ast (2.4.2) + ast (2.4.3) atomos (0.1.3) aws-eventstream (1.4.0) - aws-partitions (1.1196.0) - aws-sdk-core (3.240.0) + aws-partitions (1.1232.0) + aws-sdk-core (3.244.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) @@ -58,11 +54,11 @@ GEM bigdecimal jmespath (~> 1, >= 1.6.1) logger - aws-sdk-kms (1.118.0) - aws-sdk-core (~> 3, >= 3.239.1) + aws-sdk-kms (1.123.0) + aws-sdk-core (~> 3, >= 3.244.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.208.0) - aws-sdk-core (~> 3, >= 3.234.0) + aws-sdk-s3 (1.217.1) + aws-sdk-core (~> 3, >= 3.244.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) aws-sigv4 (1.12.1) @@ -70,10 +66,11 @@ GEM babosa (1.0.4) base64 (0.2.0) benchmark (0.5.0) - bigdecimal (4.0.1) + bigdecimal (4.1.0) buildkit (1.6.1) sawyer (>= 0.6) - buildkite-test_collector (2.9.0) + buildkite-test_collector (2.13.0) + concurrent-ruby chroma (0.2.0) claide (1.1.0) claide-plugins (0.9.2) @@ -128,25 +125,25 @@ GEM connection_pool (3.0.2) cork (0.3.0) colored2 (~> 3.1) - crack (1.0.0) + crack (1.0.1) bigdecimal rexml csv (3.3.5) - danger (9.5.1) + danger (9.5.3) base64 (~> 0.2) claide (~> 1.0) claide-plugins (>= 0.9.2) - colored2 (~> 3.1) + colored2 (>= 3.1, < 5) cork (~> 0.1) faraday (>= 0.9.0, < 3.0) faraday-http-cache (~> 2.0) - git (~> 1.13) - kramdown (~> 2.3) + git (>= 1.13, < 3.0) + kramdown (>= 2.5.1, < 3.0) kramdown-parser-gfm (~> 1.0) octokit (>= 4.0) pstore (~> 0.1) - terminal-table (>= 1, < 4) - danger-dangermattic (1.2.2) + terminal-table (>= 1, < 5) + danger-dangermattic (1.2.4) danger (~> 9.4) danger-plugin-api (~> 1.0) danger-rubocop (~> 0.13) @@ -157,8 +154,8 @@ GEM danger rubocop (~> 1.0) declarative (0.0.20) - diff-lcs (1.6.0) - diffy (3.4.3) + diff-lcs (1.6.2) + diffy (3.4.4) digest-crc (0.7.0) rake (>= 12.0.0, < 14.0.0) docile (1.4.1) @@ -168,8 +165,9 @@ GEM emoji_regex (3.2.3) erubi (1.13.1) escape (0.0.4) - ethon (0.16.0) + ethon (0.18.0) ffi (>= 1.15.0) + logger excon (0.112.0) faraday (1.10.5) faraday-em_http (~> 1.0) @@ -183,13 +181,13 @@ GEM faraday-rack (~> 1.0) faraday-retry (~> 1.0) ruby2_keywords (>= 0.0.4) - faraday-cookie_jar (0.0.7) + faraday-cookie_jar (0.0.8) faraday (>= 0.8.0) - http-cookie (~> 1.0.0) + http-cookie (>= 1.0.0) faraday-em_http (1.0.0) faraday-em_synchrony (1.0.1) faraday-excon (1.1.0) - faraday-http-cache (2.5.1) + faraday-http-cache (2.6.1) faraday (>= 0.8) faraday-httpclient (1.0.1) faraday-multipart (1.2.0) @@ -198,18 +196,19 @@ GEM faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) - faraday-retry (1.0.3) + faraday-retry (1.0.4) faraday_middleware (1.2.1) faraday (~> 1.0) - fastimage (2.4.0) - fastlane (2.231.0) + fastimage (2.4.1) + fastlane (2.232.2) CFPropertyList (>= 2.3, < 4.0.0) abbrev (~> 0.1.2) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) - aws-sdk-s3 (~> 1.0) + aws-sdk-s3 (~> 1.197) babosa (>= 1.0.3, < 2.0.0) base64 (~> 0.2.0) + benchmark (>= 0.1.0) bundler (>= 1.17.3, < 5.0.0) colored (~> 1.2) commander (~> 4.6) @@ -225,7 +224,7 @@ GEM gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) - google-cloud-env (>= 1.6.0, < 2.0.0) + google-cloud-env (>= 1.6.0, <= 2.1.1) google-cloud-storage (~> 1.31) highline (~> 2.0) http-cookie (~> 1.0.5) @@ -238,6 +237,7 @@ GEM naturally (~> 2.2) nkf (~> 0.2.0) optparse (>= 0.1.1, < 1.0.0) + ostruct (>= 0.1.0) plist (>= 3.1.0, < 4.0.0) rubyzip (>= 2.0.0, < 3.0.0) security (= 0.1.5) @@ -252,11 +252,12 @@ GEM xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) fastlane-sirp (1.0.0) sysrandom (~> 1.0) - ffi (1.17.1) - forwardable (1.3.3) + ffi (1.17.4) + fiddle (1.1.8) + forwardable (1.4.0) fourflusher (2.3.1) fuzzy_match (2.0.4) - gettext (3.5.1) + gettext (3.5.2) erubi locale (>= 2.0.5) prime @@ -266,43 +267,45 @@ GEM git (1.19.1) addressable (~> 2.8) rchardet (~> 1.8) - google-apis-androidpublisher_v3 (0.54.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-core (0.11.3) + google-apis-androidpublisher_v3 (0.98.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-core (0.18.0) addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.16.2, < 2.a) - httpclient (>= 2.8.1, < 3.a) + googleauth (~> 1.9) + httpclient (>= 2.8.3, < 3.a) mini_mime (~> 1.0) + mutex_m representable (~> 3.0) retriable (>= 2.0, < 4.a) - rexml - google-apis-iamcredentials_v1 (0.17.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-playcustomapp_v1 (0.13.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-storage_v1 (0.31.0) - google-apis-core (>= 0.11.0, < 2.a) + google-apis-iamcredentials_v1 (0.26.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-playcustomapp_v1 (0.17.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-storage_v1 (0.61.0) + google-apis-core (>= 0.15.0, < 2.a) google-cloud-core (1.8.0) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) - google-cloud-env (1.6.0) - faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.5.0) - google-cloud-storage (1.47.0) + google-cloud-env (2.1.1) + faraday (>= 1.0, < 3.a) + google-cloud-errors (1.6.0) + google-cloud-storage (1.59.0) addressable (~> 2.8) digest-crc (~> 0.4) - google-apis-iamcredentials_v1 (~> 0.1) - google-apis-storage_v1 (~> 0.31.0) + google-apis-core (>= 0.18, < 2) + google-apis-iamcredentials_v1 (~> 0.18) + google-apis-storage_v1 (>= 0.42) google-cloud-core (~> 1.6) - googleauth (>= 0.16.2, < 2.a) + googleauth (~> 1.9) mini_mime (~> 1.0) - googleauth (1.8.1) - faraday (>= 0.17.3, < 3.a) + googleauth (1.11.2) + faraday (>= 1.0, < 3.a) + google-cloud-env (~> 2.1) jwt (>= 1.4, < 3.0) multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) - hashdiff (1.1.2) + hashdiff (1.2.1) highline (2.0.3) http-cookie (1.0.8) domain_name (~> 0.5) @@ -312,16 +315,17 @@ GEM concurrent-ruby (~> 1.0) java-properties (0.3.0) jmespath (1.6.2) - json (2.10.2) - jwt (2.10.1) + json (2.19.3) + jwt (2.10.2) base64 - kramdown (2.5.1) - rexml (>= 3.3.9) + kramdown (2.5.2) + rexml (>= 3.4.4) kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - language_server-protocol (3.17.0.4) + language_server-protocol (3.17.0.5) lint_roller (1.1.0) - locale (2.1.4) + locale (2.1.5) + fiddle logger (1.7.0) method_source (0.9.2) mini_magick (4.13.2) @@ -329,15 +333,15 @@ GEM mini_portile2 (2.8.9) minitest (5.27.0) molinillo (0.8.0) - multi_json (1.15.0) + multi_json (1.19.1) multipart-post (2.4.1) mutex_m (0.3.0) nanaimo (0.4.0) nap (1.1.0) - naturally (2.2.1) + naturally (2.3.0) netrc (0.11.0) nkf (0.2.0) - nokogiri (1.19.1) + nokogiri (1.19.2) mini_portile2 (~> 2.8.2) racc (~> 1.4) observer (0.1.2) @@ -346,58 +350,60 @@ GEM sawyer (~> 0.9) open4 (1.3.4) options (2.3.2) - optparse (0.6.0) + optparse (0.8.1) os (1.1.4) - parallel (1.26.3) - parser (3.3.7.1) + ostruct (0.6.3) + parallel (1.27.0) + parser (3.3.11.1) ast (~> 2.4.1) racc - pkg-config (1.6.0) + pkg-config (1.6.5) plist (3.7.2) - prime (0.1.3) + prime (0.1.4) forwardable singleton + prism (1.9.0) progress_bar (1.3.4) highline (>= 1.6) options (~> 2.3.0) pry (0.12.2) coderay (~> 1.1.0) method_source (~> 0.9.0) - pstore (0.2.0) + pstore (0.2.1) public_suffix (4.0.7) racc (1.8.1) rainbow (3.1.1) - rake (13.2.1) - rake-compiler (1.2.9) + rake (13.3.1) + rake-compiler (1.3.1) rake - rchardet (1.9.0) - regexp_parser (2.10.0) + rchardet (1.10.0) + regexp_parser (2.11.3) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) - retriable (3.1.2) - rexml (3.4.2) + retriable (3.4.1) + rexml (3.4.4) rmagick (5.5.0) observer (~> 0.1) pkg-config (~> 1.4) rouge (3.28.0) - rspec (3.13.0) + rspec (3.13.2) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) rspec-mocks (~> 3.13.0) - rspec-core (3.13.3) + rspec-core (3.13.6) rspec-support (~> 3.13.0) - rspec-expectations (3.13.3) + rspec-expectations (3.13.5) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-mocks (3.13.2) + rspec-mocks (3.13.8) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-support (3.13.2) + rspec-support (3.13.7) rspec_junit_formatter (0.4.1) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (1.74.0) + rubocop (1.86.0) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -405,26 +411,27 @@ GEM parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.38.0, < 2.0) + rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.39.0) - parser (>= 3.3.1.0) + rubocop-ast (1.49.1) + parser (>= 3.3.7.2) + prism (~> 1.7) rubocop-rspec (3.0.0) rubocop (~> 1.40) ruby-macho (2.5.1) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) rubyzip (2.4.1) - sawyer (0.9.2) + sawyer (0.9.3) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) securerandom (0.4.1) security (0.1.5) - signet (0.19.0) + signet (0.21.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) - jwt (>= 1.5, < 3.0) + jwt (>= 1.5, < 4.0) multi_json (~> 1.10) simctl (1.6.10) CFPropertyList @@ -445,13 +452,13 @@ GEM tty-screen (0.8.2) tty-spinner (0.9.3) tty-cursor (~> 0.7) - typhoeus (1.4.1) - ethon (>= 0.9.0) + typhoeus (1.6.0) + ethon (>= 0.18.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) unicode-display_width (2.6.0) - webmock (3.25.1) + webmock (3.26.2) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -467,7 +474,7 @@ GEM rouge (~> 3.28.0) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) - yard (0.9.37) + yard (0.9.38) PLATFORMS ruby @@ -492,4 +499,4 @@ DEPENDENCIES yard BUNDLED WITH - 2.6.3 + 2.6.8 diff --git a/fastlane-plugin-wpmreleasetoolkit.gemspec b/fastlane-plugin-wpmreleasetoolkit.gemspec index 3b68211e4..bcf942065 100644 --- a/fastlane-plugin-wpmreleasetoolkit.gemspec +++ b/fastlane-plugin-wpmreleasetoolkit.gemspec @@ -26,7 +26,6 @@ Gem::Specification.new do |spec| # since this would cause a circular dependency # spec.add_dependency 'your-dependency', '~> 1.0.0' - spec.add_dependency 'activesupport', '>= 6.1.7.1', '< 8' # Required for fastlane to not crash when importing this plugin spec.add_dependency 'buildkit', '~> 1.5' spec.add_dependency 'chroma', '0.2.0' spec.add_dependency 'diffy', '~> 3.3' diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f85026329..8737f62bc 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -23,6 +23,7 @@ module SpecHelper end +require 'active_support/all' # ActiveSupport methods (e.g. Time.use_zone, String#to_time) used by some specs require 'fastlane' # to import the Action super class require 'fastlane/plugin/wpmreleasetoolkit' # import the actual plugin From a9de2f1ab530a12ef6d8cbc8c064501a23b8b7e6 Mon Sep 17 00:00:00 2001 From: Ian Maia Date: Tue, 31 Mar 2026 12:03:28 +0200 Subject: [PATCH 2/8] Fix rubocop violations --- .rubocop.yml | 41 +++++++++++++++++++ .rubocop_todo.yml | 39 ------------------ .../common/create_github_release_action.rb | 2 +- ...xtract_release_notes_for_version_action.rb | 2 +- .../prototype_build_details_comment_action.rb | 2 +- ...t_certificates_to_provisioning_profiles.rb | 4 +- .../add_devices_to_provisioning_profiles.rb | 4 +- .../ios/ios_strings_file_validation_helper.rb | 2 +- spec/openai_ask_action_spec.rb | 6 +-- 9 files changed, 50 insertions(+), 52 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index cd2cb0128..5135e9f4b 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -54,6 +54,18 @@ Style/FetchEnvVar: Style/HashSyntax: EnforcedShorthandSyntax: never +########## Naming Rules + +# 76 methods in this gem use `is_`/`has_`/`have_` prefixes. These are part of the public API +# and renaming them would be a breaking change for consumers. +Naming/PredicatePrefix: + Enabled: false + +# Many flagged methods are part of Fastlane's Action API contract (e.g. `self.run`) +# or are public API methods that cannot be renamed without breaking consumers. +Naming/PredicateMethod: + Enabled: false + ########## Gemspec Rules # This was turned on by default after updating Rubocop to `1.50.2`. We want to disable this for now because @@ -62,6 +74,23 @@ Style/HashSyntax: Gemspec/RequireMFA: Enabled: false +# Dev dependencies are defined in the gemspec, which is the standard pattern for this project. +Gemspec/DevelopmentDependencies: + Exclude: + - 'fastlane-plugin-wpmreleasetoolkit.gemspec' + +########## Style Rules + +# No class-level documentation is required — this is a Fastlane plugin, not a library with public docs. +Style/Documentation: + Enabled: false + +# These files intentionally reopen external modules (Nokogiri, Fastlane). +Style/OneClassPerFile: + Exclude: + - 'lib/fastlane/plugin/wpmreleasetoolkit/helper/android/android_localize_helper.rb' + - 'lib/fastlane/plugin/wpmreleasetoolkit/helper/ci_helper.rb' + ########## Metrics / Max Lengths Rules Layout/LineLength: @@ -107,3 +136,15 @@ RSpec/MultipleMemoizedHelpers: RSpec/MultipleExpectations: Enabled: false + +# The project consistently uses `receive` style across 136 usages — this is the preferred style. +RSpec/MessageSpies: + EnforcedStyle: receive + +# Spec structure uses up to 5 levels of nesting, which is acceptable for this project. +RSpec/NestedGroups: + Max: 5 + +# Spec file paths don't follow the default RuboCop convention due to the plugin's namespace structure. +RSpec/SpecFilePathFormat: + Enabled: false diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index a6989a251..5e079b4e5 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -6,14 +6,6 @@ # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. -# Offense count: 10 -# Configuration parameters: EnforcedStyle, AllowedGems, Include. -# SupportedStyles: Gemfile, gems.rb, gemspec -# Include: **/*.gemspec, **/Gemfile, **/gems.rb -Gemspec/DevelopmentDependencies: - Exclude: - - 'fastlane-plugin-wpmreleasetoolkit.gemspec' - # Offense count: 3 Lint/NonLocalExitFromIterator: Exclude: @@ -33,15 +25,6 @@ Naming/MethodParameterName: - 'lib/fastlane/plugin/wpmreleasetoolkit/actions/android/an_update_metadata_source_action.rb' - 'lib/fastlane/plugin/wpmreleasetoolkit/actions/common/gp_update_metadata_source.rb' -# Offense count: 76 -# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros. -# NamePrefix: is_, has_, have_ -# ForbiddenPrefixes: is_, has_, have_ -# AllowedMethods: is_a? -# MethodDefinitionMacros: define_method, define_singleton_method -Naming/PredicateName: - Enabled: false - # Offense count: 2 # Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns. # SupportedStyles: snake_case, normalcase, non_integer @@ -87,12 +70,6 @@ RSpec/InstanceVariable: - 'spec/git_helper_spec.rb' - 'spec/ios_lint_localizations_spec.rb' -# Offense count: 136 -# Configuration parameters: . -# SupportedStyles: have_received, receive -RSpec/MessageSpies: - EnforcedStyle: receive - # Offense count: 46 # Configuration parameters: EnforcedStyle, IgnoreSharedExamples. # SupportedStyles: always, named_only @@ -103,11 +80,6 @@ RSpec/NamedSubject: - 'spec/configuration_spec.rb' - 'spec/file_reference_spec.rb' -# Offense count: 20 -# Configuration parameters: AllowedGroups. -RSpec/NestedGroups: - Max: 5 - # Offense count: 54 # Configuration parameters: AllowedPatterns. # AllowedPatterns: ^expect_, ^assert_ @@ -131,12 +103,6 @@ RSpec/ReceiveMessages: - 'spec/file_reference_spec.rb' - 'spec/firebase_device_spec.rb' -# Offense count: 63 -# Configuration parameters: Include, CustomTransform, IgnoreMethods, IgnoreMetadata. -# Include: **/*_spec.rb -RSpec/SpecFilePathFormat: - Enabled: false - # Offense count: 7 RSpec/StubbedMock: Exclude: @@ -181,11 +147,6 @@ Security/Open: - 'lib/fastlane/plugin/wpmreleasetoolkit/actions/android/an_validate_lib_strings_action.rb' - 'lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_create_xml_release_notes.rb' -# Offense count: 95 -# Configuration parameters: AllowedConstants. -Style/Documentation: - Enabled: false - # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Style/EmptyLiteral: diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/create_github_release_action.rb b/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/create_github_release_action.rb index 248ca0259..f56856f00 100644 --- a/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/create_github_release_action.rb +++ b/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/create_github_release_action.rb @@ -18,7 +18,7 @@ def self.run(params) prerelease = params[:prerelease] is_draft = params[:is_draft] - UI.message("Creating #{is_draft ? 'draft ' : ''}release #{version} in #{repository}.") + UI.message("Creating #{'draft ' if is_draft}release #{version} in #{repository}.") # Verify assets assets.each do |file_path| UI.user_error!("Can't find file #{file_path}!") unless File.exist?(file_path) diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/extract_release_notes_for_version_action.rb b/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/extract_release_notes_for_version_action.rb index ba2c9d496..9e8fe4bff 100644 --- a/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/extract_release_notes_for_version_action.rb +++ b/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/extract_release_notes_for_version_action.rb @@ -26,7 +26,7 @@ def self.run(params) def self.extract_notes(release_notes_file_path, version) state = :discarding - File.open(release_notes_file_path).each do |line| + File.foreach(release_notes_file_path) do |line| case state when :discarding state = :evaluating if line.match(/^(\d+\.)?(\d+\.)?(\*|\d+)$/) && (line.strip == version) diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/prototype_build_details_comment_action.rb b/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/prototype_build_details_comment_action.rb index 09e4b8ebc..b36043cdd 100644 --- a/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/prototype_build_details_comment_action.rb +++ b/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/prototype_build_details_comment_action.rb @@ -71,7 +71,7 @@ def self.parse_url!(url) # A small model/struct representing values exposed by Firebase App Distribution for a given release # - FirebaseReleaseInfo = Struct.new(:display_version, :build_version, :testing_url, :os, :bundle_id, :release_id, keyword_init: true) do + FirebaseReleaseInfo = Struct.new(:display_version, :build_version, :testing_url, :os, :bundle_id, :release_id) do def self.from_lane_context return nil unless defined?(SharedValues::FIREBASE_APP_DISTRO_RELEASE) diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/add_development_certificates_to_provisioning_profiles.rb b/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/add_development_certificates_to_provisioning_profiles.rb index 1e8143d33..665d27efb 100644 --- a/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/add_development_certificates_to_provisioning_profiles.rb +++ b/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/add_development_certificates_to_provisioning_profiles.rb @@ -15,9 +15,7 @@ def self.run(params) params[:app_identifier].each do |identifier| Spaceship.provisioning_profile.find_by_bundle_id(bundle_id: identifier) - .select do |profile| - profile.is_a? Spaceship::Portal::ProvisioningProfile::Development - end + .grep(Spaceship::Portal::ProvisioningProfile::Development) .tap do |profiles| UI.important "Warning: Unable to find any profiles associated with #{identifier}" if profiles.empty? end diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/add_devices_to_provisioning_profiles.rb b/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/add_devices_to_provisioning_profiles.rb index aaf90e5ea..385d68d1c 100644 --- a/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/add_devices_to_provisioning_profiles.rb +++ b/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/add_devices_to_provisioning_profiles.rb @@ -13,9 +13,7 @@ def self.run(params) params[:app_identifier].each do |identifier| Spaceship.provisioning_profile.find_by_bundle_id(bundle_id: identifier) - .select do |profile| - profile.is_a? Spaceship::Portal::ProvisioningProfile::Development - end + .grep(Spaceship::Portal::ProvisioningProfile::Development) .tap do |profiles| UI.important "Warning: Unable to find any profiles associated with #{identifier}" if profiles.empty? end diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/helper/ios/ios_strings_file_validation_helper.rb b/lib/fastlane/plugin/wpmreleasetoolkit/helper/ios/ios_strings_file_validation_helper.rb index 9857f6c12..890b8138a 100644 --- a/lib/fastlane/plugin/wpmreleasetoolkit/helper/ios/ios_strings_file_validation_helper.rb +++ b/lib/fastlane/plugin/wpmreleasetoolkit/helper/ios/ios_strings_file_validation_helper.rb @@ -9,7 +9,7 @@ class StringsFileValidationHelper # :maybe_block_comment_end, :in_quoted_key, # :after_quoted_key_before_eq, :after_quoted_key_and_equal, # :in_quoted_value, :after_quoted_value - State = Struct.new(:context, :buffer, :in_escaped_ctx, :found_key, keyword_init: true) + State = Struct.new(:context, :buffer, :in_escaped_ctx, :found_key) TRANSITIONS = { root: { diff --git a/spec/openai_ask_action_spec.rb b/spec/openai_ask_action_spec.rb index d12958dc7..802b8fe3d 100644 --- a/spec/openai_ask_action_spec.rb +++ b/spec/openai_ask_action_spec.rb @@ -63,13 +63,13 @@ def run_test(prompt_param:, question_param:, expected_prompt:, expected_response if expected_prompt.nil? || expected_prompt.empty? expect(messages.length).to eq(1) expect(messages[0]['role']).to eq('user') - expect(messages[0]['content']).to eq(['type' => 'text', 'text' => question_param]) + expect(messages[0]['content']).to eq([{ 'type' => 'text', 'text' => question_param }]) else expect(messages.length).to eq(2) expect(messages[0]['role']).to eq('system') - expect(messages[0]['content']).to eq(['type' => 'text', 'text' => expected_prompt]) + expect(messages[0]['content']).to eq([{ 'type' => 'text', 'text' => expected_prompt }]) expect(messages[1]['role']).to eq('user') - expect(messages[1]['content']).to eq(['type' => 'text', 'text' => question_param]) + expect(messages[1]['content']).to eq([{ 'type' => 'text', 'text' => question_param }]) end # Ensure the request has been made and return the action response for it to be validated in calling test From 22b0d177ae442d6c239bcf08a2d4db4707bc508c Mon Sep 17 00:00:00 2001 From: Ian Maia Date: Tue, 31 Mar 2026 12:16:38 +0200 Subject: [PATCH 3/8] Add back explicity activesupport I also had to add gem upper bound to avoid warning about the open-ended >= dependency --- Gemfile.lock | 1 + fastlane-plugin-wpmreleasetoolkit.gemspec | 1 + 2 files changed, 2 insertions(+) diff --git a/Gemfile.lock b/Gemfile.lock index 8c487b397..114262e0a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,6 +2,7 @@ PATH remote: . specs: fastlane-plugin-wpmreleasetoolkit (14.3.0) + activesupport (>= 6.1, < 9) buildkit (~> 1.5) chroma (= 0.2.0) diffy (~> 3.3) diff --git a/fastlane-plugin-wpmreleasetoolkit.gemspec b/fastlane-plugin-wpmreleasetoolkit.gemspec index bcf942065..febef01b1 100644 --- a/fastlane-plugin-wpmreleasetoolkit.gemspec +++ b/fastlane-plugin-wpmreleasetoolkit.gemspec @@ -26,6 +26,7 @@ Gem::Specification.new do |spec| # since this would cause a circular dependency # spec.add_dependency 'your-dependency', '~> 1.0.0' + spec.add_dependency 'activesupport', '>= 6.1', '< 9' spec.add_dependency 'buildkit', '~> 1.5' spec.add_dependency 'chroma', '0.2.0' spec.add_dependency 'diffy', '~> 3.3' From 4a74a891d7c0f746a6ac866d57edb09b6500a029 Mon Sep 17 00:00:00 2001 From: Ian Maia Date: Tue, 31 Mar 2026 12:23:13 +0200 Subject: [PATCH 4/8] Update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f81a26240..195d74c3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,8 @@ _None_ ### Internal Changes -- Remove explicit `activesupport` version constraint (`< 8`) from gemspec to avoid forcing downstream projects to downgrade their ActiveSupport version. [#709] +- Remove explicit `activesupport` version constraint (`< 8`) from gemspec and re-add it as an explicit runtime dependency (`>= 6.1, < 9`) since production code uses it. [#709] +- Update RuboCop configuration: fix obsolete `Naming/PredicateName` cop rename, move permanent style choices from `.rubocop_todo.yml` to `.rubocop.yml`, and fix a `Style/FileOpen` violation. [#709] ## 14.3.0 From 0bc62744527f56e51baacff7ccef33fed028cf36 Mon Sep 17 00:00:00 2001 From: Ian Maia Date: Tue, 31 Mar 2026 13:25:20 +0200 Subject: [PATCH 5/8] Add activesupport as a dev dependency instead --- Gemfile.lock | 2 +- fastlane-plugin-wpmreleasetoolkit.gemspec | 2 +- .../actions/common/promo_screenshots_action.rb | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 114262e0a..8a003a534 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,7 +2,6 @@ PATH remote: . specs: fastlane-plugin-wpmreleasetoolkit (14.3.0) - activesupport (>= 6.1, < 9) buildkit (~> 1.5) chroma (= 0.2.0) diffy (~> 3.3) @@ -481,6 +480,7 @@ PLATFORMS ruby DEPENDENCIES + activesupport (~> 7.2) buildkite-test_collector (~> 2.3) bundler (~> 2.0) cocoapods (~> 1.10) diff --git a/fastlane-plugin-wpmreleasetoolkit.gemspec b/fastlane-plugin-wpmreleasetoolkit.gemspec index febef01b1..62813c87c 100644 --- a/fastlane-plugin-wpmreleasetoolkit.gemspec +++ b/fastlane-plugin-wpmreleasetoolkit.gemspec @@ -26,7 +26,6 @@ Gem::Specification.new do |spec| # since this would cause a circular dependency # spec.add_dependency 'your-dependency', '~> 1.0.0' - spec.add_dependency 'activesupport', '>= 6.1', '< 9' spec.add_dependency 'buildkit', '~> 1.5' spec.add_dependency 'chroma', '0.2.0' spec.add_dependency 'diffy', '~> 3.3' @@ -46,6 +45,7 @@ Gem::Specification.new do |spec| # `google-cloud-storage` is required by fastlane, but we pin it in case it's not in the future spec.add_dependency 'google-cloud-storage', '~> 1.31' + spec.add_development_dependency 'activesupport', '~> 7.2' spec.add_development_dependency 'bundler', '~> 2.0' spec.add_development_dependency 'cocoapods', '~> 1.10' # Use at least Fastlane 2.210.0 to ensure compatibility with the Xcode 14 toolchain diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/promo_screenshots_action.rb b/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/promo_screenshots_action.rb index 131222984..b2cabdca5 100644 --- a/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/promo_screenshots_action.rb +++ b/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/promo_screenshots_action.rb @@ -2,7 +2,7 @@ require 'fileutils' require 'fastlane/action' -require 'active_support/all' +require 'json' require_relative '../../helper/promo_screenshots_helper' module Fastlane @@ -187,7 +187,7 @@ def self.build_entries(config_entries, languages, output_directory, params) config_entries .flat_map do |entry| languages.map do |language| - new_entry = entry.deep_dup + new_entry = Marshal.load(Marshal.dump(entry)) # Not every output file will have a screenshot, so handle cases where no # screenshot file is defined From 52f6726f796e95b5f49ff1c4320b7ef1b1d4a76d Mon Sep 17 00:00:00 2001 From: "Ian G. Maia" Date: Tue, 31 Mar 2026 13:47:38 +0200 Subject: [PATCH 6/8] Add comment to deep copy code Co-authored-by: Olivier Halligon --- .../actions/common/promo_screenshots_action.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/promo_screenshots_action.rb b/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/promo_screenshots_action.rb index b2cabdca5..3d3f4c0b1 100644 --- a/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/promo_screenshots_action.rb +++ b/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/promo_screenshots_action.rb @@ -187,7 +187,7 @@ def self.build_entries(config_entries, languages, output_directory, params) config_entries .flat_map do |entry| languages.map do |language| - new_entry = Marshal.load(Marshal.dump(entry)) + new_entry = Marshal.load(Marshal.dump(entry)) # trick to do a _deep_ copy (`.dup` would only do shallow one) # Not every output file will have a screenshot, so handle cases where no # screenshot file is defined From 864ce97ea891ea486211e28f43fa152fc99c1c59 Mon Sep 17 00:00:00 2001 From: Ian Maia Date: Tue, 31 Mar 2026 14:26:02 +0200 Subject: [PATCH 7/8] Address PR review: update changelog and add comment on activesupport pin --- CHANGELOG.md | 2 +- fastlane-plugin-wpmreleasetoolkit.gemspec | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 195d74c3f..fade2a897 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ _None_ ### Internal Changes -- Remove explicit `activesupport` version constraint (`< 8`) from gemspec and re-add it as an explicit runtime dependency (`>= 6.1, < 9`) since production code uses it. [#709] +- Remove `activesupport` as a runtime dependency — replace the only production usage (`deep_dup`) with `Marshal` deep copy — and move it to a dev-only dependency for specs. [#709] - Update RuboCop configuration: fix obsolete `Naming/PredicateName` cop rename, move permanent style choices from `.rubocop_todo.yml` to `.rubocop.yml`, and fix a `Style/FileOpen` violation. [#709] ## 14.3.0 diff --git a/fastlane-plugin-wpmreleasetoolkit.gemspec b/fastlane-plugin-wpmreleasetoolkit.gemspec index 62813c87c..73a166e4a 100644 --- a/fastlane-plugin-wpmreleasetoolkit.gemspec +++ b/fastlane-plugin-wpmreleasetoolkit.gemspec @@ -45,6 +45,7 @@ Gem::Specification.new do |spec| # `google-cloud-storage` is required by fastlane, but we pin it in case it's not in the future spec.add_dependency 'google-cloud-storage', '~> 1.31' + # Only needed for specs (Time.use_zone, String#to_time, Hash#slice!). Pinned to ~> 7.2 because cocoapods requires < 8. spec.add_development_dependency 'activesupport', '~> 7.2' spec.add_development_dependency 'bundler', '~> 2.0' spec.add_development_dependency 'cocoapods', '~> 1.10' From 2bc392c7ced7cf4397b11015cd846b6b2dcd9332 Mon Sep 17 00:00:00 2001 From: Ian Maia Date: Tue, 31 Mar 2026 15:07:58 +0200 Subject: [PATCH 8/8] Remove cocoapods dev dependency and bump activesupport to 8.1 --- Gemfile.lock | 63 +++-------------------- fastlane-plugin-wpmreleasetoolkit.gemspec | 5 +- 2 files changed, 8 insertions(+), 60 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 8a003a534..d1dfe5306 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -24,23 +24,21 @@ GEM specs: CFPropertyList (3.0.8) abbrev (0.1.2) - activesupport (7.2.3.1) + activesupport (8.1.3) base64 - benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + json logger (>= 1.4.2) - minitest (>= 5.1, < 6) + minitest (>= 5.1) securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) + uri (>= 0.13.1) addressable (2.8.9) public_suffix (>= 2.0.2, < 8.0) - algoliasearch (1.27.5) - httpclient (~> 2.8, >= 2.8.3) - json (>= 1.5.1) artifactory (3.0.17) ast (2.4.3) atomos (0.1.3) @@ -77,43 +75,6 @@ GEM cork nap open4 (~> 1.3) - cocoapods (1.16.2) - addressable (~> 2.8) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.16.2) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 2.1, < 3.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.6.0, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.8.0) - nap (~> 1.0) - ruby-macho (>= 2.3.0, < 3.0) - xcodeproj (>= 1.27.0, < 2.0) - cocoapods-core (1.16.2) - activesupport (>= 5.0, < 8) - addressable (~> 2.8) - algoliasearch (~> 1.0) - concurrent-ruby (~> 1.1) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - netrc (~> 0.11) - public_suffix (~> 4.0) - typhoeus (~> 1.0) - cocoapods-deintegrate (1.0.5) - cocoapods-downloader (2.1) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.1) - cocoapods-trunk (1.6.0) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.2.0) codecov (0.6.0) simplecov (>= 0.15, < 0.22) coderay (1.1.3) @@ -164,10 +125,6 @@ GEM drb (2.2.3) emoji_regex (3.2.3) erubi (1.13.1) - escape (0.0.4) - ethon (0.18.0) - ffi (>= 1.15.0) - logger excon (0.112.0) faraday (1.10.5) faraday-em_http (~> 1.0) @@ -252,11 +209,8 @@ GEM xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) fastlane-sirp (1.0.0) sysrandom (~> 1.0) - ffi (1.17.4) fiddle (1.1.8) forwardable (1.4.0) - fourflusher (2.3.1) - fuzzy_match (2.0.4) gettext (3.5.2) erubi locale (>= 2.0.5) @@ -332,14 +286,12 @@ GEM mini_mime (1.1.5) mini_portile2 (2.8.9) minitest (5.27.0) - molinillo (0.8.0) multi_json (1.19.1) multipart-post (2.4.1) mutex_m (0.3.0) nanaimo (0.4.0) nap (1.1.0) naturally (2.3.0) - netrc (0.11.0) nkf (0.2.0) nokogiri (1.19.2) mini_portile2 (~> 2.8.2) @@ -419,7 +371,6 @@ GEM prism (~> 1.7) rubocop-rspec (3.0.0) rubocop (~> 1.40) - ruby-macho (2.5.1) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) rubyzip (2.4.1) @@ -452,12 +403,11 @@ GEM tty-screen (0.8.2) tty-spinner (0.9.3) tty-cursor (~> 0.7) - typhoeus (1.6.0) - ethon (>= 0.18.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) unicode-display_width (2.6.0) + uri (1.1.1) webmock (3.26.2) addressable (>= 2.8.0) crack (>= 0.3.2) @@ -480,10 +430,9 @@ PLATFORMS ruby DEPENDENCIES - activesupport (~> 7.2) + activesupport (~> 8.1) buildkite-test_collector (~> 2.3) bundler (~> 2.0) - cocoapods (~> 1.10) codecov danger-dangermattic (~> 1.0) faraday (~> 1.10, >= 1.10.5) diff --git a/fastlane-plugin-wpmreleasetoolkit.gemspec b/fastlane-plugin-wpmreleasetoolkit.gemspec index 73a166e4a..d0f1995a4 100644 --- a/fastlane-plugin-wpmreleasetoolkit.gemspec +++ b/fastlane-plugin-wpmreleasetoolkit.gemspec @@ -45,10 +45,9 @@ Gem::Specification.new do |spec| # `google-cloud-storage` is required by fastlane, but we pin it in case it's not in the future spec.add_dependency 'google-cloud-storage', '~> 1.31' - # Only needed for specs (Time.use_zone, String#to_time, Hash#slice!). Pinned to ~> 7.2 because cocoapods requires < 8. - spec.add_development_dependency 'activesupport', '~> 7.2' + # Only needed for specs (Time.use_zone, String#to_time, Hash#slice!) + spec.add_development_dependency 'activesupport', '~> 8.1' spec.add_development_dependency 'bundler', '~> 2.0' - spec.add_development_dependency 'cocoapods', '~> 1.10' # Use at least Fastlane 2.210.0 to ensure compatibility with the Xcode 14 toolchain # See https://github.com/fastlane/fastlane/releases/tag/2.210.0 spec.add_development_dependency 'fastlane', '~> 2.210'