1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
# encoding: utf-8
# frozen_string_literal: true
require 'fileutils'
require 'bundler/gem_tasks'
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec) do |spec|
spec.pattern = FileList['spec/**/*_spec.rb']
end
def version
ENV.fetch('VERSION')
end
HEADER = "## next"
def changelog_tail
changelog = File.read("CHANGELOG.md")
if changelog.start_with?(HEADER)
changelog[HEADER.length + 2..-1]
else
"\n#{changelog}"
end
end
def compare_url(from, to)
"https://github.com/terser/terser/compare/#{from}...#{to}"
end
def previous_version
match = File.read("CHANGELOG.md").scan(/- update Terser to \[(.*)\]\(/)
match ? match[0][0].chomp : nil
end
def git_commit(files, message)
`git add #{files.join(' ')}`
`git commit -S -m "#{message.gsub('"', "\\\"")}"`
end
# rubocop:disable Metrics/BlockLength
namespace :terser do
desc "Update Terser source to version specified in VERSION environment variable"
task :update do
cd 'vendor/terser' do
`git fetch && git checkout v#{version}`
end
end
desc "Rebuild lib/terser*.js"
task :build do
cd 'vendor/source-map/' do
`npm install --no-package-lock --no-save`
end
cd 'vendor/terser/' do
FileUtils.rm_rf("package-lock.json")
`npm install --no-package-lock --no-save`
end
# FileUtils.cp("vendor/source-map/dist/source-map.min.js", "lib/source-map.js")
FileUtils.cp("vendor/source-map/dist/source-map.js", "lib/source-map.js")
FileUtils.cp("vendor/terser/dist/bundle.min.js", "lib/terser.js")
# minified_source = `node ./vendor/terser/bin/terser vendor/terser/dist/bundle.min.js`
# File.write("lib/terser.js", minified_source)
FileUtils.cp("vendor/split/split.js", "lib/split.js")
`patch -p1 -i patches/es5-string-split.patch`
end
desc "Add Terser version bump to changelog"
task :changelog do
url = compare_url("v#{previous_version}", "v#{version}")
item = "- update Terser to [#{version}](#{url})"
changelog = "#{HEADER}\n\n#{item}\n#{changelog_tail}"
File.write("CHANGELOG.md", changelog)
end
desc "Commit changes from Terser version bump"
task :commit do
files = [
'CHANGELOG.md',
'lib/terser.js',
'vendor/terser'
]
git_commit(files, "Update Terser to #{version}")
end
end
# rubocop:enable Metrics/BlockLength
desc "Update Terser to version specified in VERSION environment variable"
task :terser => ['terser:update', 'terser:build', 'terser:changelog', 'terser:commit']
namespace :version do
desc "Write version to CHANGELOG.md"
task :changelog do
content = File.read("CHANGELOG.md")
date = Time.now.strftime("%d %B %Y")
File.write("CHANGELOG.md", content.gsub("## next", "## #{version} (#{date})"))
end
desc "Write version"
task :ruby do
file = "lib/terser/version.rb"
content = File.read("lib/terser/version.rb")
File.write(file, content.gsub(/VERSION = "(.*)"/, "VERSION = \"#{version}\""))
end
desc "Commit changes from Terser version bump"
task :commit do
files = ["CHANGELOG.md", "lib/terser/version.rb"]
git_commit(files, "Bump version to #{version}")
end
desc "Create git tag for version"
task :tag do
`git tag -s -m "Version #{version}" v#{version}`
end
end
desc "Update Terser to version specified in VERSION environment variable"
task :version => ['version:changelog', 'version:ruby', 'version:commit', 'version:tag']
begin
require 'rubocop/rake_task'
RuboCop::RakeTask.new(:rubocop)
task :default => [:rubocop, :spec]
rescue LoadError
task :default => [:spec]
end
|