Skip to content

Commit 390a1b7

Browse files
committed
Add common hashtags to release "toots" on Mastodon
Signed-off-by: George Steel <george@net-glue.co.uk>
1 parent 8319ffa commit 390a1b7

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

src/GitHub/Listener/GitHubReleaseMastodonListener.php

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
use Psr\Log\LoggerInterface;
1010
use Throwable;
1111

12+
use function implode;
1213
use function in_array;
1314
use function sprintf;
15+
use function str_contains;
1416
use function str_replace;
1517

1618
class GitHubReleaseMastodonListener
1719
{
18-
private const TOOT_TEMPLATE = "Released: {package} {version}\n\n{url}";
20+
private const TOOT_TEMPLATE = "Released: {package} {version}\n{hashtags}\n\n{url}";
1921

2022
public function __construct(
2123
private MastodonClient $mastodonClient,
@@ -34,9 +36,21 @@ public function __invoke(GitHubRelease $message): void
3436
return;
3537
}
3638

39+
$hashtags = ['#php'];
40+
41+
if (str_contains($message->getPackage(), 'mezzio')) {
42+
$hashtags[] = '#mezzio';
43+
}
44+
45+
if (str_contains($message->getPackage(), 'laminas')) {
46+
$hashtags[] = '#laminas';
47+
}
48+
49+
$hashtags = implode(' ', $hashtags);
50+
3751
$toot = str_replace(
38-
['{package}', '{version}', '{url}'],
39-
[$message->getPackage(), $message->getVersion(), $message->getUrl()],
52+
['{package}', '{version}', '{url}', '{hashtags}'],
53+
[$message->getPackage(), $message->getVersion(), $message->getUrl(), $hashtags],
4054
self::TOOT_TEMPLATE
4155
);
4256

test/GitHub/Listener/GitHubReleaseMastodonListenerTest.php

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,16 @@
77
use App\GitHub\Event\GitHubRelease;
88
use App\GitHub\Listener\GitHubReleaseMastodonListener;
99
use App\Mastodon\MastodonClient;
10+
use PHPUnit\Framework\MockObject\MockObject;
1011
use PHPUnit\Framework\TestCase;
1112
use Psr\Log\LoggerInterface;
1213
use RuntimeException;
1314

1415
class GitHubReleaseMastodonListenerTest extends TestCase
1516
{
16-
/** @var GitHubReleaseMastodonListener */
17-
private $listener;
18-
19-
/** @var LoggerInterface */
20-
private $logger;
21-
22-
/** @var MastodonClient */
23-
private $mastodon;
17+
private GitHubReleaseMastodonListener $listener;
18+
private LoggerInterface&MockObject $logger;
19+
private MastodonClient&MockObject $mastodon;
2420

2521
public function setUp(): void
2622
{
@@ -65,7 +61,7 @@ public function testLogsTootUpdateError(): void
6561

6662
$this->mastodon
6763
->expects($this->once())
68-
->method('statusesUpdate')->with("Released: laminas/some-component 2.3.4p8\n\nrelease-url")
64+
->method('statusesUpdate')->with("Released: laminas/some-component 2.3.4p8\n#php #laminas\n\nrelease-url")
6965
->willThrowException(new RuntimeException('Error tooting release'));
7066

7167
$this->logger
@@ -92,7 +88,7 @@ public function testDoesNotLogWhenMastodonUpdateIsSuccessful(): void
9288
$this->mastodon
9389
->expects($this->once())
9490
->method('statusesUpdate')
95-
->with("Released: laminas/some-component 2.3.4p8\n\nrelease-url")
91+
->with("Released: laminas/some-component 2.3.4p8\n#php #laminas\n\nrelease-url")
9692
->willReturn('The response-body from Mastodon that is never to be used');
9793

9894
$this->logger

0 commit comments

Comments
 (0)