revision 1.1.8 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/revision/cli.rb +32 -12
- data/lib/revision/info.rb +1 -1
- data/lib/revision/releasable.rb +41 -7
- data/lib/revision/string_case.rb +0 -0
- data/lib/revision/version.rb +14 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d2d84d1534e531c997a760126339a1ef9e7971b2aac9d147fc1b59894e18ac48
|
4
|
+
data.tar.gz: 7f2f9c98c10b454cc4e719fec0414e83fcd127d5ede7f111708ab8cf2c23cd6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8351cbc09d81a425683be3d7ca049daf1cf0576310ed396812675ac1adb8b6e525bfdcb168b90e5b259d5e5d0bd90ebe7c8c79e1bd41a16f77083abbfe0a0a6
|
7
|
+
data.tar.gz: 5249761e6c2ec29ab1887688c96bdded06d298140c9919020f80fd7a19928824840888b0ad9ac8002b08bbe52b768736eac9232d765813eb99807d7c437f24fa
|
data/lib/revision/cli.rb
CHANGED
@@ -17,9 +17,9 @@ module Revision
|
|
17
17
|
@releasables = Releasable.from_folder(wd)
|
18
18
|
break
|
19
19
|
rescue Errors::NoDefinition
|
20
|
-
break if wd == File.expand_path('..',wd)
|
20
|
+
break if wd == File.expand_path('..', wd)
|
21
21
|
puts "No releasable found in #{wd}, trying parent..."
|
22
|
-
wd = File.expand_path('..',wd)
|
22
|
+
wd = File.expand_path('..', wd)
|
23
23
|
next
|
24
24
|
end
|
25
25
|
end
|
@@ -27,46 +27,63 @@ module Revision
|
|
27
27
|
@id = options[:id] || @releasables.keys[0]
|
28
28
|
end
|
29
29
|
|
30
|
-
desc
|
30
|
+
desc 'info', 'Display info for all defined releasables'
|
31
31
|
def info
|
32
32
|
puts "Found #{@releasables.values.length} releasables"
|
33
33
|
puts ''
|
34
|
-
puts @releasables.values.map
|
34
|
+
puts @releasables.values.map(&:to_s).join("\n\n")
|
35
35
|
puts ''
|
36
36
|
puts "Default releasable ID: #{@id}"
|
37
37
|
end
|
38
38
|
|
39
|
-
desc
|
39
|
+
desc 'patch', 'Increment patch revision index'
|
40
40
|
def patch
|
41
41
|
do_increment('patch')
|
42
42
|
end
|
43
43
|
|
44
|
-
desc
|
44
|
+
desc 'minor', 'Increment minor revision index'
|
45
45
|
def minor
|
46
46
|
do_increment('minor')
|
47
47
|
end
|
48
48
|
|
49
|
-
desc
|
49
|
+
desc 'major', 'Increment major revision index'
|
50
50
|
def major
|
51
51
|
do_increment('major')
|
52
52
|
end
|
53
53
|
|
54
|
-
desc
|
54
|
+
desc 'build', 'Build releasable(s)'
|
55
|
+
method_option :skip, :aliases => "-s", :type => :numeric, :default => 0, :desc => "Skip the specified number of build steps"
|
56
|
+
def build
|
57
|
+
selected = options[:id].nil? ? @releasables.values : [@releasables[options[:id]]]
|
58
|
+
puts "Building #{selected.length} releasable(s)..."
|
59
|
+
# selected.each(&:build)
|
60
|
+
selected.each { |r| r.build(options[:skip])}
|
61
|
+
end
|
62
|
+
|
63
|
+
desc 'archive', 'Archive releasables'
|
55
64
|
def archive
|
56
65
|
selected = options[:id].nil? ? @releasables.values : [@releasables[options[:id]]]
|
57
66
|
puts "Archiving #{selected.length} releasables..."
|
58
67
|
selected.each do |r|
|
59
|
-
r.build
|
60
68
|
r.archive
|
61
69
|
end
|
62
70
|
end
|
63
71
|
|
64
|
-
desc
|
72
|
+
desc 'package', 'Build and archive releasables'
|
73
|
+
def package
|
74
|
+
selected = options[:id].nil? ? @releasables.values : [@releasables[options[:id]]]
|
75
|
+
puts "Building and archiving #{selected.length} releasables..."
|
76
|
+
selected.each do |r|
|
77
|
+
r.package
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
desc 'changelog', 'Display change log on stdout'
|
65
82
|
def changelog
|
66
83
|
select_one.output_changelog($stdout)
|
67
84
|
end
|
68
85
|
|
69
|
-
desc
|
86
|
+
desc 'tag', 'Commit the current revision to a local git repo and add a version tag'
|
70
87
|
def tag
|
71
88
|
select_one.tag
|
72
89
|
end
|
@@ -83,10 +100,13 @@ module Revision
|
|
83
100
|
increment_method = "#{type}_increment!"
|
84
101
|
say "Incrementing #{r.revision} to #{r.revision.public_send(increment_method)}"
|
85
102
|
options[:dryrun] ? r.revision.write_to_file : r.revision.write!
|
86
|
-
say
|
103
|
+
say ''
|
87
104
|
say "The automatic commit / tag step assumes you're only checking in changes to existing files"
|
88
105
|
say "You can answer 'n' at the prompt and use 'revision tag' to generate a commit with the latest changelog entry and an associated tag after manually adding any new files to the repo"
|
89
106
|
say ""
|
107
|
+
if ask("Rebuild and archive any releasables (Y/n)?").upcase!='N'
|
108
|
+
r.package
|
109
|
+
end
|
90
110
|
if ask("Commit changes to existing files and add a Git tag (y/N)?").upcase=='Y'
|
91
111
|
r.tag
|
92
112
|
if ask("Push changes/tag to origin (Y/n)?").upcase=='N' || !r.push
|
data/lib/revision/info.rb
CHANGED
@@ -71,7 +71,7 @@ class Revision::Info
|
|
71
71
|
text.gsub!(@regex) { |match| "#{$~[:prefix]}#{@major}#{$~[:sep1]}#{@minor}#{$~[:sep2]}#{@patch}#{$~[:postfix]}" }
|
72
72
|
|
73
73
|
#Insert start/end tags if not present
|
74
|
-
text +=
|
74
|
+
text += new_changelog_placeholder unless text.match(CHANGELOG_START)
|
75
75
|
|
76
76
|
text.gsub!(CHANGELOG_START) { |match| [match, format_changelog_entry(entry)].join("\n") }
|
77
77
|
|
data/lib/revision/releasable.rb
CHANGED
@@ -59,7 +59,7 @@ module Revision
|
|
59
59
|
@root = Pathname.new(root).realpath
|
60
60
|
@id = config[:id] || File.basename(@root)
|
61
61
|
@revision = Info.new(File.join(@root,config[:revision][:src]), regex: config[:revision][:regex], comment_prefix: config[:revision][:comment_prefix])
|
62
|
-
@
|
62
|
+
@build_def = config[:build] ? config[:build] : { environment: { variables: {}}, steps: config[:build_steps]}
|
63
63
|
@artefacts = config[:artefacts]
|
64
64
|
@artefacts.each { |a| a[:dest] ||= a[:src] }
|
65
65
|
end
|
@@ -68,21 +68,45 @@ module Revision
|
|
68
68
|
<<~EOT
|
69
69
|
#{@id} v#{@revision} @ #{@root}
|
70
70
|
|
71
|
+
Build environment:
|
72
|
+
#{@build_def[:environment]}
|
73
|
+
|
71
74
|
Build pipeline:
|
72
|
-
- #{@
|
75
|
+
- #{@build_def[:steps].join("\n - ")}
|
73
76
|
|
74
77
|
Build artefacts:
|
75
78
|
#{artefacts.map{ |a| "- #{a[:src]}\n => #{a[:dest]}" }.join("\n")}
|
79
|
+
|
76
80
|
EOT
|
77
81
|
end
|
78
82
|
|
79
|
-
def build
|
80
|
-
|
83
|
+
def build(skip_steps = 0)
|
84
|
+
if @build_def.dig(:environment, :variables)
|
85
|
+
@build_def[:environment][:variables].each do |key, value|
|
86
|
+
if(key.match?('PATH'))
|
87
|
+
if Gem.win_platform?
|
88
|
+
value.gsub!(':', ';')
|
89
|
+
value.gsub!('/', '\\')
|
90
|
+
else
|
91
|
+
value.gsub!(':', ';')
|
92
|
+
value.gsub!('\\', '/')
|
93
|
+
end
|
94
|
+
# value.gsub!('/',Gem.win_platform? ? '\' : '/')
|
95
|
+
# value.gsub!('\',Gem.win_platform? ? '\' : '/')
|
96
|
+
value.gsub!('~', Dir.home)
|
97
|
+
end
|
98
|
+
puts "Setting environment variable '#{key}' to '#{value}'"
|
99
|
+
ENV[key] = value
|
100
|
+
end
|
101
|
+
end
|
102
|
+
steps = @build_def[:steps][skip_steps..-1]
|
103
|
+
puts "Executing #{steps.length} of #{@build_def[:steps].length} build steps..."
|
81
104
|
Dir.chdir(@root) do
|
82
|
-
|
83
|
-
|
105
|
+
steps.each_with_index do |step, index|
|
106
|
+
step_index = index+1+skip_steps
|
107
|
+
puts "... (#{step_index}/#{@build_def[:steps].length}) #{step}"
|
84
108
|
system(step)
|
85
|
-
puts "WARNING: build step #{
|
109
|
+
puts "WARNING: build step #{step_index}: #{step} exit status #{$?.exitstatus}" unless $?.exitstatus.zero?
|
86
110
|
end
|
87
111
|
end
|
88
112
|
end
|
@@ -133,6 +157,11 @@ module Revision
|
|
133
157
|
@artefacts.each_with_index do |a, index|
|
134
158
|
src = a[:src].gsub(REVISION_PLACEHOLDER, @revision.to_s)
|
135
159
|
dest = a[:dest].gsub(REVISION_PLACEHOLDER, @revision.to_s)
|
160
|
+
if Gem.win_platform? && !src.end_with?('.exe') && File.exist?(File.join(@root, src + '.exe'))
|
161
|
+
puts "... packing on windows -- appending '.exe'"
|
162
|
+
src += '.exe'
|
163
|
+
dest += '.exe' unless dest.end_with?('.exe')
|
164
|
+
end
|
136
165
|
puts "... (#{index+1}/#{@artefacts.length}) #{src} => #{dest}"
|
137
166
|
zipfile.add(dest, File.join(@root, src))
|
138
167
|
end
|
@@ -141,6 +170,11 @@ module Revision
|
|
141
170
|
end
|
142
171
|
end
|
143
172
|
|
173
|
+
def package
|
174
|
+
build
|
175
|
+
archive
|
176
|
+
end
|
177
|
+
|
144
178
|
def output_changelog(output_stream)
|
145
179
|
output_stream.puts "Revision history for #{@id} version #{@revision}"
|
146
180
|
output_stream.puts ""
|
data/lib/revision/string_case.rb
CHANGED
File without changes
|
data/lib/revision/version.rb
CHANGED
@@ -1,10 +1,23 @@
|
|
1
1
|
# Defines the revision ID for the revision gem
|
2
2
|
module Revision
|
3
|
-
VERSION = "1.
|
3
|
+
VERSION = "1.2.0"
|
4
4
|
end
|
5
5
|
|
6
6
|
# <BEGIN CHANGELOG>
|
7
7
|
#
|
8
|
+
# Version 1.2.0 (06 Mar 2018)
|
9
|
+
# - Build definition improvements (and new yaml structure)
|
10
|
+
# - Added platform-agnostic environment variable definition (handles '~' replacement and :/; path separators)
|
11
|
+
# - Added platform-agnostic packaging of binaries (i.e. appending .exe for windows when archiving)
|
12
|
+
#
|
13
|
+
# Version 1.1.10 (16 Feb 2018)
|
14
|
+
# - Modified 'archive' command to just archive existing artefact -- i.e. skip build phase
|
15
|
+
# - Added 'package' command that builds AND archives
|
16
|
+
#
|
17
|
+
# Version 1.1.9 (16 Feb 2018)
|
18
|
+
# - Fixed bug when adding first changelog entry to file without existing placeholders
|
19
|
+
# - Added standalone build command
|
20
|
+
#
|
8
21
|
# Version 1.1.8 (15 Dec 2017)
|
9
22
|
# - Added .yardopts to build documentation
|
10
23
|
#
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: revision
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cormac Cannon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -142,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
142
|
version: '0'
|
143
143
|
requirements: []
|
144
144
|
rubyforge_project:
|
145
|
-
rubygems_version: 2.
|
145
|
+
rubygems_version: 2.7.7
|
146
146
|
signing_key:
|
147
147
|
specification_version: 4
|
148
148
|
summary: Language-agnostic revision management tool
|