Skip to content

Commit c7df943

Browse files
authored
Merge pull request #669 from asgrim/643-rpm-package-manager-updates
643: RPM package manager updates
2 parents a2999a4 + e23cc4f commit c7df943

5 files changed

Lines changed: 53 additions & 6 deletions

File tree

src/DependencyResolver/DependencyInstaller/SystemDependenciesDefinition.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,36 +24,42 @@ public static function default(): self
2424
PackageManager::Apt->value => 'libsodium-dev',
2525
PackageManager::Apk->value => 'libsodium-dev',
2626
PackageManager::Dnf->value => 'pkgconfig(libsodium)',
27+
PackageManager::Microdnf->value => 'pkgconfig(libsodium)',
2728
PackageManager::Yum->value => 'pkgconfig(libsodium)',
2829
],
2930
'jpeg' => [
3031
PackageManager::Apt->value => 'libjpeg-dev',
3132
PackageManager::Apk->value => 'libjpeg-turbo-dev',
3233
PackageManager::Dnf->value => 'pkgconfig(libjpeg)',
34+
PackageManager::Microdnf->value => 'pkgconfig(libjpeg)',
3335
PackageManager::Yum->value => 'pkgconfig(libjpeg)',
3436
],
3537
'zip' => [
3638
PackageManager::Apt->value => 'libzip-dev',
3739
PackageManager::Apk->value => 'libzip-dev',
3840
PackageManager::Dnf->value => 'pkgconfig(libzip)',
41+
PackageManager::Microdnf->value => 'pkgconfig(libzip)',
3942
PackageManager::Yum->value => 'pkgconfig(libzip)',
4043
],
4144
'xslt' => [
4245
PackageManager::Apt->value => 'libxslt1-dev',
4346
PackageManager::Apk->value => 'libxslt-dev',
4447
PackageManager::Dnf->value => 'pkgconfig(libxslt)',
48+
PackageManager::Microdnf->value => 'pkgconfig(libxslt)',
4549
PackageManager::Yum->value => 'pkgconfig(libxslt)',
4650
],
4751
'ffi' => [
4852
PackageManager::Apt->value => 'libffi-dev',
4953
PackageManager::Apk->value => 'libffi-dev',
5054
PackageManager::Dnf->value => 'pkgconfig(libffi)',
55+
PackageManager::Microdnf->value => 'pkgconfig(libffi)',
5156
PackageManager::Yum->value => 'pkgconfig(libffi)',
5257
],
5358
'curl' => [
5459
PackageManager::Apt->value => 'libcurl4-openssl-dev',
5560
PackageManager::Apk->value => 'curl-dev',
5661
PackageManager::Dnf->value => 'pkgconfig(libcurl)',
62+
PackageManager::Microdnf->value => 'pkgconfig(libcurl)',
5763
PackageManager::Yum->value => 'pkgconfig(libcurl)',
5864
],
5965
]);

src/Platform/PackageManager.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@
1717
/** @internal This is not public API for PIE, so should not be depended upon unless you accept the risk of BC breaks */
1818
enum PackageManager: string
1919
{
20-
case Test = 'test';
21-
case Apt = 'apt-get';
22-
case Apk = 'apk';
23-
case Dnf = 'dnf';
24-
case Yum = 'yum';
25-
case Brew = 'brew';
20+
case Test = 'test';
21+
case Apt = 'apt-get';
22+
case Apk = 'apk';
23+
case Dnf = 'dnf';
24+
case Microdnf = 'microdnf';
25+
case Brew = 'brew';
26+
27+
/** @deprecated Use `dnf` instead of `yum` */
28+
case Yum = 'yum';
2629

2730
public static function detect(): self|null
2831
{
@@ -53,6 +56,7 @@ public function installCommand(array $packages): array
5356
self::Apt => ['apt-get', 'install', '-y', '--no-install-recommends', '--no-install-suggests', ...$packages],
5457
self::Apk => ['apk', 'add', '--no-cache', '--virtual', '.php-pie-deps', ...$packages],
5558
self::Dnf => ['dnf', 'install', '-y', ...$packages],
59+
self::Microdnf => ['microdnf', 'install', '-y', ...$packages],
5660
self::Yum => ['yum', 'install', '-y', ...$packages],
5761
self::Brew => ['brew', 'install', ...$packages],
5862
};
@@ -61,6 +65,10 @@ public function installCommand(array $packages): array
6165
/** @param list<string> $packages */
6266
public function install(IOInterface $io, array $packages): void
6367
{
68+
if ($this === self::Yum) {
69+
$io->writeError('<warning>Usage of `yum` in PIE is deprecated in favour of `dnf`, and will be removed in a future release of PIE.</warning>');
70+
}
71+
6472
$outputCallback = Process::outputCallbackForVerbosity($io, IOInterface::VERY_VERBOSE);
6573

6674
$cmd = self::installCommand($packages);

src/SelfManage/BuildTools/CheckAllBuildTools.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public static function buildToolsFactory(): self
2626
PackageManager::Apt->value => 'gcc',
2727
PackageManager::Apk->value => 'build-base',
2828
PackageManager::Dnf->value => 'gcc',
29+
PackageManager::Microdnf->value => 'gcc',
2930
PackageManager::Yum->value => 'gcc',
3031
PackageManager::Brew->value => 'gcc',
3132
],
@@ -36,6 +37,7 @@ public static function buildToolsFactory(): self
3637
PackageManager::Apt->value => 'make',
3738
PackageManager::Apk->value => 'build-base',
3839
PackageManager::Dnf->value => 'make',
40+
PackageManager::Microdnf->value => 'make',
3941
PackageManager::Yum->value => 'make',
4042
PackageManager::Brew->value => 'make',
4143
],
@@ -46,6 +48,7 @@ public static function buildToolsFactory(): self
4648
PackageManager::Apt->value => 'autoconf',
4749
PackageManager::Apk->value => 'autoconf',
4850
PackageManager::Dnf->value => 'autoconf',
51+
PackageManager::Microdnf->value => 'autoconf',
4952
PackageManager::Yum->value => 'autoconf',
5053
PackageManager::Brew->value => 'autoconf',
5154
],
@@ -56,6 +59,7 @@ public static function buildToolsFactory(): self
5659
PackageManager::Apt->value => 'pkg-config',
5760
PackageManager::Apk->value => 'pkgconfig',
5861
PackageManager::Dnf->value => 'pkgconf-pkg-config',
62+
PackageManager::Microdnf->value => 'pkgconf-pkg-config',
5963
PackageManager::Yum->value => 'pkgconf-pkg-config',
6064
PackageManager::Brew->value => 'pkgconf',
6165
],
@@ -66,6 +70,7 @@ public static function buildToolsFactory(): self
6670
PackageManager::Apt->value => 'libtool',
6771
PackageManager::Apk->value => 'libtool',
6872
PackageManager::Dnf->value => 'libtool',
73+
PackageManager::Microdnf->value => 'libtool',
6974
PackageManager::Yum->value => 'libtool',
7075
PackageManager::Brew->value => 'libtool',
7176
],
@@ -85,6 +90,7 @@ public static function buildToolsFactory(): self
8590
PackageManager::Apt->value => 'unzip',
8691
PackageManager::Apk->value => 'unzip',
8792
PackageManager::Dnf->value => 'unzip',
93+
PackageManager::Microdnf->value => 'unzip',
8894
PackageManager::Yum->value => 'unzip',
8995
PackageManager::Brew->value => 'unzip',
9096
],
@@ -94,6 +100,7 @@ public static function buildToolsFactory(): self
94100
PackageManager::Apt->value => 'php-dev',
95101
PackageManager::Apk->value => 'php{major}{minor}-dev',
96102
PackageManager::Dnf->value => '{php-config-path}',
103+
PackageManager::Microdnf->value => '{php-config-path}',
97104
PackageManager::Yum->value => '{php-config-path}',
98105
PackageManager::Brew->value => 'php',
99106
],

test/end-to-end/Dockerfile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ FROM alpine:3.24 AS alpine_base
33
FROM fedora:44 AS fedora_base
44
FROM ubuntu:26.04 AS ubuntu_base
55
FROM homebrew/brew:4.6.20 AS homebrew_base
6+
FROM redhat/ubi9-minimal:9.8 AS ubi9_base
67

78
FROM box_base AS build_pie_phar
89
RUN apk add git
@@ -28,6 +29,12 @@ COPY --from=build_pie_phar /app/pie.phar /usr/local/bin/pie
2829
RUN pie install --auto-install-build-tools -vv asgrim/example-pie-extension:2.0.5
2930
RUN pie show
3031

32+
FROM ubi9_base AS test_pie_installs_build_tools_on_ubi9
33+
RUN microdnf module enable -y php:8.3 && microdnf install -y php-cli php-pecl-zip unzip
34+
COPY --from=build_pie_phar /app/pie.phar /usr/local/bin/pie
35+
RUN pie install --auto-install-build-tools -v asgrim/example-pie-extension:2.0.5
36+
RUN pie show
37+
3138
FROM ubuntu_base AS test_pie_installs_build_tools_on_ubuntu
3239
RUN apt-get update && apt-get install -y php unzip libbz2-dev
3340
COPY --from=build_pie_phar /app/pie.phar /usr/local/bin/pie

test/unit/Platform/PackageManagerTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44

55
namespace Php\PieUnitTest\Platform;
66

7+
use Composer\IO\BufferIO;
78
use Php\Pie\Platform\PackageManager;
89
use PHPUnit\Framework\Attributes\CoversClass;
910
use PHPUnit\Framework\TestCase;
11+
use Symfony\Component\Process\Exception\ProcessFailedException;
1012

1113
#[CoversClass(PackageManager::class)]
1214
final class PackageManagerTest extends TestCase
@@ -29,6 +31,10 @@ public function testInstallCommand(): void
2931
['dnf', 'install', '-y', 'a', 'b'],
3032
PackageManager::Dnf->installCommand(['a', 'b']),
3133
);
34+
self::assertSame(
35+
['microdnf', 'install', '-y', 'a', 'b'],
36+
PackageManager::Microdnf->installCommand(['a', 'b']),
37+
);
3238
self::assertSame(
3339
['yum', 'install', '-y', 'a', 'b'],
3440
PackageManager::Yum->installCommand(['a', 'b']),
@@ -38,4 +44,17 @@ public function testInstallCommand(): void
3844
PackageManager::Brew->installCommand(['a', 'b']),
3945
);
4046
}
47+
48+
public function testInstallWithYumWritesDeprecationWarning(): void
49+
{
50+
$io = new BufferIO();
51+
52+
try {
53+
PackageManager::Yum->install($io, ['some-package-that-does-not-exist']);
54+
} catch (ProcessFailedException) {
55+
// Expected
56+
}
57+
58+
self::assertStringContainsString('deprecated', $io->getOutput());
59+
}
4160
}

0 commit comments

Comments
 (0)