Skip to content

Commit 8a39db5

Browse files
authored
Make sure symfony-docs also ignore target_branch === current version (#101)
* Make sure symfony-docs also ignore target_branch === current version * Fixed typo
1 parent 72e6437 commit 8a39db5

File tree

4 files changed

+71
-3
lines changed

4 files changed

+71
-3
lines changed

config/services.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ parameters:
2121
- 'App\Subscriber\NeedsReviewNewPRSubscriber'
2222
- 'App\Subscriber\BugLabelNewIssueSubscriber'
2323
- 'App\Subscriber\AutoLabelFromContentSubscriber'
24-
- 'App\Subscriber\MilestoneNewPRSubscriber'
24+
- 'subscriber.symfony_docs.milestone'
2525
secret: '%env(SYMFONY_DOCS_SECRET)%'
2626

2727
# used in a functional test
@@ -78,3 +78,8 @@ services:
7878
arguments: [ '%repositories%' ]
7979

8080
App\Repository\Provider\RepositoryProviderInterface: '@App\Repository\Provider\InMemoryRepositoryProvider'
81+
82+
subscriber.symfony_docs.milestone:
83+
class: App\Subscriber\MilestoneNewPRSubscriber
84+
arguments:
85+
$ignoreCurrentVersion: true
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Service;
6+
7+
use Symfony\Contracts\Cache\CacheInterface;
8+
use Symfony\Contracts\Cache\ItemInterface;
9+
use Symfony\Contracts\HttpClient\HttpClientInterface;
10+
11+
class SymfonyVersionProvider
12+
{
13+
/**
14+
* @var HttpClientInterface
15+
*/
16+
private $httpClient;
17+
18+
/**
19+
* @var CacheInterface
20+
*/
21+
private $cache;
22+
23+
public function __construct(HttpClientInterface $httpClient, CacheInterface $cache)
24+
{
25+
$this->httpClient = $httpClient;
26+
$this->cache = $cache;
27+
}
28+
29+
public function getCurrentVersion()
30+
{
31+
$httpClient = $this->httpClient;
32+
33+
return $this->cache->get('symfony_version', function (ItemInterface $item) use ($httpClient) {
34+
$defaultValue = '99.99';
35+
try {
36+
$response = $httpClient->request('GET', 'https://symfony.com/releases.json');
37+
$data = $response->toArray(true);
38+
$version = $data['latest_stable_version'] ?? $defaultValue;
39+
} catch (\Throwable $e) {
40+
$version = $defaultValue;
41+
}
42+
43+
$item->expiresAfter($version === $defaultValue ? 300 : 604800);
44+
45+
return $version;
46+
});
47+
}
48+
}

src/Subscriber/MilestoneNewPRSubscriber.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\Event\GitHubEvent;
66
use App\GitHubEvents;
77
use App\Issues\GitHub\MilestonesApi;
8+
use App\Service\SymfonyVersionProvider;
89
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
910

1011
/**
@@ -13,10 +14,14 @@
1314
class MilestoneNewPRSubscriber implements EventSubscriberInterface
1415
{
1516
private $milestonesApi;
17+
private $symfonyVersionProvider;
18+
private $ignoreCurrentVersion;
1619

17-
public function __construct(MilestonesApi $milestonesApi)
20+
public function __construct(MilestonesApi $milestonesApi, SymfonyVersionProvider $symfonyVersionProvider, $ignoreCurrentVersion = false)
1821
{
1922
$this->milestonesApi = $milestonesApi;
23+
$this->symfonyVersionProvider = $symfonyVersionProvider;
24+
$this->ignoreCurrentVersion = $ignoreCurrentVersion;
2025
}
2126

2227
/**
@@ -35,6 +40,10 @@ public function onPullRequest(GitHubEvent $event)
3540
return;
3641
}
3742

43+
if ($this->ignoreCurrentVersion && $targetBranch === $this->symfonyVersionProvider->getCurrentVersion()) {
44+
return;
45+
}
46+
3847
if (!$this->milestonesApi->exists($repository, $targetBranch)) {
3948
return;
4049
}

tests/Subscriber/MilestoneNewPRSubscriberTest.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use App\GitHubEvents;
77
use App\Issues\GitHub\MilestonesApi;
88
use App\Repository\Repository;
9+
use App\Service\SymfonyVersionProvider;
910
use App\Subscriber\MilestoneNewPRSubscriber;
1011
use PHPUnit\Framework\TestCase;
1112
use Symfony\Component\EventDispatcher\EventDispatcher;
@@ -26,7 +27,12 @@ class MilestoneNewPRSubscriberTest extends TestCase
2627
protected function setUp()
2728
{
2829
$this->milestonesApi = $this->createMock(MilestonesApi::class);
29-
$this->subscriber = new MilestoneNewPRSubscriber($this->milestonesApi);
30+
$symfonyVersionProvider = $this->getMockBuilder(SymfonyVersionProvider::class)
31+
->disableOriginalConstructor()
32+
->setMethods(['getCurrentVersion'])
33+
->getMock();
34+
$symfonyVersionProvider->method('getCurrentVersion')->willReturn('5.1');
35+
$this->subscriber = new MilestoneNewPRSubscriber($this->milestonesApi, $symfonyVersionProvider);
3036
$this->repository = new Repository('nyholm', 'symfony', null);
3137

3238
$this->dispatcher = new EventDispatcher();

0 commit comments

Comments
 (0)