Skip to content

Commit 9fca571

Browse files
authored
release/6.0.3 (#528)
1 parent a8df8ca commit 9fca571

File tree

3 files changed

+178
-9
lines changed

3 files changed

+178
-9
lines changed

package.xml

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<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">
2+
<package 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" version="2.1" 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">
33
<name>rdkafka</name>
44
<channel>pecl.php.net</channel>
55
<summary>Kafka client based on librdkafka</summary>
@@ -10,10 +10,10 @@
1010
<email>arnaud.lb@gmail.com</email>
1111
<active>yes</active>
1212
</lead>
13-
<date>2022-06-12</date>
14-
<time>12:00:00</time>
13+
<date>2022-07-02</date>
14+
<time>12:26:56</time>
1515
<version>
16-
<release>6.0.2</release>
16+
<release>6.0.3</release>
1717
<api>6.0.0</api>
1818
</version>
1919
<stability>
@@ -22,8 +22,8 @@
2222
</stability>
2323
<license uri="http://opensource.org/licenses/mit-license.php">MIT License</license>
2424
<notes>
25-
## Bugfixes
26-
- Fixed signature of RdKafka\KafkaConsumer::getMetadata() (#521, @arnaud-lb)
25+
## Improvements
26+
- Ability to provide custom `librdkafka` path during install (#526, @Wirone)
2727
</notes>
2828
<contents>
2929
<dir name="/">
@@ -160,6 +160,23 @@
160160
<configureoption name="with-rdkafka" default="autodetect" prompt="librdkafka installation path?"/>
161161
</extsrcrelease>
162162
<changelog>
163+
<release>
164+
<date>2022-06-12</date>
165+
<time>12:00:00</time>
166+
<version>
167+
<release>6.0.2</release>
168+
<api>6.0.0</api>
169+
</version>
170+
<stability>
171+
<release>stable</release>
172+
<api>stable</api>
173+
</stability>
174+
<license uri="http://opensource.org/licenses/mit-license.php">MIT License</license>
175+
<notes>
176+
## Bugfixes
177+
- Fixed signature of RdKafka\KafkaConsumer::getMetadata() (#521, @arnaud-lb)
178+
</notes>
179+
</release>
163180
<release>
164181
<date>2022-02-15</date>
165182
<time>12:00:00</time>
@@ -194,8 +211,8 @@
194211

195212
## Improvements
196213
- PHP 8.1 support (@remicollet, @ruudk, @nick-zh)
197-
- Added parameter types (when built with PHP>=8.0) (@arnaud-lb)
198-
- Added tentative return types (when built with PHP>=8.1) (@arnaud-lb)
214+
- Added parameter types (when built with PHP&gt;=8.0) (@arnaud-lb)
215+
- Added tentative return types (when built with PHP&gt;=8.1) (@arnaud-lb)
199216

200217
## Deprecations
201218
- PHP 8.1: Overloading php-rdkafka methods without specifying a return type

php_rdkafka.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ PHP_METHOD(RdKafka, __construct);
4343
extern zend_module_entry rdkafka_module_entry;
4444
#define phpext_rdkafka_ptr &rdkafka_module_entry
4545

46-
#define PHP_RDKAFKA_VERSION "6.0.2"
46+
#define PHP_RDKAFKA_VERSION "6.0.3"
4747

4848
extern zend_object_handlers kafka_default_object_handlers;
4949
extern zend_class_entry * ce_kafka_exception;

tools/new-package-release.php

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
#!/usr/bin/env php
2+
<?php
3+
4+
const NS = 'http://pear.php.net/dtd/package-2.1';
5+
6+
if (!isset($argv[1])) {
7+
fprintf(STDERR, "Missing version parameter\n");
8+
printUsage();
9+
exit(1);
10+
}
11+
12+
$newVersion = $argv[1];
13+
14+
$doc = new DOMDocument();
15+
if (!$doc->load(__DIR__.'/../package.xml')) {
16+
throw new \Exception('Failed loading package.xml');
17+
}
18+
19+
$releaseNotes = generateReleaseNotes($newVersion);
20+
21+
moveCurrentReleaseToChangelog($doc);
22+
updateCurrentRelease($doc, $newVersion, $releaseNotes);
23+
24+
file_put_contents(__DIR__.'/../package.xml', $doc->saveXML());
25+
26+
function printUsage(): void
27+
{
28+
fprintf(STDERR, "Usage: %s <version>\n", $_SERVER['argv'][0]);
29+
}
30+
31+
function generateReleaseNotes(string $newVersion): string
32+
{
33+
$cmd = sprintf(
34+
'gh api repos/arnaud-lb/php-rdkafka/releases/generate-notes -f tag_name=%s',
35+
escapeshellcmd($newVersion),
36+
);
37+
38+
$result = exec($cmd);
39+
if ($result === false) {
40+
throw new \Exception(sprintf('Command `%s` failed', $cmd));
41+
}
42+
43+
$lines = explode("\n", json_decode($result, true)['body']);
44+
45+
$newLines = [];
46+
$add = false;
47+
foreach ($lines as $line) {
48+
if (str_starts_with($line, '###')) {
49+
$add = true;
50+
$line = substr($line, 1);
51+
} elseif (str_starts_with($line, '##')) {
52+
$add = false;
53+
}
54+
if ($add) {
55+
$line = preg_replace(
56+
'# by (@[^ ]+) in https://github.com/[^ ]+/pull/([0-9]+)#',
57+
' (#\2, \1)',
58+
$line,
59+
);
60+
$line = preg_replace(
61+
'#^\*#',
62+
'-',
63+
$line,
64+
);
65+
$newLines[] = $line;
66+
}
67+
}
68+
69+
return implode("\n", $newLines);
70+
}
71+
72+
function updateCurrentRelease(DOMDocument $doc, string $newVersion, string $releaseNotes): void
73+
{
74+
$date = date('Y-m-d');
75+
$time = date('H:i:s');
76+
77+
$dateElem = findOneElement($doc, '/ns:package/ns:date');
78+
replaceContent($dateElem, $doc->createTextNode($date));
79+
80+
$timeElem = findOneElement($doc, '/ns:package/ns:time');
81+
replaceContent($timeElem, $doc->createTextNode($time));
82+
83+
$versionElem = findOneElement($doc, '/ns:package/ns:version/ns:release');
84+
replaceContent($versionElem, $doc->createTextNode($newVersion));
85+
86+
$notesElem = findOneElement($doc, '/ns:package/ns:notes');
87+
$releaseNotes = rtrim("\n " . str_replace("\n", "\n ", $releaseNotes))."\n ";
88+
replaceContent($notesElem, $doc->createTextNode($releaseNotes));
89+
}
90+
91+
function moveCurrentReleaseToChangelog(DOMDocument $doc): void
92+
{
93+
$oldRelease = $doc->createElementNS(NS, 'release');
94+
$oldRelease->appendChild($doc->createTextNode("\n"));
95+
96+
$nodesToCopy = ['date', 'time', 'version', 'stability', 'license', 'notes'];
97+
98+
foreach ($nodesToCopy as $nodeName) {
99+
$path = sprintf('/ns:package/ns:%s', $nodeName);
100+
$elem = findOneElement($doc, $path);
101+
102+
$elem = $elem->cloneNode(true);
103+
104+
$oldRelease->appendChild($doc->createTextNode(" "));
105+
$oldRelease->appendChild($elem);
106+
$oldRelease->appendChild($doc->createTextNode("\n"));
107+
}
108+
109+
indent($oldRelease, ' ');
110+
111+
$changelogElem = findOneElement($doc, '/ns:package/ns:changelog');
112+
$changelogElem->insertBefore($oldRelease, $changelogElem->firstChild);
113+
$changelogElem->insertBefore($doc->createTextNode("\n "), $oldRelease);
114+
}
115+
116+
function findOneElement(DOMDocument $doc, string $path): DOMElement
117+
{
118+
$xp = new DOMXPath($doc, false);
119+
$xp->registerNamespace('ns', NS);
120+
121+
$list = $xp->evaluate($path);
122+
if ($list->length !== 1) {
123+
throw new \Exception(sprintf(
124+
'XPath expression %s expected to find 1 element, but found %d',
125+
$path,
126+
$list->length,
127+
));
128+
}
129+
130+
return $list->item(0);
131+
}
132+
133+
function indent(DOMElement $elem, string $indentString): void
134+
{
135+
foreach ($elem->childNodes as $node) {
136+
if ($node instanceof DOMText) {
137+
$node->textContent = str_replace("\n", "\n".$indentString, $node->textContent);
138+
} else if ($node instanceof DOMElement) {
139+
indent($node, $indentString);
140+
}
141+
}
142+
}
143+
144+
function replaceContent(DOMElement $elem, DOMNode $newContent): void
145+
{
146+
while ($elem->firstChild !== null) {
147+
$elem->removeChild($elem->firstChild);
148+
}
149+
150+
$elem->appendChild($newContent);
151+
}
152+

0 commit comments

Comments
 (0)