|
- #!/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
-
- # keep .mjs & .js|.min.js in sync
- puts "> building and minifying `mustache.mjs`..."
- `npm run build`
-
- # stage files for commit
- `git add package.json`
- @sources.each {|source| `git add #{source.path}`}
- `git add mustache.min.js`
- `git commit -m ":ship: bump to version #{@target_v}"`
-
- # notify codemonkey
- puts "staged bumped files and created commit"
- 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.mjs', /version: '([^']+)'/),
- ])
- bumper.start
|