diff --git a/lib/bootstrap.rb b/lib/bootstrap.rb index d44f7e54..33285247 100644 --- a/lib/bootstrap.rb +++ b/lib/bootstrap.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'bootstrap/version' +require 'bootstrap/vendor' require 'popper_js' module Bootstrap diff --git a/lib/bootstrap/vendor.rb b/lib/bootstrap/vendor.rb new file mode 100644 index 00000000..7ab2120c --- /dev/null +++ b/lib/bootstrap/vendor.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Bootstrap + BOOTSTRAP_SHA = "8fa0d3010112dca5dd6dd501173415856001ba8b" + VENDOR_VERSION = "4.3.1" + VENDOR_INTEGRITY = { + "bootstrap.min.js" => "sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM", + "bootstrap.bundle.min.js" => "sha384-xrRywqdh3PHs8keKZN+8zzc5TX0GRTLCcmivcbNJWm2rs5C8PRhcEn3czEjhAO9o", + "bootstrap.min.css" => "sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T", + } +end diff --git a/lib/bootstrap/version.rb b/lib/bootstrap/version.rb index 34a30b77..ac72c386 100644 --- a/lib/bootstrap/version.rb +++ b/lib/bootstrap/version.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true module Bootstrap - VERSION = '4.3.1' - BOOTSTRAP_SHA = '8fa0d3010112dca5dd6dd501173415856001ba8b' + VERSION = '4.3.1' end diff --git a/tasks/updater.rb b/tasks/updater.rb index 4d68fd9d..f3322918 100644 --- a/tasks/updater.rb +++ b/tasks/updater.rb @@ -6,6 +6,7 @@ require 'forwardable' require 'term/ansicolor' require 'fileutils' +require 'digest' require_relative 'updater/scss' require_relative 'updater/js' @@ -45,7 +46,7 @@ def update_bootstrap update_scss_assets update_javascript_assets - store_version + store_metadata end def save_file(path, content, mode='w') @@ -58,10 +59,22 @@ def upstream_version @upstream_version ||= get_json(file_url 'package.json')['version'] end - # Update version.rb file with BOOTSTRAP_SHA - def store_version - path = 'lib/bootstrap/version.rb' - content = File.read(path).sub(/BOOTSTRAP_SHA\s*=\s*['"][^'"]*['"]/, "BOOTSTRAP_SHA = '#@branch_sha'") - File.open(path, 'w') { |f| f.write(content) } + def store_metadata + integrity_lines = read_files('dist/js', %w(bootstrap.min.js bootstrap.bundle.min.js)). + merge(read_files('dist/css', %w(bootstrap.min.css))). + transform_values { |content| "sha384-#{Digest::SHA384.base64digest(content)}" }. + map { |filename, integrity| " #{filename.inspect} => #{integrity.inspect}," } + + File.write("lib/bootstrap/vendor.rb", <<~RUBY) + # frozen_string_literal: true + + module Bootstrap + BOOTSTRAP_SHA = #{@branch_sha.to_s.inspect} + VENDOR_VERSION = #{upstream_version.to_s.inspect} + VENDOR_INTEGRITY = { + #{integrity_lines.join("\n")} + } + end + RUBY end end