shipit 0.0.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/ChangeLog ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 / 2008-01-05
2
+
3
+ * initial release
4
+
data/README ADDED
@@ -0,0 +1,31 @@
1
+
2
+ = shipit
3
+
4
+
5
+ == Description
6
+
7
+ shipit is automation of release process.
8
+
9
+
10
+ == Installation
11
+
12
+ === Archive Installation
13
+
14
+ rake install
15
+
16
+ === Gem Installation
17
+
18
+ gem install shipit
19
+
20
+
21
+ == Features/Problems
22
+
23
+
24
+ == Synopsis
25
+
26
+
27
+ == Copyright
28
+
29
+ Author:: cho45 <cho45@lowreal.net>
30
+ Copyright:: Copyright (c) 2008 cho45
31
+ License:: Creative Commons by
data/Rakefile ADDED
@@ -0,0 +1,131 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/rdoctask'
8
+ require 'rake/contrib/rubyforgepublisher'
9
+ require 'rake/contrib/sshpublisher'
10
+ require 'fileutils'
11
+
12
+ require "lib/shipit.rb"
13
+ include FileUtils
14
+
15
+ NAME = "shipit"
16
+ AUTHOR = "cho45"
17
+ EMAIL = "cho45@lowreal.net"
18
+ DESCRIPTION = "Automated release tasks."
19
+ RUBYFORGE_PROJECT = "lowreal"
20
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
21
+ BIN_FILES = %w( )
22
+ VERS = "0.0.0"
23
+
24
+ REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
25
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config']
26
+ RDOC_OPTS = [
27
+ '--title', "#{NAME} documentation",
28
+ "--charset", "utf-8",
29
+ "--opname", "index.html",
30
+ "--line-numbers",
31
+ "--main", "README",
32
+ "--inline-source",
33
+ ]
34
+
35
+ task :default => [:test]
36
+ task :package => [:clean]
37
+
38
+ Rake::TestTask.new("test") do |t|
39
+ t.libs << "test"
40
+ t.pattern = "test/**/*_test.rb"
41
+ t.verbose = true
42
+ end
43
+
44
+ spec = Gem::Specification.new do |s|
45
+ s.name = NAME
46
+ s.version = VERS
47
+ s.platform = Gem::Platform::RUBY
48
+ s.has_rdoc = true
49
+ s.extra_rdoc_files = ["README", "ChangeLog"]
50
+ s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
51
+ s.summary = DESCRIPTION
52
+ s.description = DESCRIPTION
53
+ s.author = AUTHOR
54
+ s.email = EMAIL
55
+ s.homepage = HOMEPATH
56
+ s.executables = BIN_FILES
57
+ s.rubyforge_project = RUBYFORGE_PROJECT
58
+ s.bindir = "bin"
59
+ s.require_path = "lib"
60
+ s.autorequire = "shipit"
61
+ s.test_files = Dir["test/test_*.rb"]
62
+
63
+ s.add_dependency('rake')
64
+ #s.add_dependency('activesupport', '>=1.3.1')
65
+ #s.required_ruby_version = '>= 1.8.2'
66
+
67
+ s.files = %w(README ChangeLog Rakefile) +
68
+ Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
69
+ Dir.glob("ext/**/*.{h,c,rb}") +
70
+ Dir.glob("examples/**/*.rb") +
71
+ Dir.glob("tools/*.rb")
72
+
73
+ s.extensions = FileList["ext/**/extconf.rb"].to_a
74
+ end
75
+
76
+ Rake::GemPackageTask.new(spec) do |p|
77
+ p.need_tar = true
78
+ p.gem_spec = spec
79
+ end
80
+
81
+ task :install do
82
+ name = "#{NAME}-#{VERS}.gem"
83
+ sh %{rake package}
84
+ sh %{sudo gem install pkg/#{name}}
85
+ end
86
+
87
+ task :uninstall => [:clean] do
88
+ sh %{sudo gem uninstall #{NAME}}
89
+ end
90
+
91
+
92
+ Rake::RDocTask.new do |rdoc|
93
+ rdoc.rdoc_dir = 'html'
94
+ rdoc.options += RDOC_OPTS
95
+ rdoc.template = "resh"
96
+ #rdoc.template = "#{ENV['template']}.rb" if ENV['template']
97
+ if ENV['DOC_FILES']
98
+ rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
99
+ else
100
+ rdoc.rdoc_files.include('README', 'ChangeLog')
101
+ rdoc.rdoc_files.include('lib/**/*.rb')
102
+ rdoc.rdoc_files.include('ext/**/*.c')
103
+ end
104
+ end
105
+
106
+ desc "Publish to RubyForge"
107
+ task :rubyforge => [:rdoc, :package] do
108
+ @local_dir = "html"
109
+ @host = "cho45@rubyforge.org"
110
+ @remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/#{NAME}"
111
+ sh %{rsync -r --delete --verbose #{@local_dir}/ #{@host}:#{@remote_dir}}
112
+ end
113
+
114
+ Rake::ShipitTask.new do |s|
115
+ s.Step.new {
116
+ system("svn", "up")
117
+ }.and {}
118
+ s.Ask
119
+ s.Task :rubyforge
120
+ s.Step.new {
121
+ raise "svn2cl.sh is not found" unless system("svn2cl.sh", "--version")
122
+ }.and {
123
+ system("svn2cl.sh --break-before-msg=2 --group-by-day --include-rev --separate-daylogs")
124
+ }
125
+ s.ChangeVersion
126
+ s.Commit
127
+ s.Task :clean, :package
128
+ s.RubyForge
129
+ s.Twitter
130
+ end
131
+
data/lib/shipit.rb ADDED
@@ -0,0 +1,221 @@
1
+ require "rubygems"
2
+ require "rake"
3
+ require "rake/tasklib"
4
+
5
+ class Rake::ShipitTask < Rake::TaskLib
6
+ attr_reader :name
7
+ attr_reader :steps
8
+
9
+ module Step; end
10
+
11
+ def initialize(name=:shipit, &block)
12
+ @name = name
13
+ @block = block
14
+ define
15
+ end
16
+
17
+ def define
18
+ desc "Shipit: Automated Release"
19
+ task @name do
20
+ puts "Preparing steps... "
21
+ steps = []
22
+
23
+ eigenclass = class <<steps; self; end
24
+ plugins = self.class.const_get(:Step)
25
+ plugins.constants.each do |i|
26
+ eigenclass.__send__(:define_method, i) do |*args|
27
+ self << ret = plugins.const_get(i).new(*args)
28
+ ret
29
+ end
30
+ end
31
+ @block.call(steps)
32
+ steps.each do |s|
33
+ s.prepare if s.respond_to? :prepare
34
+ end
35
+ puts "done."
36
+ puts "Steps: #{steps.map{|i| i.class.name.sub(/.+::/, "")}.join(", ")}"
37
+ steps.each do |s|
38
+ puts "Running Step: #{s.class.name}"
39
+ s.run
40
+ end
41
+ puts "done."
42
+ end
43
+ end
44
+ end
45
+
46
+ class Rake::ShipitTask::Step::Step
47
+ def new(&block)
48
+ @prepare = block
49
+ self
50
+ end
51
+
52
+ def and(&block)
53
+ @run = block
54
+ end
55
+
56
+ def prepare
57
+ @prepare.call
58
+ end
59
+
60
+ def run
61
+ @run.call
62
+ end
63
+ end
64
+
65
+ class Rake::ShipitTask::Step::Twitter
66
+ def initialize(msg="Released #{NAME} #{VERS} (#{DESCRIPTION})")
67
+ @msg = msg
68
+ end
69
+
70
+ def prepare
71
+ require "time"
72
+ require "rubygems"
73
+ gem "twitter4r"
74
+ require "twitter"
75
+ require "pit"
76
+ require "pathname"
77
+
78
+ @config = Pit.get("twitter.com", :require => {
79
+ "login" => "login name",
80
+ "password" => "password"
81
+ })
82
+ @client = Twitter::Client.new(@config)
83
+ raise "Twitter::Client auth failed" unless @client.authenticate?(@config["login"], @config["password"])
84
+ end
85
+
86
+ def run
87
+ @client.status(:post, @msg)
88
+ end
89
+ end
90
+
91
+ class Rake::ShipitTask::Step::ChangeVersion
92
+ def initialize(file="Rakefile", name="VERS", vers=VERS)
93
+ @file = file
94
+ @name = name
95
+ @vers = vers
96
+ end
97
+
98
+ def prepare
99
+ require "pathname"
100
+ @rakefile = Pathname.new(@file)
101
+ @content = @rakefile.read
102
+ @match = @content.match(/#{@name}\s*=\s*"(\d+\.\d+\.\d+)"/)
103
+ @new_version = @match[1].succ
104
+ raise "Can't find version string in Rakefile." if @match.nil?
105
+ end
106
+
107
+ def run
108
+ puts "Changing version to #{@new_version}"
109
+ @vers.replace @new_version
110
+ @rakefile.open("w") do |f|
111
+ f.print @content[0..@match.begin(1)-1]
112
+ f.print @new_version
113
+ f.print @content[@match.end(1)..-1]
114
+ end
115
+ end
116
+ end
117
+
118
+ class Rake::ShipitTask::Step::Commit
119
+ def initialize(msg="Release #{VERS}")
120
+ @msg = msg
121
+ end
122
+
123
+ def prepare
124
+ end
125
+
126
+ def run
127
+ system "svn", "ci", "-m", @msg
128
+ end
129
+ end
130
+
131
+ class Rake::ShipitTask::Step::Task
132
+ def initialize(*names)
133
+ @names = names
134
+ @tasks = []
135
+ end
136
+
137
+ def prepare
138
+ @names.each do |name|
139
+ @tasks << Rake.application[name.to_sym]
140
+ raise "Unknown task: #{name}" if @tasks.last.nil?
141
+ end
142
+ end
143
+
144
+ def run
145
+ @tasks.each do |t|
146
+ t.invoke
147
+ end
148
+ end
149
+ end
150
+
151
+ class Rake::ShipitTask::Step::RubyForge
152
+ def initialize(group_id=RUBYFORGE_PROJECT)
153
+ @group_id = group_id
154
+ end
155
+
156
+ def prepare
157
+ require 'rubyforge'
158
+ pkg = "pkg/#{NAME}-#{VERS}"
159
+ puts "pkg"
160
+
161
+ @rf = RubyForge.new
162
+ puts "Logging in"
163
+ @rf.login
164
+ @c = @rf.userconfig
165
+ @c["preformatted"] = true
166
+ @files = [
167
+ "#{pkg}.tgz",
168
+ "#{pkg}.gem"
169
+ ].compact
170
+ unless @rf.autoconfig["group_ids"].keys.include?(@group_id)
171
+ raise "Unknown group: #{@group_id}"
172
+ end
173
+ unless @rf.autoconfig["package_ids"].keys.include?(NAME)
174
+ @rf.create_package(@group_id, NAME)
175
+ end
176
+
177
+ @description = DESCRIPTION
178
+ end
179
+
180
+ def run
181
+ puts "Releasing #{NAME} #{VERS}"
182
+ @rf.add_release @group_id, NAME, VERS, *@files
183
+ @rf.post_news @group_id, "#{NAME} #{VERS} released.", "#{@description}"
184
+ end
185
+ end
186
+
187
+ class Rake::ShipitTask::Step::Ask
188
+ def run
189
+ puts "Really run? Cancel to press Ctrl+C."
190
+ $stdin.gets
191
+ end
192
+ end
193
+
194
+
195
+ __END__
196
+ require "shipit"
197
+
198
+ Rake::ShipitTask.new do |s|
199
+ s.Ask
200
+ s.Step.new {
201
+ puts "prepare phase"
202
+ }.and {
203
+ puts "run phase"
204
+ }
205
+ s.Twitter "Test phase"
206
+ end
207
+
208
+ Rake::ShipitTask.new do |s|
209
+ s.Ask
210
+ s.Task :test
211
+ s.ChangeVersion
212
+ s.Commit
213
+ s.Task :clean, :package
214
+ s.RubyForge
215
+ s.Step.new {
216
+
217
+ }.and {
218
+ }
219
+ s.Twitter
220
+ end
221
+
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ require "test/unit"
4
+ class ShipitTest < Test::Unit::TestCase
5
+ def test_no
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/shipit'
3
+
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shipit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - cho45
8
+ autorequire: shipit
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-01-05 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ description: Automated release tasks.
25
+ email: cho45@lowreal.net
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - README
32
+ - ChangeLog
33
+ files:
34
+ - README
35
+ - ChangeLog
36
+ - Rakefile
37
+ - test/shipit_test.rb
38
+ - test/test_helper.rb
39
+ - lib/shipit.rb
40
+ has_rdoc: true
41
+ homepage: http://lowreal.rubyforge.org
42
+ post_install_message:
43
+ rdoc_options:
44
+ - --title
45
+ - shipit documentation
46
+ - --charset
47
+ - utf-8
48
+ - --opname
49
+ - index.html
50
+ - --line-numbers
51
+ - --main
52
+ - README
53
+ - --inline-source
54
+ - --exclude
55
+ - ^(examples|extras)/
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ version:
70
+ requirements: []
71
+
72
+ rubyforge_project: lowreal
73
+ rubygems_version: 1.0.1
74
+ signing_key:
75
+ specification_version: 2
76
+ summary: Automated release tasks.
77
+ test_files:
78
+ - test/test_helper.rb