openMSX-builder 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg/
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Filip H.F. "FiXato" Slagter
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,62 @@
1
+ # openMSX-Builder
2
+ ******************************************************************************
3
+ openMSX-Builder is used for building the latest SVN checkouts of [openMSX][1] and [openMSX-Debugger][2] from [their sourceforge repository][3].
4
+ It also supports publishing the created builds to an external location via [scp][4]. The original setup publishes to [FiXato's openMSX page][5].
5
+ Successfully published builds can also be announced via Twitter. [@openmsx_builder][6] is the official Twitter home for openMSX-Builder.
6
+
7
+ Setup of the oauth info has to be done manually at the moment, for more information on that read, about the amazing [twitter_oauth gem][7], [Twitter's oAuth Applications][8] and [Twitter's Authentication Wiki][9]
8
+
9
+
10
+ ## Commandline Arguments
11
+ ******************************************************************************
12
+ Currently `./build_openmsx` supports the following commandline arguments:
13
+
14
+ * --debug => Generate debug output.
15
+ * --publish => Publish the created build
16
+ * --publish-current => Only publish the current build and exit
17
+ * --publish-all => Only publish all previously created builds and exit
18
+ * --tweet => Send a tweet via @openMSX_Builder after successfully having published a build
19
+ * --dont-update => Don't update the SVN repository
20
+ * --report-build-failure => If an error occurs during build, report failure via e-mail
21
+
22
+
23
+ ## ToDo
24
+ ******************************************************************************
25
+ Current list of tasks is:
26
+
27
+ + Publish gem to Gemcutter
28
+ + Integrate with CIA.vc / Ruby-Rbot
29
+ + Add tests
30
+ + Refactor `#archive_for_revision` and `#dmg_for_revision` into a single method
31
+ + Create a simple Sinatra App for [openMSX.FiXato.net][5]
32
+ + Allow for automatic setup of the oAuth tokens.
33
+
34
+
35
+ ## Notes on Patches/Pull Requests
36
+ ******************************************************************************
37
+
38
+ 1 Fork the project.
39
+ 2 Make your feature addition or bug fix.
40
+ 3 Add tests for it (even though I don't have tests myself at the moment).
41
+ This is important so I don't break it in a future version unintentionally.
42
+ 4 Commit, but do not mess with Rakefile, version, history, or README.
43
+ Want to have your own version? Bump version in a separate commit!
44
+ That way I can ignored that commit when I pull.
45
+ 5 Send me a pull request. Bonus points for topic branches.
46
+
47
+
48
+ ## Copyright
49
+ ******************************************************************************
50
+ Copyright (c) 2010 Filip H.F. "FiXato" Slagter. See LICENSE for details.
51
+
52
+
53
+ ******************************************************************************
54
+ [1]: https://openmsx.svn.sourceforge.net/svnroot/openmsx/openmsx/trunk (openMSX SVN Trunk)
55
+ [2]: https://openmsx.svn.sourceforge.net/svnroot/openmsx/openmsx-debugger/trunk (openMSX-Debugger SVN Trunk)
56
+ [3]: http://openmsx.sf.net (openMSX at SourceForge.net)
57
+ [4]: http://en.wikipedia.org/wiki/Secure_copy (Secure Copy (or SCP) at Wikipedia)
58
+ [5]: http://openmsx.fixato.net (openMSX.FiXato.net ~ Home of openMSX-Builder)
59
+ [6]: http://twitter.com/openmsx_builder (openMSX-Builder's Twitter account)
60
+ [7]: http://github.com/moomerman/twitter_oauth (twitter_oauth gem's Github page)
61
+ [8]: http://twitter.com/oauth (create a Twitter oAuth Application)
62
+ [9]: http://apiwiki.twitter.com/Authentication (read the Twitter Authentication wiki on oAuth)
data/Rakefile ADDED
@@ -0,0 +1,36 @@
1
+ begin
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |gemspec|
4
+ gemspec.name = "openMSX-builder"
5
+ gemspec.summary = "Builds the latest openMSX and openMSX-Debugger for Mac OSX from SVN and publishes it via scp while tweeting about the new release."
6
+ gemspec.description = "openMSX-Builder is used for building the latest SVN checkouts of openMSX and openMSX-Debugger from their sourceforge repository.
7
+ It also supports publishing the created builds to an external location via scp, announcing successfully published builds via Twitter and reporting build-errors via e-mail."
8
+ gemspec.email = "fixato@gmail.com"
9
+ gemspec.homepage = "http://github.com/FiXato/openMSX-builder"
10
+ gemspec.authors = ['Filip H.F. "FiXato" Slagter']
11
+ gemspec.add_development_dependency "rspec", ">= 1.2.9"
12
+ gemspec.add_dependency "twitter_oauth", ">= 0.3.3"
13
+ gemspec.add_dependency "mail", ">= 2.1.3"
14
+ gemspec.has_rdoc = false
15
+ # gemspec is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 and http://wiki.github.com/technicalpickles/jeweler/customizing-your-projects-gem-specification for additional settings
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ require 'spec/rake/spectask'
23
+ Spec::Rake::SpecTask.new(:spec) do |spec|
24
+ spec.libs << 'lib' << 'spec'
25
+ spec.spec_files = FileList['spec/**/*_spec.rb']
26
+ end
27
+
28
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
29
+ spec.libs << 'lib' << 'spec'
30
+ spec.pattern = 'spec/**/*_spec.rb'
31
+ spec.rcov = true
32
+ end
33
+
34
+ task :spec => :check_dependencies
35
+
36
+ task :default => :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.1
data/bin/build_openmsx ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ # Automatic builder for openMSX and openMSX-Debugger builds for Mac OSX.
3
+ # Options:
4
+ # --debug => Generate debug output.
5
+ # --publish => Publish the created build
6
+ # --publish-current => Only publish the current build and exit
7
+ # --publish-all => Only publish all previously created builds and exit
8
+ # --tweet => Send a tweet via @openMSX_Builder after successfully having published a build
9
+ # --dont-update => Don't update the SVN repository
10
+ # --report-build-failure => If an error occurs during build, report failure via e-mail
11
+ require 'rubygems'
12
+ require 'mail'
13
+ require 'yaml'
14
+ require 'twitter_oauth'
15
+ load './lib/debug_tools.rb'
16
+ require './lib/tweet_msx'
17
+ require './lib/openmsx_builder'
18
+ include DebugTools
19
+
20
+ debug('-'*50)
21
+ debug("Starting with openMSX")
22
+ OpenmsxBuilder.new(ARGV,:openmsx).run
23
+ debug('-'*50)
24
+ debug("Proceeding with openMSX-Debugger")
25
+ OpenmsxBuilder.new(ARGV,:openmsx_debugger).run
@@ -0,0 +1,9 @@
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
@@ -0,0 +1,269 @@
1
+ load 'lib/debug_tools.rb'
2
+ class OpenmsxBuilder
3
+ include DebugTools
4
+ class NotConfigured < RuntimeError;end
5
+ CONFIG_FILENAME = File.expand_path('~/.openMSX-builder.yaml')
6
+ DEFAULTS = {
7
+ :projects => {
8
+ :openmsx => {
9
+ :source_dir => File.expand_path("~/Development/openMSX"),
10
+ :builds_subdir => 'derived/x86-darwin-opt-3rd',
11
+ :report_bcc => [],
12
+ :report_from => "openMSX auto-builder by FiXato <username@mailhost.example>",
13
+ :nice_name => 'openMSX',
14
+ :publish_location => 'ssh_host:path/to/existing/publish/dir',
15
+ :site_path => 'http://your.host.example/publish/dir',
16
+ },
17
+ :openmsx_debugger => {
18
+ :source_dir => File.expand_path("~/Development/openmsx-debugger"),
19
+ :builds_subdir => 'derived',
20
+ :report_bcc => [],
21
+ :report_from => "openMSX auto-builder by FiXato <username@mailhost.example>",
22
+ :nice_name => 'openMSX Debugger',
23
+ :publish_location => 'ssh_host:path/to/existing/publish/dir',
24
+ :site_path => 'http://your.host.example/publish/dir',
25
+ },
26
+ },
27
+ :smtp_settings => {
28
+ :address => "mail.example",
29
+ :port => 25,
30
+ :domain => 'mail.example',
31
+ :user_name => 'username@mailhost.example',
32
+ :password => '',
33
+ :authentication => :plain,
34
+ :enable_starttls_auto => true
35
+ },
36
+ }
37
+
38
+ attr_accessor :type
39
+ def initialize(options,type=:openmsx)
40
+ @type = type
41
+ @current_revision = `svnversion -n #{setting(:source_dir)}`.to_i
42
+ @options = options
43
+ @fails = 0
44
+ config
45
+ rescue NotConfigured => e
46
+ puts e.message
47
+ exit
48
+ end
49
+
50
+ def config
51
+ create_default_config unless File.exist?(CONFIG_FILENAME)
52
+ @config ||= YAML.load_file(CONFIG_FILENAME)
53
+ raise NotConfigured.new("You need to set up your config file at #{CONFIG_FILENAME} first") if @config == DEFAULTS
54
+ @config
55
+ end
56
+
57
+ def create_default_config
58
+ system("mkdir -p #{File.dirname(CONFIG_FILENAME)}")
59
+ File.open(CONFIG_FILENAME,'w') do |f|
60
+ f.write DEFAULTS.to_yaml
61
+ end
62
+ end
63
+
64
+ def setting(key)
65
+ config[:projects][type][key]
66
+ end
67
+
68
+ def run
69
+ if @options.include?('--publish-all')
70
+ publish_all
71
+ return
72
+ end
73
+ if @options.include?('--publish-current')
74
+ publish_current
75
+ return
76
+ end
77
+ debug "openMSX is currently at #{@current_revision}."
78
+ update_svn
79
+ if @new_revision >= @current_revision
80
+ debug "Revision #{@new_revision} is not older than #{@current_revision}. Proceeding with build."
81
+ build
82
+ end
83
+ end
84
+
85
+ private
86
+ def archive(infile,outfile)
87
+ `cd #{File.dirname(infile)} && tar --bzip2 -cf #{outfile} #{File.basename(infile)}`
88
+ end
89
+
90
+ def dmg_for_revision?(revision)
91
+ return false unless openmsx?
92
+ files = Dir.glob(File.join(setting(:source_dir),setting(:builds_subdir),"openmsx-*-#{revision}-mac-x86-bin.dmg"))
93
+ debug files.to_yaml unless files.size == 0
94
+ files.size > 0
95
+ end
96
+
97
+ def archive_for_revision?(revision)
98
+ return false unless openmsx_debugger?
99
+ filename = File.join(setting(:source_dir),setting(:builds_subdir),"openMSX-debugger-#{revision}-mac-x86.tbz")
100
+ debug filename
101
+ File.exist?(filename)
102
+ end
103
+
104
+ def publish_build(revision,infile,outfile='',location=setting(:publish_location))
105
+ debug ""
106
+ outfile = File.basename(infile) if outfile == ''
107
+ destination = File.join(location,outfile)
108
+ debug "Will publish #{infile} to #{setting(:publish_location)} now."
109
+ publish_output = `scp -p "#{infile}" #{destination}`
110
+ debug publish_output unless publish_output.nil? || publish_output.strip == ''
111
+ url = File.join(setting(:site_path),File.basename(destination))
112
+ twitter_update = tweetmsx.update("[#{setting(:nice_name)}] Revision #{revision} is now available:\r\n #{url}") if @options.include?('--tweet')
113
+ debug(twitter_update) unless twitter_update.nil?
114
+ nil
115
+ rescue TweetMsx::NotConfigured => e
116
+ debug e.message
117
+ end
118
+
119
+ def publish
120
+ if openmsx?
121
+ archive_name = Dir.glob(File.join(setting(:source_dir),setting(:builds_subdir),"openmsx-*-#{@new_revision}-mac-x86-bin.dmg")).first
122
+ elsif openmsx_debugger?
123
+ archive_name = File.join(setting(:source_dir),setting(:builds_subdir),"openMSX-debugger-#{@new_revision}-mac-x86.tbz")
124
+ archive(File.join(setting(:source_dir),setting(:builds_subdir),'openMSX_Debugger.app'),File.basename(archive_name))
125
+ end
126
+ publish_build(@new_revision, archive_name)
127
+ nil
128
+ end
129
+
130
+ def publish_all
131
+ debug "Publishing all #{@type} builds found"
132
+ if openmsx?
133
+ files = Dir.glob(File.join(setting(:source_dir),setting(:builds_subdir),"openmsx-*-mac-x86-bin.dmg")).sort.map do |f|
134
+ if f =~ /openmsx-.+-(\d+)-mac-x86-bin.dmg$/
135
+ rev = $1
136
+ else
137
+ rev = 'unknown'
138
+ end
139
+ [rev,f]
140
+ end
141
+ elsif openmsx_debugger?
142
+ files = Dir.glob(File.join(setting(:source_dir),setting(:builds_subdir),'openMSX-debugger-*-mac-x86.tbz')).sort.map do |f|
143
+ if f =~ /openMSX-debugger-(\d+)-mac-x86.tbz$/
144
+ rev = $1
145
+ else
146
+ rev = 'unknown'
147
+ end
148
+ [rev,f]
149
+ end
150
+ end
151
+ files.each do |rev,file|
152
+ publish_build(rev,file)
153
+ end
154
+ nil
155
+ end
156
+
157
+ def publish_current
158
+ if openmsx?
159
+ archive_name = Dir.glob(File.join(setting(:source_dir),setting(:builds_subdir),"openmsx-*-#{@current_revision}-mac-x86-bin.dmg")).first
160
+ elsif openmsx_debugger?
161
+ archive_name = File.join(setting(:source_dir),setting(:builds_subdir),"openMSX-debugger-#{@current_revision}-mac-x86.tbz")
162
+ archive(File.join(setting(:source_dir),setting(:builds_subdir),'openMSX_Debugger.app'),File.basename(archive_name))
163
+ end
164
+ publish_build(@current_revision, archive_name)
165
+ nil
166
+ end
167
+
168
+ def update_svn
169
+ if @options.include?('--dont-update')
170
+ update = 'Update skipped'
171
+ else
172
+ debug "Proceeding with update."
173
+ update = `cd #{setting(:source_dir)} && svn up`
174
+ end
175
+ @new_revision = `svnversion -n #{setting(:source_dir)}`.to_i
176
+ debug update
177
+ debug "Now at revision #{@new_revision}"
178
+ nil
179
+ end
180
+
181
+ def tweetmsx
182
+ @tweetmsx ||= TweetMsx.new
183
+ end
184
+
185
+ def build
186
+ if openmsx?
187
+ if dmg_for_revision?(@new_revision)
188
+ debug "Revision already build as #{Dir.glob(File.join(setting(:source_dir),setting(:builds_subdir),"openmsx-*-#{@new_revision}-mac-x86-bin.dmg")).first}"
189
+ return nil
190
+ end
191
+ cleanup_dmg_locks
192
+ elsif openmsx_debugger?
193
+ if archive_for_revision?(@new_revision)
194
+ debug "Revision already build as #{File.join(setting(:source_dir),setting(:builds_subdir),"openMSX-debugger-#{@new_revision}-mac-x86.tbz")}"
195
+ return nil
196
+ end
197
+ end
198
+ debug("Will attempt to build revision #{@new_revision}.")
199
+ build_output = `cd #{setting(:source_dir)} && make clean && make #{'staticbindist' if openmsx?} 2>&1`
200
+ if $?.success?
201
+ debug "++++++SUCCESS++++++"
202
+ build_output.each_line do |line|
203
+ debug " %s" % line
204
+ end
205
+ publish if @options.include?('--publish')
206
+ nil
207
+ else
208
+ #Capture the weird random build error that seems to be more OSX related than openMSX related.
209
+ if build_output.include?('hdiutil: create failed - error 49168')
210
+ @fails += 1
211
+ debug build_output
212
+ debug "Weird bug (attempt #{@fails}/3)"
213
+ if @fails == 3
214
+ exit
215
+ else
216
+ return build
217
+ end
218
+ end
219
+ debug "!!!!!!FAILED!!!!!!"
220
+ build_output.each_line do |line|
221
+ debug " %s" % line
222
+ end
223
+ if @options.include?('--report-build-failure')
224
+ report_build_failure(build_output)
225
+ end
226
+ end
227
+ nil
228
+ end
229
+
230
+ def cleanup_dmg_locks
231
+ debug("Checking for existing filelocks on DMGs.")
232
+ locks = `/usr/sbin/lsof | grep #{@new_revision}-mac-x86-bin.dmg`
233
+ debug locks
234
+ locks.each_line do |lock_line|
235
+ pid = lock_line.split[1].to_i
236
+ debug "Killing pid #{pid} from lock '#{lock_line}'"
237
+ `kill -9 #{pid}`
238
+ end
239
+ end
240
+
241
+ def report_build_failure(build_output)
242
+ #TODO: Find out why I have to set these local vars due to problems with scope within Mail
243
+ revision = @new_revision
244
+ project_name = setting(:nice_name)
245
+ smtp_settings = config[:smtp_settings]
246
+ mail_from = setting(:report_from)
247
+ mail_bcc = setting(:report_bcc)
248
+ Mail.defaults do
249
+ delivery_method :smtp, smtp_settings
250
+ end
251
+ Mail.deliver do
252
+ from mail_from
253
+ to mail_from
254
+ bcc mail_bcc.join(', ')
255
+ subject "[FAIL] #{project_name} revision #{revision} failed to build"
256
+ content_type 'text/plain; charset=UTF-8'
257
+ content_transfer_encoding '8bit'
258
+ body "While trying to build revision #{revision} of #{project_name}, the daily auto-builder encountered an error. Below you will find the entire build report:\r\n\r\n" << build_output
259
+ end
260
+ end
261
+
262
+ def openmsx?
263
+ @type == :openmsx
264
+ end
265
+
266
+ def openmsx_debugger?
267
+ @type == :openmsx_debugger
268
+ end
269
+ end
data/lib/tweet_msx.rb ADDED
@@ -0,0 +1,56 @@
1
+ load 'lib/debug_tools.rb'
2
+ # Patch for Ruby 1.9.2
3
+ module Net
4
+ module HTTPHeader
5
+ alias_method :url_encode_original, :urlencode
6
+ def urlencode(str)
7
+ str = str.to_s if str.kind_of?(Symbol)
8
+ url_encode_original(str)
9
+ end
10
+ end
11
+ end
12
+ class TweetMsx
13
+ include DebugTools
14
+ class NotConfigured < RuntimeError;end
15
+ CONFIG_FILENAME = File.expand_path('~/.openMSX-builder-TweetMSX.yaml')
16
+ DEFAULTS = {
17
+ :client => {
18
+ :consumer_key => '',
19
+ :consumer_secret => '',
20
+ :token => '',
21
+ :secret => '',
22
+ }
23
+ }
24
+ attr_reader :client, :twitter_down
25
+ def initialize
26
+ @client = TwitterOAuth::Client.new(config[:client])
27
+ end
28
+
29
+ def config
30
+ create_default_config unless File.exist?(CONFIG_FILENAME)
31
+ @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
33
+ @config
34
+ end
35
+
36
+ def create_default_config
37
+ system("mkdir -p #{File.dirname(CONFIG_FILENAME)}")
38
+ File.open(CONFIG_FILENAME,'w') do |f|
39
+ f.write DEFAULTS.to_yaml
40
+ end
41
+ end
42
+
43
+ def update(message)
44
+ debug "#{message} [#{message.size} chars]"
45
+ if @client.rate_limit_status == 0
46
+ debug "You've exceeded your rate limit"
47
+ return nil
48
+ end
49
+ puts message.to_yaml
50
+ @client.update(message.to_s)
51
+ nil
52
+ rescue SocketError
53
+ debug "Could not send '#{message}'. Twitter or your connection might be down."
54
+ nil
55
+ end
56
+ end
@@ -0,0 +1,66 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{openMSX-builder}
8
+ s.version = "1.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Filip H.F. \"FiXato\" Slagter"]
12
+ s.date = %q{2010-03-06}
13
+ s.default_executable = %q{build_openmsx}
14
+ s.description = %q{openMSX-Builder is used for building the latest SVN checkouts of openMSX and openMSX-Debugger from their sourceforge repository.
15
+ It also supports publishing the created builds to an external location via scp, announcing successfully published builds via Twitter and reporting build-errors via e-mail.}
16
+ s.email = %q{fixato@gmail.com}
17
+ s.executables = ["build_openmsx"]
18
+ s.extra_rdoc_files = [
19
+ "LICENSE",
20
+ "README.markdown"
21
+ ]
22
+ s.files = [
23
+ ".gitignore",
24
+ "LICENSE",
25
+ "README.markdown",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/build_openmsx",
29
+ "lib/debug_tools.rb",
30
+ "lib/openmsx_builder.rb",
31
+ "lib/tweet_msx.rb",
32
+ "openMSX-builder.gemspec",
33
+ "spec/openMSX-builder_spec.rb",
34
+ "spec/spec.opts",
35
+ "spec/spec_helper.rb"
36
+ ]
37
+ s.homepage = %q{http://github.com/FiXato/openMSX-builder}
38
+ s.rdoc_options = ["--charset=UTF-8"]
39
+ s.require_paths = ["lib"]
40
+ s.rubygems_version = %q{1.3.6}
41
+ s.summary = %q{Builds the latest openMSX and openMSX-Debugger for Mac OSX from SVN and publishes it via scp while tweeting about the new release.}
42
+ s.test_files = [
43
+ "spec/openMSX-builder_spec.rb",
44
+ "spec/spec_helper.rb"
45
+ ]
46
+
47
+ if s.respond_to? :specification_version then
48
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
49
+ s.specification_version = 3
50
+
51
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
52
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
53
+ s.add_runtime_dependency(%q<twitter_oauth>, [">= 0.3.3"])
54
+ s.add_runtime_dependency(%q<mail>, [">= 2.1.3"])
55
+ else
56
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
57
+ s.add_dependency(%q<twitter_oauth>, [">= 0.3.3"])
58
+ s.add_dependency(%q<mail>, [">= 2.1.3"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
62
+ s.add_dependency(%q<twitter_oauth>, [">= 0.3.3"])
63
+ s.add_dependency(%q<mail>, [">= 2.1.3"])
64
+ end
65
+ end
66
+
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "OpenmsxBuilder" do
4
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,8 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'openMSX_builder'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+ end
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: openMSX-builder
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 1
9
+ version: 1.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Filip H.F. "FiXato" Slagter
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-03-06 00:00:00 +01:00
18
+ default_executable: build_openmsx
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 9
31
+ version: 1.2.9
32
+ type: :development
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: twitter_oauth
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 3
44
+ - 3
45
+ version: 0.3.3
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: mail
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 2
57
+ - 1
58
+ - 3
59
+ version: 2.1.3
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ description: |-
63
+ openMSX-Builder is used for building the latest SVN checkouts of openMSX and openMSX-Debugger from their sourceforge repository.
64
+ It also supports publishing the created builds to an external location via scp, announcing successfully published builds via Twitter and reporting build-errors via e-mail.
65
+ email: fixato@gmail.com
66
+ executables:
67
+ - build_openmsx
68
+ extensions: []
69
+
70
+ extra_rdoc_files:
71
+ - LICENSE
72
+ - README.markdown
73
+ files:
74
+ - .gitignore
75
+ - LICENSE
76
+ - README.markdown
77
+ - Rakefile
78
+ - VERSION
79
+ - bin/build_openmsx
80
+ - lib/debug_tools.rb
81
+ - lib/openmsx_builder.rb
82
+ - lib/tweet_msx.rb
83
+ - openMSX-builder.gemspec
84
+ - spec/openMSX-builder_spec.rb
85
+ - spec/spec.opts
86
+ - spec/spec_helper.rb
87
+ has_rdoc: true
88
+ homepage: http://github.com/FiXato/openMSX-builder
89
+ licenses: []
90
+
91
+ post_install_message:
92
+ rdoc_options:
93
+ - --charset=UTF-8
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ requirements: []
111
+
112
+ rubyforge_project:
113
+ rubygems_version: 1.3.6
114
+ signing_key:
115
+ specification_version: 3
116
+ summary: Builds the latest openMSX and openMSX-Debugger for Mac OSX from SVN and publishes it via scp while tweeting about the new release.
117
+ test_files:
118
+ - spec/openMSX-builder_spec.rb
119
+ - spec/spec_helper.rb