summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_commands_build_command.rb
diff options
context:
space:
mode:
authorEllen Marie Dash <the@smallest.dog>2019-08-17 04:45:09 +0000
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2019-09-26 17:48:00 +0900
commit508afe2c26737e0be60a72faa9d6740a06b0914c (patch)
treeb912da8888b6d1b476b8fdc67562cbf9b3b9cdef /test/rubygems/test_gem_commands_build_command.rb
parent8436b2717c458a554dd81456a8e6e030e2c3e038 (diff)
[rubygems/rubygems] Set SOURCE_DATE_EPOCH env var if not provided.
Fixes #2290. 1. `Gem::Specification.date` returns SOURCE_DATE_EPOCH when defined, 2. this commit makes RubyGems set it _persistently_ when not provided. This combination means that you can build a gem, check the build time, and use that value to generate a new build -- and then verify they're the same. https://github.com/rubygems/rubygems/commit/d830d53f59
Diffstat (limited to 'test/rubygems/test_gem_commands_build_command.rb')
-rw-r--r--test/rubygems/test_gem_commands_build_command.rb32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb
index 0c511b2f085..50c447e2ebf 100644
--- a/test/rubygems/test_gem_commands_build_command.rb
+++ b/test/rubygems/test_gem_commands_build_command.rb
@@ -457,4 +457,36 @@ class TestGemCommandsBuildCommand < Gem::TestCase
assert_match(/INFO: Your expired cert will be located at: .+\Wgem-public_cert\.pem\.expired\.[0-9]+/, output.shift)
end
+ def test_build_is_reproducible
+ epoch = ENV["SOURCE_DATE_EPOCH"]
+ new_epoch = Time.now.to_i.to_s
+ ENV["SOURCE_DATE_EPOCH"] = new_epoch
+
+ gem_file = File.basename(@gem.cache_file)
+
+ gemspec_file = File.join(@tempdir, @gem.spec_name)
+ File.write(gemspec_file, @gem.to_ruby)
+ @cmd.options[:args] = [gemspec_file]
+
+ util_test_build_gem @gem
+
+ build1_contents = File.read(gem_file)
+
+ # Guarantee the time has changed.
+ sleep 1 if Time.now.to_i == new_epoch
+
+ ENV["SOURCE_DATE_EPOCH"] = new_epoch
+
+ @ui = Gem::MockGemUi.new
+ @cmd.options[:args] = [gemspec_file]
+
+ util_test_build_gem @gem
+
+ build2_contents = File.read(gem_file)
+
+ assert_equal build1_contents, build2_contents
+ ensure
+ ENV["SOURCE_DATE_EPOCH"] = epoch
+ end
+
end