mirror of
https://github.com/laravel/valet.git
synced 2026-02-05 08:30:07 +01:00
Add support for .valetrc (#1347)
* Add .valetrc support * Apply fixes from StyleCI * wip Co-authored-by: StyleCI Bot <bot@styleci.io>
This commit is contained in:
@@ -13,7 +13,7 @@ class Magento2ValetDriver extends ValetDriver
|
|||||||
*
|
*
|
||||||
* @param string|null
|
* @param string|null
|
||||||
*/
|
*/
|
||||||
/*?string*/ private $mageMode = null;
|
private $mageMode = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine if the driver serves the request.
|
* Determine if the driver serves the request.
|
||||||
|
|||||||
@@ -1021,18 +1021,44 @@ public function replaceSockFile(string $siteConf, string $phpVersion): string
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get PHP version from .valetphprc for a site.
|
* Get configuration items defined in .valetrc for a site.
|
||||||
*/
|
*/
|
||||||
public function phpRcVersion(string $site): ?string
|
public function valetRc(string $siteName): array
|
||||||
{
|
{
|
||||||
if ($site = $this->parked()->merge($this->links())->where('site', $site)->first()) {
|
if ($site = $this->parked()->merge($this->links())->where('site', $siteName)->first()) {
|
||||||
$path = data_get($site, 'path').'/.valetphprc';
|
$path = data_get($site, 'path').'/.valetrc';
|
||||||
|
|
||||||
if ($this->files->exists($path)) {
|
if ($this->files->exists($path)) {
|
||||||
return PhpFpm::normalizePhpVersion(trim($this->files->get($path)));
|
return collect(explode(PHP_EOL, trim($this->files->get($path))))->filter(function ($line) {
|
||||||
|
return str_contains($line, '=');
|
||||||
|
})->mapWithKeys(function ($item, $index) {
|
||||||
|
[$key, $value] = explode('=', $item);
|
||||||
|
|
||||||
|
return [strtolower($key) => $value];
|
||||||
|
})->all();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get PHP version from .valetrc or .valetphprc for a site.
|
||||||
|
*/
|
||||||
|
public function phpRcVersion(string $siteName): ?string
|
||||||
|
{
|
||||||
|
if ($site = $this->parked()->merge($this->links())->where('site', $siteName)->first()) {
|
||||||
|
$oldPath = data_get($site, 'path').'/.valetphprc';
|
||||||
|
|
||||||
|
if ($this->files->exists($oldPath)) {
|
||||||
|
return PhpFpm::normalizePhpVersion(trim($this->files->get($oldPath)));
|
||||||
|
}
|
||||||
|
|
||||||
|
$valetRc = $this->valetRc($siteName);
|
||||||
|
|
||||||
|
return PhpFpm::normalizePhpVersion(data_get($valetRc, 'php'));
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -572,7 +572,7 @@ function (ConsoleCommandEvent $event) {
|
|||||||
$linkedVersion = Brew::linkedPhp();
|
$linkedVersion = Brew::linkedPhp();
|
||||||
|
|
||||||
if ($phpVersion = Site::phpRcVersion($site)) {
|
if ($phpVersion = Site::phpRcVersion($site)) {
|
||||||
info("Found '{$site}/.valetphprc' specifying version: {$phpVersion}");
|
info("Found '{$site}/.valetrc' or '{$site}/.valetphprc' specifying version: {$phpVersion}");
|
||||||
} else {
|
} else {
|
||||||
$domain = $site.'.'.data_get(Configuration::read(), 'tld');
|
$domain = $site.'.'.data_get(Configuration::read(), 'tld');
|
||||||
if ($phpVersion = PhpFpm::normalizePhpVersion(Site::customPhpVersion($domain))) {
|
if ($phpVersion = PhpFpm::normalizePhpVersion(Site::customPhpVersion($domain))) {
|
||||||
@@ -604,7 +604,7 @@ function (ConsoleCommandEvent $event) {
|
|||||||
|
|
||||||
if (is_null($phpVersion)) {
|
if (is_null($phpVersion)) {
|
||||||
if ($phpVersion = Site::phpRcVersion($site)) {
|
if ($phpVersion = Site::phpRcVersion($site)) {
|
||||||
info("Found '{$site}/.valetphprc' specifying version: {$phpVersion}");
|
info("Found '{$site}/.valetrc' or '{$site}/.valetphprc' specifying version: {$phpVersion}");
|
||||||
} else {
|
} else {
|
||||||
info(PHP_EOL.'Please provide a version number. E.g.:');
|
info(PHP_EOL.'Please provide a version number. E.g.:');
|
||||||
info('valet isolate php@8.2');
|
info('valet isolate php@8.2');
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.0",
|
"php": "^7.1|^8.0",
|
||||||
"illuminate/collections": "^8.0|^9.0|^10.0",
|
"illuminate/collections": "^8.0|^9.0|^10.0",
|
||||||
"illuminate/container": "~5.1|^6.0|^7.0|^8.0|^9.0|^10.0",
|
"illuminate/container": "~5.1|^6.0|^7.0|^8.0|^9.0|^10.0",
|
||||||
"mnapoli/silly": "^1.0",
|
"mnapoli/silly": "^1.0",
|
||||||
|
|||||||
@@ -900,54 +900,39 @@ public function test_it_returns_secured_sites()
|
|||||||
$this->assertSame(['helloworld.tld'], $sites);
|
$this->assertSame(['helloworld.tld'], $sites);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_it_can_read_valet_rc_files()
|
||||||
|
{
|
||||||
|
resolve(Configuration::class)->addPath(__DIR__.'/fixtures/Parked/Sites');
|
||||||
|
$site = resolve(Site::class);
|
||||||
|
|
||||||
|
$this->assertEquals([
|
||||||
|
'item' => 'value',
|
||||||
|
'php' => 'php@8.0',
|
||||||
|
'other_item' => 'othervalue',
|
||||||
|
], $site->valetRc('site-w-valetrc-1'));
|
||||||
|
|
||||||
|
$this->assertEquals([
|
||||||
|
'php' => 'php@8.1',
|
||||||
|
], $site->valetRc('site-w-valetrc-2'));
|
||||||
|
|
||||||
|
$this->assertEquals([
|
||||||
|
'item' => 'value',
|
||||||
|
'php' => 'php@8.2',
|
||||||
|
], $site->valetRc('site-w-valetrc-3'));
|
||||||
|
}
|
||||||
|
|
||||||
public function test_it_can_read_php_rc_version()
|
public function test_it_can_read_php_rc_version()
|
||||||
{
|
{
|
||||||
$config = Mockery::mock(Configuration::class);
|
resolve(Configuration::class)->addPath(__DIR__.'/fixtures/Parked/Sites');
|
||||||
$files = Mockery::mock(Filesystem::class);
|
$site = resolve(Site::class);
|
||||||
|
|
||||||
swap(Configuration::class, $config);
|
$this->assertEquals('php@8.1', $site->phpRcVersion('site-w-valetphprc-1'));
|
||||||
swap(Filesystem::class, $files);
|
$this->assertEquals('php@8.0', $site->phpRcVersion('site-w-valetphprc-2'));
|
||||||
|
$this->assertEquals(null, $site->phpRcVersion('my-best-site'));
|
||||||
$siteMock = Mockery::mock(Site::class, [
|
$this->assertEquals(null, $site->phpRcVersion('non-existent-site'));
|
||||||
resolve(Brew::class),
|
$this->assertEquals('php@8.0', $site->phpRcVersion('site-w-valetrc-1'));
|
||||||
resolve(Configuration::class),
|
$this->assertEquals('php@8.1', $site->phpRcVersion('site-w-valetrc-2'));
|
||||||
resolve(CommandLine::class),
|
$this->assertEquals('php@8.2', $site->phpRcVersion('site-w-valetrc-3'));
|
||||||
resolve(Filesystem::class),
|
|
||||||
])->makePartial();
|
|
||||||
|
|
||||||
swap(Site::class, $siteMock);
|
|
||||||
|
|
||||||
$config->shouldReceive('read')
|
|
||||||
->andReturn(['tld' => 'test', 'loopback' => VALET_LOOPBACK, 'paths' => []]);
|
|
||||||
|
|
||||||
$siteMock->shouldReceive('parked')
|
|
||||||
->andReturn(collect([
|
|
||||||
'site1' => [
|
|
||||||
'site' => 'site1',
|
|
||||||
'secured' => '',
|
|
||||||
'url' => 'http://site1.test',
|
|
||||||
'path' => '/Users/name/code/site1',
|
|
||||||
],
|
|
||||||
]));
|
|
||||||
|
|
||||||
$siteMock->shouldReceive('links')->andReturn(collect([
|
|
||||||
'site2' => [
|
|
||||||
'site' => 'site2',
|
|
||||||
'secured' => 'X',
|
|
||||||
'url' => 'http://site2.test',
|
|
||||||
'path' => '/Users/name/some-other-directory/site2',
|
|
||||||
],
|
|
||||||
]));
|
|
||||||
|
|
||||||
$files->shouldReceive('exists')->with('/Users/name/code/site1/.valetphprc')->andReturn(true);
|
|
||||||
$files->shouldReceive('get')->with('/Users/name/code/site1/.valetphprc')->andReturn('php@8.1');
|
|
||||||
|
|
||||||
$files->shouldReceive('exists')->with('/Users/name/some-other-directory/site2/.valetphprc')->andReturn(true);
|
|
||||||
$files->shouldReceive('get')->with('/Users/name/some-other-directory/site2/.valetphprc')->andReturn('php@8.0');
|
|
||||||
|
|
||||||
$this->assertEquals('php@8.1', $siteMock->phpRcVersion('site1'));
|
|
||||||
$this->assertEquals('php@8.0', $siteMock->phpRcVersion('site2'));
|
|
||||||
$this->assertEquals(null, $siteMock->phpRcVersion('site3')); // Site doesn't exists
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
tests/fixtures/Parked/Sites/site-w-valetphprc-1/.valetphprc
vendored
Normal file
1
tests/fixtures/Parked/Sites/site-w-valetphprc-1/.valetphprc
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
php@8.1
|
||||||
1
tests/fixtures/Parked/Sites/site-w-valetphprc-2/.valetphprc
vendored
Normal file
1
tests/fixtures/Parked/Sites/site-w-valetphprc-2/.valetphprc
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
php@8.0
|
||||||
4
tests/fixtures/Parked/Sites/site-w-valetrc-1/.valetrc
vendored
Normal file
4
tests/fixtures/Parked/Sites/site-w-valetrc-1/.valetrc
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
ITEM=value
|
||||||
|
PHP=php@8.0
|
||||||
|
# comment line
|
||||||
|
OTHER_ITEM=othervalue
|
||||||
1
tests/fixtures/Parked/Sites/site-w-valetrc-2/.valetrc
vendored
Normal file
1
tests/fixtures/Parked/Sites/site-w-valetrc-2/.valetrc
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
PHP=php@8.1
|
||||||
2
tests/fixtures/Parked/Sites/site-w-valetrc-3/.valetrc
vendored
Normal file
2
tests/fixtures/Parked/Sites/site-w-valetrc-3/.valetrc
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
ITEM=value
|
||||||
|
PHP=php@8.2
|
||||||
Reference in New Issue
Block a user