openMSX-builder 1.2.1 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -25,9 +25,8 @@ Set up of the oauth info has to be done manually at the moment, for more informa
25
25
 
26
26
  ### Commandline Arguments
27
27
 
28
- Currently `build_openmsx` supports the following commandline arguments:
28
+ Currently `build_openmsx` supports the following command-line arguments:
29
29
 
30
- * --debug => Generate debug output.
31
30
  * --publish => Publish the created build
32
31
  * --publish-current => Only publish the current build and exit
33
32
  * --publish-all => Only publish all previously created builds and exit
@@ -35,13 +34,21 @@ Currently `build_openmsx` supports the following commandline arguments:
35
34
  * --dont-update => Don't update the SVN repository
36
35
  * --report-build-failure => If an error occurs during build, report failure via e-mail
37
36
 
37
+ By default only fatal errors will be output via STDOUT.
38
+ However, the following command-line arguments are available to set the verbosity:
39
+
40
+ * --log-errors => Fatal and non-fatal errors.
41
+ * --warn => Logs warnings besides the (non-)fatal errors.
42
+ * --verbose => Besides the --warn output, also outputs info.
43
+ * --debug => Most verbose form. --verbose plus debug info.
44
+
38
45
  ### Examples
39
46
 
40
47
  Simplest way to run it would usually be:
41
- `build_openmsx --debug --publish --tweet --report-build-failure`
48
+ `build_openmsx --verbose --publish --tweet --report-build-failure`
42
49
 
43
50
  Or by adding a cronjob for:
44
- `0 3 * * * build_openmsx --publish --tweet --report-build-failure`
51
+ `0 3 * * * build_openmsx --publish --tweet --report-build-failure --log-errors`
45
52
  to have it run daily at 3 at night.
46
53
  (Remember to add either `source ~/.profile` or the right PATH to your cron.)
47
54
 
@@ -50,7 +57,6 @@ to have it run daily at 3 at night.
50
57
  ******************************************************************************
51
58
  Current list of tasks is:
52
59
 
53
- + Replace DebugTools with Log4r
54
60
  + Integrate with CIA.vc / Ruby-Rbot
55
61
  + Add tests
56
62
  + Refactor `#archive_for_revision` and `#dmg_for_revision` into a single method
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.1
1
+ 1.3.1
data/bin/build_openmsx CHANGED
@@ -16,9 +16,16 @@ if ARGV.include?('--version')
16
16
  exit
17
17
  end
18
18
 
19
- debug('-'*50)
20
- debug("Starting with openMSX")
19
+ # TODO: Refactor this into OpenmsxBuilder; perhaps make @options a class variable.
20
+ log = Logger.new(STDOUT)
21
+ log.level = Logger::FATAL
22
+ log.level = Logger::ERROR if ARGV.include?('--log-errors')
23
+ log.level = Logger::WARN if ARGV.include?('--warn')
24
+ log.level = Logger::INFO if ARGV.include?('--verbose')
25
+ log.level = Logger::DEBUG if ARGV.include?('--debug')
26
+ log.info('-'*50)
27
+ log.info("Starting with openMSX")
21
28
  OpenmsxBuilder.new(ARGV,:openmsx).run
22
- debug('-'*50)
23
- debug("Proceeding with openMSX-Debugger")
29
+ log.info('-'*50)
30
+ log.info("Proceeding with openMSX-Debugger")
24
31
  OpenmsxBuilder.new(ARGV,:openmsx_debugger).run
@@ -1,12 +1,9 @@
1
1
  require 'rubygems'
2
2
  require 'mail'
3
3
  require 'yaml'
4
- require 'twitter_oauth'
5
4
  require 'tweet_msx'
6
- load 'debug_tools.rb'
7
- include DebugTools
5
+ require 'logger'
8
6
  class OpenmsxBuilder
9
- include DebugTools
10
7
  class NotConfigured < RuntimeError;end
11
8
  CONFIG_FILENAME = File.expand_path('~/.openMSX-builder.yaml')
12
9
  DEFAULTS = {
@@ -47,9 +44,16 @@ class OpenmsxBuilder
47
44
  @current_revision = `svnversion -n #{setting(:source_dir)}`.to_i
48
45
  @options = options
49
46
  @fails = 0
47
+ @log = Logger.new(STDOUT)
48
+ @log.level = Logger::FATAL
49
+ @log.level = Logger::ERROR if @options.include?('--log-errors')
50
+ @log.level = Logger::WARN if @options.include?('--warn')
51
+ @log.level = Logger::INFO if @options.include?('--verbose')
52
+ @log.level = Logger::DEBUG if @options.include?('--debug')
53
+ @log.debug("Logger created with level #{@log.level}")
50
54
  config
51
55
  rescue NotConfigured => e
52
- puts e.message
56
+ @log.fatal e.message
53
57
  exit
54
58
  end
55
59
 
@@ -80,10 +84,10 @@ class OpenmsxBuilder
80
84
  publish_current
81
85
  return
82
86
  end
83
- debug "openMSX is currently at #{@current_revision}."
87
+ @log.info "openMSX is currently at #{@current_revision}."
84
88
  update_svn
85
89
  if @new_revision >= @current_revision
86
- debug "Revision #{@new_revision} is not older than #{@current_revision}. Proceeding with build."
90
+ @log.info "Revision #{@new_revision} is not older than #{@current_revision}. Proceeding with build."
87
91
  build
88
92
  end
89
93
  end
@@ -96,30 +100,30 @@ private
96
100
  def dmg_for_revision?(revision)
97
101
  return false unless openmsx?
98
102
  files = Dir.glob(File.join(setting(:source_dir),setting(:builds_subdir),"openmsx-*-#{revision}-mac-x86-bin.dmg"))
99
- debug files.to_yaml unless files.size == 0
103
+ @log.debug files.to_yaml unless files.size == 0
100
104
  files.size > 0
101
105
  end
102
106
 
103
107
  def archive_for_revision?(revision)
104
108
  return false unless openmsx_debugger?
105
109
  filename = File.join(setting(:source_dir),setting(:builds_subdir),"openMSX-debugger-#{revision}-mac-x86.tbz")
106
- debug filename
110
+ @log.debug filename
107
111
  File.exist?(filename)
108
112
  end
109
113
 
110
114
  def publish_build(revision,infile,outfile='',location=setting(:publish_location))
111
- debug ""
115
+ @log.debug "\n#publish_build"
112
116
  outfile = File.basename(infile) if outfile == ''
113
117
  destination = File.join(location,outfile)
114
- debug "Will publish #{infile} to #{setting(:publish_location)} now."
118
+ @log.info "Will publish #{infile} to #{setting(:publish_location)} now."
115
119
  publish_output = `scp -p "#{infile}" #{destination}`
116
- debug publish_output unless publish_output.nil? || publish_output.strip == ''
120
+ @log.debug publish_output unless publish_output.nil? || publish_output.strip == ''
117
121
  url = File.join(setting(:site_path),File.basename(destination))
118
122
  twitter_update = tweetmsx.update("[#{setting(:nice_name)}] Revision #{revision} is now available:\r\n #{url}") if @options.include?('--tweet')
119
- debug(twitter_update) unless twitter_update.nil?
123
+ @log.info(twitter_update) unless twitter_update.nil?
120
124
  nil
121
125
  rescue TweetMsx::NotConfigured => e
122
- debug e.message
126
+ @log.error e.message
123
127
  end
124
128
 
125
129
  def publish
@@ -134,7 +138,7 @@ private
134
138
  end
135
139
 
136
140
  def publish_all
137
- debug "Publishing all #{@type} builds found"
141
+ @log.info "Publishing all #{@type} builds found"
138
142
  if openmsx?
139
143
  files = Dir.glob(File.join(setting(:source_dir),setting(:builds_subdir),"openmsx-*-mac-x86-bin.dmg")).sort.map do |f|
140
144
  if f =~ /openmsx-.+-(\d+)-mac-x86-bin.dmg$/
@@ -175,38 +179,38 @@ private
175
179
  if @options.include?('--dont-update')
176
180
  update = 'Update skipped'
177
181
  else
178
- debug "Proceeding with update."
182
+ @log.info "Proceeding with update."
179
183
  update = `cd #{setting(:source_dir)} && svn up`
180
184
  end
181
185
  @new_revision = `svnversion -n #{setting(:source_dir)}`.to_i
182
- debug update
183
- debug "Now at revision #{@new_revision}"
186
+ @log.debug update
187
+ @log.info "Now at revision #{@new_revision}"
184
188
  nil
185
189
  end
186
190
 
187
191
  def tweetmsx
188
- @tweetmsx ||= TweetMsx.new
192
+ @tweetmsx ||= TweetMsx.new(@log.level)
189
193
  end
190
194
 
191
195
  def build
192
196
  if openmsx?
193
197
  if dmg_for_revision?(@new_revision)
194
- debug "Revision already build as #{Dir.glob(File.join(setting(:source_dir),setting(:builds_subdir),"openmsx-*-#{@new_revision}-mac-x86-bin.dmg")).first}"
198
+ @log.info "Revision already build as #{Dir.glob(File.join(setting(:source_dir),setting(:builds_subdir),"openmsx-*-#{@new_revision}-mac-x86-bin.dmg")).first}"
195
199
  return nil
196
200
  end
197
201
  cleanup_dmg_locks
198
202
  elsif openmsx_debugger?
199
203
  if archive_for_revision?(@new_revision)
200
- debug "Revision already build as #{File.join(setting(:source_dir),setting(:builds_subdir),"openMSX-debugger-#{@new_revision}-mac-x86.tbz")}"
204
+ @log.info "Revision already build as #{File.join(setting(:source_dir),setting(:builds_subdir),"openMSX-debugger-#{@new_revision}-mac-x86.tbz")}"
201
205
  return nil
202
206
  end
203
207
  end
204
- debug("Will attempt to build revision #{@new_revision}.")
208
+ @log.info("Will attempt to build revision #{@new_revision}.")
205
209
  build_output = `cd #{setting(:source_dir)} && make clean && make #{'staticbindist' if openmsx?} 2>&1`
206
210
  if $?.success?
207
- debug "++++++SUCCESS++++++"
211
+ @log.info "++++++SUCCESS++++++"
208
212
  build_output.each_line do |line|
209
- debug " %s" % line
213
+ @log.debug " %s" % line
210
214
  end
211
215
  publish if @options.include?('--publish')
212
216
  nil
@@ -214,17 +218,18 @@ private
214
218
  #Capture the weird random build error that seems to be more OSX related than openMSX related.
215
219
  if build_output.include?('hdiutil: create failed - error 49168')
216
220
  @fails += 1
217
- debug build_output
218
- debug "Weird bug (attempt #{@fails}/3)"
221
+ @log.error build_output
222
+ @log.error "Weird bug (attempt #{@fails}/3)"
219
223
  if @fails == 3
224
+ @log.fatal "Encountered the weird 'hdiutil error 49168'-bug #{@fails} times; failing."
220
225
  exit
221
226
  else
222
227
  return build
223
228
  end
224
229
  end
225
- debug "!!!!!!FAILED!!!!!!"
230
+ @log.error "!!!!!!FAILED!!!!!!"
226
231
  build_output.each_line do |line|
227
- debug " %s" % line
232
+ @log.error " %s" % line
228
233
  end
229
234
  if @options.include?('--report-build-failure')
230
235
  report_build_failure(build_output)
@@ -234,13 +239,14 @@ private
234
239
  end
235
240
 
236
241
  def cleanup_dmg_locks
237
- debug("Checking for existing filelocks on DMGs.")
242
+ @log.info("Checking for existing filelocks on DMGs.")
238
243
  locks = `/usr/sbin/lsof | grep #{@new_revision}-mac-x86-bin.dmg`
239
- debug locks
244
+ @log.debug locks
240
245
  locks.each_line do |lock_line|
241
246
  pid = lock_line.split[1].to_i
242
- debug "Killing pid #{pid} from lock '#{lock_line}'"
243
- `kill -9 #{pid}`
247
+ @log.info "Killing pid #{pid} from lock '#{lock_line}'"
248
+ kill_output = `kill -9 #{pid}`
249
+ @log.debug kill_output
244
250
  end
245
251
  end
246
252
 
@@ -251,10 +257,10 @@ private
251
257
  smtp_settings = config[:smtp_settings]
252
258
  mail_from = setting(:report_from)
253
259
  mail_bcc = setting(:report_bcc)
254
- Mail.defaults do
260
+ @log.debug Mail.defaults do
255
261
  delivery_method :smtp, smtp_settings
256
262
  end
257
- Mail.deliver do
263
+ @log.debug Mail.deliver do
258
264
  from mail_from
259
265
  to mail_from
260
266
  bcc mail_bcc.join(', ')
data/lib/tweet_msx.rb CHANGED
@@ -1,4 +1,6 @@
1
- load 'debug_tools.rb'
1
+ require 'logger'
2
+ require 'twitter_oauth'
3
+ require 'yaml'
2
4
  # Patch for Ruby 1.9.2
3
5
  module Net
4
6
  module HTTPHeader
@@ -10,7 +12,6 @@ module Net
10
12
  end
11
13
  end
12
14
  class TweetMsx
13
- include DebugTools
14
15
  class NotConfigured < RuntimeError;end
15
16
  CONFIG_FILENAME = File.expand_path('~/.openMSX-builder-TweetMSX.yaml')
16
17
  DEFAULTS = {
@@ -22,35 +23,42 @@ class TweetMsx
22
23
  }
23
24
  }
24
25
  attr_reader :client, :twitter_down
25
- def initialize
26
+ def initialize(log_level=Logger::FATAL)
26
27
  @client = TwitterOAuth::Client.new(config[:client])
28
+ @log = Logger.new(STDOUT)
29
+ @log.level = log_level
27
30
  end
28
31
 
29
32
  def config
30
33
  create_default_config unless File.exist?(CONFIG_FILENAME)
31
34
  @config ||= YAML.load_file(CONFIG_FILENAME)
32
- raise NotConfigured.new("You need to set up your config file at #{CONFIG_FILENAME} first") if @config == DEFAULTS
35
+ @log.debug @config.to_yaml
36
+ if @config == DEFAULTS
37
+ @log.error "TweetMSX config at #{CONFIG_FILENAME} matches DEFAULTS"
38
+ raise NotConfigured.new("You need to set up your config file at #{CONFIG_FILENAME} first")
39
+ end
33
40
  @config
34
41
  end
35
42
 
36
43
  def create_default_config
37
44
  system("mkdir -p #{File.dirname(CONFIG_FILENAME)}")
45
+ @log.debug "Creating default config at #{CONFIG_FILENAME}"
38
46
  File.open(CONFIG_FILENAME,'w') do |f|
39
47
  f.write DEFAULTS.to_yaml
40
48
  end
41
49
  end
42
50
 
43
51
  def update(message)
44
- debug "#{message} [#{message.size} chars]"
52
+ @log.info "Tweeting message:\n #{message}"
53
+ @log.debug "[#{message.size} characters]"
45
54
  if @client.rate_limit_status == 0
46
- debug "You've exceeded your rate limit"
55
+ @log.error "You've exceeded your rate limit"
47
56
  return nil
48
57
  end
49
- puts message.to_yaml
50
58
  @client.update(message.to_s)
51
59
  nil
52
60
  rescue SocketError
53
- debug "Could not send '#{message}'. Twitter or your connection might be down."
61
+ @log.error "Could not send '#{message}'. Twitter or your connection might be down."
54
62
  nil
55
63
  end
56
64
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{openMSX-builder}
8
- s.version = "1.2.1"
8
+ s.version = "1.3.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Filip H.F. \"FiXato\" Slagter"]
@@ -26,7 +26,6 @@ Gem::Specification.new do |s|
26
26
  "Rakefile",
27
27
  "VERSION",
28
28
  "bin/build_openmsx",
29
- "lib/debug_tools.rb",
30
29
  "lib/openmsx_builder.rb",
31
30
  "lib/tweet_msx.rb",
32
31
  "openMSX-builder.gemspec",
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 2
7
+ - 3
8
8
  - 1
9
- version: 1.2.1
9
+ version: 1.3.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Filip H.F. "FiXato" Slagter
@@ -77,7 +77,6 @@ files:
77
77
  - Rakefile
78
78
  - VERSION
79
79
  - bin/build_openmsx
80
- - lib/debug_tools.rb
81
80
  - lib/openmsx_builder.rb
82
81
  - lib/tweet_msx.rb
83
82
  - openMSX-builder.gemspec
data/lib/debug_tools.rb DELETED
@@ -1,9 +0,0 @@
1
- module DebugTools
2
- def debug(*args)
3
- if ARGV.include?('--debug')
4
- args.each do |arg|
5
- puts "[#{Time.now.strftime("%H:%M:%S")}] #{arg}"
6
- end
7
- end
8
- end
9
- end