jenkins_launcher 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,9 +1,17 @@
1
1
  CHANGELOG
2
2
  =========
3
3
 
4
+ v0.1.0 [13-JAN-2013]
5
+ ---------------------
6
+ * Added options for source control management: Git and Subversion.
7
+ * Added colors in printing messages on console.
8
+ * Added command `console` to print the console output of the recent build of the job.
9
+ * The `shell_command` option is renamed to `script` to match Travis CI.
10
+ * Some minor tweaks to the implementation.
11
+
4
12
  v0.0.2 [13-JAN-2013]
5
13
  ---------------------
6
- * ixed a bug where the last few lines of console output was missed while printing the progressive console output.
14
+ * Fixed a bug where the last few lines of console output was missed while printing the progressive console output.
7
15
 
8
16
  v0.0.1 [12-JAN-2013]
9
17
  ---------------------
@@ -0,0 +1,7 @@
1
+ name: test_build_kannan_jenkins_api_client
2
+ git: git://github.com/arangamani/jenkins_api_client.git
3
+ ref: master
4
+ script:
5
+ - sleep 5
6
+ - bundle install
7
+ - rake build
@@ -0,0 +1,8 @@
1
+ name: test_build_kannan_svn
2
+ svn: https://src.chromium.org/chrome/trunk/src/chrome/common/extensions/docs/examples/tutorials/getstarted/
3
+ ref: master
4
+ shell_command:
5
+ - echo "first echo"
6
+ - sleep 10
7
+ - echo "second echo"
8
+ - sleep 5
data/config/sample.yml CHANGED
@@ -1,5 +1,5 @@
1
- :name: test_build_kannan
2
- :shell_command:
1
+ name: test_build_kannan
2
+ shell_command:
3
3
  - echo "first echo"
4
4
  - sleep 10
5
5
  - echo "second echo"
@@ -20,6 +20,7 @@
20
20
  # THE SOFTWARE.
21
21
  #
22
22
 
23
+ require File.expand_path('../core_ext', __FILE__)
23
24
  require 'jenkins_api_client'
24
25
 
25
26
  module JenkinsLauncher
@@ -22,6 +22,7 @@
22
22
 
23
23
  require File.expand_path('../config_loader', __FILE__)
24
24
  require File.expand_path('../api_interface', __FILE__)
25
+ require File.expand_path('../core_ext', __FILE__)
25
26
  require 'thor'
26
27
 
27
28
  module JenkinsLauncher
@@ -42,6 +43,21 @@ module JenkinsLauncher
42
43
  @config = ConfigLoader.new
43
44
  end
44
45
 
46
+ no_tasks do
47
+ def print_status(status)
48
+ case status
49
+ when "success"
50
+ puts "Build status: #{status.upcase}".green
51
+ when "failure"
52
+ puts "Build status: #{status.upcase}".red
53
+ when "unstable"
54
+ puts "Build status: #{status.upcase}".yellow
55
+ else
56
+ puts "Build status: #{status.upcase}"
57
+ end
58
+ end
59
+ end
60
+
45
61
  desc "version", "Shows current version"
46
62
  def version
47
63
  puts JenkinsLauncher::VERSION
@@ -53,7 +69,7 @@ module JenkinsLauncher
53
69
  unless @api.job_exists?(params[:name])
54
70
  @api.create_job(params)
55
71
  else
56
- puts "The job is already created. Please use 'start' command to build the job."
72
+ puts "The job is already created. Please use 'start' command to build the job.".yellow
57
73
  end
58
74
  end
59
75
 
@@ -70,10 +86,10 @@ module JenkinsLauncher
70
86
  sleep quiet_period
71
87
  refresh_rate = options[:refresh_rate] ? options[:refresh_rate].to_i : 5
72
88
  @api.display_progressive_console_output(params[:name], refresh_rate)
73
- puts "Build status: #{@api.get_job_status(params[:name])}"
89
+ print_status(@api.get_job_status(params[:name]))
74
90
  @api.delete_job(params[:name]) if options[:delete_after]
75
91
  else
76
- puts "Build is already running. Run 'attach' command to attach to existing build and watch progress."
92
+ puts "Build is already running. Run 'attach' command to attach to existing build and watch progress.".yellow
77
93
  end
78
94
  end
79
95
 
@@ -81,9 +97,9 @@ module JenkinsLauncher
81
97
  def stop(config_file)
82
98
  params = @config.load_config(config_file)
83
99
  if !@api.job_exists?(params[:name])
84
- puts "The job doesn't exist"
100
+ puts "The job doesn't exist".red
85
101
  elsif !@api.job_building?(params[:name])
86
- puts "The job is currently not building or it may have finished already."
102
+ puts "The job is currently not building or it may have finished already.".yellow
87
103
  else
88
104
  @api.stop_job(params[:name])
89
105
  end
@@ -95,29 +111,41 @@ module JenkinsLauncher
95
111
  def attach(config_file)
96
112
  params = @config.load_config(config_file)
97
113
  if !@api.job_exists?(params[:name])
98
- puts "Job is not created. Please use the 'start' command to create and build the job."
114
+ puts "Job is not created. Please use the 'start' command to create and build the job.".red
99
115
  elsif !@api.job_building?(params[:name])
100
- puts "Job is not running. Please use the 'start' command to build the job."
116
+ puts "Job is not running. Please use the 'start' command to build the job.".yellow
101
117
  else
102
118
  refresh_rate = options[:refresh_rate] ? options[:refresh_rate].to_i : 5
103
119
  @api.display_progressive_console_output(params[:name], refresh_rate)
104
- puts "Build status: #{@api.get_job_status(params[:name])}"
120
+ print_status(@api.get_job_status(params[:name]))
105
121
  @api.delete_job(params[:name]) if options[:delete_after]
106
122
  end
107
123
  end
108
124
 
125
+ desc "console CONFIG", "Show the console output of the recent build if any"
126
+ def console(config_file)
127
+ params = @config.load_config(config_file)
128
+ if !@api.job_exists?(params[:name])
129
+ puts "Job is not created. Please use the 'create' or 'start' command to create or/and build the job.".red
130
+ elsif @api.job_building?(params[:name])
131
+ puts "The job is currently building. Please use the 'attach' command to attach to the running build and watch progress".yellow
132
+ else
133
+ @api.display_progressive_console_output(params[:name], 5)
134
+ end
135
+ end
136
+
109
137
  desc "destroy CONFIG", "Destroy the job from Jenkins server"
110
138
  method_option :force, :type => :boolean, :aliases => "-f", :desc => "Stop the job if it is already running"
111
139
  def destroy(config_file)
112
140
  params = @config.load_config(config_file)
113
141
  if !@api.job_exists?(params[:name])
114
- puts "The job doesn't exist or already destroyed."
142
+ puts "The job doesn't exist or already destroyed.".yellow
115
143
  elsif @api.job_building?(params[:name]) && !options[:force]
116
144
  msg = ''
117
145
  msg << "The job is currently building. Please use the 'stop' command or wait until the build is completed."
118
146
  msg << " The --force option can be used to stop the build and destroy immediately."
119
147
  msg << " If you would like to watch the progress, use the 'attach' command."
120
- puts msg
148
+ puts msg.yellow
121
149
  else
122
150
  @api.stop_job(params[:name]) if options[:force] && @api.job_building?(params[:name])
123
151
  @api.delete_job(params[:name])
@@ -35,11 +35,25 @@ module JenkinsLauncher
35
35
 
36
36
  def validate_config(loaded_params)
37
37
  valid_params = {}
38
+ # Name
38
39
  raise "'name' is required and not set in the yml file." unless loaded_params['name']
39
40
  valid_params[:name] = loaded_params['name']
40
- if loaded_params['shell_command']
41
+
42
+ # Source control
43
+ # Git, Subversion
44
+ if loaded_params['git']
45
+ valid_params[:scm_provider] = 'git'
46
+ valid_params[:scm_url] = loaded_params['git']
47
+ valid_params[:scm_branch] = loaded_params['ref'] ? loaded_params['ref'] : 'master'
48
+ elsif loaded_params['svn']
49
+ valid_params[:scm_provider] = 'subversion'
50
+ valid_params[:scm_url] = loaded_params['svn']
51
+ end
52
+
53
+ # Shell command
54
+ if loaded_params['script']
41
55
  valid_params[:shell_command] = ''
42
- loaded_params['shell_command'].each do |command|
56
+ loaded_params['script'].each do |command|
43
57
  valid_params[:shell_command] << command + "\n"
44
58
  end
45
59
  end
@@ -0,0 +1,29 @@
1
+ #
2
+ # Copyright (c) 2013 Kannan Manickam <arangamani.kannan@gmail.com>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+
23
+ class String
24
+ colors = %w[black red green yellow blue magenta cyan white]
25
+ colors.concat colors.map { |c| "light#{c}" }
26
+ colors.each_with_index do |color, i|
27
+ define_method(color) { "\e[38;5;#{i}m#{self}\e[0m" }
28
+ end
29
+ end
@@ -0,0 +1,23 @@
1
+ #
2
+ # Copyright (c) 2013 Kannan Manickam <arangamani.kannan@gmail.com>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+
23
+ require File.expand_path('../core_ext/string', __FILE__)
@@ -22,8 +22,8 @@
22
22
 
23
23
  module JenkinsLauncher
24
24
  MAJOR = 0
25
- MINOR = 0
26
- TINY = 2
25
+ MINOR = 1
26
+ TINY = 0
27
27
  PRE = nil
28
28
  VERSION = [MAJOR, MINOR, TINY, PRE].compact.join('.')
29
29
  end
@@ -24,3 +24,4 @@ require File.expand_path('../jenkins_launcher/config_loader', __FILE__)
24
24
  require File.expand_path('../jenkins_launcher/api_interface', __FILE__)
25
25
  require File.expand_path('../jenkins_launcher/cli', __FILE__)
26
26
  require File.expand_path('../jenkins_launcher/version', __FILE__)
27
+ require File.expand_path('../jenkins_launcher/core_ext', __FILE__)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins_launcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -158,11 +158,15 @@ files:
158
158
  - README.md
159
159
  - Rakefile
160
160
  - bin/jlaunch
161
+ - config/sample-git.yml
162
+ - config/sample-svn.yml
161
163
  - config/sample.yml
162
164
  - lib/jenkins_launcher.rb
163
165
  - lib/jenkins_launcher/api_interface.rb
164
166
  - lib/jenkins_launcher/cli.rb
165
167
  - lib/jenkins_launcher/config_loader.rb
168
+ - lib/jenkins_launcher/core_ext.rb
169
+ - lib/jenkins_launcher/core_ext/string.rb
166
170
  - lib/jenkins_launcher/version.rb
167
171
  homepage: https://github.com/arangamani/jenkins_launcher
168
172
  licenses: []