Skip to content

Commit 38abd3e

Browse files
committed
refactor: reuse self-update version resolver for app metadata
1 parent d45af4b commit 38abd3e

4 files changed

Lines changed: 32 additions & 9 deletions

File tree

src/Console/DevTools.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
use FastForward\DevTools\SelfUpdate\SelfUpdateRunnerInterface;
2727
use FastForward\DevTools\SelfUpdate\SelfUpdateScopeResolverInterface;
2828
use FastForward\DevTools\SelfUpdate\VersionCheckNotifierInterface;
29+
use FastForward\DevTools\SelfUpdate\VersionCheckerInterface;
2930
use FastForward\DevTools\SelfUpdate\WorkingDirectorySwitcherInterface;
30-
use Composer\InstalledVersions;
3131
use Override;
3232
use Symfony\Component\Console\Application;
3333
use Symfony\Component\Console\Command\Command;
@@ -46,8 +46,6 @@
4646
*/
4747
final class DevTools extends Application
4848
{
49-
private const string PACKAGE = 'fast-forward/dev-tools';
50-
5149
private const string VERSION_UNKNOWN = '0.0.0';
5250

5351
private const string LOGO = <<<'LOGO'
@@ -78,6 +76,7 @@ final class DevTools extends Application
7876
* @param VersionCheckNotifierInterface $versionCheckNotifier emits non-blocking version freshness warnings
7977
* @param SelfUpdateRunnerInterface $selfUpdateRunner runs explicit or automatic self-update flows
8078
* @param SelfUpdateScopeResolverInterface $selfUpdateScopeResolver resolves whether the active binary is global
79+
* @param VersionCheckerInterface $versionChecker resolves the installed DevTools version for metadata output
8180
* @param EnvironmentInterface $environment reads environment flags for optional auto-update behavior
8281
* @param RuntimeEnvironmentInterface $runtimeEnvironment resolves runtime environment capabilities
8382
*/
@@ -87,6 +86,7 @@ public function __construct(
8786
private readonly VersionCheckNotifierInterface $versionCheckNotifier,
8887
private readonly SelfUpdateRunnerInterface $selfUpdateRunner,
8988
private readonly SelfUpdateScopeResolverInterface $selfUpdateScopeResolver,
89+
private readonly VersionCheckerInterface $versionChecker,
9090
private readonly EnvironmentInterface $environment,
9191
private readonly RuntimeEnvironmentInterface $runtimeEnvironment,
9292
) {
@@ -103,9 +103,7 @@ public function __construct(
103103
*/
104104
private function resolveVersion(): string
105105
{
106-
return InstalledVersions::getPrettyVersion(self::PACKAGE)
107-
?? InstalledVersions::getVersion(self::PACKAGE)
108-
?? self::VERSION_UNKNOWN;
106+
return $this->versionChecker->resolveCurrentVersion() ?? self::VERSION_UNKNOWN;
109107
}
110108

111109
/**

src/SelfUpdate/ComposerVersionChecker.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ public function check(): ?VersionCheckResult
5252
return null;
5353
}
5454

55-
$currentVersion = InstalledVersions::getPrettyVersion(self::PACKAGE)
56-
?? InstalledVersions::getVersion(self::PACKAGE);
55+
$currentVersion = $this->resolveCurrentVersion();
5756

5857
if (null === $currentVersion) {
5958
return null;
@@ -68,6 +67,15 @@ public function check(): ?VersionCheckResult
6867
return new VersionCheckResult($currentVersion, $latestVersion);
6968
}
7069

70+
/**
71+
* Returns the installed DevTools version without running external Composer commands.
72+
*/
73+
public function resolveCurrentVersion(): ?string
74+
{
75+
return InstalledVersions::getPrettyVersion(self::PACKAGE)
76+
?? InstalledVersions::getVersion(self::PACKAGE);
77+
}
78+
7179
/**
7280
* Resolves the latest stable DevTools version available to Composer.
7381
*/

src/SelfUpdate/VersionCheckerInterface.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,11 @@ interface VersionCheckerInterface
2828
* Returns version information when it can be resolved without blocking command execution.
2929
*/
3030
public function check(): ?VersionCheckResult;
31+
32+
/**
33+
* Returns the currently installed DevTools version when available.
34+
*
35+
* @return string|null the version string for display and fallback logic
36+
*/
37+
public function resolveCurrentVersion(): ?string;
3138
}

tests/Console/DevToolsTest.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
use FastForward\DevTools\SelfUpdate\ComposerVersionChecker;
4545
use FastForward\DevTools\SelfUpdate\SelfUpdateRunnerInterface;
4646
use FastForward\DevTools\SelfUpdate\SelfUpdateScopeResolverInterface;
47+
use FastForward\DevTools\SelfUpdate\VersionCheckerInterface;
4748
use FastForward\DevTools\SelfUpdate\VersionCheckNotifier;
4849
use FastForward\DevTools\SelfUpdate\VersionCheckNotifierInterface;
4950
use FastForward\DevTools\SelfUpdate\WorkingDirectorySwitcher;
@@ -124,6 +125,11 @@ final class DevToolsTest extends TestCase
124125
*/
125126
private ObjectProphecy $selfUpdateScopeResolver;
126127

128+
/**
129+
* @var ObjectProphecy<VersionCheckerInterface>
130+
*/
131+
private ObjectProphecy $versionChecker;
132+
127133
/**
128134
* @var ObjectProphecy<EnvironmentInterface>
129135
*/
@@ -154,8 +160,11 @@ protected function setUp(): void
154160
$this->versionCheckNotifier = $this->prophesize(VersionCheckNotifierInterface::class);
155161
$this->selfUpdateRunner = $this->prophesize(SelfUpdateRunnerInterface::class);
156162
$this->selfUpdateScopeResolver = $this->prophesize(SelfUpdateScopeResolverInterface::class);
163+
$this->versionChecker = $this->prophesize(VersionCheckerInterface::class);
157164
$this->environment = $this->prophesize(EnvironmentInterface::class);
158165
$this->runtimeEnvironment = $this->prophesize(RuntimeEnvironmentInterface::class);
166+
$this->versionChecker->resolveCurrentVersion()
167+
->willReturn('1.2.3');
159168
$this->runtimeEnvironment->isAgentPresent()
160169
->willReturn(false);
161170
$this->originalWorkspaceDirectoryEnv = getenv(ManagedWorkspace::ENV_WORKSPACE_DIR);
@@ -214,7 +223,7 @@ public function __construct()
214223
->willReturn($customCommand);
215224

216225
self::assertSame('Fast Forward Dev Tools', $this->devTools->getName());
217-
self::assertMatchesRegularExpression('/\\S+/', $this->devTools->getVersion());
226+
self::assertSame('1.2.3', $this->devTools->getVersion());
218227
self::assertTrue($this->devTools->has('custom'));
219228
self::assertSame($customCommand, $this->devTools->get('custom'));
220229
}
@@ -594,6 +603,7 @@ private function createDevTools(): DevTools
594603
$this->versionCheckNotifier->reveal(),
595604
$this->selfUpdateRunner->reveal(),
596605
$this->selfUpdateScopeResolver->reveal(),
606+
$this->versionChecker->reveal(),
597607
$this->environment->reveal(),
598608
$this->runtimeEnvironment->reveal(),
599609
);

0 commit comments

Comments
 (0)