File: Rakefile

package info (click to toggle)
ruby-terser 1.2.6%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 196 kB
  • sloc: ruby: 472; javascript: 340; sh: 53; makefile: 11
file content (132 lines) | stat: -rw-r--r-- 3,718 bytes parent folder | download | duplicates (2)
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