kameleon-builder 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.bumpversion.cfg +17 -0
- data/{CHANGELOG.rst → CHANGES} +29 -18
- data/completion/_kameleon +198 -0
- data/lib/kameleon.rb +3 -3
- data/lib/kameleon/cli.rb +24 -33
- data/lib/kameleon/environment.rb +3 -3
- data/lib/kameleon/recipe.rb +4 -4
- data/lib/kameleon/utils.rb +3 -3
- data/scripts/bump-dev-version.py +87 -0
- data/scripts/bump-release-version.py +92 -0
- data/version.txt +1 -1
- metadata +33 -23
- checksums.yaml +0 -7
- data/Thorfile +0 -29
- data/completion/_kameleon.zsh +0 -18
data/.bumpversion.cfg
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
[bumpversion]
|
2
|
+
commit = True
|
3
|
+
tag = True
|
4
|
+
current_version = 2.6.0
|
5
|
+
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.(?P<release>[a-z]+))?
|
6
|
+
serialize =
|
7
|
+
{major}.{minor}.{patch}.{release}
|
8
|
+
{major}.{minor}.{patch}
|
9
|
+
|
10
|
+
[bumpversion:file:version.txt]
|
11
|
+
|
12
|
+
[bumpversion:part:release]
|
13
|
+
optional_value = gamma
|
14
|
+
values =
|
15
|
+
dev
|
16
|
+
gamma
|
17
|
+
|
data/{CHANGELOG.rst → CHANGES}
RENAMED
@@ -1,7 +1,18 @@
|
|
1
1
|
Kameleon CHANGELOG
|
2
2
|
==================
|
3
3
|
|
4
|
-
|
4
|
+
Version 2.6.0
|
5
|
+
-------------
|
6
|
+
|
7
|
+
Released on May 13th 2015
|
8
|
+
|
9
|
+
- Added --list-checkpoints to ``kameleon build`` command
|
10
|
+
- Removed ``kameleon checkpoints`` and ``kameleon clean`` commands
|
11
|
+
- Displayed error information in normal and verbose mode
|
12
|
+
- Fixed ruby 1.8.7 compatibility
|
13
|
+
- Added Zsh completion (See completion)
|
14
|
+
|
15
|
+
Version 2.5.0
|
5
16
|
-------------
|
6
17
|
|
7
18
|
Released on Jan 27th 2015
|
@@ -16,7 +27,7 @@ Released on Jan 27th 2015
|
|
16
27
|
- Improved UI with more color and less output messages
|
17
28
|
|
18
29
|
|
19
|
-
|
30
|
+
Version 2.4.0
|
20
31
|
-------------
|
21
32
|
|
22
33
|
Released on Dec 23rd 2014
|
@@ -28,7 +39,7 @@ Released on Dec 23rd 2014
|
|
28
39
|
- Moved repository command to the upper level (``kameleon repository``)
|
29
40
|
|
30
41
|
|
31
|
-
|
42
|
+
Version 2.3.5
|
32
43
|
-------------
|
33
44
|
|
34
45
|
Released on Dec 2nd 2014
|
@@ -36,7 +47,7 @@ Released on Dec 2nd 2014
|
|
36
47
|
- Fixed kameleon 2.3.4 regressions about ``kameleon build``
|
37
48
|
|
38
49
|
|
39
|
-
|
50
|
+
Version 2.3.4
|
40
51
|
-------------
|
41
52
|
|
42
53
|
Released on Nov 26th 2014
|
@@ -44,7 +55,7 @@ Released on Nov 26th 2014
|
|
44
55
|
- Fixed kameleon 2.3.3 regressions about the template import
|
45
56
|
|
46
57
|
|
47
|
-
|
58
|
+
Version 2.3.3
|
48
59
|
-------------
|
49
60
|
|
50
61
|
Released on Nov 26th 2014
|
@@ -52,14 +63,14 @@ Released on Nov 26th 2014
|
|
52
63
|
- Minor improvements
|
53
64
|
- Fixed issue with listing the templates avaiable in a repository
|
54
65
|
|
55
|
-
|
66
|
+
Version 2.3.2
|
56
67
|
-------------
|
57
68
|
|
58
69
|
Released on Nov 20th 2014
|
59
70
|
|
60
71
|
- Search steps directories in the workspace first.
|
61
72
|
|
62
|
-
|
73
|
+
Version 2.3.1
|
63
74
|
-------------
|
64
75
|
|
65
76
|
Released on Nov 5th 2014
|
@@ -67,7 +78,7 @@ Released on Nov 5th 2014
|
|
67
78
|
- ``--from-checkpoint`` option automatically enable the checkpoint process.
|
68
79
|
- ``--from-checkpoint`` could take a special value "last" to refer to the last valid checkpoint.
|
69
80
|
|
70
|
-
|
81
|
+
Version 2.3.0
|
71
82
|
-------------
|
72
83
|
|
73
84
|
Released on Oct 16th 2014
|
@@ -88,7 +99,7 @@ Released on Oct 16th 2014
|
|
88
99
|
- Added ``kameleon template repository`` to manage external git recipes repositories
|
89
100
|
|
90
101
|
|
91
|
-
|
102
|
+
Version 2.2.5
|
92
103
|
-------------
|
93
104
|
|
94
105
|
Released on Sep 19th 2014
|
@@ -107,7 +118,7 @@ Released on Sep 19th 2014
|
|
107
118
|
|
108
119
|
|
109
120
|
|
110
|
-
|
121
|
+
Version 2.2.4
|
111
122
|
-------------
|
112
123
|
|
113
124
|
Released on Sep 2nd 2014
|
@@ -121,13 +132,13 @@ Released on Sep 2nd 2014
|
|
121
132
|
- [proxy cache] Restructured persistent cache and improved caching of pipes
|
122
133
|
- [proxy cache] Added ``ProxyAdrres`` paramter to polipo to take into account all the host network interfaces
|
123
134
|
|
124
|
-
|
135
|
+
Version 2.2.3
|
125
136
|
-------------
|
126
137
|
Released on Aug 19th 2014
|
127
138
|
|
128
139
|
- [template] The extlinux MBR path has changed because jessie is not frozen (Fix #17)
|
129
140
|
|
130
|
-
|
141
|
+
Version 2.2.2
|
131
142
|
-------------
|
132
143
|
|
133
144
|
Released on July 23rd 2014
|
@@ -136,7 +147,7 @@ Released on July 23rd 2014
|
|
136
147
|
- [core] Added ``--templates-path`` CLI option to set different templates directory
|
137
148
|
- [core] Fixed regression about recipe ancestors loading
|
138
149
|
|
139
|
-
|
150
|
+
Version 2.2.1
|
140
151
|
-------------
|
141
152
|
|
142
153
|
Released on July 22nd 2014
|
@@ -144,7 +155,7 @@ Released on July 22nd 2014
|
|
144
155
|
- [core] Switch to default yaml parser (psych) and removed syck from dependencies
|
145
156
|
- [core] Loaded a recipe with all ancestors
|
146
157
|
|
147
|
-
|
158
|
+
Version 2.2.0
|
148
159
|
-------------
|
149
160
|
|
150
161
|
Released on July 20th 2014
|
@@ -214,7 +225,7 @@ Released on July 20th 2014
|
|
214
225
|
- virtualbox/ubuntu-14.04-desktop-amd64
|
215
226
|
|
216
227
|
|
217
|
-
|
228
|
+
Version 2.1.3
|
218
229
|
-------------
|
219
230
|
|
220
231
|
Released on June 16th 2014
|
@@ -226,7 +237,7 @@ Released on June 16th 2014
|
|
226
237
|
- [template] Set a small timeout with netcat
|
227
238
|
- [template] Added new debian 7 appliance with kameleon.
|
228
239
|
|
229
|
-
|
240
|
+
Version 2.1.0
|
230
241
|
-------------
|
231
242
|
|
232
243
|
Released on June 12th 2014
|
@@ -304,8 +315,8 @@ Released on June 12th 2014
|
|
304
315
|
- [docs] More documentation
|
305
316
|
|
306
317
|
|
307
|
-
|
308
|
-
|
318
|
+
Version 2.0.0
|
319
|
+
-------------
|
309
320
|
|
310
321
|
Released on February 17th 2014
|
311
322
|
|
@@ -0,0 +1,198 @@
|
|
1
|
+
#compdef kameleon
|
2
|
+
|
3
|
+
# This is ZSH completion script based on the kameleon 2.6.0.dev API
|
4
|
+
#
|
5
|
+
# Author: Michael Mercier
|
6
|
+
#
|
7
|
+
# This was made with the help of this howto:
|
8
|
+
# https://github.com/zsh-users/zsh-completions/blob/master/zsh-completions-howto.org
|
9
|
+
# and with the _git completion file
|
10
|
+
|
11
|
+
# Helpers
|
12
|
+
template_list="kameleon template list | tail -n +4 | cut -f1 -d'|'"
|
13
|
+
|
14
|
+
# Repository kameleon subcommands
|
15
|
+
_kameleon_repository () {
|
16
|
+
local curcontext=$curcontext state line ret=1
|
17
|
+
declare -A opt_args
|
18
|
+
|
19
|
+
_arguments -C \
|
20
|
+
': :->command' \
|
21
|
+
'*:: :->option-or-argument' && ret=0
|
22
|
+
|
23
|
+
case $state in
|
24
|
+
(command)
|
25
|
+
declare -a commands
|
26
|
+
|
27
|
+
commands=(
|
28
|
+
add:'Adds a new named NAME repository at URL'
|
29
|
+
help:'Describe available subcommands or one specific subcommand'
|
30
|
+
list:'Lists available repositories'
|
31
|
+
update:'Update specified repository')
|
32
|
+
|
33
|
+
_describe -t commands command commands && ret=0
|
34
|
+
;;
|
35
|
+
(option-or-argument)
|
36
|
+
curcontext=${curcontext%:*}-$line[1]:
|
37
|
+
|
38
|
+
case $line[1] in
|
39
|
+
(add)
|
40
|
+
_arguments \
|
41
|
+
'1:Repository local name' \
|
42
|
+
'2:Repository URL or local path:_urls' \
|
43
|
+
'(-b --branch=)'{-b,--branch=}':To checkout BRANCH' && ret=0
|
44
|
+
;;
|
45
|
+
(help)
|
46
|
+
_arguments \
|
47
|
+
'::Repository sub command:(add list update)' && ret=0
|
48
|
+
;;
|
49
|
+
(update)
|
50
|
+
_arguments \
|
51
|
+
":Update the repository named NAME:($(kameleon repository list))" && ret=0
|
52
|
+
;;
|
53
|
+
esac
|
54
|
+
esac
|
55
|
+
return ret
|
56
|
+
}
|
57
|
+
|
58
|
+
# Template kameleon subcommands
|
59
|
+
_kameleon_template () {
|
60
|
+
local curcontext=$curcontext state line ret=1
|
61
|
+
declare -A opt_args
|
62
|
+
|
63
|
+
_arguments -C \
|
64
|
+
': :->command' \
|
65
|
+
'*:: :->option-or-argument' && ret=0
|
66
|
+
|
67
|
+
case $state in
|
68
|
+
(command)
|
69
|
+
declare -a commands
|
70
|
+
|
71
|
+
commands=(
|
72
|
+
help:'Describe available subcommands or one specific subcommand'
|
73
|
+
import:'Imports the given template'
|
74
|
+
info:'Display detailed information about a template'
|
75
|
+
list:'Lists available templates'
|
76
|
+
repository:'alias for \"kameleon repository\"')
|
77
|
+
|
78
|
+
_describe -t commands command commands && ret=0
|
79
|
+
;;
|
80
|
+
(option-or-argument)
|
81
|
+
curcontext=${curcontext%:*}-$line[1]:
|
82
|
+
|
83
|
+
case $line[1] in
|
84
|
+
(help)
|
85
|
+
_arguments \
|
86
|
+
'::Template sub command:(import info list repository)' && ret=0
|
87
|
+
;;
|
88
|
+
(import)
|
89
|
+
_arguments \
|
90
|
+
":template name:($(kameleon template list | tail -n +4 | cut -f1 -d'|'))" && ret=0
|
91
|
+
;;
|
92
|
+
(info)
|
93
|
+
_arguments \
|
94
|
+
":template name:($(kameleon template list | tail -n +4 | cut -f1 -d'|'))" && ret=0
|
95
|
+
'*'{-g,--global}':Custom global variable define as key\:value' && ret=0
|
96
|
+
;;
|
97
|
+
(repository)
|
98
|
+
_kameleon_repository && ret=0
|
99
|
+
;;
|
100
|
+
esac
|
101
|
+
esac
|
102
|
+
return ret
|
103
|
+
}
|
104
|
+
# TODO:
|
105
|
+
# - add checkpoint list completion
|
106
|
+
# - add key completion for global
|
107
|
+
# - factorize some options
|
108
|
+
# - allow common options everywere (not just befor command)
|
109
|
+
|
110
|
+
_kameleon () {
|
111
|
+
local curcontext=$curcontext state line ret=1
|
112
|
+
declare -A opt_args
|
113
|
+
|
114
|
+
_arguments -C \
|
115
|
+
'(--no-color)--color[Enables colorization in output (Default)]' \
|
116
|
+
'(--color)--no-color[Disables colorization in output]' \
|
117
|
+
'(--no-verbose --debug)--verbose[Enables verbose output for kameleon Users]' \
|
118
|
+
'(--verbose)--no-verbose[Disables verbose output for kameleon Users (Default)]' \
|
119
|
+
'(--no-debug)--debug[Enables debug output for kameleon Developpers]' \
|
120
|
+
'(--debug --verbose)--no-debug[Disables debug output for kameleon Users and Developpers(Default)]' \
|
121
|
+
'(--no-script)--script[Never prompts for User intervention]' \
|
122
|
+
'(--script)--no-script[Prompts for user intervention if necessary (Default)]' \
|
123
|
+
': :->command' \
|
124
|
+
'*:: :->option-or-argument' && ret=0
|
125
|
+
|
126
|
+
case $state in
|
127
|
+
(command)
|
128
|
+
declare -a commands
|
129
|
+
|
130
|
+
commands=(
|
131
|
+
build:'Builds the appliance from the given recipe'
|
132
|
+
help:'Describe available commands or one specific command'
|
133
|
+
info:'Display detailed information about a recipe'
|
134
|
+
list:'Lists all defined recipes in the current directory'
|
135
|
+
new:'Creates a new recipe'
|
136
|
+
repository:'Manages set of remote git repositories'
|
137
|
+
template:'Lists and imports templates'
|
138
|
+
version:'Prints the Kameleon version information')
|
139
|
+
|
140
|
+
_describe -t commands command commands && ret=0
|
141
|
+
;;
|
142
|
+
(option-or-argument)
|
143
|
+
curcontext=${curcontext%:*}-$line[1]:
|
144
|
+
|
145
|
+
case $line[1] in
|
146
|
+
(build)
|
147
|
+
_arguments -C \
|
148
|
+
'(--from-cache)1:Kameleon recipe path:_files' \
|
149
|
+
'(1)--from-cache=:Persistent cache tar file to build the image:_files' \
|
150
|
+
'(-b --build-path)'{-b,--build-path=}':Build directory path:_directories' \
|
151
|
+
'--clean[Runs the command `kameleon clean` first]' \
|
152
|
+
'--from-checkpoint=:Specify checkpoint to build the image' \
|
153
|
+
'--enable-checkpoint[Enables checkpoint \[experimental\]]' \
|
154
|
+
{--checkpoints,--list-checkpoints}'[Lists all availables checkpoints]' \
|
155
|
+
'--enable-cache[Generates a persistent cache for the appliance]' \
|
156
|
+
'--cache-path=:Cache directory path:_directories' \
|
157
|
+
'*'{-g,--global}':Custom global variable define as key\:value' && ret=0
|
158
|
+
;;
|
159
|
+
(help)
|
160
|
+
_arguments \
|
161
|
+
":Kameleon commands:($(kameleon commands))" && ret=0
|
162
|
+
;;
|
163
|
+
(info)
|
164
|
+
_arguments \
|
165
|
+
'*'{-g,--global}':Custom global variable define as key\:value' \
|
166
|
+
'(--from-cache)1:Kameleon recipe path:_files' \
|
167
|
+
'(1)--from-cache=:Persistent cache tar file to get info from:_files' && ret=0
|
168
|
+
;;
|
169
|
+
(list)
|
170
|
+
_nothing
|
171
|
+
;;
|
172
|
+
(new)
|
173
|
+
_arguments \
|
174
|
+
'1:Kameleon recipe path:_files' \
|
175
|
+
'2:Template name:->template_name' && ret=0
|
176
|
+
case "$state" in
|
177
|
+
template_name)
|
178
|
+
_alternative ":templates name:($(kameleon template list | tail -n +4 | cut -f1 -d'|'))" && ret=0
|
179
|
+
;;
|
180
|
+
esac
|
181
|
+
;;
|
182
|
+
(repository)
|
183
|
+
_kameleon_repository && ret=0
|
184
|
+
;;
|
185
|
+
(template)
|
186
|
+
_kameleon_template && ret=0
|
187
|
+
;;
|
188
|
+
(*)
|
189
|
+
_nothing
|
190
|
+
;;
|
191
|
+
esac
|
192
|
+
;;
|
193
|
+
esac
|
194
|
+
|
195
|
+
return ret
|
196
|
+
}
|
197
|
+
|
198
|
+
_kameleon "$@"
|
data/lib/kameleon.rb
CHANGED
@@ -35,12 +35,12 @@ module Kameleon
|
|
35
35
|
|
36
36
|
def userdir
|
37
37
|
@userdir ||= Pathname.new(File.join('~', '.kameleon.d'))
|
38
|
-
Dir.mkdir(File.expand_path(@userdir.
|
38
|
+
Dir.mkdir(File.expand_path(@userdir.to_s)) unless File.exists?(File.expand_path(@userdir.to_s))
|
39
39
|
@userdir
|
40
40
|
end
|
41
41
|
|
42
42
|
def userconf_path
|
43
|
-
@userconf_path ||= Pathname.new(File.join(File.expand_path(userdir.
|
43
|
+
@userconf_path ||= Pathname.new(File.join(File.expand_path(userdir.to_s), 'config'))
|
44
44
|
end
|
45
45
|
|
46
46
|
def init_userconf()
|
@@ -73,7 +73,7 @@ module Kameleon
|
|
73
73
|
:debug => userconf.fetch("debug", false),
|
74
74
|
:script => userconf.fetch("script", false),
|
75
75
|
:repositories_path => userconf.fetch("repositories_path",
|
76
|
-
File.join(userdir.
|
76
|
+
File.join(userdir.to_s, 'repos')),
|
77
77
|
}
|
78
78
|
end
|
79
79
|
|
data/lib/kameleon/cli.rb
CHANGED
@@ -141,7 +141,7 @@ module Kameleon
|
|
141
141
|
|
142
142
|
template_path = File.join(Kameleon.env.repositories_path, template_name)
|
143
143
|
|
144
|
-
recipe_path = Pathname.new(Kameleon.env.workspace).join(recipe_path).
|
144
|
+
recipe_path = Pathname.new(Kameleon.env.workspace).join(recipe_path).to_s
|
145
145
|
|
146
146
|
begin
|
147
147
|
tpl = Kameleon::RecipeTemplate.new(template_path)
|
@@ -208,6 +208,9 @@ module Kameleon
|
|
208
208
|
method_option :enable_checkpoint, :type => :boolean ,
|
209
209
|
:default => false,
|
210
210
|
:desc => "Enables checkpoint [experimental]"
|
211
|
+
method_option :list_checkpoints, :type => :boolean , :aliases => "--checkpoints",
|
212
|
+
:default => false,
|
213
|
+
:desc => "Lists all availables checkpoints"
|
211
214
|
method_option :enable_cache, :type => :boolean,
|
212
215
|
:default => false,
|
213
216
|
:desc => "Generates a persistent cache for the appliance."
|
@@ -236,39 +239,27 @@ module Kameleon
|
|
236
239
|
end
|
237
240
|
raise BuildError, "A recipe file or a persistent cache archive " \
|
238
241
|
"is required to run this command." if recipe_path.nil?
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
desc "clean [RECIPE_PATH]", "Cleans all contexts and removing the checkpoints"
|
261
|
-
method_option :build_path, :type => :string ,
|
262
|
-
:default => nil, :aliases => "-b",
|
263
|
-
:desc => "Sets the build directory path"
|
264
|
-
def clean(recipe_path)
|
265
|
-
opts = Hash.new.merge options
|
266
|
-
opts[:lazyload] = false
|
267
|
-
opts[:fail_silently] = true
|
268
|
-
engine = Kameleon::Engine.new(Recipe.new(recipe_path), opts)
|
269
|
-
engine.clean(:with_checkpoint => true)
|
242
|
+
if options[:clean]
|
243
|
+
opts = Hash.new.merge options
|
244
|
+
opts[:lazyload] = false
|
245
|
+
opts[:fail_silently] = true
|
246
|
+
engine = Kameleon::Engine.new(Recipe.new(recipe_path), opts)
|
247
|
+
engine.clean(:with_checkpoint => true)
|
248
|
+
elsif options[:list_checkpoints]
|
249
|
+
Kameleon.ui.level = "error"
|
250
|
+
engine = Kameleon::Engine.new(Recipe.new(recipe_path), options)
|
251
|
+
engine.pretty_checkpoints_list
|
252
|
+
else
|
253
|
+
engine = Kameleon::Engine.new(Recipe.new(recipe_path), options)
|
254
|
+
Kameleon.ui.info("Starting build recipe '#{recipe_path}'")
|
255
|
+
start_time = Time.now.to_i
|
256
|
+
engine.build
|
257
|
+
total_time = Time.now.to_i - start_time
|
258
|
+
Kameleon.ui.info("")
|
259
|
+
Kameleon.ui.info("Successfully built '#{recipe_path}'")
|
260
|
+
Kameleon.ui.info("Total duration : #{total_time} secs")
|
261
|
+
end
|
270
262
|
end
|
271
|
-
map %w(clear) => :clean
|
272
263
|
|
273
264
|
desc "commands", "Lists all available commands", :hide => true
|
274
265
|
def commands
|
data/lib/kameleon/environment.rb
CHANGED
@@ -34,9 +34,9 @@ module Kameleon
|
|
34
34
|
Kameleon.ui.debug(" @#{key} : #{options[key]}")
|
35
35
|
end
|
36
36
|
@debug = true if ENV['KAMELEON_DEBUG']
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
unless (File.exist?(@repositories_path.to_s) || File.symlink?(@repositories_path.to_s))
|
38
|
+
Dir.mkdir(@repositories_path.to_s)
|
39
|
+
end
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
data/lib/kameleon/recipe.rb
CHANGED
@@ -47,8 +47,8 @@ module Kameleon
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def get_steps_dirs(recipe_path)
|
50
|
-
relative_path = recipe_path.
|
51
|
-
if relative_path.eql? recipe_path.
|
50
|
+
relative_path = recipe_path.to_s.gsub(Kameleon.env.root_dir.to_s + '/', '')
|
51
|
+
if relative_path.eql? recipe_path.to_s
|
52
52
|
subdirs = [recipe_path.dirname]
|
53
53
|
else
|
54
54
|
last_dir = Kameleon.env.root_dir
|
@@ -61,8 +61,8 @@ module Kameleon
|
|
61
61
|
end
|
62
62
|
steps_dirs = []
|
63
63
|
subdirs.reverse_each do |p|
|
64
|
-
steps_dirs.push(File.expand_path(File.join(p.
|
65
|
-
steps_dirs.push(File.expand_path(File.join(p.
|
64
|
+
steps_dirs.push(File.expand_path(File.join(p.to_s, 'steps')))
|
65
|
+
steps_dirs.push(File.expand_path(File.join(p.to_s, '.steps')))
|
66
66
|
end
|
67
67
|
steps_dirs.select! { |x| File.exists? x }
|
68
68
|
end
|
data/lib/kameleon/utils.rb
CHANGED
@@ -77,10 +77,10 @@ module Kameleon
|
|
77
77
|
recipes_hash = []
|
78
78
|
recipes_files = get_recipes(repository_path)
|
79
79
|
recipes_files.each do |f|
|
80
|
-
path = f.
|
80
|
+
path = f.to_s
|
81
81
|
begin
|
82
82
|
recipe = RecipeTemplate.new(path)
|
83
|
-
name = path.gsub(repository_path.
|
83
|
+
name = path.gsub(repository_path.to_s + '/', '').chomp('.yaml')
|
84
84
|
recipes_hash.push({
|
85
85
|
"name" => name,
|
86
86
|
"description" => recipe.metainfo['description'],
|
@@ -104,7 +104,7 @@ module Kameleon
|
|
104
104
|
path.children.collect do |child|
|
105
105
|
if child.file?
|
106
106
|
if child.extname == ".yaml"
|
107
|
-
unless child.
|
107
|
+
unless child.to_s.include? "/steps/" or child.to_s.include? "/.steps/"
|
108
108
|
child
|
109
109
|
end
|
110
110
|
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# coding: utf-8
|
3
|
+
from __future__ import unicode_literals, print_function
|
4
|
+
import argparse
|
5
|
+
import re
|
6
|
+
import os
|
7
|
+
import subprocess
|
8
|
+
|
9
|
+
|
10
|
+
def generate_changelog_title(version):
|
11
|
+
version_title = "Version %s" % version
|
12
|
+
return version_title + "\n" + "-" * len(version_title)
|
13
|
+
|
14
|
+
|
15
|
+
def bump_dev_version(part='patch'):
|
16
|
+
""" Increment the version number to the next development version
|
17
|
+
|
18
|
+
* (Configurably) bumps the development dev version number
|
19
|
+
* Preloads the correct changelog template for editing
|
20
|
+
|
21
|
+
You can run it like::
|
22
|
+
|
23
|
+
$ python scripts/next_release.py
|
24
|
+
|
25
|
+
which, by default, will create a 'patch' dev version (0.0.1 => 0.0.2-dev).
|
26
|
+
|
27
|
+
You can also specify a patch level (patch, minor, major) to change to::
|
28
|
+
|
29
|
+
$ python scripts/make_release.py major
|
30
|
+
|
31
|
+
which will create a 'major' release (0.0.2 => 1.0.0-dev).
|
32
|
+
|
33
|
+
"""
|
34
|
+
|
35
|
+
# Dry run 'bumpversion' to find out what the new version number
|
36
|
+
# would be. Useful side effect: exits if the working directory is not
|
37
|
+
# clean.
|
38
|
+
|
39
|
+
bumpver = subprocess.check_output(
|
40
|
+
['bumpversion', part, '--dry-run', '--verbose'],
|
41
|
+
stderr=subprocess.STDOUT)
|
42
|
+
m = re.search(r'Parsing version \'(\d+\.\d+\.\d+)\'', bumpver)
|
43
|
+
current_version = m.groups(0)[0]
|
44
|
+
m = re.search(r'New version will be \'(\d+\.\d+\.\d+)\.dev\'', bumpver)
|
45
|
+
next_version = m.groups(0)[0] + ".dev"
|
46
|
+
|
47
|
+
current_version_title = generate_changelog_title(current_version)
|
48
|
+
next_version_title = generate_changelog_title(next_version)
|
49
|
+
|
50
|
+
next_release_template = "%s\n\n**unreleased**\n\n" % next_version_title
|
51
|
+
|
52
|
+
changes = ""
|
53
|
+
with open('CHANGES') as fd:
|
54
|
+
changes += fd.read()
|
55
|
+
|
56
|
+
changes = changes.replace(current_version_title,
|
57
|
+
next_release_template + current_version_title)
|
58
|
+
|
59
|
+
with open('CHANGES', "w") as fd:
|
60
|
+
fd.write(changes)
|
61
|
+
|
62
|
+
# Tries to load the EDITOR environment variable, else falls back to vim
|
63
|
+
editor = os.environ.get('EDITOR', 'vim')
|
64
|
+
os.system("{} CHANGES".format(editor))
|
65
|
+
|
66
|
+
subprocess.check_output(['python', 'setup.py', 'sdist'])
|
67
|
+
|
68
|
+
# Have to add it so it will be part of the commit
|
69
|
+
subprocess.check_output(['git', 'add', 'CHANGES'])
|
70
|
+
subprocess.check_output(
|
71
|
+
['git', 'commit', '-m', 'Changelog for {}'.format(next_version)])
|
72
|
+
|
73
|
+
# Really run bumpver to set the new release and tag
|
74
|
+
bv_args = ['bumpversion', part, '--no-tag', '--new-version', next_version]
|
75
|
+
|
76
|
+
subprocess.check_output(bv_args)
|
77
|
+
|
78
|
+
|
79
|
+
if __name__ == '__main__':
|
80
|
+
parser = argparse.ArgumentParser(
|
81
|
+
description=bump_dev_version.__doc__,
|
82
|
+
formatter_class=argparse.RawTextHelpFormatter
|
83
|
+
)
|
84
|
+
parser.add_argument("part", help="Part of the version to be bumped",
|
85
|
+
choices=["patch", "minor", "major"])
|
86
|
+
args = parser.parse_args()
|
87
|
+
bump_dev_version(args.part)
|
@@ -0,0 +1,92 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# coding: utf-8
|
3
|
+
from __future__ import unicode_literals, print_function
|
4
|
+
import os
|
5
|
+
import re
|
6
|
+
|
7
|
+
from io import open
|
8
|
+
|
9
|
+
import argparse
|
10
|
+
import datetime
|
11
|
+
import subprocess
|
12
|
+
|
13
|
+
|
14
|
+
def generate_changelog_title(version):
|
15
|
+
version_title = "Version %s" % version
|
16
|
+
return version_title + "\n" + "-" * len(version_title)
|
17
|
+
|
18
|
+
|
19
|
+
def get_release_date():
|
20
|
+
dt = datetime.date.today()
|
21
|
+
if 4 <= dt.day <= 20 or 24 <= dt.day <= 30:
|
22
|
+
suffix = "th"
|
23
|
+
else:
|
24
|
+
suffix = ["st", "nd", "rd"][dt.day % 10 - 1]
|
25
|
+
return dt.strftime("%%B %%d%s %%Y" % suffix)
|
26
|
+
|
27
|
+
|
28
|
+
def bumpversion():
|
29
|
+
""" Automated software release workflow
|
30
|
+
|
31
|
+
* (Configurably) bumps the release version number
|
32
|
+
* Preloads the correct changelog template for editing
|
33
|
+
* Builds a source distribution
|
34
|
+
* Sets release date
|
35
|
+
* Tags the release
|
36
|
+
|
37
|
+
You can run it like::
|
38
|
+
|
39
|
+
$ python scripts/bumpversion.py
|
40
|
+
|
41
|
+
"""
|
42
|
+
|
43
|
+
# Dry run 'bumpversion' to find out what the new version number
|
44
|
+
# would be. Useful side effect: exits if the working directory is not
|
45
|
+
# clean.
|
46
|
+
|
47
|
+
bumpver = subprocess.check_output(
|
48
|
+
['bumpversion', 'release', '--dry-run', '--verbose'],
|
49
|
+
stderr=subprocess.STDOUT)
|
50
|
+
m = re.search(r'Parsing version \'(\d+\.\d+\.\d+)\.dev\'', bumpver)
|
51
|
+
current_version = m.groups(0)[0] + ".dev"
|
52
|
+
m = re.search(r'New version will be \'(\d+\.\d+\.\d+)\'', bumpver)
|
53
|
+
release_version = m.groups(0)[0]
|
54
|
+
|
55
|
+
date = get_release_date()
|
56
|
+
|
57
|
+
current_version_title = generate_changelog_title(current_version)
|
58
|
+
release_version_title = generate_changelog_title(release_version)
|
59
|
+
changes = ""
|
60
|
+
with open('CHANGES') as fd:
|
61
|
+
changes += fd.read()
|
62
|
+
|
63
|
+
changes = changes.replace(current_version_title, release_version_title)\
|
64
|
+
.replace("**unreleased**", "Released on %s" % date)
|
65
|
+
|
66
|
+
with open('CHANGES', "w") as fd:
|
67
|
+
fd.write(changes)
|
68
|
+
|
69
|
+
# Tries to load the EDITOR environment variable, else falls back to vim
|
70
|
+
editor = os.environ.get('EDITOR', 'vim')
|
71
|
+
os.system("{} CHANGES".format(editor))
|
72
|
+
|
73
|
+
# Have to add it so it will be part of the commit
|
74
|
+
subprocess.check_output(['git', 'add', 'CHANGES'])
|
75
|
+
subprocess.check_output(
|
76
|
+
['git', 'commit', '-m', 'Changelog for {}'.format(release_version)])
|
77
|
+
|
78
|
+
# Really run bumpver to set the new release and tag
|
79
|
+
bv_args = ['bumpversion', 'release']
|
80
|
+
|
81
|
+
bv_args += ['--new-version', release_version]
|
82
|
+
|
83
|
+
subprocess.check_output(bv_args)
|
84
|
+
|
85
|
+
|
86
|
+
if __name__ == '__main__':
|
87
|
+
parser = argparse.ArgumentParser(
|
88
|
+
description=bumpversion.__doc__,
|
89
|
+
formatter_class=argparse.RawTextHelpFormatter
|
90
|
+
)
|
91
|
+
args = parser.parse_args()
|
92
|
+
bumpversion()
|
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.0
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kameleon-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Salem Harrache
|
@@ -12,60 +13,66 @@ authors:
|
|
12
13
|
autorequire:
|
13
14
|
bindir: bin
|
14
15
|
cert_chain: []
|
15
|
-
date: 2015-
|
16
|
+
date: 2015-05-13 00:00:00.000000000 Z
|
16
17
|
dependencies:
|
17
18
|
- !ruby/object:Gem::Dependency
|
18
19
|
name: childprocess
|
19
20
|
requirement: !ruby/object:Gem::Requirement
|
21
|
+
none: false
|
20
22
|
requirements:
|
21
|
-
- -
|
23
|
+
- - ~>
|
22
24
|
- !ruby/object:Gem::Version
|
23
25
|
version: 0.5.3
|
24
|
-
- -
|
26
|
+
- - ! '>='
|
25
27
|
- !ruby/object:Gem::Version
|
26
28
|
version: 0.3.0
|
27
29
|
type: :runtime
|
28
30
|
prerelease: false
|
29
31
|
version_requirements: !ruby/object:Gem::Requirement
|
32
|
+
none: false
|
30
33
|
requirements:
|
31
|
-
- -
|
34
|
+
- - ~>
|
32
35
|
- !ruby/object:Gem::Version
|
33
36
|
version: 0.5.3
|
34
|
-
- -
|
37
|
+
- - ! '>='
|
35
38
|
- !ruby/object:Gem::Version
|
36
39
|
version: 0.3.0
|
37
40
|
- !ruby/object:Gem::Dependency
|
38
41
|
name: thor
|
39
42
|
requirement: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
40
44
|
requirements:
|
41
|
-
- -
|
45
|
+
- - ~>
|
42
46
|
- !ruby/object:Gem::Version
|
43
47
|
version: '0.19'
|
44
|
-
- -
|
48
|
+
- - ! '>='
|
45
49
|
- !ruby/object:Gem::Version
|
46
50
|
version: 0.15.0
|
47
51
|
type: :runtime
|
48
52
|
prerelease: false
|
49
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
50
55
|
requirements:
|
51
|
-
- -
|
56
|
+
- - ~>
|
52
57
|
- !ruby/object:Gem::Version
|
53
58
|
version: '0.19'
|
54
|
-
- -
|
59
|
+
- - ! '>='
|
55
60
|
- !ruby/object:Gem::Version
|
56
61
|
version: 0.15.0
|
57
62
|
- !ruby/object:Gem::Dependency
|
58
63
|
name: table_print
|
59
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
60
66
|
requirements:
|
61
|
-
- -
|
67
|
+
- - ~>
|
62
68
|
- !ruby/object:Gem::Version
|
63
69
|
version: 1.5.2
|
64
70
|
type: :runtime
|
65
71
|
prerelease: false
|
66
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
67
74
|
requirements:
|
68
|
-
- -
|
75
|
+
- - ~>
|
69
76
|
- !ruby/object:Gem::Version
|
70
77
|
version: 1.5.2
|
71
78
|
description: The mindful appliance builder
|
@@ -80,18 +87,18 @@ executables:
|
|
80
87
|
extensions: []
|
81
88
|
extra_rdoc_files: []
|
82
89
|
files:
|
83
|
-
-
|
84
|
-
-
|
85
|
-
-
|
90
|
+
- .bumpversion.cfg
|
91
|
+
- .editorconfig
|
92
|
+
- .env
|
93
|
+
- .gitignore
|
86
94
|
- AUTHORS
|
87
|
-
-
|
95
|
+
- CHANGES
|
88
96
|
- COPYING
|
89
97
|
- Gemfile
|
90
98
|
- README.rst
|
91
|
-
- Thorfile
|
92
99
|
- Vagrantfile
|
93
100
|
- bin/kameleon
|
94
|
-
- completion/_kameleon
|
101
|
+
- completion/_kameleon
|
95
102
|
- completion/kameleon.bash
|
96
103
|
- completion/kameleon.fish
|
97
104
|
- contrib/kameleon_bashrc.sh
|
@@ -146,6 +153,8 @@ files:
|
|
146
153
|
- lib/kameleon/ui.rb
|
147
154
|
- lib/kameleon/utils.rb
|
148
155
|
- lib/kameleon/version.rb
|
156
|
+
- scripts/bump-dev-version.py
|
157
|
+
- scripts/bump-release-version.py
|
149
158
|
- tests/helper.rb
|
150
159
|
- tests/recipes/steps/aliases/defaults.yaml
|
151
160
|
- tests/recipes/steps/bootstrap/linux/bootstrap.yaml
|
@@ -162,27 +171,28 @@ files:
|
|
162
171
|
homepage: http://kameleon.imag.fr/
|
163
172
|
licenses:
|
164
173
|
- GPL-2
|
165
|
-
metadata: {}
|
166
174
|
post_install_message:
|
167
175
|
rdoc_options: []
|
168
176
|
require_paths:
|
169
177
|
- lib
|
170
178
|
required_ruby_version: !ruby/object:Gem::Requirement
|
179
|
+
none: false
|
171
180
|
requirements:
|
172
|
-
- -
|
181
|
+
- - ! '>='
|
173
182
|
- !ruby/object:Gem::Version
|
174
183
|
version: '0'
|
175
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
176
186
|
requirements:
|
177
|
-
- -
|
187
|
+
- - ! '>='
|
178
188
|
- !ruby/object:Gem::Version
|
179
189
|
version: '0'
|
180
190
|
requirements:
|
181
191
|
- polipo 1.0.3, or greater
|
182
192
|
rubyforge_project:
|
183
|
-
rubygems_version:
|
193
|
+
rubygems_version: 1.8.23.2
|
184
194
|
signing_key:
|
185
|
-
specification_version:
|
195
|
+
specification_version: 3
|
186
196
|
summary: Kameleon is a tool to build virtual machines from scratch
|
187
197
|
test_files:
|
188
198
|
- tests/helper.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: d24c2bbdf9e6c88d1e2d4d573210b1c8414c2af8
|
4
|
-
data.tar.gz: 00379931012e6056b8cdcf89c196f60e02e3984a
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 20f79f9f06cfc7975a4dce207b07c037ed3ceebc9e6c3571e671ba48335b8608c9abc37d9899f03ea3444227b31384e625cf8d157bde0d7eb490b3b904a80516
|
7
|
-
data.tar.gz: dec068dcdcd64c17d00a04d5378226e4036e761fd9c66d172d13859c600e63f1d3594eca6352724bb9d39c0cc15d2f77a9fa81b69ae18b073df22e8e0ede9fcd
|
data/Thorfile
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
2
|
-
|
3
|
-
require "bundler"
|
4
|
-
require "thor/rake_compat"
|
5
|
-
|
6
|
-
class Default < Thor
|
7
|
-
include Thor::RakeCompat
|
8
|
-
Bundler::GemHelper.install_tasks
|
9
|
-
|
10
|
-
desc "build", "Build kameleon-#{Kameleon::VERSION}.gem into the pkg directory"
|
11
|
-
def build
|
12
|
-
Rake::Task["build"].execute
|
13
|
-
end
|
14
|
-
|
15
|
-
desc "install", "Build and install kameleon-#{Kameleon::VERSION}.gem into system gems"
|
16
|
-
def install
|
17
|
-
Rake::Task["install"].execute
|
18
|
-
end
|
19
|
-
|
20
|
-
desc "release", "Create tag #{Kameleon::VERSION} and build and push kameleon-#{Kameleon::VERSION}.gem to Rubygems"
|
21
|
-
def release
|
22
|
-
Rake::Task["release"].execute
|
23
|
-
end
|
24
|
-
|
25
|
-
desc "spec", "Run RSpec code examples"
|
26
|
-
def spec
|
27
|
-
exec "rspec spec"
|
28
|
-
end
|
29
|
-
end
|
data/completion/_kameleon.zsh
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
#!/usr/bin/env zsh
|
2
|
-
|
3
|
-
if [[ ! -o interactive ]]; then
|
4
|
-
return
|
5
|
-
fi
|
6
|
-
|
7
|
-
compctl -f -K _kameleon kameleon
|
8
|
-
|
9
|
-
_kameleon() {
|
10
|
-
local words completions
|
11
|
-
read -cA words
|
12
|
-
|
13
|
-
if [ "${#words}" -eq 2 ]; then
|
14
|
-
completions="$(kameleon commands)"
|
15
|
-
fi
|
16
|
-
|
17
|
-
reply=("${(ps:\n:)completions}")
|
18
|
-
}
|