File: Rakefile

package info (click to toggle)
ruby-terser 1.0.2%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 184 kB
  • sloc: ruby: 434; javascript: 335; sh: 46; makefile: 12
file content (126 lines) | stat: -rw-r--r-- 3,487 bytes parent folder | download
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
# 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/terser/dist/bundle.min.js", "lib/terser.js")

    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