74 lines
1.4 KiB
Ruby
Executable File
74 lines
1.4 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require 'json'
|
|
|
|
def puts_c(color, str)
|
|
puts "\x1b[#{color}m#{str}\x1b[0m"
|
|
end
|
|
|
|
class Source
|
|
attr_accessor :path, :v_regex
|
|
|
|
def initialize(path, v_regex)
|
|
@path = path
|
|
@v_regex = v_regex
|
|
end
|
|
end
|
|
|
|
class Bumper
|
|
attr_accessor :sources, :bumped, :target_v
|
|
|
|
def initialize(sources)
|
|
@sources = sources
|
|
end
|
|
|
|
def start
|
|
|
|
# get package.json version
|
|
package = JSON.parse File.read 'package.json'
|
|
@target_v = package['version']
|
|
|
|
@bumped = false
|
|
@sources.each {|source| bump_source(source)}
|
|
|
|
# if bumped, do extra stuff and notify the user
|
|
if @bumped
|
|
`git add mustache.js`
|
|
`git commit --amend --no-edit`
|
|
|
|
puts_c 32, "successfully bumped version to #{@target_v}!"
|
|
puts_c 33, "don't forget to `npm publish`!"
|
|
end
|
|
|
|
exit 0
|
|
end
|
|
|
|
def bump_source(source)
|
|
file_buffer = File.read source.path
|
|
if match = file_buffer.match(source.v_regex)
|
|
file_v = match.captures[0]
|
|
if @target_v != file_v
|
|
did_bump
|
|
puts "> bumping version in file '#{source.path}': #{file_v} -> #{@target_v}..."
|
|
file_buffer[source.v_regex, 1] = @target_v
|
|
File.open(source.path, 'w') { |f| f.write file_buffer }
|
|
end
|
|
else
|
|
puts_c 31, "ERROR: Can't find version in '#{source.path}'"
|
|
exit 1
|
|
end
|
|
end
|
|
|
|
def did_bump
|
|
if !@bumped
|
|
puts 'bump detected!'
|
|
end
|
|
@bumped = true
|
|
end
|
|
end
|
|
|
|
bumper = Bumper.new([
|
|
Source.new('mustache.js', /version: '([^']+)'/),
|
|
])
|
|
bumper.start
|