Skip to content

Commit

Permalink
[rubygems/rubygems] Warn on empty or open required_ruby_version speci…
Browse files Browse the repository at this point in the history
…fication attribute.

rubygems/rubygems@e4bb33747a
  • Loading branch information
simi authored and hsbt committed Feb 27, 2024
1 parent 1745dd2 commit bfb2dc8
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 10 deletions.
8 changes: 8 additions & 0 deletions lib/rubygems/specification_policy.rb
Expand Up @@ -103,6 +103,8 @@ def validate_optional(strict)

validate_dependencies

validate_required_ruby_version

validate_extensions

validate_removed_attributes
Expand Down Expand Up @@ -227,6 +229,12 @@ def validate_dependencies # :nodoc:
end
end

def validate_required_ruby_version
if @specification.required_ruby_version.requirements == [Gem::Requirement::DefaultRequirement]
warning "make sure you specify the oldest ruby version constraint (like \">= 3.0\") that you want your gem to support by setting the `required_ruby_version` gemspec attribute"
end
end

##
# Issues a warning for each file to be packaged which is world-readable.
#
Expand Down
21 changes: 11 additions & 10 deletions test/rubygems/specifications/rubyforge-0.0.1.gemspec
@@ -1,14 +1,15 @@
# frozen_string_literal: true

Gem::Specification.new do |s|
s.name = "rubyforge"
s.version = "0.0.1"
s.platform = "ruby"
s.require_paths = ["lib"]
s.summary = "A very bar gem"
s.authors = ["unknown"]
s.license = "MIT"
s.homepage = "http://example.com"
s.files = ["README.md"]
s.rubyforge_project = "abc"
s.name = "rubyforge"
s.version = "0.0.1"
s.platform = "ruby"
s.require_paths = ["lib"]
s.summary = "A very bar gem"
s.authors = ["unknown"]
s.license = "MIT"
s.homepage = "http://example.com"
s.files = ["README.md"]
s.rubyforge_project = "abc"
s.required_ruby_version = ">= 1.9.3"
end
2 changes: 2 additions & 0 deletions test/rubygems/test_gem_commands_build_command.rb
Expand Up @@ -28,6 +28,7 @@ def setup
@gem = util_spec "some_gem" do |s|
s.license = "AGPL-3.0-only"
s.files = ["README.md"]
s.required_ruby_version = "2.3.0"
end

@cmd = Gem::Commands::BuildCommand.new
Expand Down Expand Up @@ -178,6 +179,7 @@ def test_execute_rubyforge_project_warning
def test_execute_strict_with_warnings
bad_gem = util_spec "some_bad_gem" do |s|
s.files = ["README.md"]
s.required_ruby_version = ">= 1.9.3"
end

gemspec_file = File.join(@tempdir, bad_gem.spec_name)
Expand Down
49 changes: 49 additions & 0 deletions test/rubygems/test_gem_specification.rb
Expand Up @@ -90,6 +90,7 @@ def setup
Gem.instance_variable_set(:'@default_source_date_epoch', nil)

@a1 = util_spec "a", "1" do |s|
s.required_ruby_version = ">= 2.3.0"
s.executable = "exec"
s.test_file = "test/suite.rb"
s.requirements << "A working computer"
Expand Down Expand Up @@ -2707,6 +2708,53 @@ def test_validate_dependencies_allowed_duplicates
end
end

def test_validate_no_required_ruby_versions
util_setup_validate

Dir.chdir @tempdir do
use_ui @ui do
@a1.required_ruby_version = nil # reset
@a1.validate
end

assert_equal <<-EXPECTED, @ui.error
#{w}: make sure you specify the oldest ruby version constraint (like \">= 3.0\") that you want your gem to support by setting the `required_ruby_version` gemspec attribute
#{w}: See https://guides.rubygems.org/specification-reference/ for help
EXPECTED
end
end

def test_validate_open_required_ruby_versions
util_setup_validate

Dir.chdir @tempdir do
@a1.required_ruby_version = ">= 0"

use_ui @ui do
@a1.validate
end

assert_equal <<-EXPECTED, @ui.error
#{w}: make sure you specify the oldest ruby version constraint (like \">= 3.0\") that you want your gem to support by setting the `required_ruby_version` gemspec attribute
#{w}: See https://guides.rubygems.org/specification-reference/ for help
EXPECTED
end
end

def test_validate_valid_required_ruby_versions
util_setup_validate

Dir.chdir @tempdir do
@a1.required_ruby_version = ">= 2.3.0"

use_ui @ui do
@a1.validate
end

assert_equal "", @ui.error, "warning"
end
end

def test_validate_prerelease_dependencies_with_prerelease_version
util_setup_validate

Expand Down Expand Up @@ -3683,6 +3731,7 @@ def test_metadata_link_validation_warns_for_duplicates

Dir.chdir @tempdir do
@m2 = quick_gem "m", "2" do |s|
s.required_ruby_version = ">= 2.3.0"
s.files = %w[lib/code.rb]
s.licenses = "BSD-2-Clause"
s.metadata = {
Expand Down

0 comments on commit bfb2dc8

Please sign in to comment.