From b5d73a84a4c04cc268a9c7eb716d575c5f402a17 Mon Sep 17 00:00:00 2001 From: Graham Paye Date: Mon, 20 Aug 2018 15:52:23 -0700 Subject: [PATCH] Warn on EOL Ruby Versions (#159) --- CHANGELOG.md | 1 + README.md | 11 ++++++ lib/googleauth.rb | 72 +++++++++++++++++++++++++++++++++++++++ lib/googleauth/version.rb | 2 +- 4 files changed, 85 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6af99c0..e15dcbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.6.5 (2018/08/16) * Fix incorrect http verb when revoking credentials. +* Warn on EOL ruby versions. ## 0.6.4 (2018/08/03) diff --git a/README.md b/README.md index 72d62e2..d2ede6e 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,17 @@ access and refresh tokens. Two storage implementations are included: Custom storage implementations can also be used. See [token_store.rb](lib/googleauth/token_store.rb) for additional details. +## Supported Ruby Versions + +This library is currently supported on Ruby 1.9+. + +However, Ruby 2.4 or later is strongly recommended, as earlier releases have +reached or are nearing end-of-life. After March 31, 2019, Google will provide +official support only for Ruby versions that are considered current and +supported by Ruby Core (that is, Ruby versions that are either in normal +maintenance or in security maintenance). +See https://www.ruby-lang.org/en/downloads/branches/ for further details. + ## License This library is licensed under Apache 2.0. Full license text is diff --git a/lib/googleauth.rb b/lib/googleauth.rb index 7382b07..77e463f 100644 --- a/lib/googleauth.rb +++ b/lib/googleauth.rb @@ -33,3 +33,75 @@ require 'googleauth/credentials' require 'googleauth/default_credentials' require 'googleauth/user_authorizer' require 'googleauth/web_user_authorizer' + +module Google + # Module Auth provides classes that provide Google-specific authorization + # used to access Google APIs. + module Auth + # rubocop:disable MethodDefParentheses + + # On March 31, 2019, set supported version to 2.4 and recommended to 2.6. + # Thereafter, follow the MRI support schedule: supported means non-EOL, + # and recommended means in normal (rather than security) maintenance. + # See https://www.ruby-lang.org/en/downloads/branches/ + ## + # Minimum "supported" Ruby version (non-EOL) + # @private + # + SUPPORTED_VERSION_THRESHOLD = '1.9'.freeze + ## + # Minimum "recommended" Ruby version (normal maintenance) + # @private + # + RECOMMENDED_VERSION_THRESHOLD = '2.4'.freeze + ## + # Check Ruby version and emit a warning if it is old + # @private + # + def self.warn_on_old_ruby_version + return if ENV['GOOGLE_CLOUD_SUPPRESS_RUBY_WARNINGS'] + cur_version = Gem::Version.new RUBY_VERSION + if cur_version < Gem::Version.new(SUPPORTED_VERSION_THRESHOLD) + warn_unsupported_ruby cur_version, RECOMMENDED_VERSION_THRESHOLD + elsif cur_version < Gem::Version.new(RECOMMENDED_VERSION_THRESHOLD) + warn_nonrecommended_ruby cur_version, RECOMMENDED_VERSION_THRESHOLD + end + rescue ArgumentError + warn 'Unable to determine current Ruby version.' + end + + ## + # Print a warning for an EOL version of Ruby + # @private + # + def self.warn_unsupported_ruby cur_version, recommended_version + warn "WARNING: You are running Ruby #{cur_version}, which has reached" \ + ' end-of-life and is no longer supported by Ruby Core.' + warn 'The Google Cloud API clients work best on supported versions of' \ + ' Ruby. It is strongly recommended that you upgrade to Ruby' \ + " #{recommended_version} or later." + warn 'See https://www.ruby-lang.org/en/downloads/branches/ for more' \ + ' info on the Ruby maintenance schedule.' + warn 'To suppress this message, set the' \ + ' GOOGLE_CLOUD_SUPPRESS_RUBY_WARNINGS environment variable.' + end + + ## + # Print a warning for a supported but nearing EOL version of Ruby + # @private + # + def self.warn_nonrecommended_ruby cur_version, recommended_version + warn "WARNING: You are running Ruby #{cur_version}, which is nearing" \ + ' end-of-life.' + warn 'The Google Cloud API clients work best on supported versions of' \ + " Ruby. Consider upgrading to Ruby #{recommended_version} or later." + warn 'See https://www.ruby-lang.org/en/downloads/branches/ for more' \ + ' info on the Ruby maintenance schedule.' + warn 'To suppress this message, set the' \ + ' GOOGLE_CLOUD_SUPPRESS_RUBY_WARNINGS environment variable.' + end + # rubocop:enable MethodDefParentheses + end +end + +Google::Auth.warn_on_old_ruby_version diff --git a/lib/googleauth/version.rb b/lib/googleauth/version.rb index e75ea31..dae8079 100644 --- a/lib/googleauth/version.rb +++ b/lib/googleauth/version.rb @@ -31,6 +31,6 @@ module Google # Module Auth provides classes that provide Google-specific authorization # used to access Google APIs. module Auth - VERSION = '0.6.4'.freeze + VERSION = '0.6.5'.freeze end end