Skip to content

Commit 1407515

Browse files
committed
[FIX] Specified Evolution CMS version in core composer.json.
1 parent 45f1d03 commit 1407515

3 files changed

Lines changed: 77 additions & 7 deletions

File tree

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"vendor-dir": "vendor"
3636
},
3737
"require": {
38-
"php": ">=8.2",
38+
"php": "^8.2",
3939
"ext-pdo": "*",
4040
"ext-json": "*",
4141
"ext-mysqli": "*",

core/composer.json

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"core"
1111
],
1212
"homepage": "https://evo.im/",
13-
"license": "GPL-2.0-or-later",
13+
"license": "GPL-3.0-or-later",
1414
"authors": [
1515
{
1616
"name": "Dmytro Lukianenko",
@@ -26,7 +26,7 @@
2626
}
2727
],
2828
"require": {
29-
"php": ">=8.2",
29+
"php": "^8.2",
3030
"composer/composer": "*",
3131
"dmitry-suffi/redis-session-handler": "*",
3232
"doctrine/dbal": "3.*",
@@ -87,9 +87,6 @@
8787
}
8888
},
8989
"extra": {
90-
"platform-packages": {
91-
"evolutioncms/evolution": "3.2.7"
92-
},
9390
"merge-plugin": {
9491
"include": [
9592
"custom/composer.json"
@@ -101,6 +98,12 @@
10198
"merge-scripts": false
10299
}
103100
},
101+
"conflict": {
102+
"evolutioncms/evolution": "*"
103+
},
104+
"replace": {
105+
"evolutioncms/evolution": "3.2.7"
106+
},
104107
"autoload": {
105108
"psr-4": {
106109
"EvolutionCMS\\": "src/",
@@ -128,7 +131,17 @@
128131
"minimum-stability": "dev",
129132
"prefer-stable": true,
130133
"scripts": {
131-
"upd": "composer update --lock --ansi",
134+
"sync-replace": "php functions/sync-replace-version.php",
135+
"upd": [
136+
"@sync-replace",
137+
"composer update --lock --ansi"
138+
],
139+
"pre-install-cmd": [
140+
"@sync-replace"
141+
],
142+
"pre-update-cmd": [
143+
"@sync-replace"
144+
],
132145
"post-autoload-dump": [
133146
"@php artisan package:discover"
134147
]
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php declare(strict_types = 1);
2+
3+
/**
4+
* Sync "replace" and "conflict" in composer.json with the version from factory/version.php.
5+
* - replace: evolutioncms/evolution => <version from version.php>
6+
* - conflict: evolutioncms/evolution => * (forbid installing a vendor package; root provides it)
7+
*
8+
* This ensures:
9+
* - Third-party packages may "require" evolutioncms/evolution with a semver range.
10+
* - Host never installs/updates the real package; it either matches the provided version or fails fast.
11+
*/
12+
13+
$root = dirname(__DIR__);
14+
$composerFile = $root . '/composer.json';
15+
$versionFile = $root . '/factory/version.php';
16+
17+
if (!is_file($composerFile)) {
18+
fwrite(STDERR, "composer.json not found at $composerFile\n");
19+
exit(1);
20+
}
21+
if (!is_file($versionFile)) {
22+
fwrite(STDERR, "version.php not found at $versionFile\n");
23+
exit(1);
24+
}
25+
26+
/** @var array{version?:string} $info */
27+
$info = include $versionFile;
28+
$version = $info['version'] ?? null;
29+
30+
if (!is_string($version) || !preg_match('/^\d+\.\d+\.\d+(?:[-+][A-Za-z0-9\.-]+)?$/', $version)) {
31+
fwrite(STDERR, "Invalid or missing version in version.php: " . var_export($version, true) . "\n");
32+
exit(2);
33+
}
34+
35+
$composerRaw = file_get_contents($composerFile);
36+
$composer = json_decode($composerRaw, true);
37+
if (!is_array($composer)) {
38+
fwrite(STDERR, "Failed to parse composer.json\n");
39+
exit(3);
40+
}
41+
42+
$composer['replace'] = $composer['replace'] ?? [];
43+
$composer['conflict'] = $composer['conflict'] ?? [];
44+
45+
// Provide exact version to satisfy "^x.y.z" in third-party packages, without installing vendor package
46+
$composer['replace']['evolutioncms/evolution'] = $version;
47+
48+
// Forbid installing the vendor package at all (host provides it)
49+
$composer['conflict']['evolutioncms/evolution'] = '*';
50+
51+
$new = json_encode($composer, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . PHP_EOL;
52+
if ($new !== $composerRaw) {
53+
file_put_contents($composerFile, $new);
54+
echo "Synced composer.json: evolutioncms/evolution {$version}\n";
55+
} else {
56+
echo "Evolution CMS {$version}\n";
57+
}

0 commit comments

Comments
 (0)