From 68d85940480e939b70adb93572315631b8f571c2 Mon Sep 17 00:00:00 2001 From: Benjamin Gaussorgues Date: Wed, 15 May 2024 17:42:22 +0200 Subject: [PATCH] feat(config): introduce configuration builder Signed-off-by: Benjamin Gaussorgues --- Makefile | 5 + build/README.md | 29 ++ build/config_builder | 87 ++++ build/utils.php | 79 ++++ config/config.php | 518 +++++++--------------- config/major_versions.json | 89 ++++ config/releases.json | 89 ++++ tests/integration/features/beta.feature | 18 +- tests/integration/features/daily.feature | 16 +- tests/integration/features/stable.feature | 20 +- 10 files changed, 573 insertions(+), 377 deletions(-) create mode 100644 Makefile create mode 100644 build/README.md create mode 100755 build/config_builder create mode 100755 build/utils.php create mode 100644 config/major_versions.json create mode 100644 config/releases.json diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..2d5543b4 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +config/config.php: config/major_versions.json config/releases.json $(wildcard config/entreprise_releases.json) + @echo '🏗 Build configuration file $(@)…' + build/config_builder > $(@) + +.ONESHELL: diff --git a/build/README.md b/build/README.md new file mode 100644 index 00000000..fbe36fc9 --- /dev/null +++ b/build/README.md @@ -0,0 +1,29 @@ +## Configuration builder + +Generates the `config/config.php` file + +### Configuration files +#### `major_versions.json` +List all major versions +```json + "29": { + "eol": "2025-04", // End of life as YYYY-mm. Optional, default to no end of life + "minPHP": "8.0" // Minimal PHP version + }, +``` + +#### `releases.json` +```json + "29.0.0": { + "internalVersion": "29.0.0.19", // Internal version number + "signature": "", // Signature on one line + "deploy": 70 // Deploy percentage. Optional, default to 100% + } +``` + +### Build +Check if the `config.php` needs update and update it: +```bash +make config/config.php +``` +Can be forced with `make -B config/config.php` diff --git a/build/config_builder b/build/config_builder new file mode 100755 index 00000000..086cfce4 --- /dev/null +++ b/build/config_builder @@ -0,0 +1,87 @@ +#!/usr/bin/env php + [], 'stable' => [], 'beta' => []]; +} catch (\Exception) { + $latestReleases = $generatedConfig = ['stable' => [], 'beta' => []]; +} + +// Search latest release for each major/stability +foreach ($releases as $releaseName => $ignored) { + $major = parseVersionName($releaseName)['major']; + $stability = getStabilityFromName($releaseName); + if (!isset($latestReleases[$stability][$major])) { + $latestReleases[$stability][$major] = $releaseName; + continue; + } + if (version_compare($latestReleases[$stability][$major], $releaseName, '<')) { + $latestReleases[$stability][$major] = $releaseName; + } +} + +// Generate previous configuration +$now = date('Y-m'); +foreach ($releases as $releaseName => $info) { + preg_match('/(\d+)\.(\d+).(\d+)(?: (.+))?/A', $releaseName, $matches); + [, $major, $minor, $patch] = $matches; + $stability = getStabilityFromName($releaseName); + $isEol = isset($majorVersions[$major]['eol']) ? ($majorVersions[$major]['eol'] < $now) : false; + $deployPercent = $info['deploy'] ?? 100; + $generatedConfig[$stability][$major]['100'] = [ + 'latest' => $releaseName, + 'internalVersion' => $info['internalVersion'], + 'downloadUrl' => buildDownloadUrl($releaseName, $info), + 'web' => sprintf($docUrl, $major), + 'eol' => $isEol, + 'minPHPVersion' => $majorVersions[$major]['minPHP'] ?? '', + 'signature' => isset($info['signature']) ? wordwrap($info['signature'], 64, cut_long_words: true) : '', + ]; + + if (isset($latestReleases[$stability][$major - 1])) { + $upgradeFrom = $latestReleases[$stability][$major - 1]; + $generatedConfig[$stability][$upgradeFrom][$deployPercent] = $generatedConfig[$stability][$major]['100']; + } elseif (isset($latestReleases['stable'][$major -1])) { + $upgradeFrom = $latestReleases['stable'][$major - 1]; + $generatedConfig[$stability][$upgradeFrom][$deployPercent] = $generatedConfig[$stability][$major]['100']; + } +} + +// Keep order like original config.php +foreach($generatedConfig as $stability => $ignored) { + uksort($generatedConfig[$stability], fn($a, $b) => version_compare((string) $b, (string) $a)); +} + +// Daily updates +$maxMajor = (int) max(array_keys($majorVersions)); +foreach ($majorVersions as $majorVersion => $info) { + if ($majorVersion < 20) { + break; + } + $generatedConfig['daily'][$majorVersion] = [ + 'downloadUrl' => sprintf('https://download.nextcloud.com/server/daily/latest-%s.zip', $maxMajor === $majorVersion ? 'master' : 'stable'.$majorVersion), + 'web' => sprintf($docUrl, $maxMajor === $majorVersion ? 'latest' : $majorVersion), + 'eol' => isset($info['eol']) ? ($info['eol'] < $now) : false, + 'minPHPVersion' => $info['minPHP'] ?? '7.2', + ]; +} + +// Display result +echo '\s*\n\s*\[/", '/ /'], + ['[', ']', '=> [', "\t"], + var_export($generatedConfig, true) +); +echo ';',PHP_EOL; diff --git a/build/utils.php b/build/utils.php new file mode 100755 index 00000000..113a2064 --- /dev/null +++ b/build/utils.php @@ -0,0 +1,79 @@ + $major, + 'minor' => $minor, + 'patch' => $patch, + 'modifier' => isset($matches[4]) ? $matches[4] : '', + 'stability' => $stability, + ]; +} + +function displayAsFile(array $generatedConfig) { + echo '\s*\n\s*\[/", '/ /'], + ['[', ']', '=> [', "\t"], + var_export($generatedConfig, true) + ); + echo ';',PHP_EOL; +} + +function buildDownloadUrl(string $releaseName, array $info): string { + if (function_exists('buildEnterpriseDownloadUrl')) { + $url = buildEnterpriseDownloadUrl($releaseName, $info); + if ($url !== null) { + return $url; + } + } + + $release = parseVersionName($releaseName); + $downloadUrl = 'https://download.nextcloud.com/server/%s/nextcloud-%d.%d.%d%s.zip'; + return sprintf($downloadUrl, + $release['modifier'] === '' ? 'releases' : 'prereleases', + $release['major'], + $release['minor'], + $release['patch'], + $release['modifier'] === '' ? '' : str_replace(' ', '', strtolower('-'. $release['modifier'])), + ); +} diff --git a/config/config.php b/config/config.php index 44807c22..3bf7ea30 100755 --- a/config/config.php +++ b/config/config.php @@ -1,115 +1,8 @@ - */ - -/** - * Welcome to the almighty configuration file. In this file the update definitions for each version are released. Please - * make sure to read below description of the config format carefully before proceeding. - * - * Nextcloud updates are delivered by a release channel, at the moment the following channels are available: - * - * - stable - * - beta - * - daily - * - * With exception of daily (which is a daily build of master) all of them need to be configured manually. The config - * array looks like the following: - * - * 'stable' => [ - * '9.1' => [ - * // 95% of instances on 9.1 will get this response - * '95' => [ - * 'latest' => '10.0.0', - * 'web' => 'https://docs.nextcloud.com/server/10/admin_manual/maintenance/upgrade.html', - * // downloadUrl is an optional entry, if not specified the URL is generated using https://download.nextcloud.com/server/releases/nextcloud-'.$newVersion['latest'].'.zip - * 'downloadUrl' => 'https://download.nextcloud.com/foo.zip', - * // internalVersion - * 'internalVersion' => '9.1.0' - * // autoupdater is an optional boolean value to define whether the update should be just announced or also delivered - * // defaults to true - * 'autoupdater' => true, - * // minPHPVersion is used to check the transferred PHP against this one here and allows to skip updates that are not compatible with this version of PHP - * // if nothing is set the PHP version is not checked - * 'minPHPVersion' => '5.4', - * // set this to true if the requesting version is end of life - it then shows an additional warning to the admin - * 'eol' => false, - * ], - * // 5% of instances on 9.1 will get this response - * '5' => [ - * 'latest' => '11.0.0', - * 'web' => 'https://docs.nextcloud.com/server/10/admin_manual/maintenance/upgrade.html', - * // downloadUrl is an optional entry, if not specified the URL is generated using https://download.nextcloud.com/server/releases/nextcloud-'.$newVersion['latest'].'.zip - * 'downloadUrl' => 'https://download.nextcloud.com/foo.zip', - * // internalVersion - * 'internalVersion' => '11.0.0' - * // autoupdater is an optional boolean value to define whether the update should be just announced or also delivered - * // defaults to true - * 'autoupdater' => true, - * // minPHPVersion is used to check the transferred PHP against this one here and allows to skip updates that are not compatible with this version of PHP - * // if nothing is set the PHP version is not checked - * 'minPHPVersion' => '5.4', - * // set this to true if the requesting version is end of life - it then shows an additional warning to the admin - * 'eol' => false, - * ], - * ], - * ] - * - * In this case if a Nextcloud with the major release of 8.2 sends an update request the 8.2.3 version is returned if the - * current Nextcloud version is below 8.2. - * - * The search for releases in the config array is fuzzy and happens as following: - * 1. Major.Minor.Maintenance.Revision - * 2. Major.Minor.Maintenance - * 3. Major.Minor - * 4. Major - * - * Once a result has been found this one is taken. This allows it to define an update order in case some releases should - * not be skipped. Let's take a look at an example: - * - * 'stable' => [ - * '8.2.0' => [ - * '100' => [ - * 'latest' => '8.2.1', - * 'web' => 'https://docs.nextcloud.com/server/8.2/admin_manual/maintenance/upgrade.html', - * ], - * ], - * '8.2' => [ - * '100' => [ - * 'latest' => '8.2.4', - * 'web' => 'https://docs.nextcloud.com/server/8.2/admin_manual/maintenance/upgrade.html', - * ], - * ], - * '8.2.4' => [ - * '5' => [ - * 'latest' => '9.0.0', - * 'web' => 'https://docs.nextcloud.com/server/8.2/admin_manual/maintenance/upgrade.html', - * ], - * '95' => [ - * 'latest' => '8.2.5', - * 'web' => 'https://docs.nextcloud.com/server/8.2/admin_manual/maintenance/upgrade.html', - * ], - * ], - * ] - * - * This configuration array would have the following meaning: - * - * 1. 8.2.0 instances would be delivered 8.2.1 - * 2. All instances below 8.2.4 EXCEPT 8.2.0 would be delivered 8.2.4 - * 3. 8.2.4 instances get 9.0.0 delivered with a 5% chance and 8.2.5 with a 95% chance - * - * Oh. And be a nice person and also adjust the integration tests at /tests/integration/features/update.feature after doing - * a change to the update logic. That way you can also ensure that your changes will do what you wanted them to do. The - * tests are automatically executed on Travis or you can do it locally: - * - * - php -S localhost:8888 ./index.php & - * - cd tests/integration/ && ../../vendor/bin/behat . - */ - return [ 'stable' => [ - '29' => [ - '100' => [ + 29 => [ + 100 => [ 'latest' => '29.0.0', 'internalVersion' => '29.0.0.19', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-29.0.0.zip', @@ -125,7 +18,7 @@ ], ], '28.0.5' => [ - '70' => [ + 70 => [ 'latest' => '29.0.0', 'internalVersion' => '29.0.0.19', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-29.0.0.zip', @@ -140,8 +33,8 @@ NxJoXqJoiaG26rWzAT6yDQ==', ], ], - '28' => [ - '100' => [ + 28 => [ + 100 => [ 'latest' => '28.0.5', 'internalVersion' => '28.0.5.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-28.0.5.zip', @@ -157,7 +50,7 @@ ], ], '27.1.9' => [ - '100' => [ + 100 => [ 'latest' => '28.0.5', 'internalVersion' => '28.0.5.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-28.0.5.zip', @@ -172,8 +65,8 @@ jwPKhVqxSKaSozkwU85D7A==', ], ], - '27' => [ - '100' => [ + 27 => [ + 100 => [ 'latest' => '27.1.9', 'internalVersion' => '27.1.9.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-27.1.9.zip', @@ -189,7 +82,7 @@ ], ], '26.0.13' => [ - '100' => [ + 100 => [ 'latest' => '27.1.9', 'internalVersion' => '27.1.9.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-27.1.9.zip', @@ -204,8 +97,8 @@ 3No9jhWhcURoGeKTWQJ5pw==', ], ], - '26' => [ - '100' => [ + 26 => [ + 100 => [ 'latest' => '26.0.13', 'internalVersion' => '26.0.13.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-26.0.13.zip', @@ -221,7 +114,7 @@ ], ], '25.0.13' => [ - '100' => [ + 100 => [ 'latest' => '26.0.13', 'internalVersion' => '26.0.13.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-26.0.13.zip', @@ -236,8 +129,8 @@ m04vBdfnV+VUhCBz0tYn9A==', ], ], - '25' => [ - '100' => [ + 25 => [ + 100 => [ 'latest' => '25.0.13', 'internalVersion' => '25.0.13.2', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-25.0.13.zip', @@ -253,7 +146,7 @@ ], ], '24.0.12' => [ - '100' => [ + 100 => [ 'latest' => '25.0.13', 'internalVersion' => '25.0.13.2', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-25.0.13.zip', @@ -268,8 +161,8 @@ c2rOEZwqzv2p7fWh4Ovl6g==', ], ], - '24' => [ - '100' => [ + 24 => [ + 100 => [ 'latest' => '24.0.12', 'internalVersion' => '24.0.12.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-24.0.12.zip', @@ -285,7 +178,7 @@ ], ], '23.0.12' => [ - '100' => [ + 100 => [ 'latest' => '24.0.12', 'internalVersion' => '24.0.12.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-24.0.12.zip', @@ -300,8 +193,8 @@ ACWMWE93WNcq+HBa025zsw==', ], ], - '23' => [ - '100' => [ + 23 => [ + 100 => [ 'latest' => '23.0.12', 'internalVersion' => '23.0.12.2', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-23.0.12.zip', @@ -317,7 +210,7 @@ ], ], '22.2.10' => [ - '100' => [ + 100 => [ 'latest' => '23.0.12', 'internalVersion' => '23.0.12.2', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-23.0.12.zip', @@ -332,8 +225,8 @@ PlWRhIoX0XzP82+TC5b1dg==', ], ], - '22' => [ - '100' => [ + 22 => [ + 100 => [ 'latest' => '22.2.10', 'internalVersion' => '22.2.10.2', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-22.2.10.zip', @@ -349,7 +242,7 @@ ], ], '21.0.9' => [ - '100' => [ + 100 => [ 'latest' => '22.2.10', 'internalVersion' => '22.2.10.2', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-22.2.10.zip', @@ -364,8 +257,8 @@ GorEOAeOrtcV0ba4AVoETQ==', ], ], - '21' => [ - '100' => [ + 21 => [ + 100 => [ 'latest' => '21.0.9', 'internalVersion' => '21.0.9.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-21.0.9.zip', @@ -381,7 +274,7 @@ ], ], '20.0.14' => [ - '100' => [ + 100 => [ 'latest' => '21.0.9', 'internalVersion' => '21.0.9.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-21.0.9.zip', @@ -396,8 +289,8 @@ mE2YG/R4IKW+A8xqweVzig==', ], ], - '20' => [ - '100' => [ + 20 => [ + 100 => [ 'latest' => '20.0.14', 'internalVersion' => '20.0.14.2', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-20.0.14.zip', @@ -413,7 +306,7 @@ ], ], '19.0.13' => [ - '100' => [ + 100 => [ 'latest' => '20.0.14', 'internalVersion' => '20.0.14.2', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-20.0.14.zip', @@ -428,8 +321,8 @@ 6feVFe2PlZ2FK5zxWZNYfw==', ], ], - '19' => [ - '100' => [ + 19 => [ + 100 => [ 'latest' => '19.0.13', 'internalVersion' => '19.0.13.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-19.0.13.zip', @@ -445,7 +338,7 @@ ], ], '18.0.14' => [ - '100' => [ + 100 => [ 'latest' => '19.0.13', 'internalVersion' => '19.0.13.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-19.0.13.zip', @@ -460,8 +353,8 @@ WN2PwtM3nn6/5y0BMhJueQ==', ], ], - '18' => [ - '100' => [ + 18 => [ + 100 => [ 'latest' => '18.0.14', 'internalVersion' => '18.0.14.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-18.0.14.zip', @@ -477,7 +370,7 @@ ], ], '17.0.10' => [ - '100' => [ + 100 => [ 'latest' => '18.0.14', 'internalVersion' => '18.0.14.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-18.0.14.zip', @@ -491,7 +384,9 @@ BX4Qwl1YI2f8b0KHy3yIqmY58qsWTjGb319Nq3tPFsY8N2hUmFu4yve0nW6Zb/+1 OcrbOha2Z819kkukqEE34Q==', ], - '101' => [ + ], + 17 => [ + 100 => [ 'latest' => '17.0.10', 'internalVersion' => '17.0.10.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-17.0.10.zip', @@ -505,18 +400,9 @@ 4QZIg8gwFj8Uxk4ylijHFSeIxCX96ZSmj+7wolAn8kYqq5Q8iwVYjNqFtJZ/YXIc cNaaoBpx0s3QFdfhSnSgQQ==', ], - '102' => [ - 'latest' => '18.0.14', - 'internalVersion' => '18.0.14.1', - 'downloadUrl' => 'https://nextcloud.com/outdated-php-7-1/', - 'web' => 'https://nextcloud.com/outdated-php-7-1/', - 'eol' => true, - 'minPHPVersion' => '7.1', - 'autoupdater' => false, - ], ], - '17' => [ - '100' => [ + '16.0.11' => [ + 100 => [ 'latest' => '17.0.10', 'internalVersion' => '17.0.10.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-17.0.10.zip', @@ -531,24 +417,24 @@ cNaaoBpx0s3QFdfhSnSgQQ==', ], ], - '16' => [ - '100' => [ - 'latest' => '17.0.10', - 'internalVersion' => '17.0.10.1', - 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-17.0.10.zip', - 'web' => 'https://docs.nextcloud.com/server/17/admin_manual/maintenance/upgrade.html', + 16 => [ + 100 => [ + 'latest' => '16.0.11', + 'internalVersion' => '16.0.11.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-16.0.11.zip', + 'web' => 'https://docs.nextcloud.com/server/16/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '7.1', - 'signature' => 'UNo0Sh9xK+TlO6rL6s380gB436990558QOjdQiDaeYuFANjCQFz0aO957Fetpkol -idhfkICTMtBC5mlSVAJjMW+5BIQ0kAHeJykqz6YD4Vw0aEIHHFgA1qCEphEj0/D5 -p5OzkP6JSkwp+/e1O8xFdr/8VIHdkCEM5Kd5lchzp83XmfZm1t6YdcV8ziACDZrT -GaiG/TGRdHeR4ifgMpdMLZIy0x4Qd6k06dhCFsEz8H10Cf0oVmtrjxJsKEPY7doW -4QZIg8gwFj8Uxk4ylijHFSeIxCX96ZSmj+7wolAn8kYqq5Q8iwVYjNqFtJZ/YXIc -cNaaoBpx0s3QFdfhSnSgQQ==', + 'signature' => 'b7SOD6KATY0bpbAcL/+1gdeLeuWAvsIn+tuUzF6HStrjxLrARw8cOrM7bCq5zcq7 +tJCWrI2Ww9CrKH8kNalEZNMDZy346QhYkUZNOiU2IP8wdb1601vRXfIkPyTVSpdk +RDMQWtIushwa/WIZTKnJWo1fd0juxBnbmIl30rxDgUpBOkjx0zGvA2Ff+mssezX3 +qGhaB0Btr45xpgbHbeEQwsH1w2PXJFy9GsF2psbBEIykCPAxgRWR32bTGH8ws9Uy +zpAxCj7W4wEnJFhsQ2zb0Wh5ZjSA9G1SARJhMp/8Efwm3uWJr5xK4MYKG2bQ29mt +HWPTEBalqX2V9enOLAgVWQ==', ], ], - '15' => [ - '100' => [ + '15.0.14' => [ + 100 => [ 'latest' => '16.0.11', 'internalVersion' => '16.0.11.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-16.0.11.zip', @@ -562,7 +448,9 @@ zpAxCj7W4wEnJFhsQ2zb0Wh5ZjSA9G1SARJhMp/8Efwm3uWJr5xK4MYKG2bQ29mt HWPTEBalqX2V9enOLAgVWQ==', ], - '101' => [ + ], + 15 => [ + 100 => [ 'latest' => '15.0.14', 'internalVersion' => '15.0.14.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-15.0.14.zip', @@ -576,34 +464,41 @@ 05B0WC1WDnIiMAfUcEMovxuqoFexvrpnJ9ByOPPLTYMWfpQcJHjw4FiqgFQ/of/i DvYBQvWAJx0Q7tV9bofZjA==', ], - '102' => [ - 'latest' => '16.0.11', - 'internalVersion' => '16.0.11.1', - 'downloadUrl' => 'https://nextcloud.com/outdated-php-7-0/', - 'web' => 'https://nextcloud.com/outdated-php-7-0/', + ], + '14.0.14' => [ + 100 => [ + 'latest' => '15.0.14', + 'internalVersion' => '15.0.14.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-15.0.14.zip', + 'web' => 'https://docs.nextcloud.com/server/15/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '7.0', - 'autoupdater' => false, + 'signature' => 'A5WWizBmhSC+dfJNrA3eNjx4w3w9i+9GKs0TWCEOAi74E1gfQymaSa3UNdm/fjmP +Osy1fnmICjDfXoIwkle+dlfAbwg2faRkF1px9a538Y5XXTXZ63P5JXABHYSvIAY3 +QDk2CwzM4tSiL2rf7tGgG8uxtvXkyG7DfHH7BweKFBPQ0Ly2ESiSHzVagAHo7f/O +x3G7qC6o4g8pVPfVyXhOZcwf29et9DY3xtKluMQxrmHVTQ6mJ65IRny+/MNMrjwf +05B0WC1WDnIiMAfUcEMovxuqoFexvrpnJ9ByOPPLTYMWfpQcJHjw4FiqgFQ/of/i +DvYBQvWAJx0Q7tV9bofZjA==', ], ], - '14' => [ - '100' => [ - 'latest' => '15.0.12', - 'internalVersion' => '15.0.12.1', - 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-15.0.12.zip', - 'web' => 'https://docs.nextcloud.com/server/15/admin_manual/maintenance/upgrade.html', + 14 => [ + 100 => [ + 'latest' => '14.0.14', + 'internalVersion' => '14.0.14.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-14.0.14.zip', + 'web' => 'https://docs.nextcloud.com/server/14/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '7.0', - 'signature' => 'ky2vKMSu1tjkpsPaAf6CkqtKJwkeZ8fxT9a9TBNwAAbl3AAIYqQKjT0Np5nvFwzb -Z9N2axbhWdy0WuY7ffxDwYL7lKzzJ4nfeYzIVJV49y1W2kbz5KvDhX4/ACgGw42m -WSmJdyx7hnp5JdcddA/eZDh2yrffC+MjrSaZXBvitnxMtI2xaeOUpphvjKgy8wF+ -Cb8hjiKCAbhG11F2qq8TpX79l5I1n32RhvhJMc1GXmSSlR+dKK0zVIspW9ENMsRc -xsVlYeI9cGdGpShVj4eC3ya2ZZ0KFsEwwvJlOjXbJ8Ctw133fWEp/1nGFuiCP3sZ -nfCSJ75Tc780Fqo0Q4pc8A==', + 'signature' => 'Nw1PhE391uasWeU66JtBoJGTRHDdImBNBkpMlh4nTG6UJFouFTDDmqHq6DcanS5e +qoC79rxiC7lloaN/05AZ7AY1FSNjG5G9xPM4OWgTCbwXhUfD3DjGVzzbMVnTWgeK +ZMgZqqU8F4uWHkcEB0fqImZYnFMdX7E7xZmEIO8BSOOdS6PvvZTAeDXEwWSBMRVa +7wEYp/hwJzV3UCy5SThYHqs+8EIdQeql1/3o/P/0bsGnsgpLGK/2bV4lzVV74m3T +RrZ6EDdSnGyybYX4QGv/wfng9RijMdMdr1SYzJfkRKj+JX37zgscL/87XgnApkQS +FaqAZYszh1hjGEyQaoibXw==', ], ], - '13' => [ - '100' => [ + '13.0.12' => [ + 100 => [ 'latest' => '14.0.14', 'internalVersion' => '14.0.14.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-14.0.14.zip', @@ -617,7 +512,9 @@ RrZ6EDdSnGyybYX4QGv/wfng9RijMdMdr1SYzJfkRKj+JX37zgscL/87XgnApkQS FaqAZYszh1hjGEyQaoibXw==', ], - '101' => [ + ], + 13 => [ + 100 => [ 'latest' => '13.0.12', 'internalVersion' => '13.0.12.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-13.0.12.zip', @@ -631,18 +528,9 @@ VFRfhy9vBf+VD6khhFkDXSymw0X6xNN3lMqQIJmJPsPONDXtk2diY6h204uEUofP yiBfUT4yVTwIOt+tnqZzzw==', ], - '102' => [ - 'latest' => '14.0.14', - 'internalVersion' => '14.0.14.1', - 'downloadUrl' => 'https://nextcloud.com/outdated-php-5-6/', - 'web' => 'https://nextcloud.com/outdated-php-5-6/', - 'eol' => true, - 'minPHPVersion' => '5.6', - 'autoupdater' => false, - ], ], - '12' => [ - '100' => [ + '12.0.13' => [ + 100 => [ 'latest' => '13.0.12', 'internalVersion' => '13.0.12.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-13.0.12.zip', @@ -657,8 +545,8 @@ yiBfUT4yVTwIOt+tnqZzzw==', ], ], - '11' => [ - '100' => [ + 12 => [ + 100 => [ 'latest' => '12.0.13', 'internalVersion' => '12.0.13.2', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-12.0.13.zip', @@ -673,238 +561,156 @@ vbaIJ8CiZnKdMBDAdXAVMA==', ], ], - '9.1' => [ - '100' => [ + '11.0.8' => [ + 100 => [ + 'latest' => '12.0.13', + 'internalVersion' => '12.0.13.2', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-12.0.13.zip', + 'web' => 'https://docs.nextcloud.com/server/12/admin_manual/maintenance/upgrade.html', + 'eol' => true, + 'minPHPVersion' => '5.6', + 'signature' => 'jZbAdJ9cHzBcw7BatJoX7/0Nv9NdecbsR4wEnRBbWI/EmAQ09HoMmmC1xiY88ME5 +lvHlcEgF0sVTx6tdg4LvqAH2ze34LhzxgIu7mS1tAHIZ81elGhv66VuRv17QYVs1 +7QQySikKMprI+mzdTjIf3rloc97lpm9ynQ+6vizwdxhZ0w5r4Gl85ni52MpeN1Zd +Sx/Z9LJ0bCIO9C+E6kyQvjI7Q7A+WpMF1SiQL2RJsLJERtV4BP8izVuZQ/hI9NDj +rdZAAiMKh8jB0atDNbxu24dWI2Ie7MvnzadL6Ax9+qIWUzlZIqX9yXgFVE2RsGVS +vbaIJ8CiZnKdMBDAdXAVMA==', + ], + ], + 11 => [ + 100 => [ 'latest' => '11.0.8', 'internalVersion' => '11.0.8.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-11.0.8.zip', 'web' => 'https://docs.nextcloud.com/server/11/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '5.6', - 'signature' => 'CaYUimboWU3dURynPxieGo9V8KoNHe5js2XdivdjWQ1vsyfsnz1Nim33c0bQWzA5 -PosPk3vMUWxJpNKP92D0uyz1Xutkc/tCgsjsXrDaMzl1HUZ9W/PFWEtXTddD5fbJ -8idQFiyiXNNpdDJ/gZjaUZcLWEgMI9MVoeFyKY1OORuJz1e9+I/UBHMTGo81H63X -ApiCSIfXvfvbMMA6DOtorWjDJoHvCkrLef3zqEDDL5bF8NGVE/9f2hh2vSlJex45 -ko5tNR4IIGM3bIRBhw9455+Tc3dVZEpGBr6Yy3vSJmrQKYQ/degEe+S7ZWyVc3TQ -ZH1PxQilL7ihAvnOb2oU1Q==', - ], - '101' => [ - 'latest' => '10.0.6', - 'internalVersion' => '9.1.6.1', - 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-10.0.6.zip', - 'web' => 'https://docs.nextcloud.org/server/10/admin_manual/maintenance/manual_upgrade.html', - 'eol' => true, - 'minPHPVersion' => '5.4', + 'signature' => 'jZbAdJ9cHzBcw7BatJoX7/0Nv9NdecbsR4wEnRBbWI/EmAQ09HoMmmC1xiY88ME5 +lvHlcEgF0sVTx6tdg4LvqAH2ze34LhzxgIu7mS1tAHIZ81elGhv66VuRv17QYVs1 +7QQySikKMprI+mzdTjIf3rloc97lpm9ynQ+6vizwdxhZ0w5r4Gl85ni52MpeN1Zd +Sx/Z9LJ0bCIO9C+E6kyQvjI7Q7A+WpMF1SiQL2RJsLJERtV4BP8izVuZQ/hI9NDj +rdZAAiMKh8jB0atDNbxu24dWI2Ie7MvnzadL6Ax9+qIWUzlZIqX9yXgFVE2RsGVS +vbaIJ8CiZnKdMBDAdXAVMA==', ], - '102' => [ + ], + '10.0.6' => [ + 100 => [ 'latest' => '11.0.8', 'internalVersion' => '11.0.8.1', - 'downloadUrl' => 'https://nextcloud.com/outdated-php-5-4-5-5/', - 'web' => 'https://nextcloud.com/outdated-php-5-4-5-5/', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-11.0.8.zip', + 'web' => 'https://docs.nextcloud.com/server/11/admin_manual/maintenance/upgrade.html', + 'eol' => true, + 'minPHPVersion' => '5.6', + 'signature' => 'jZbAdJ9cHzBcw7BatJoX7/0Nv9NdecbsR4wEnRBbWI/EmAQ09HoMmmC1xiY88ME5 +lvHlcEgF0sVTx6tdg4LvqAH2ze34LhzxgIu7mS1tAHIZ81elGhv66VuRv17QYVs1 +7QQySikKMprI+mzdTjIf3rloc97lpm9ynQ+6vizwdxhZ0w5r4Gl85ni52MpeN1Zd +Sx/Z9LJ0bCIO9C+E6kyQvjI7Q7A+WpMF1SiQL2RJsLJERtV4BP8izVuZQ/hI9NDj +rdZAAiMKh8jB0atDNbxu24dWI2Ie7MvnzadL6Ax9+qIWUzlZIqX9yXgFVE2RsGVS +vbaIJ8CiZnKdMBDAdXAVMA==', + ], + ], + 10 => [ + 100 => [ + 'latest' => '10.0.6', + 'internalVersion' => '9.1.6.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-10.0.6.zip', + 'web' => 'https://docs.nextcloud.com/server/10/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '5.4', - 'autoupdater' => false, + 'signature' => '', ], ], - '9.0' => [ - '100' => [ + '9.0.58' => [ + 100 => [ 'latest' => '10.0.6', 'internalVersion' => '9.1.6.1', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-10.0.6.zip', - 'web' => 'https://docs.nextcloud.org/server/10/admin_manual/maintenance/manual_upgrade.html', + 'web' => 'https://docs.nextcloud.com/server/10/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '5.4', + 'signature' => '', ], ], - '8.2' => [ - '100' => [ + 9 => [ + 100 => [ 'latest' => '9.0.58', 'internalVersion' => '9.0.58', 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-9.0.58.zip', - 'web' => 'https://docs.nextcloud.org/server/9/admin_manual/maintenance/manual_upgrade.html', + 'web' => 'https://docs.nextcloud.com/server/9/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '5.4', + 'signature' => '', ], ], ], - 'beta' => [ - '28.0.5' => [ - '100' => [ - 'latest' => '29.0.0', - 'internalVersion' => '29.0.0.19', - 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-29.0.0.zip', - 'web' => 'https://docs.nextcloud.com/server/29/admin_manual/maintenance/upgrade.html', - 'eol' => false, - 'minPHPVersion' => '8.0', - 'signature' => 'WYiOZ/o8pfhdiTsRgo2Y9deTYAhfe10Z0JrMOlqBBpNbGw8+Lzgkc4clWDM2TQ7D -ZMXLZicwkUxueh3o7PZsbR7RHT2weQ8ajMz+wc87rCKVUiNzLm/7VXL9o5HXY7jw -hhSbjS22PwyKXhrqoMyC5Zu7L60O+8W/LPUyYwnCV5IdL9BCXCa+Z284Ig95v8uX -c/N0UlT+d4cQD/GxhIxDvNDtsV3pLnUjWwgSwjSbnsMu+4jL6AxtNO1ZWVdeg3X7 -o2+KFQzM84mURv71eGvzsCXziisZM1irTS7UZSYLlV8x3r/6xOoDFcnjDjquHLaQ -NxJoXqJoiaG26rWzAT6yDQ==', - ], - ], - '28' => [ - '100' => [ - 'latest' => '28.0.5', - 'internalVersion' => '28.0.5.1', - 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-28.0.5.zip', - 'web' => 'https://docs.nextcloud.com/server/28/admin_manual/maintenance/upgrade.html', - 'eol' => false, - 'minPHPVersion' => '8.0', - 'signature' => 'VjsEJXdfI+ELdcE0gR38zgw3+XSOpc4w7OFzg0bDHC3UWOyyXEKRs3DiaPk/262Q -B10V4b+GJ4WC4P6/LpAzHcEpJ4KX1J2MWE0eq3Pr22SayUH09XcYhXSapvgmc0Om -3wY5p8NRr9cNwi0Uslw/OhCovFTtj2I0xEgC6aHi6I+p8Z3V67LvkFE3YZP9nEpH -5hag3acwdQgbwVrMImz3pUEFKS0fsYSq3AkaPK3URHlZLaLsS6fo2ntWVVbrEjFQ -tPHQD87NDyadODwLr3guqLTgpm79quGcowGHO7qadL3Z44uB3xaW4w+iAg9VzQJ1 -jwPKhVqxSKaSozkwU85D7A==', - ], - ], - '27.1.9.1' => [ - '100' => [ - 'latest' => '28.0.5', - 'internalVersion' => '28.0.5.1', - 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-28.0.5.zip', - 'web' => 'https://docs.nextcloud.com/server/28/admin_manual/maintenance/upgrade.html', - 'eol' => false, - 'minPHPVersion' => '8.0', - 'signature' => 'VjsEJXdfI+ELdcE0gR38zgw3+XSOpc4w7OFzg0bDHC3UWOyyXEKRs3DiaPk/262Q -B10V4b+GJ4WC4P6/LpAzHcEpJ4KX1J2MWE0eq3Pr22SayUH09XcYhXSapvgmc0Om -3wY5p8NRr9cNwi0Uslw/OhCovFTtj2I0xEgC6aHi6I+p8Z3V67LvkFE3YZP9nEpH -5hag3acwdQgbwVrMImz3pUEFKS0fsYSq3AkaPK3URHlZLaLsS6fo2ntWVVbrEjFQ -tPHQD87NDyadODwLr3guqLTgpm79quGcowGHO7qadL3Z44uB3xaW4w+iAg9VzQJ1 -jwPKhVqxSKaSozkwU85D7A==', - ], - ], - '27' => [ - '100' => [ - 'latest' => '27.1.9', - 'internalVersion' => '27.1.9.1', - 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-27.1.9.zip', - 'web' => 'https://docs.nextcloud.com/server/27/admin_manual/maintenance/upgrade.html', - 'eol' => false, - 'minPHPVersion' => '8.0', - 'signature' => 'MofbMy9BK9Tib2LaSkg31dKRjRK6B+k8CTMh9xhUyQoC+yBdCKmchvw0ApohBc9h -4R0Ejxi57AEpMWrXwotSpQ5R41puIn6pSulN5DDhdj/AFvUUeoyI0nVKXCBCmqcO -zo7UPX07GqKIqQ8uTEuy3Q7ayREkVrFvbWUCDHgjGFV2xVwR4nqppmzlZKmC0SYu -KIFKVB0s5pFLvC2J/TcpqKGS86iQIUAaNkER3hiAf4iO+GxatM4rEtveD/Bv9Gdy -is8mB1xOT+wd3WCdwHoIu14IlWcy1CNgWKe+sjoz4VvR579TG3I4mk9VxSxLu8rO -3No9jhWhcURoGeKTWQJ5pw==', - ], - ], - '26.0.13' => [ - '100' => [ - 'latest' => '27.1.9', - 'internalVersion' => '27.1.9.1', - 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-27.1.9.zip', - 'web' => 'https://docs.nextcloud.com/server/27/admin_manual/maintenance/upgrade.html', - 'eol' => false, - 'minPHPVersion' => '8.0', - 'signature' => 'MofbMy9BK9Tib2LaSkg31dKRjRK6B+k8CTMh9xhUyQoC+yBdCKmchvw0ApohBc9h -4R0Ejxi57AEpMWrXwotSpQ5R41puIn6pSulN5DDhdj/AFvUUeoyI0nVKXCBCmqcO -zo7UPX07GqKIqQ8uTEuy3Q7ayREkVrFvbWUCDHgjGFV2xVwR4nqppmzlZKmC0SYu -KIFKVB0s5pFLvC2J/TcpqKGS86iQIUAaNkER3hiAf4iO+GxatM4rEtveD/Bv9Gdy -is8mB1xOT+wd3WCdwHoIu14IlWcy1CNgWKe+sjoz4VvR579TG3I4mk9VxSxLu8rO -3No9jhWhcURoGeKTWQJ5pw==', - ], - ], - '26' => [ - '100' => [ - 'latest' => '26.0.13', - 'internalVersion' => '26.0.13.1', - 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-26.0.13.zip', - 'web' => 'https://docs.nextcloud.com/server/26/admin_manual/maintenance/upgrade.html', - 'eol' => true, - 'minPHPVersion' => '8.0', - 'signature' => 'bvGxFDuB+F5C9DqiARiF9MifdcZEQ2R5+AvgCEs/hnrUugRjTXMvJPRkaDLL01Yf -QoiNwNG3da/2JQEAfZ23YkQedNQ6T3fs7HGbhUZA3xFZb06kxQpLJFI/Ncei8i16 -+QyxhlQtOlhBG0ExG0M0LD3Ow9ZFsCkRk1Ja2YIRBW3mRUdnqew8mYYKltZJL444 -D5BO/0AisCh9hVI7JzExVmwYL/HOmbG5GBpy7BLJnSOUU0Di5PSfwoLIOqLsg/9+ -qVqpedb3ivvwVR1pZqTUyrUPDYojLnyw3XCSKb588U6kSNhaMj/Kl5/5KT34OG+2 -m04vBdfnV+VUhCBz0tYn9A==', - ], - ], - '25.0.13' => [ - '100' => [ - 'latest' => '26.0.13', - 'internalVersion' => '26.0.13.1', - 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-26.0.13.zip', - 'web' => 'https://docs.nextcloud.com/server/26/admin_manual/maintenance/upgrade.html', - 'eol' => true, - 'minPHPVersion' => '8.0', - 'signature' => 'bvGxFDuB+F5C9DqiARiF9MifdcZEQ2R5+AvgCEs/hnrUugRjTXMvJPRkaDLL01Yf -QoiNwNG3da/2JQEAfZ23YkQedNQ6T3fs7HGbhUZA3xFZb06kxQpLJFI/Ncei8i16 -+QyxhlQtOlhBG0ExG0M0LD3Ow9ZFsCkRk1Ja2YIRBW3mRUdnqew8mYYKltZJL444 -D5BO/0AisCh9hVI7JzExVmwYL/HOmbG5GBpy7BLJnSOUU0Di5PSfwoLIOqLsg/9+ -qVqpedb3ivvwVR1pZqTUyrUPDYojLnyw3XCSKb588U6kSNhaMj/Kl5/5KT34OG+2 -m04vBdfnV+VUhCBz0tYn9A==', - ], - ], ], 'daily' => [ - '29' => [ + 30 => [ 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-master.zip', 'web' => 'https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html', 'eol' => false, + 'minPHPVersion' => '8.1', + ], + 29 => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable29.zip', + 'web' => 'https://docs.nextcloud.com/server/29/admin_manual/maintenance/upgrade.html', + 'eol' => false, 'minPHPVersion' => '8.0', ], - '28' => [ + 28 => [ 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable28.zip', 'web' => 'https://docs.nextcloud.com/server/28/admin_manual/maintenance/upgrade.html', 'eol' => false, 'minPHPVersion' => '8.0', ], - '27' => [ + 27 => [ 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable27.zip', 'web' => 'https://docs.nextcloud.com/server/27/admin_manual/maintenance/upgrade.html', 'eol' => false, 'minPHPVersion' => '8.0', ], - '26' => [ + 26 => [ 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable26.zip', 'web' => 'https://docs.nextcloud.com/server/26/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '8.0', ], - '25' => [ + 25 => [ 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable25.zip', 'web' => 'https://docs.nextcloud.com/server/25/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '7.4', ], - '24' => [ + 24 => [ 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable24.zip', 'web' => 'https://docs.nextcloud.com/server/24/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '7.4', ], - '23' => [ + 23 => [ 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable23.zip', 'web' => 'https://docs.nextcloud.com/server/23/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '7.3', ], - '22' => [ + 22 => [ 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable22.zip', 'web' => 'https://docs.nextcloud.com/server/22/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '7.3', ], - '21' => [ + 21 => [ 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable21.zip', 'web' => 'https://docs.nextcloud.com/server/21/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '7.3', ], - '20' => [ + 20 => [ 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable20.zip', 'web' => 'https://docs.nextcloud.com/server/20/admin_manual/maintenance/upgrade.html', 'eol' => true, 'minPHPVersion' => '7.2', ], ], - '_settings' => [ - 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', - ], ]; diff --git a/config/major_versions.json b/config/major_versions.json new file mode 100644 index 00000000..6803c7d4 --- /dev/null +++ b/config/major_versions.json @@ -0,0 +1,89 @@ +{ + "30": { + "minPHP": "8.1" + }, + "29": { + "eol": "2025-04", + "minPHP": "8.0" + }, + "28": { + "eol": "2024-12", + "minPHP": "8.0" + }, + "27": { + "eol": "2024-06", + "minPHP": "8.0" + }, + "26": { + "eol": "2024-03", + "minPHP": "8.0" + }, + "25": { + "eol": "2023-10 ", + "minPHP": "7.4" + }, + "24": { + "eol": "2023-04 ", + "minPHP": "7.4" + }, + "23": { + "eol": "2022-12 ", + "minPHP": "7.3" + }, + "22": { + "eol": "2022-07 ", + "minPHP": "7.3" + }, + "21": { + "eol": "2022-02 ", + "minPHP": "7.3" + }, + "20": { + "eol": "2021-11 ", + "minPHP": "7.2" + }, + "19": { + "eol": "2021-06 ", + "minPHP": "7.2" + }, + "18": { + "eol": "2021-01 ", + "minPHP": "7.2" + }, + "17": { + "eol": "2020-10 ", + "minPHP": "7.1" + }, + "16": { + "eol": "2020-06 ", + "minPHP": "7.1" + }, + "15": { + "eol": "2019-12 ", + "minPHP": "7.0" + }, + "14": { + "eol": "2019-09 ", + "minPHP": "7.0" + }, + "13": { + "eol": "2019-02 ", + "minPHP": "5.6" + }, + "12": { + "eol": "2018-11 ", + "minPHP": "5.6" + }, + "11": { + "eol": "2018-03 ", + "minPHP": "5.6" + }, + "10": { + "eol": "2017-08 ", + "minPHP": "5.4" + }, + "9": { + "eol": "2017-04 ", + "minPHP": "5.4" + } +} diff --git a/config/releases.json b/config/releases.json new file mode 100644 index 00000000..f51882ef --- /dev/null +++ b/config/releases.json @@ -0,0 +1,89 @@ +{ + "9.0.58": { + "internalVersion": "9.0.58" + }, + "10.0.6": { + "internalVersion": "9.1.6.1" + }, + "11.0.8": { + "internalVersion": "11.0.8.1", + "signature": "jZbAdJ9cHzBcw7BatJoX7/0Nv9NdecbsR4wEnRBbWI/EmAQ09HoMmmC1xiY88ME5lvHlcEgF0sVTx6tdg4LvqAH2ze34LhzxgIu7mS1tAHIZ81elGhv66VuRv17QYVs17QQySikKMprI+mzdTjIf3rloc97lpm9ynQ+6vizwdxhZ0w5r4Gl85ni52MpeN1ZdSx/Z9LJ0bCIO9C+E6kyQvjI7Q7A+WpMF1SiQL2RJsLJERtV4BP8izVuZQ/hI9NDjrdZAAiMKh8jB0atDNbxu24dWI2Ie7MvnzadL6Ax9+qIWUzlZIqX9yXgFVE2RsGVSvbaIJ8CiZnKdMBDAdXAVMA==" + }, + "12.0.13": { + "internalVersion": "12.0.13.2", + "signature": "jZbAdJ9cHzBcw7BatJoX7/0Nv9NdecbsR4wEnRBbWI/EmAQ09HoMmmC1xiY88ME5lvHlcEgF0sVTx6tdg4LvqAH2ze34LhzxgIu7mS1tAHIZ81elGhv66VuRv17QYVs17QQySikKMprI+mzdTjIf3rloc97lpm9ynQ+6vizwdxhZ0w5r4Gl85ni52MpeN1ZdSx/Z9LJ0bCIO9C+E6kyQvjI7Q7A+WpMF1SiQL2RJsLJERtV4BP8izVuZQ/hI9NDjrdZAAiMKh8jB0atDNbxu24dWI2Ie7MvnzadL6Ax9+qIWUzlZIqX9yXgFVE2RsGVSvbaIJ8CiZnKdMBDAdXAVMA==" + }, + "13.0.12": { + "internalVersion": "13.0.12.1", + "signature": "GRVpINAV11LUd+UxjnQtb2gbFHaxNrh9WzzQgPpjaKJ6J28PRQ9sq8J1GlfEN2K7RnD/6pFkDRTlBOU56g4XC3GgDpY6F88OVQ0z9D1/nudSZV+cSu6xRuC6q7Z9sStGoyDn+o4Z8c+i2yR6zcoVD5itXiU1w41fMT/dlzCtIDmo953+K9fNlTPlU9h9H3MIHVECrm+3NmISmI8+5hl4Ju5p8tudxVhGF2aHR0ilG0ff+wjdz5CtsiZXoP+BUNn+VFRfhy9vBf+VD6khhFkDXSymw0X6xNN3lMqQIJmJPsPONDXtk2diY6h204uEUofPyiBfUT4yVTwIOt+tnqZzzw==" + }, + "14.0.14": { + "internalVersion": "14.0.14.1", + "signature": "Nw1PhE391uasWeU66JtBoJGTRHDdImBNBkpMlh4nTG6UJFouFTDDmqHq6DcanS5eqoC79rxiC7lloaN/05AZ7AY1FSNjG5G9xPM4OWgTCbwXhUfD3DjGVzzbMVnTWgeKZMgZqqU8F4uWHkcEB0fqImZYnFMdX7E7xZmEIO8BSOOdS6PvvZTAeDXEwWSBMRVa7wEYp/hwJzV3UCy5SThYHqs+8EIdQeql1/3o/P/0bsGnsgpLGK/2bV4lzVV74m3TRrZ6EDdSnGyybYX4QGv/wfng9RijMdMdr1SYzJfkRKj+JX37zgscL/87XgnApkQSFaqAZYszh1hjGEyQaoibXw==" + }, + "15.0.12": { + "internalVersion": "15.0.12.1", + "signature": "ky2vKMSu1tjkpsPaAf6CkqtKJwkeZ8fxT9a9TBNwAAbl3AAIYqQKjT0Np5nvFwzbZ9N2axbhWdy0WuY7ffxDwYL7lKzzJ4nfeYzIVJV49y1W2kbz5KvDhX4/ACgGw42mWSmJdyx7hnp5JdcddA/eZDh2yrffC+MjrSaZXBvitnxMtI2xaeOUpphvjKgy8wF+Cb8hjiKCAbhG11F2qq8TpX79l5I1n32RhvhJMc1GXmSSlR+dKK0zVIspW9ENMsRcxsVlYeI9cGdGpShVj4eC3ya2ZZ0KFsEwwvJlOjXbJ8Ctw133fWEp/1nGFuiCP3sZnfCSJ75Tc780Fqo0Q4pc8A==" + }, + "15.0.14": { + "internalVersion": "15.0.14.1", + "signature": "A5WWizBmhSC+dfJNrA3eNjx4w3w9i+9GKs0TWCEOAi74E1gfQymaSa3UNdm/fjmPOsy1fnmICjDfXoIwkle+dlfAbwg2faRkF1px9a538Y5XXTXZ63P5JXABHYSvIAY3QDk2CwzM4tSiL2rf7tGgG8uxtvXkyG7DfHH7BweKFBPQ0Ly2ESiSHzVagAHo7f/Ox3G7qC6o4g8pVPfVyXhOZcwf29et9DY3xtKluMQxrmHVTQ6mJ65IRny+/MNMrjwf05B0WC1WDnIiMAfUcEMovxuqoFexvrpnJ9ByOPPLTYMWfpQcJHjw4FiqgFQ/of/iDvYBQvWAJx0Q7tV9bofZjA==" + }, + "16.0.11": { + "internalVersion": "16.0.11.1", + "signature": "b7SOD6KATY0bpbAcL/+1gdeLeuWAvsIn+tuUzF6HStrjxLrARw8cOrM7bCq5zcq7tJCWrI2Ww9CrKH8kNalEZNMDZy346QhYkUZNOiU2IP8wdb1601vRXfIkPyTVSpdkRDMQWtIushwa/WIZTKnJWo1fd0juxBnbmIl30rxDgUpBOkjx0zGvA2Ff+mssezX3qGhaB0Btr45xpgbHbeEQwsH1w2PXJFy9GsF2psbBEIykCPAxgRWR32bTGH8ws9UyzpAxCj7W4wEnJFhsQ2zb0Wh5ZjSA9G1SARJhMp/8Efwm3uWJr5xK4MYKG2bQ29mtHWPTEBalqX2V9enOLAgVWQ==" + }, + "17.0.10": { + "internalVersion": "17.0.10.1", + "signature": "UNo0Sh9xK+TlO6rL6s380gB436990558QOjdQiDaeYuFANjCQFz0aO957FetpkolidhfkICTMtBC5mlSVAJjMW+5BIQ0kAHeJykqz6YD4Vw0aEIHHFgA1qCEphEj0/D5p5OzkP6JSkwp+/e1O8xFdr/8VIHdkCEM5Kd5lchzp83XmfZm1t6YdcV8ziACDZrTGaiG/TGRdHeR4ifgMpdMLZIy0x4Qd6k06dhCFsEz8H10Cf0oVmtrjxJsKEPY7doW4QZIg8gwFj8Uxk4ylijHFSeIxCX96ZSmj+7wolAn8kYqq5Q8iwVYjNqFtJZ/YXIccNaaoBpx0s3QFdfhSnSgQQ==" + }, + "18.0.14": { + "internalVersion": "18.0.14.1", + "signature": "nzM1fD0IYCr86Pb7fJLGQA0usVUOKE+JyFVVhJArh4BpdDI0C2yC7l2zeJgCEd+gRiXGB1N5a7GTfNSqdLO6ho+5dEg55OQYiTE75ji+dTKz9IDz99crk4BiYIsKc+btZtuq8p/kxJK7wkRlsxDTULQWlVe0f1shX2sTCg9CNYzY5/kwmQtz8OQ/umwya1sFFedS379Vnpa2NgAEq9W45r9hP6iZmKDBlwrY+r/pBWaJteI9xW9Ag8hhv4pSku0qBX4Qwl1YI2f8b0KHy3yIqmY58qsWTjGb319Nq3tPFsY8N2hUmFu4yve0nW6Zb/+1OcrbOha2Z819kkukqEE34Q==" + }, + "19.0.13": { + "internalVersion": "19.0.13.1", + "signature": "qWFamMWZegXESQawjDX9Zn5XHVNUElbOfmVKyCG/MWqTfX0cUIt/xDOccSK24hce8M47spBztkAKLEqsCBfwwmnpqDL2iVhuQVAwHuOyev/53lfdge5j7AH4yqPAEa+jXDdnHtLClAtYI7QtIeUAhuj0ychW47rcWRNsZ1tTxKGclZqPubiMd8eO6kn8S/uPSnaqLa3zSAKlqrda4qsvt4AnGfOB7/MZxQBO9Sy/D6F60DqvI9/IntjJyJm6uUzo+ziDzSgzCHt8/tFdbtjLR1j3zEv5n7epNdTZuj/Z3FVbBi4HSk9oOHa6LQTeqAeAWN2PwtM3nn6/5y0BMhJueQ==" + }, + "20.0.14": { + "internalVersion": "20.0.14.2", + "signature": "ie2H7/drKls2RxE5aS50ocGeXIBiAlczHvhCeObYF21s0qQtx0mGJe6TUvA8diQ5T3ZiZwRLQT2BH6GKHbOt6ku6RRSTILhglffUAv3CellNrYmkyAl1ob6/4H5/XHjCDgQ6Ykglk7xvQICw2l7s4tfa8KNIWLdPuWfUvXBBDsXKtFEmv8d0SU+f/dQR6JKuuLzb1cmunoldyvH/qC4XdKx1r/JqPEaQxW7l3WQeXaLCA2OiLxIBcHH6ucNJ4ik6fZCxpy3szm7gaozWquGfD+oglIY7GLVsbeZBTDFgF44OcDAY/29AL3TKRKN+cnQr6feVFe2PlZ2FK5zxWZNYfw==" + }, + "21.0.9": { + "internalVersion": "21.0.9.1", + "signature": "UmaMy3Rp14wXYO8IQPzJWIsJnz5po9Fw42upR3ci+EPmfpptUgCpxDBZ+uIMLpIfEe9waBv1ZPRgOaUmzwWQUGzL+z1+LRMe9rm/m2SKEYDWzq0Uk0wmheqAdhaZHFYqEIXWXKMauXl+KxdNsJOftU96NzoiWTO8m4JjT7758fyGuio7jRWHCun1m+nb4hSDLQHdC1Ipng5IPFcR2EJ9zP+SpLR7pO7g+2raxlnLhvqT27FfiTAw3J4ztm/BsGTWBQwO9DSgH23A3veRLMpZnuiZcZfOJIr/LSRjvgxU+RdHKWFJkmngNQAg7pTPnjMHmE2YG/R4IKW+A8xqweVzig==" + }, + "22.2.10": { + "internalVersion": "22.2.10.2", + "signature": "XDDYmHMD8famkqCoed6EmUO4PNL8YsMOv859HOmcPThrQ2GcTr0jeX06oQ3ZrRsCwkfN+idHSOwY++S/qN7Pp65/isSfVU7LSYn/ELEnyRC5l8M1g1F/By4Bj8Np+7mAHIJmvvAKiVflOGPHWIhcXin1whDXeLXxpz3ntHR02XARLgozkbnyOrjxmkcx0BOkyyRgxVQXLR1QsFUhrt8+zjlhL/JsEHzCQ954n0mggdx8IhiEUqpHFjubwQbEytX9fhlPbaifQKypXBpBdN/RBRt6Ox5z2lSG5IY/g8nc4x7rYQSpiTrtWi1vlcxF0aITGorEOAeOrtcV0ba4AVoETQ==" + }, + "23.0.12": { + "internalVersion": "23.0.12.2", + "signature": "tu+v9XHqXSKxncQi5ps0Sz7DHZ8l4sXAPw/8B2REvlkw/YC8OMSpnTy8LSKKgIdZsFsVcvA0Q6l84Xve6cxE3XpRKxSAxWJbamsmE35HcLwxVtuwpWxyOFD9xUzDVCVfnZfQcDUjeK2xQxV+qVjuPuoz0TmRwcZJwrXk/nZiA1cAV/k2PPG9FP25R8WAdIQDrfrM7C5GWPNSzv9qcUteJ4jv9ORJ/FiZVewSfP+5hKxTIeUw+D/9LbCjRVzKwvIx3r9oA+gwN2zYNOuYFvpF9FtVtJ9NLR/EJWBoHWLuO0XcrXgVWoemwF97nFeV5HdpPlWRhIoX0XzP82+TC5b1dg==" + }, + "24.0.12": { + "internalVersion": "24.0.12.1", + "signature": "aCQnJpJjf83glgpOxTs1tenmKYhdBK34JyhBtwhikoE4bg1GpfNPe+5OVEDkKPLio3tAWWdx8SAR1+PuLYwjkyy6hhr80ojDrhnmjVprB9PZ5Dqqz9Uk5sLjyse2e0FCL9eCQfFLRMxNYyucp8ihSW2100KbDKPXq5K/GUS/9TuLV99JdwJjAWtPQzsm5KK93SMqwkuwWg+39qVS9W1w4zWjAwfP1xyJUFTIBeS35hnmnol2goE0JbSlTMoBYFyQPC8WFtnBG8EIA1ncyQ/IDKUZjg79E8cM8zyIY8PYmA/Jf4MpTMwfoGJQ0GtD6nCFACWMWE93WNcq+HBa025zsw==" + }, + "25.0.13": { + "internalVersion": "25.0.13.2", + "signature": "FVPFITm49G4y0pv7xo9XWeLw4zKopsAwrj2iVSW2je9Nq2U25RpudHkrSwHZY2JDFsjx8xFncgjHT1iiuZJHBOkInfmJYvsBe3RVuS87uLhmeVevLKwBC+ZkgbRiMwX8j6TaNthAVOlYaowAQAjyRgJ8AAg3L5liYmqhobBUgtwd86wRlzk5Fy9MTAM3BSwnJ5CqVqcGxVBCJdTp73oryXSctu1lHS4zS4eMWaqSPrCDb4uSMyjE4DESH60dwVyRX6IrjOfLlNvurihALJuhJzqWG+Xdi3xurMOI65ad8im2+7tiB/yu5Bb5NdSl8KvLc2rOEZwqzv2p7fWh4Ovl6g==" + }, + "26.0.13": { + "internalVersion": "26.0.13.1", + "signature": "bvGxFDuB+F5C9DqiARiF9MifdcZEQ2R5+AvgCEs/hnrUugRjTXMvJPRkaDLL01YfQoiNwNG3da/2JQEAfZ23YkQedNQ6T3fs7HGbhUZA3xFZb06kxQpLJFI/Ncei8i16+QyxhlQtOlhBG0ExG0M0LD3Ow9ZFsCkRk1Ja2YIRBW3mRUdnqew8mYYKltZJL444D5BO/0AisCh9hVI7JzExVmwYL/HOmbG5GBpy7BLJnSOUU0Di5PSfwoLIOqLsg/9+qVqpedb3ivvwVR1pZqTUyrUPDYojLnyw3XCSKb588U6kSNhaMj/Kl5/5KT34OG+2m04vBdfnV+VUhCBz0tYn9A==" + }, + "27.1.9": { + "internalVersion": "27.1.9.1", + "signature": "MofbMy9BK9Tib2LaSkg31dKRjRK6B+k8CTMh9xhUyQoC+yBdCKmchvw0ApohBc9h4R0Ejxi57AEpMWrXwotSpQ5R41puIn6pSulN5DDhdj/AFvUUeoyI0nVKXCBCmqcOzo7UPX07GqKIqQ8uTEuy3Q7ayREkVrFvbWUCDHgjGFV2xVwR4nqppmzlZKmC0SYuKIFKVB0s5pFLvC2J/TcpqKGS86iQIUAaNkER3hiAf4iO+GxatM4rEtveD/Bv9Gdyis8mB1xOT+wd3WCdwHoIu14IlWcy1CNgWKe+sjoz4VvR579TG3I4mk9VxSxLu8rO3No9jhWhcURoGeKTWQJ5pw==" + }, + "28.0.5": { + "internalVersion": "28.0.5.1", + "signature": "VjsEJXdfI+ELdcE0gR38zgw3+XSOpc4w7OFzg0bDHC3UWOyyXEKRs3DiaPk/262QB10V4b+GJ4WC4P6/LpAzHcEpJ4KX1J2MWE0eq3Pr22SayUH09XcYhXSapvgmc0Om3wY5p8NRr9cNwi0Uslw/OhCovFTtj2I0xEgC6aHi6I+p8Z3V67LvkFE3YZP9nEpH5hag3acwdQgbwVrMImz3pUEFKS0fsYSq3AkaPK3URHlZLaLsS6fo2ntWVVbrEjFQtPHQD87NDyadODwLr3guqLTgpm79quGcowGHO7qadL3Z44uB3xaW4w+iAg9VzQJ1jwPKhVqxSKaSozkwU85D7A==" + }, + "29.0.0": { + "internalVersion": "29.0.0.19", + "signature": "WYiOZ/o8pfhdiTsRgo2Y9deTYAhfe10Z0JrMOlqBBpNbGw8+Lzgkc4clWDM2TQ7DZMXLZicwkUxueh3o7PZsbR7RHT2weQ8ajMz+wc87rCKVUiNzLm/7VXL9o5HXY7jwhhSbjS22PwyKXhrqoMyC5Zu7L60O+8W/LPUyYwnCV5IdL9BCXCa+Z284Ig95v8uXc/N0UlT+d4cQD/GxhIxDvNDtsV3pLnUjWwgSwjSbnsMu+4jL6AxtNO1ZWVdeg3X7o2+KFQzM84mURv71eGvzsCXziisZM1irTS7UZSYLlV8x3r/6xOoDFcnjDjquHLaQNxJoXqJoiaG26rWzAT6yDQ==", + "deploy": 70 + } +} diff --git a/tests/integration/features/beta.feature b/tests/integration/features/beta.feature index c8ba5c68..3987f2c0 100644 --- a/tests/integration/features/beta.feature +++ b/tests/integration/features/beta.feature @@ -7,18 +7,18 @@ Feature: Testing the update scenario of beta releases And the installation mtime is "11" When The request is sent Then The response is non-empty - And Update to version "17.0.10.1" is available - And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-17.0.10.zip" - And URL to documentation is "https://docs.nextcloud.com/server/17/admin_manual/maintenance/upgrade.html" + And Update to version "16.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-16.0.11.zip" + And URL to documentation is "https://docs.nextcloud.com/server/16/admin_manual/maintenance/upgrade.html" And EOL is set to "1" And The signature is """ - UNo0Sh9xK+TlO6rL6s380gB436990558QOjdQiDaeYuFANjCQFz0aO957Fetpkol - idhfkICTMtBC5mlSVAJjMW+5BIQ0kAHeJykqz6YD4Vw0aEIHHFgA1qCEphEj0/D5 - p5OzkP6JSkwp+/e1O8xFdr/8VIHdkCEM5Kd5lchzp83XmfZm1t6YdcV8ziACDZrT - GaiG/TGRdHeR4ifgMpdMLZIy0x4Qd6k06dhCFsEz8H10Cf0oVmtrjxJsKEPY7doW - 4QZIg8gwFj8Uxk4ylijHFSeIxCX96ZSmj+7wolAn8kYqq5Q8iwVYjNqFtJZ/YXIc - cNaaoBpx0s3QFdfhSnSgQQ== + b7SOD6KATY0bpbAcL/+1gdeLeuWAvsIn+tuUzF6HStrjxLrARw8cOrM7bCq5zcq7 + tJCWrI2Ww9CrKH8kNalEZNMDZy346QhYkUZNOiU2IP8wdb1601vRXfIkPyTVSpdk + RDMQWtIushwa/WIZTKnJWo1fd0juxBnbmIl30rxDgUpBOkjx0zGvA2Ff+mssezX3 + qGhaB0Btr45xpgbHbeEQwsH1w2PXJFy9GsF2psbBEIykCPAxgRWR32bTGH8ws9Uy + zpAxCj7W4wEnJFhsQ2zb0Wh5ZjSA9G1SARJhMp/8Efwm3uWJr5xK4MYKG2bQ29mt + HWPTEBalqX2V9enOLAgVWQ== """ Scenario: Updating an outdated Nextcloud 17.0.0 on the beta channel diff --git a/tests/integration/features/daily.feature b/tests/integration/features/daily.feature index 427f196c..eee4082f 100644 --- a/tests/integration/features/daily.feature +++ b/tests/integration/features/daily.feature @@ -1,8 +1,8 @@ Feature: Testing the update scenario of daily releases - Scenario: Updating an outdated Nextcloud 28 daily + Scenario: Updating an outdated Nextcloud 30 daily Given There is a release with channel "daily" - And The received version is "29.1.0" + And The received version is "30.1.0" And the received build is "2012-10-19T18:44:30+00:00" When The request is sent Then The response is non-empty @@ -12,6 +12,18 @@ Feature: Testing the update scenario of daily releases And EOL is set to "0" And No signature is set + Scenario: Updating an outdated Nextcloud 29 daily + Given There is a release with channel "daily" + And The received version is "29.1.0" + And the received build is "2012-10-19T18:44:30+00:00" + When The request is sent + Then The response is non-empty + And Update to version "100.0.0.0" is available + And URL to download is "https://download.nextcloud.com/server/daily/latest-stable29.zip" + And URL to documentation is "https://docs.nextcloud.com/server/29/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And No signature is set + Scenario: Updating an outdated Nextcloud 28 daily Given There is a release with channel "daily" And The received version is "28.1.0" diff --git a/tests/integration/features/stable.feature b/tests/integration/features/stable.feature index e87a018c..29701993 100644 --- a/tests/integration/features/stable.feature +++ b/tests/integration/features/stable.feature @@ -21,25 +21,25 @@ Feature: Testing the update scenario of stable releases cNaaoBpx0s3QFdfhSnSgQQ== """ - Scenario: Updating an outdated Nextcloud 16.0.7 on the stable channel (expect 17) + Scenario: Updating an outdated Nextcloud 16.0.7 on the stable channel Given There is a release with channel "stable" And The received version is "16.0.1.1" And The received PHP version is "7.2.0" And the installation mtime is "40" When The request is sent Then The response is non-empty - And Update to version "17.0.10.1" is available - And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-17.0.10.zip" - And URL to documentation is "https://docs.nextcloud.com/server/17/admin_manual/maintenance/upgrade.html" + And Update to version "16.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-16.0.11.zip" + And URL to documentation is "https://docs.nextcloud.com/server/16/admin_manual/maintenance/upgrade.html" And EOL is set to "1" And The signature is """ - UNo0Sh9xK+TlO6rL6s380gB436990558QOjdQiDaeYuFANjCQFz0aO957Fetpkol - idhfkICTMtBC5mlSVAJjMW+5BIQ0kAHeJykqz6YD4Vw0aEIHHFgA1qCEphEj0/D5 - p5OzkP6JSkwp+/e1O8xFdr/8VIHdkCEM5Kd5lchzp83XmfZm1t6YdcV8ziACDZrT - GaiG/TGRdHeR4ifgMpdMLZIy0x4Qd6k06dhCFsEz8H10Cf0oVmtrjxJsKEPY7doW - 4QZIg8gwFj8Uxk4ylijHFSeIxCX96ZSmj+7wolAn8kYqq5Q8iwVYjNqFtJZ/YXIc - cNaaoBpx0s3QFdfhSnSgQQ== + b7SOD6KATY0bpbAcL/+1gdeLeuWAvsIn+tuUzF6HStrjxLrARw8cOrM7bCq5zcq7 + tJCWrI2Ww9CrKH8kNalEZNMDZy346QhYkUZNOiU2IP8wdb1601vRXfIkPyTVSpdk + RDMQWtIushwa/WIZTKnJWo1fd0juxBnbmIl30rxDgUpBOkjx0zGvA2Ff+mssezX3 + qGhaB0Btr45xpgbHbeEQwsH1w2PXJFy9GsF2psbBEIykCPAxgRWR32bTGH8ws9Uy + zpAxCj7W4wEnJFhsQ2zb0Wh5ZjSA9G1SARJhMp/8Efwm3uWJr5xK4MYKG2bQ29mt + HWPTEBalqX2V9enOLAgVWQ== """ Scenario: Updating an up-to-date Nextcloud 17.0.2 on the stable channel