dependabot-composer 0.286.0 → 0.288.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dependabot/composer/helpers.rb +5 -9
- data/lib/dependabot/composer/package_manager.rb +0 -18
- metadata +5 -17
- data/helpers/v1/.php-cs-fixer.dist.php +0 -32
- data/helpers/v1/bin/run +0 -86
- data/helpers/v1/build +0 -31
- data/helpers/v1/composer.json +0 -26
- data/helpers/v1/composer.lock +0 -2501
- data/helpers/v1/phpstan.dist.neon +0 -5
- data/helpers/v1/src/DependabotInstallationManager.php +0 -61
- data/helpers/v1/src/DependabotPluginManager.php +0 -23
- data/helpers/v1/src/ExceptionIO.php +0 -25
- data/helpers/v1/src/Hasher.php +0 -28
- data/helpers/v1/src/UpdateChecker.php +0 -121
- data/helpers/v1/src/Updater.php +0 -98
@@ -1,61 +0,0 @@
|
|
1
|
-
<?php
|
2
|
-
|
3
|
-
declare(strict_types=1);
|
4
|
-
|
5
|
-
namespace Dependabot\Composer;
|
6
|
-
|
7
|
-
use Composer\DependencyResolver\Operation\InstallOperation;
|
8
|
-
use Composer\DependencyResolver\Operation\UninstallOperation;
|
9
|
-
use Composer\DependencyResolver\Operation\UpdateOperation;
|
10
|
-
use Composer\Installer\InstallationManager;
|
11
|
-
use Composer\Package\PackageInterface;
|
12
|
-
use Composer\Repository\RepositoryInterface;
|
13
|
-
|
14
|
-
final class DependabotInstallationManager extends InstallationManager
|
15
|
-
{
|
16
|
-
private array $installed = [];
|
17
|
-
private array $updated = [];
|
18
|
-
private array $uninstalled = [];
|
19
|
-
|
20
|
-
public function install(RepositoryInterface $repo, InstallOperation $operation): void
|
21
|
-
{
|
22
|
-
parent::install($repo, $operation);
|
23
|
-
$this->installed[] = $operation->getPackage();
|
24
|
-
}
|
25
|
-
|
26
|
-
public function update(RepositoryInterface $repo, UpdateOperation $operation): void
|
27
|
-
{
|
28
|
-
parent::update($repo, $operation);
|
29
|
-
$this->updated[] = [$operation->getInitialPackage(), $operation->getTargetPackage()];
|
30
|
-
}
|
31
|
-
|
32
|
-
public function uninstall(RepositoryInterface $repo, UninstallOperation $operation): void
|
33
|
-
{
|
34
|
-
parent::uninstall($repo, $operation);
|
35
|
-
$this->uninstalled[] = $operation->getPackage();
|
36
|
-
}
|
37
|
-
|
38
|
-
/**
|
39
|
-
* @return PackageInterface[]
|
40
|
-
*/
|
41
|
-
public function getInstalledPackages(): array
|
42
|
-
{
|
43
|
-
return $this->installed;
|
44
|
-
}
|
45
|
-
|
46
|
-
/**
|
47
|
-
* @return PackageInterface[]
|
48
|
-
*/
|
49
|
-
public function getUpdatedPackages(): array
|
50
|
-
{
|
51
|
-
return $this->updated;
|
52
|
-
}
|
53
|
-
|
54
|
-
/**
|
55
|
-
* @return PackageInterface[]
|
56
|
-
*/
|
57
|
-
public function getUninstalledPackages(): array
|
58
|
-
{
|
59
|
-
return $this->uninstalled;
|
60
|
-
}
|
61
|
-
}
|
@@ -1,23 +0,0 @@
|
|
1
|
-
<?php
|
2
|
-
|
3
|
-
declare(strict_types=1);
|
4
|
-
|
5
|
-
namespace Dependabot\Composer;
|
6
|
-
|
7
|
-
use Composer\Package\PackageInterface;
|
8
|
-
use Composer\Plugin\PluginManager;
|
9
|
-
|
10
|
-
final class DependabotPluginManager extends PluginManager
|
11
|
-
{
|
12
|
-
public function registerPackage(PackageInterface $package, $failOnMissingClasses = false): void
|
13
|
-
{
|
14
|
-
// This package does some setup for PHP_CodeSniffer, but errors out the
|
15
|
-
// install if Symfony isn't installed (which it won't be for a lockfile
|
16
|
-
// only install run). Safe to ignore
|
17
|
-
if (strpos($package->getName(), 'phpcodesniffer') !== false) {
|
18
|
-
return;
|
19
|
-
}
|
20
|
-
|
21
|
-
parent::registerPackage($package, $failOnMissingClasses);
|
22
|
-
}
|
23
|
-
}
|
@@ -1,25 +0,0 @@
|
|
1
|
-
<?php
|
2
|
-
|
3
|
-
declare(strict_types=1);
|
4
|
-
|
5
|
-
namespace Dependabot\Composer;
|
6
|
-
|
7
|
-
use Composer\IO\NullIO;
|
8
|
-
|
9
|
-
final class ExceptionIO extends NullIO
|
10
|
-
{
|
11
|
-
private bool $raise_next_error = false;
|
12
|
-
|
13
|
-
public function writeError($messages, $newline = true, $verbosity = self::NORMAL): void
|
14
|
-
{
|
15
|
-
if (is_array($messages)) {
|
16
|
-
return;
|
17
|
-
}
|
18
|
-
if ($this->raise_next_error) {
|
19
|
-
throw new \RuntimeException('Your requirements could not be resolved to an installable set of packages.' . $messages);
|
20
|
-
}
|
21
|
-
if (strpos($messages, 'Your requirements could not be resolved') !== false) {
|
22
|
-
$this->raise_next_error = true;
|
23
|
-
}
|
24
|
-
}
|
25
|
-
}
|
data/helpers/v1/src/Hasher.php
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
<?php
|
2
|
-
|
3
|
-
declare(strict_types=1);
|
4
|
-
|
5
|
-
namespace Dependabot\Composer;
|
6
|
-
|
7
|
-
use Composer\Package\Locker;
|
8
|
-
|
9
|
-
final class Hasher
|
10
|
-
{
|
11
|
-
/**
|
12
|
-
* @throws \RuntimeException
|
13
|
-
*/
|
14
|
-
public static function getContentHash(array $args): string
|
15
|
-
{
|
16
|
-
[$workingDirectory] = $args;
|
17
|
-
|
18
|
-
$config = $workingDirectory . '/composer.json';
|
19
|
-
|
20
|
-
$contents = file_get_contents($config);
|
21
|
-
|
22
|
-
if (!is_string($contents)) {
|
23
|
-
throw new \RuntimeException(sprintf('Failed to load contents of "%s".', $config));
|
24
|
-
}
|
25
|
-
|
26
|
-
return Locker::getContentHash($contents);
|
27
|
-
}
|
28
|
-
}
|
@@ -1,121 +0,0 @@
|
|
1
|
-
<?php
|
2
|
-
|
3
|
-
declare(strict_types=1);
|
4
|
-
|
5
|
-
namespace Dependabot\Composer;
|
6
|
-
|
7
|
-
use Composer\Factory;
|
8
|
-
use Composer\Installer;
|
9
|
-
use Composer\Package\PackageInterface;
|
10
|
-
|
11
|
-
final class UpdateChecker
|
12
|
-
{
|
13
|
-
public static function getLatestResolvableVersion(array $args): ?string
|
14
|
-
{
|
15
|
-
[$workingDirectory, $dependencyName, $gitCredentials, $registryCredentials] = $args;
|
16
|
-
|
17
|
-
$httpBasicCredentials = [];
|
18
|
-
|
19
|
-
foreach ($gitCredentials as $credentials) {
|
20
|
-
$httpBasicCredentials[$credentials['host']] = [
|
21
|
-
'username' => $credentials['username'],
|
22
|
-
'password' => $credentials['password'],
|
23
|
-
];
|
24
|
-
}
|
25
|
-
|
26
|
-
foreach ($registryCredentials as $credentials) {
|
27
|
-
$httpBasicCredentials[$credentials['registry']] = [
|
28
|
-
'username' => $credentials['username'],
|
29
|
-
'password' => $credentials['password'],
|
30
|
-
];
|
31
|
-
}
|
32
|
-
|
33
|
-
$io = new ExceptionIO();
|
34
|
-
|
35
|
-
$composer = Factory::create($io, $workingDirectory . '/composer.json');
|
36
|
-
|
37
|
-
$config = $composer->getConfig();
|
38
|
-
|
39
|
-
if (0 < count($httpBasicCredentials)) {
|
40
|
-
$config->merge([
|
41
|
-
'config' => [
|
42
|
-
'http-basic' => $httpBasicCredentials,
|
43
|
-
],
|
44
|
-
]);
|
45
|
-
|
46
|
-
$io->loadConfiguration($config);
|
47
|
-
}
|
48
|
-
|
49
|
-
$installationManager = new DependabotInstallationManager();
|
50
|
-
|
51
|
-
$install = new Installer(
|
52
|
-
$io,
|
53
|
-
$config,
|
54
|
-
$composer->getPackage(),
|
55
|
-
$composer->getDownloadManager(),
|
56
|
-
$composer->getRepositoryManager(),
|
57
|
-
$composer->getLocker(),
|
58
|
-
$installationManager,
|
59
|
-
$composer->getEventDispatcher(),
|
60
|
-
$composer->getAutoloadGenerator()
|
61
|
-
);
|
62
|
-
|
63
|
-
// For all potential options, see UpdateCommand in composer
|
64
|
-
$install
|
65
|
-
->setDryRun(true)
|
66
|
-
->setUpdate(true)
|
67
|
-
->setDevMode(true)
|
68
|
-
->setUpdateAllowList([$dependencyName])
|
69
|
-
->setAllowListTransitiveDependencies(true)
|
70
|
-
->setExecuteOperations(false)
|
71
|
-
->setDumpAutoloader(false)
|
72
|
-
->setRunScripts(false)
|
73
|
-
->setIgnorePlatformRequirements(false);
|
74
|
-
|
75
|
-
$install->run();
|
76
|
-
|
77
|
-
$installedPackages = $installationManager->getInstalledPackages();
|
78
|
-
|
79
|
-
$updatedPackage = current(array_filter($installedPackages, static function (PackageInterface $package) use ($dependencyName): bool {
|
80
|
-
return $package->getName() === $dependencyName;
|
81
|
-
}));
|
82
|
-
|
83
|
-
// We found the package in the list of updated packages. Return its version.
|
84
|
-
if ($updatedPackage instanceof PackageInterface) {
|
85
|
-
return ltrim($updatedPackage->getPrettyVersion(), 'v');
|
86
|
-
}
|
87
|
-
|
88
|
-
// We didn't find the package in the list of updated packages. Check if
|
89
|
-
// it was replaced by another package (in which case we can ignore).
|
90
|
-
foreach ($composer->getPackage()->getReplaces() as $link) {
|
91
|
-
if ($link->getTarget() === $dependencyName) {
|
92
|
-
return null;
|
93
|
-
}
|
94
|
-
}
|
95
|
-
|
96
|
-
foreach ($installedPackages as $package) {
|
97
|
-
foreach ($package->getReplaces() as $link) {
|
98
|
-
if ($link->getTarget() === $dependencyName) {
|
99
|
-
return null;
|
100
|
-
}
|
101
|
-
}
|
102
|
-
}
|
103
|
-
|
104
|
-
// Similarly, check if the package was provided by any other package.
|
105
|
-
foreach ($composer->getPackage()->getProvides() as $link) {
|
106
|
-
if ($link->getTarget() === $dependencyName) {
|
107
|
-
return ltrim($link->getPrettyConstraint(), 'v');
|
108
|
-
}
|
109
|
-
}
|
110
|
-
|
111
|
-
foreach ($installedPackages as $package) {
|
112
|
-
foreach ($package->getProvides() as $link) {
|
113
|
-
if ($link->getTarget() === $dependencyName) {
|
114
|
-
return ltrim($link->getPrettyConstraint(), 'v');
|
115
|
-
}
|
116
|
-
}
|
117
|
-
}
|
118
|
-
|
119
|
-
throw new \RuntimeException('Package not found in updated packages!');
|
120
|
-
}
|
121
|
-
}
|
data/helpers/v1/src/Updater.php
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
<?php
|
2
|
-
|
3
|
-
declare(strict_types=1);
|
4
|
-
|
5
|
-
namespace Dependabot\Composer;
|
6
|
-
|
7
|
-
use Composer\Factory;
|
8
|
-
use Composer\Installer;
|
9
|
-
|
10
|
-
final class Updater
|
11
|
-
{
|
12
|
-
/**
|
13
|
-
* @throws \RuntimeException
|
14
|
-
*/
|
15
|
-
public static function update(array $args): array
|
16
|
-
{
|
17
|
-
[$workingDirectory, $dependencyName, $dependencyVersion, $gitCredentials, $registryCredentials] = $args;
|
18
|
-
|
19
|
-
// Change working directory to the one provided, this ensures that we
|
20
|
-
// install dependencies into the working dir, rather than a vendor folder
|
21
|
-
// in the root of the project
|
22
|
-
$originalDir = getcwd();
|
23
|
-
|
24
|
-
if (!is_string($originalDir)) {
|
25
|
-
throw new \RuntimeException('Failed determining the current working directory.');
|
26
|
-
}
|
27
|
-
|
28
|
-
chdir($workingDirectory);
|
29
|
-
|
30
|
-
$io = new ExceptionIO();
|
31
|
-
$composer = Factory::create($io);
|
32
|
-
$config = $composer->getConfig();
|
33
|
-
$httpBasicCredentials = [];
|
34
|
-
|
35
|
-
$pm = new DependabotPluginManager($io, $composer, null, false);
|
36
|
-
$composer->setPluginManager($pm);
|
37
|
-
$pm->loadInstalledPlugins();
|
38
|
-
|
39
|
-
foreach ($gitCredentials as &$cred) {
|
40
|
-
$httpBasicCredentials[$cred['host']] = [
|
41
|
-
'username' => $cred['username'],
|
42
|
-
'password' => $cred['password'],
|
43
|
-
];
|
44
|
-
}
|
45
|
-
|
46
|
-
foreach ($registryCredentials as &$cred) {
|
47
|
-
$httpBasicCredentials[$cred['registry']] = [
|
48
|
-
'username' => $cred['username'],
|
49
|
-
'password' => $cred['password'],
|
50
|
-
];
|
51
|
-
}
|
52
|
-
|
53
|
-
if ($httpBasicCredentials) {
|
54
|
-
$config->merge(
|
55
|
-
[
|
56
|
-
'config' => [
|
57
|
-
'http-basic' => $httpBasicCredentials,
|
58
|
-
],
|
59
|
-
]
|
60
|
-
);
|
61
|
-
$io->loadConfiguration($config);
|
62
|
-
}
|
63
|
-
|
64
|
-
$install = new Installer(
|
65
|
-
$io,
|
66
|
-
$config,
|
67
|
-
$composer->getPackage(),
|
68
|
-
$composer->getDownloadManager(),
|
69
|
-
$composer->getRepositoryManager(),
|
70
|
-
$composer->getLocker(),
|
71
|
-
$composer->getInstallationManager(),
|
72
|
-
$composer->getEventDispatcher(),
|
73
|
-
$composer->getAutoloadGenerator()
|
74
|
-
);
|
75
|
-
|
76
|
-
// For all potential options, see UpdateCommand in composer
|
77
|
-
$install
|
78
|
-
->setWriteLock(true)
|
79
|
-
->setUpdate(true)
|
80
|
-
->setDevMode(true)
|
81
|
-
->setUpdateAllowList([$dependencyName])
|
82
|
-
->setAllowListTransitiveDependencies(true)
|
83
|
-
->setExecuteOperations(false)
|
84
|
-
->setDumpAutoloader(false)
|
85
|
-
->setRunScripts(false)
|
86
|
-
->setIgnorePlatformRequirements(false);
|
87
|
-
|
88
|
-
$install->run();
|
89
|
-
|
90
|
-
$result = [
|
91
|
-
'composer.lock' => file_get_contents('composer.lock'),
|
92
|
-
];
|
93
|
-
|
94
|
-
chdir($originalDir);
|
95
|
-
|
96
|
-
return $result;
|
97
|
-
}
|
98
|
-
}
|