Skip to content

Commit 11a3ea0

Browse files
author
Bulat Shakirzyanov
committed
add rake task for package.xml generation
1 parent c7bd53c commit 11a3ea0

File tree

1 file changed

+215
-0
lines changed

1 file changed

+215
-0
lines changed

Rakefile

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
require 'erb'
2+
3+
class Release
4+
def initialize(version)
5+
parts = version.split('.', 3).map(&:to_i)
6+
major = parts[0] || 0
7+
minor = parts[1] || 0
8+
release = parts[2] || 0
9+
10+
parts = version.split('-', 2)
11+
stability = parts[1] || 'stable'
12+
stability = 'devel' if major < 1
13+
# strip release modifier e.g. beta.1 becomes beta
14+
stability = stability.split('.').first
15+
16+
@version = version
17+
@major = major
18+
@minor = minor
19+
@release = release
20+
@stability = stability
21+
@dirname = File.expand_path(File.dirname(__FILE__))
22+
end
23+
24+
def perform!
25+
puts "Preparing to release PHP Driver v#{version}-#{@stability}..."
26+
bump_version
27+
tag_repository
28+
end
29+
30+
private
31+
32+
attr_reader :version, :major, :minor, :release, :stability
33+
34+
def timestamp
35+
Time.now
36+
end
37+
38+
def sources
39+
(
40+
Dir.glob(@dirname + '/ext/config.{m4,w32}') +
41+
Dir.glob(@dirname + '/ext/php_cassandra.{c,h}') +
42+
Dir.glob(@dirname + '/ext/{php_cassandra_types.h,version.h}') +
43+
Dir.glob(@dirname + '/ext/src/**/*.{c,h}') +
44+
Dir.glob(@dirname + '/ext/util/**/*.{c,h}')
45+
).map {|p| p.gsub(@dirname + '/ext/', '') }.sort
46+
end
47+
48+
def docs
49+
Dir.glob(@dirname + '/ext/doc/**/*.*').
50+
map {|p| p.gsub(@dirname + '/ext/', '') }.sort
51+
end
52+
53+
def tests
54+
Dir.glob(@dirname + '/ext/tests/**/*.phpt').
55+
map {|p| p.gsub(@dirname + '/ext/', '') }.sort
56+
end
57+
58+
def files
59+
{
60+
'src' => sources,
61+
'doc' => docs,
62+
'test' => tests
63+
}
64+
end
65+
66+
def notes
67+
notes = ''
68+
state = :start
69+
70+
File.read(@dirname + '/CHANGELOG.md').each_line do |line|
71+
case state
72+
when :start
73+
next unless line.start_with?("# ")
74+
75+
version = line[2..-1].strip
76+
parts = version.split('.', 3).map(&:to_i)
77+
major = parts[0]
78+
minor = parts[1] || 0
79+
release = parts[2] || 0
80+
parts = version.split('-', 2)
81+
stability = parts[1]
82+
stability ||= 'stable'
83+
84+
if major == @major && minor == @minor &&
85+
release == @release && stability == @stability
86+
notes << line
87+
state = :body
88+
end
89+
when :body
90+
break if line.start_with?("# ")
91+
notes << line
92+
end
93+
end
94+
95+
notes.strip
96+
end
97+
98+
def package_xml
99+
ERB.new(<<-ERB)
100+
<?xml version="1.0" encoding="UTF-8"?>
101+
<package version="2.1" xmlns="http://pear.php.net/dtd/package-2.1" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.1 http://pear.php.net/dtd/package-2.1.xsd">
102+
<name>cassandra</name>
103+
<channel>pecl.php.net</channel>
104+
<summary>DataStax PHP Driver for Apache Cassandra</summary>
105+
<description>
106+
A modern, feature-rich and highly tunable PHP client library for Apache
107+
Cassandra and DataStax Enterprise using exclusively Cassandra's binary
108+
protocol and Cassandra Query Language v3.
109+
</description>
110+
<lead>
111+
<name>Bulat Shakirzyanov</name>
112+
<user>avalanche123</user>
113+
<email>[email protected]</email>
114+
<active>yes</active>
115+
</lead>
116+
<date><%= timestamp.strftime('%Y-%m-%d') %></date>
117+
<time><%= timestamp.strftime('%H:%M:%S') %></time>
118+
<version>
119+
<release><%= major %>.<%= minor %>.<%= release %></release>
120+
<api><%= major %>.<%= minor %>.<%= release %></api>
121+
</version>
122+
<stability>
123+
<release><%= stability %></release>
124+
<api><%= stability %></api>
125+
</stability>
126+
<license uri="http://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</license>
127+
<notes>
128+
<%= notes %>
129+
</notes>
130+
<contents>
131+
<dir name="/"><%
132+
files.each do |role, list|
133+
list.each do |file|
134+
%>
135+
<file role="<%= role %>" name="<%= file %>" /><%
136+
end
137+
end
138+
%>
139+
</dir>
140+
</contents>
141+
<dependencies>
142+
<required>
143+
<php>
144+
<min>5.3.4</min>
145+
<max>5.99.99</max>
146+
</php>
147+
<pearinstaller>
148+
<min>1.4.8</min>
149+
</pearinstaller>
150+
</required>
151+
</dependencies>
152+
<providesextension>cassandra</providesextension>
153+
<extsrcrelease/>
154+
</package>
155+
ERB
156+
end
157+
158+
def version_h
159+
ERB.new(<<-ERB)
160+
#ifndef PHP_CASSANDRA_VERSION_H
161+
#define PHP_CASSANDRA_VERSION_H
162+
163+
/* Define Extension and Version Properties */
164+
#define PHP_CASSANDRA_NAME "cassandra"
165+
#define PHP_CASSANDRA_MAJOR <%= major %>
166+
#define PHP_CASSANDRA_MINOR <%= minor %>
167+
#define PHP_CASSANDRA_RELEASE <%= release %>
168+
#define PHP_CASSANDRA_STABILITY "<%= stability %>"
169+
#define PHP_CASSANDRA_VERSION "<%= version %>"
170+
171+
#endif /* PHP_CASSANDRA_VERSION_H */
172+
ERB
173+
end
174+
175+
def create_package_xml
176+
stability = @stability
177+
stability = 'stable' if stability.start_with?('rc')
178+
179+
unless ["snapshot", "devel", "alpha", "beta", "stable"].include?(stability)
180+
raise ::ArgumentError,
181+
%[stability must be "snapshot", "devel", "alpha", "beta" or ] +
182+
%["stable", #{stability.inspect} given]
183+
end
184+
185+
File.open(@dirname + '/ext/package.xml', 'w+') do |f|
186+
f.write(package_xml.result(binding))
187+
end
188+
end
189+
190+
def create_version_h
191+
File.open(@dirname + '/ext/version.h', 'w+') do |f|
192+
f.write(version_h.result(binding))
193+
end
194+
end
195+
196+
def bump_version
197+
puts "Bumping version.h and package.xml"
198+
create_version_h
199+
create_package_xml
200+
# system('git', 'add', @dirname + '/ext/package.xml')
201+
# system('git', 'add', @dirname + '/ext/version.h')
202+
# system('git', 'commit', '-m', "prepare release v#{@version}")
203+
end
204+
205+
def tag_repository
206+
puts "Creating v#{version} tag"
207+
# system('git', 'tag', "v#{@version}")
208+
# system('git', 'push')
209+
end
210+
end
211+
212+
desc 'Prepare a new release of the PHP Driver'
213+
task :release, [:version] do |t, args|
214+
Release.new(args['version']).perform!
215+
end

0 commit comments

Comments
 (0)