diff --git a/.github/scripts/README.md b/.github/scripts/README.md index 70992fbab03..01e86072e89 100644 --- a/.github/scripts/README.md +++ b/.github/scripts/README.md @@ -58,6 +58,33 @@ bash "$SCRIPTS/package.sh" /tmp/nextcloud "$VERSION" ./releases | `sign-release.sh` | Sign core + all apps with occ integrity commands | | `generate-metadata.sh` | Generate migration metadata (NC30+) | | `package.sh` | Set permissions, create tar.bz2 + zip, generate checksums | +| `update-updater-server.sh` | Create a PR to the updater server with release config and tests | + +## Updater server + +After a release is built and signed, `update-updater-server.sh` creates a PR to [`nextcloud-releases/updater_server`](https://github.com/nextcloud-releases/updater_server) with: + +- Updated `config/releases.json` (new version, signatures) +- Regenerated `config/config.php` +- Updated Behat feature files (version strings, URLs, signatures) + +```bash +# Patch release +bash .github/scripts/update-updater-server.sh v33.0.6 "$(cat bz2.sig)" "$(cat zip.sig)" + +# First stable (auto-deploys at 30%) +bash .github/scripts/update-updater-server.sh v34.0.0 "$BZ2_SIG" "$ZIP_SIG" + +# RC bump (dry-run) +bash .github/scripts/update-updater-server.sh v34.0.0rc6 "$BZ2_SIG" "$ZIP_SIG" --dry-run + +# Use existing checkout instead of cloning +bash .github/scripts/update-updater-server.sh v33.0.6 "$BZ2_SIG" "$ZIP_SIG" --repo-dir /path/to/updater_server +``` + +**Deploy percentage** is auto-calculated: `.0.0` = 30%, `.0.1` = 70%, `.0.2`+ = 100%. Override with `--deploy N` if needed. + +The workflow (`release-updater.yml`) can also be triggered manually from the Actions UI with a dry-run option for testing. ## Notes diff --git a/.github/scripts/update-updater-server.sh b/.github/scripts/update-updater-server.sh new file mode 100755 index 00000000000..d6974679126 --- /dev/null +++ b/.github/scripts/update-updater-server.sh @@ -0,0 +1,605 @@ +#!/bin/bash +# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT +# +# Update the updater server with a new Nextcloud release. +# Creates a PR with: releases.json, config.php, and feature file updates. +# +# Usage: +# update-updater-server.sh [options] +# +# Options: +# --deploy Deploy percentage (auto: .0.0=30%, .0.1=70%, else 100%) +# --internal-version X.Y.Z.N Skip version.php fetch, use this internal version +# --dry-run Show diff without creating a PR +# --repo-dir Use existing updater_server checkout instead of cloning +# +# Examples: +# # Patch release +# update-updater-server.sh v33.0.6 "$(cat bz2.sig)" "$(cat zip.sig)" +# +# # RC with dry-run +# update-updater-server.sh v34.0.0rc6 "$BZ2_SIG" "$ZIP_SIG" --dry-run +# +# # First stable (auto-deploys at 30%) +# update-updater-server.sh v34.0.0 "$BZ2_SIG" "$ZIP_SIG" +# +# # Override auto-deploy +# update-updater-server.sh v34.0.0 "$BZ2_SIG" "$ZIP_SIG" --deploy 50 + +set -euo pipefail + +# ─── Constants ──────────────────────────────────────────────────────────────── + +UPDATER_REPO="nextcloud-releases/updater_server" +FEATURES_DIR="tests/integration/features" + +# ─── Helpers ────────────────────────────────────────────────────────────────── + +die() { echo "::error::$*" >&2; exit 1; } +info() { echo "::notice::$*"; } +warn() { echo "::warning::$*"; } + +# Wrap a base64 signature to 64-character lines (matching feature file format) +wrap_sig() { echo "$1" | fold -w 64; } + +# Replace old zip signature with new one in feature files. +# Signatures are high-entropy base64, so each 64-char line is unique. +replace_signature() { + local old_sig="$1" + local new_sig="$2" + shift 2 + local files=("$@") + + local old_lines new_lines + mapfile -t old_lines <<< "$(wrap_sig "$old_sig")" + mapfile -t new_lines <<< "$(wrap_sig "$new_sig")" + + for i in "${!old_lines[@]}"; do + [[ -z "${old_lines[$i]}" ]] && continue + [[ -z "${new_lines[$i]+x}" ]] && continue + # base64 chars (A-Za-z0-9+/=) are safe in sed with | delimiter + sed -i "s|${old_lines[$i]}|${new_lines[$i]}|g" "${files[@]}" + done +} + +# ─── Parse arguments ───────────────────────────────────────────────────────── + +TAG="${1:?Usage: update-updater-server.sh [--deploy N] [--dry-run] [--repo-dir dir] [--internal-version X.Y.Z.N]}" +BZ2_SIG="${2:?Missing bz2 signature}" +ZIP_SIG="${3:?Missing zip signature}" +shift 3 + +DRY_RUN=false +DEPLOY="" +REPO_DIR="" +OVERRIDE_INTERNAL="" + +while [[ $# -gt 0 ]]; do + case "$1" in + --dry-run) DRY_RUN=true; shift ;; + --deploy) DEPLOY="${2:?--deploy requires a number}"; shift 2 ;; + --repo-dir) REPO_DIR="${2:?--repo-dir requires a path}"; shift 2 ;; + --internal-version) OVERRIDE_INTERNAL="${2:?--internal-version requires X.Y.Z.N}"; shift 2 ;; + *) die "Unknown option: $1" ;; + esac +done + +# ─── Parse tag ──────────────────────────────────────────────────────────────── + +VERSION="${TAG#v}" +MAJOR=$(echo "$VERSION" | grep -oP '^\d+') +MINOR=$(echo "$VERSION" | cut -d. -f2) +PATCH=$(echo "$VERSION" | cut -d. -f3 | grep -oP '^\d+') + +# Extract modifier (rc6, beta1, alpha2, etc.) and build display/URL versions +MODIFIER=$(echo "$VERSION" | grep -oiP '(rc|beta|alpha)\d+$' || true) + +if [[ -n "$MODIFIER" ]]; then + # RC/beta/alpha release + # RC: uppercase, no space (RC5). beta/alpha: lowercase, space before number (beta 5). + if [[ "$MODIFIER" =~ ^[Rr][Cc] ]]; then + MODIFIER_DISPLAY=$(echo "$MODIFIER" | tr '[:lower:]' '[:upper:]') + else + MODIFIER_DISPLAY=$(echo "$MODIFIER" | sed -E 's/([a-zA-Z]+)([0-9]+)/\1 \2/') + fi + VERSION_STRING="${MAJOR}.${MINOR}.${PATCH} ${MODIFIER_DISPLAY}" + URL_VERSION="${MAJOR}.${MINOR}.${PATCH}$(echo "$MODIFIER" | tr '[:upper:]' '[:lower:]')" + URL_DIR="prereleases" + STABILITY="beta" +elif [[ "$PATCH" -eq 0 && "$MINOR" -eq 0 ]]; then + # First stable of a new major (e.g., v34.0.0) + VERSION_STRING="${MAJOR}.${MINOR}.${PATCH}" + URL_VERSION="${MAJOR}.${MINOR}.${PATCH}" + URL_DIR="releases" + STABILITY="stable" + RELEASE_TYPE="first_stable" +else + # Regular patch release (e.g., v33.0.6) + VERSION_STRING="${MAJOR}.${MINOR}.${PATCH}" + URL_VERSION="${MAJOR}.${MINOR}.${PATCH}" + URL_DIR="releases" + STABILITY="stable" +fi + +# Determine release type if not already set +if [[ -z "${RELEASE_TYPE:-}" ]]; then + if [[ -n "$MODIFIER" ]]; then + RELEASE_TYPE="prerelease" + else + RELEASE_TYPE="patch" + fi +fi + +CHANNEL="$STABILITY" +[[ "$RELEASE_TYPE" == "first_stable" ]] && CHANNEL="stable" + +# Auto-calculate deploy percentage if not explicitly set. +# Pattern: X.0.0 = 30%, X.0.1 = 70%, X.0.2+ = 100% +if [[ -z "$DEPLOY" ]]; then + if [[ "$RELEASE_TYPE" == "first_stable" ]]; then + DEPLOY=30 + elif [[ "$STABILITY" == "stable" && "$PATCH" -eq 1 && "$MINOR" -eq 0 ]]; then + DEPLOY=70 + else + DEPLOY=100 + fi + info "Auto-calculated deploy: ${DEPLOY}%" +fi + +info "Release: ${VERSION_STRING} (type=${RELEASE_TYPE}, stability=${STABILITY}, deploy=${DEPLOY}%)" + +# ─── Fetch internal version from version.php ────────────────────────────────── + +if [[ -n "$OVERRIDE_INTERNAL" ]]; then + INTERNAL_VERSION="$OVERRIDE_INTERNAL" + VERSION_PHP="" + info "Using provided internal version: ${INTERNAL_VERSION}" +else + info "Fetching internal version from nextcloud/server@${TAG}..." + + VERSION_PHP=$(curl -sf "https://raw.githubusercontent.com/nextcloud/server/refs/tags/${TAG}/version.php" || true) + if [[ -z "$VERSION_PHP" ]]; then + # Tag might not exist yet, try the branch + BRANCH=$([[ "$STABILITY" == "beta" && "$PATCH" -eq 0 ]] && echo "master" || echo "stable${MAJOR}") + VERSION_PHP=$(curl -sf "https://raw.githubusercontent.com/nextcloud/server/refs/heads/${BRANCH}/version.php" || true) + fi + [[ -z "$VERSION_PHP" ]] && die "Could not fetch version.php from nextcloud/server" + + # $OC_Version is a literal PHP variable name, not a shell expansion + # shellcheck disable=SC2016 + INTERNAL_VERSION=$(echo "$VERSION_PHP" | grep -oP '\$OC_Version\s*=\s*\[\K[0-9, ]+' | tr -d ' ' | tr ',' '.') + [[ -z "$INTERNAL_VERSION" ]] && die "Could not parse OC_Version from version.php" + + info "Internal version: ${INTERNAL_VERSION}" +fi + +# ─── Fetch minPHP (needed for new major entries) ───────────────────────────── + +fetch_min_php() { + # Try versioncheck.php directly + local versioncheck + versioncheck=$(curl -sf "https://raw.githubusercontent.com/nextcloud/server/refs/tags/${TAG}/lib/versioncheck.php" || true) + if [[ -z "$versioncheck" ]]; then + local branch + branch=$([[ "$STABILITY" == "beta" && "$PATCH" -eq 0 ]] && echo "master" || echo "stable${MAJOR}") + versioncheck=$(curl -sf "https://raw.githubusercontent.com/nextcloud/server/refs/heads/${branch}/lib/versioncheck.php" || true) + fi + + if [[ -n "$versioncheck" ]]; then + local min_id + min_id=$(echo "$versioncheck" | grep -oP 'PHP_VERSION_ID < \K\d+' | head -1) + if [[ -n "$min_id" ]]; then + local min_minor=$(( (min_id / 100) % 100 )) + echo "8.${min_minor}" + return + fi + fi + echo "8.1" +} + +# ─── Set up working directory ───────────────────────────────────────────────── + +if [[ -n "$REPO_DIR" ]]; then + WORK_DIR="$REPO_DIR" + info "Using existing checkout: ${WORK_DIR}" +else + WORK_DIR=$(mktemp -d) + trap 'rm -rf "$WORK_DIR"' EXIT + info "Cloning ${UPDATER_REPO} to ${WORK_DIR}..." + gh repo clone "$UPDATER_REPO" "$WORK_DIR" -- --depth=1 +fi + +cd "$WORK_DIR" + +# ─── Read old state from releases.json ──────────────────────────────────────── + +RELEASES_JSON="config/releases.json" +MAJOR_VERSIONS_JSON="config/major_versions.json" + +# Find the entry this release replaces, based on major version + stability. +# Patch/first_stable: look for the stable entry of this major +# Prerelease: look for the beta entry (RC/beta/alpha) of this major +find_old_key() { + local major="$1" + local type="$2" + + if [[ "$type" == "prerelease" ]]; then + # Find existing beta/RC/alpha entry for this major + jq -r --arg m "$major" \ + 'to_entries[] | select(.key | test("^" + $m + "\\.") and test("[Rr][Cc]|[Bb]eta|[Aa]lpha")) | .key' \ + "$RELEASES_JSON" | tail -1 + elif [[ "$type" == "first_stable" ]]; then + # First stable replaces the last RC/beta + jq -r --arg m "$major" \ + 'to_entries[] | select(.key | test("^" + $m + "\\.") and test("[Rr][Cc]|[Bb]eta|[Aa]lpha")) | .key' \ + "$RELEASES_JSON" | tail -1 + else + # Patch release replaces the current stable entry for this major + jq -r --arg m "$major" \ + 'to_entries[] | select(.key | test("^" + $m + "\\.") and (test("[Rr][Cc]|[Bb]eta|[Aa]lpha") | not) and (test("Enterprise") | not)) | .key' \ + "$RELEASES_JSON" | tail -1 + fi +} + +OLD_KEY=$(find_old_key "$MAJOR" "$RELEASE_TYPE") + +if [[ -z "$OLD_KEY" ]]; then + if [[ "$RELEASE_TYPE" == "prerelease" ]]; then + # First pre-release of a new major — no old entry to replace + RELEASE_TYPE="first_prerelease" + info "First pre-release for major ${MAJOR} — will add new entry" + else + die "No existing entry found for major ${MAJOR} (type=${RELEASE_TYPE}) in releases.json" + fi +fi + +# Extract old values (empty for first_prerelease) +OLD_INTERNAL="" +OLD_ZIP_SIG="" +OLD_URL_VERSION="" +OLD_VERSION_STRING="" + +if [[ -n "$OLD_KEY" ]]; then + OLD_INTERNAL=$(jq -r --arg k "$OLD_KEY" '.[$k].internalVersion' "$RELEASES_JSON") + + # Get zip signature (new format with signatures.zip or old format with signature) + OLD_ZIP_SIG=$(jq -r --arg k "$OLD_KEY" '.[$k].signatures.zip // .[$k].signature // ""' "$RELEASES_JSON") + + # Derive URL version from old key: "34.0.0 RC5" → "34.0.0rc5", "33.0.5" → "33.0.5" + OLD_VERSION_STRING="$OLD_KEY" + OLD_URL_VERSION=$(echo "$OLD_KEY" | sed 's/ //g' | tr '[:upper:]' '[:lower:]') + + info "Replacing: ${OLD_KEY} (internal: ${OLD_INTERNAL})" +fi + +# ─── Update releases.json ──────────────────────────────────────────────────── + +info "Updating releases.json..." + +# Build the new entry +NEW_ENTRY=$(jq -n \ + --arg iv "$INTERNAL_VERSION" \ + --arg bz2 "$BZ2_SIG" \ + --arg zip "$ZIP_SIG" \ + --argjson deploy "$DEPLOY" \ + '{ internalVersion: $iv, signatures: { bz2: $bz2, zip: $zip } } + | if $deploy != 100 then . + { deploy: $deploy } else . end') + +if [[ -n "$OLD_KEY" ]]; then + # Replace old entry with new one + jq --arg old "$OLD_KEY" --arg new "$VERSION_STRING" --argjson entry "$NEW_ENTRY" \ + 'del(.[$old]) | . + {($new): $entry}' \ + "$RELEASES_JSON" > "${RELEASES_JSON}.tmp" +else + # Add new entry (first prerelease) + jq --arg new "$VERSION_STRING" --argjson entry "$NEW_ENTRY" \ + '. + {($new): $entry}' \ + "$RELEASES_JSON" > "${RELEASES_JSON}.tmp" +fi + +mv "${RELEASES_JSON}.tmp" "$RELEASES_JSON" + +# ─── Update major_versions.json (for new majors) ───────────────────────────── + +if [[ "$RELEASE_TYPE" == "first_prerelease" ]]; then + EXISTING_MAJOR=$(jq -r --arg m "$MAJOR" 'has($m) | tostring' "$MAJOR_VERSIONS_JSON") + if [[ "$EXISTING_MAJOR" != "true" ]]; then + MIN_PHP=$(fetch_min_php) + info "Adding major ${MAJOR} to major_versions.json (minPHP: ${MIN_PHP})" + jq --arg m "$MAJOR" --arg php "$MIN_PHP" \ + '{($m): {minPHP: $php}} + .' \ + "$MAJOR_VERSIONS_JSON" > "${MAJOR_VERSIONS_JSON}.tmp" + mv "${MAJOR_VERSIONS_JSON}.tmp" "$MAJOR_VERSIONS_JSON" + fi +fi + +# ─── Regenerate config.php ──────────────────────────────────────────────────── + +info "Regenerating config.php..." +if ! command -v php &>/dev/null; then + die "PHP is required to regenerate config.php" +fi +make config/config.php + +# ─── Update feature files ──────────────────────────────────────────────────── + +STABLE_FEATURE="${FEATURES_DIR}/stable.feature" +BETA_FEATURE="${FEATURES_DIR}/beta.feature" +LATEST_FEATURE="${FEATURES_DIR}/latest.feature" + +info "Updating feature files (type: ${RELEASE_TYPE})..." + +update_features_patch() { + # Patch release: replace version strings and signatures in both channels + + # URLs: nextcloud-33.0.5.zip → nextcloud-33.0.6.zip (etc.) + sed -i "s|nextcloud-${OLD_URL_VERSION}\.|nextcloud-${URL_VERSION}.|g" \ + "$STABLE_FEATURE" "$BETA_FEATURE" + + # GitHub tag paths: /v33.0.5/ → /v33.0.6/ + sed -i "s|/v${OLD_URL_VERSION}/|/v${URL_VERSION}/|g" \ + "$STABLE_FEATURE" "$BETA_FEATURE" + + # Internal version: 33.0.5.1 → 33.0.6.1 + sed -i "s|${OLD_INTERNAL}|${INTERNAL_VERSION}|g" \ + "$STABLE_FEATURE" "$BETA_FEATURE" + + # latest.feature: update stable version + sed -i "s|\"${OLD_VERSION_STRING}\"|\"${VERSION_STRING}\"|g" "$LATEST_FEATURE" + sed -i "s|nextcloud-${OLD_URL_VERSION}\.|nextcloud-${URL_VERSION}.|g" "$LATEST_FEATURE" + + # Replace zip signature in all feature files + if [[ -n "$OLD_ZIP_SIG" ]]; then + replace_signature "$OLD_ZIP_SIG" "$ZIP_SIG" "$STABLE_FEATURE" "$BETA_FEATURE" + fi +} + +update_features_prerelease() { + # RC/beta bump: replace version strings and signatures in beta channel only + + # URLs: nextcloud-34.0.0rc5.zip → nextcloud-34.0.0rc6.zip + sed -i "s|nextcloud-${OLD_URL_VERSION}\.|nextcloud-${URL_VERSION}.|g" "$BETA_FEATURE" + sed -i "s|/v${OLD_URL_VERSION}/|/v${URL_VERSION}/|g" "$BETA_FEATURE" + + # Internal version + sed -i "s|${OLD_INTERNAL}|${INTERNAL_VERSION}|g" "$BETA_FEATURE" + + # Display name: "34.0.0 RC5" → "34.0.0 RC6" + sed -i "s|${OLD_VERSION_STRING}|${VERSION_STRING}|g" "$BETA_FEATURE" + + # latest.feature: update beta version + sed -i "s|${OLD_VERSION_STRING}|${VERSION_STRING}|g" "$LATEST_FEATURE" + sed -i "s|nextcloud-${OLD_URL_VERSION}\.|nextcloud-${URL_VERSION}.|g" "$LATEST_FEATURE" + + # Replace zip signature + if [[ -n "$OLD_ZIP_SIG" ]]; then + replace_signature "$OLD_ZIP_SIG" "$ZIP_SIG" "$BETA_FEATURE" + fi +} + +update_features_first_stable() { + # First stable of new major: convert RC→stable in beta, add new scenarios to stable + + # Beta feature: update the existing RC scenarios to point to stable release + # URLs: prereleases/nextcloud-34.0.0rc5.zip → releases/nextcloud-34.0.0.zip + sed -i "s|prereleases/nextcloud-${OLD_URL_VERSION}\.|releases/nextcloud-${URL_VERSION}.|g" "$BETA_FEATURE" + sed -i "s|/v${OLD_URL_VERSION}/nextcloud-${OLD_URL_VERSION}\.|/v${URL_VERSION}/nextcloud-${URL_VERSION}.|g" "$BETA_FEATURE" + sed -i "s|/v${OLD_URL_VERSION}/|/v${URL_VERSION}/|g" "$BETA_FEATURE" + + # Internal version + sed -i "s|${OLD_INTERNAL}|${INTERNAL_VERSION}|g" "$BETA_FEATURE" + + # Display name: "34.0.0 RC5" → "34.0.0" + sed -i "s|\"${OLD_VERSION_STRING}\"|\"${VERSION_STRING}\"|g" "$BETA_FEATURE" + + # EOL: RC had "EOL is set to \"0\"" — keep that for beta (not EOL'd yet) + + # Replace zip signature in beta + if [[ -n "$OLD_ZIP_SIG" ]]; then + replace_signature "$OLD_ZIP_SIG" "$ZIP_SIG" "$BETA_FEATURE" + fi + + # Find the previous major's latest stable version (for cross-major scenario input) + PREV_MAJOR=$((MAJOR - 1)) + PREV_STABLE_KEY=$(jq -r --arg m "$PREV_MAJOR" \ + 'to_entries[] | select(.key | test("^" + $m + "\\.") and (test("[Rr][Cc]|[Bb]eta|[Aa]lpha") | not) and (test("Enterprise") | not)) | .key' \ + "$RELEASES_JSON" | tail -1) + PREV_STABLE_INTERNAL=$(jq -r --arg k "$PREV_STABLE_KEY" '.[$k].internalVersion' "$RELEASES_JSON") + + # Get EOL date for this major (empty = not EOL'd) + EOL_DATE=$(jq -r --arg m "$MAJOR" '.[$m].eol // ""' "$MAJOR_VERSIONS_JSON") + MIN_PHP=$(jq -r --arg m "$MAJOR" '.[$m].minPHP // "8.1"' "$MAJOR_VERSIONS_JSON") + PHP_VERSION="${MIN_PHP}.0" + + # Build EOL assertion line + if [[ -n "$EOL_DATE" ]]; then + EOL_LINE="And EOL date is \"${EOL_DATE}\"" + else + EOL_LINE="And EOL is set to \"0\"" + fi + + # Wrap signature for feature file (4-space indent) + NEW_SIG_BLOCK=$(wrap_sig "$ZIP_SIG" | sed 's/^/ /') + + # Append new scenarios to stable.feature + cat >> "$STABLE_FEATURE" <<-SCENARIO + + Scenario: Updating Nextcloud latest ${PREV_MAJOR} to ${MAJOR} on the stable channel + Given There is a release with channel "stable" + And The received version is "${PREV_STABLE_INTERNAL}" + And The received PHP version is "${PHP_VERSION}" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "${INTERNAL_VERSION}" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-${URL_VERSION}.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v${URL_VERSION}/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v${URL_VERSION}/nextcloud-${URL_VERSION}.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/${MAJOR}/admin_manual/maintenance/upgrade.html" + ${EOL_LINE} + And The signature is + """ +${NEW_SIG_BLOCK} + """ + + Scenario: Updating Nextcloud ${MAJOR} on the stable channel + Given There is a release with channel "stable" + And The received version is "${MAJOR}.0.0.0" + And The received PHP version is "${PHP_VERSION}" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "${INTERNAL_VERSION}" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-${URL_VERSION}.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v${URL_VERSION}/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v${URL_VERSION}/nextcloud-${URL_VERSION}.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/${MAJOR}/admin_manual/maintenance/upgrade.html" + ${EOL_LINE} + And The signature is + """ +${NEW_SIG_BLOCK} + """ +SCENARIO + + # Update latest.feature + # Find current latest stable version and replace + CURRENT_LATEST_STABLE=$(grep -A4 'latest stable release' "$LATEST_FEATURE" \ + | grep 'Version "' | grep -oP 'Version "\K[^"]+') + CURRENT_LATEST_STABLE_URL=$(echo "$CURRENT_LATEST_STABLE" | sed 's/ //g' | tr '[:upper:]' '[:lower:]') + + if [[ -n "$CURRENT_LATEST_STABLE" ]]; then + sed -i "/I want to know the latest stable/,/URL to download/ { s|Version \"${CURRENT_LATEST_STABLE}\"|Version \"${VERSION_STRING}\"|; s|nextcloud-${CURRENT_LATEST_STABLE_URL}\.zip|nextcloud-${URL_VERSION}.zip|; }" "$LATEST_FEATURE" + fi + + # Update beta latest — now points to stable (no more RC) + sed -i "/I want to know the latest beta/,/URL to download/ { s|\"${OLD_VERSION_STRING}\"|\"${VERSION_STRING}\"|; s|prereleases/nextcloud-${OLD_URL_VERSION}\.zip|releases/nextcloud-${URL_VERSION}.zip|; }" "$LATEST_FEATURE" +} + +update_features_first_prerelease() { + # First pre-release of a new major: add new scenarios to beta.feature + + # Find previous major's latest stable version + PREV_MAJOR=$((MAJOR - 1)) + PREV_STABLE_KEY=$(jq -r --arg m "$PREV_MAJOR" \ + 'to_entries[] | select(.key | test("^" + $m + "\\.") and (test("[Rr][Cc]|[Bb]eta|[Aa]lpha") | not) and (test("Enterprise") | not)) | .key' \ + "$RELEASES_JSON" | tail -1) + PREV_STABLE_INTERNAL=$(jq -r --arg k "$PREV_STABLE_KEY" '.[$k].internalVersion' "$RELEASES_JSON") + + MIN_PHP=$(jq -r --arg m "$MAJOR" '.[$m].minPHP // "8.1"' "$MAJOR_VERSIONS_JSON") + PHP_VERSION="${MIN_PHP}.0" + + # Wrap signature for feature file + NEW_SIG_BLOCK=$(wrap_sig "$ZIP_SIG" | sed 's/^/ /') + + # Append new scenarios to beta.feature + cat >> "$BETA_FEATURE" <<-SCENARIO + + Scenario: Updating Nextcloud latest ${PREV_MAJOR} to ${MAJOR} on the beta channel + Given There is a release with channel "beta" + And The received version is "${PREV_STABLE_INTERNAL}" + And The received PHP version is "${PHP_VERSION}" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "${INTERNAL_VERSION}" is available + And URL to download is "https://download.nextcloud.com/server/${URL_DIR}/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://download.nextcloud.com/server/${URL_DIR}/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://download.nextcloud.com/server/${URL_DIR}/nextcloud-${URL_VERSION}.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v${URL_VERSION}/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v${URL_VERSION}/nextcloud-${URL_VERSION}.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/${MAJOR}/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ +${NEW_SIG_BLOCK} + """ + + Scenario: Updating Nextcloud ${MAJOR} on the beta channel + Given There is a release with channel "beta" + And The received version is "${MAJOR}.0.0.0" + And The received PHP version is "${PHP_VERSION}" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "${INTERNAL_VERSION}" is available + And URL to download is "https://download.nextcloud.com/server/${URL_DIR}/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://download.nextcloud.com/server/${URL_DIR}/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://download.nextcloud.com/server/${URL_DIR}/nextcloud-${URL_VERSION}.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v${URL_VERSION}/nextcloud-${URL_VERSION}.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v${URL_VERSION}/nextcloud-${URL_VERSION}.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/${MAJOR}/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ +${NEW_SIG_BLOCK} + """ +SCENARIO + + # Update latest.feature — beta now points to this pre-release + CURRENT_LATEST_BETA=$(grep -A4 'latest beta release' "$LATEST_FEATURE" \ + | grep 'Version "' | grep -oP 'Version "\K[^"]+') + CURRENT_LATEST_BETA_URL=$(echo "$CURRENT_LATEST_BETA" | sed 's/ //g' | tr '[:upper:]' '[:lower:]') + + if [[ -n "$CURRENT_LATEST_BETA" ]]; then + sed -i "/I want to know the latest beta/,/URL to download/ { s|Version \"${CURRENT_LATEST_BETA}\"|Version \"${VERSION_STRING}\"|; s|nextcloud-${CURRENT_LATEST_BETA_URL}\.zip|nextcloud-${URL_VERSION}.zip|; }" "$LATEST_FEATURE" + # Fix prereleases vs releases path + sed -i "/I want to know the latest beta/,/URL to download/ { s|server/releases/nextcloud-${URL_VERSION}|server/${URL_DIR}/nextcloud-${URL_VERSION}|; }" "$LATEST_FEATURE" + fi +} + +# Dispatch to the right update function +case "$RELEASE_TYPE" in + patch) update_features_patch ;; + prerelease) update_features_prerelease ;; + first_stable) update_features_first_stable ;; + first_prerelease) update_features_first_prerelease ;; +esac + +# ─── Show diff ──────────────────────────────────────────────────────────────── + +echo "" +echo "=== Changes ===" +git diff --stat +echo "" +git diff + +if [[ "$DRY_RUN" == "true" ]]; then + info "Dry run — no PR created" + exit 0 +fi + +# ─── Create PR ──────────────────────────────────────────────────────────────── + +BRANCH="releases/${VERSION}" +COMMIT_MSG="chore: add ${VERSION_STRING} to the ${CHANNEL} channel" + +if [[ "$DEPLOY" -ne 100 ]]; then + COMMIT_MSG="${COMMIT_MSG} (${DEPLOY}% rollout)" +fi + +git checkout -b "$BRANCH" +git add config/ tests/ +git commit --signoff -m "$COMMIT_MSG" +git push -u origin "$BRANCH" + +BODY="Automated PR from the release pipeline. + +- **Release:** ${VERSION_STRING} +- **Internal version:** ${INTERNAL_VERSION} +- **Channel:** ${CHANNEL} +- **Deploy:** ${DEPLOY}% + +Generated by \`update-updater-server.sh ${TAG}\`." + +gh pr create \ + --repo "$UPDATER_REPO" \ + --base master \ + --title "$COMMIT_MSG" \ + --body "$BODY" + +info "PR created successfully" diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index c5f029b51aa..9c538dc5d34 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -445,6 +445,39 @@ jobs: /tmp/nextcloud "${{ needs.init.outputs.version }}" "$GITHUB_WORKSPACE/releases" rm -rf _config + - name: Sign archives for updater server + env: + SIGN_KEY: ${{ secrets.SIGN_PRIVATE_KEY }} + run: | + if [ -z "$SIGN_KEY" ]; then + echo "::warning::SIGN_PRIVATE_KEY not set, skipping archive signing" + exit 0 + fi + echo "$SIGN_KEY" > /tmp/signing-key.pem + VERSION="${{ needs.init.outputs.version }}" + for ext in tar.bz2 zip; do + archive="$GITHUB_WORKSPACE/releases/nextcloud-${VERSION}.${ext}" + [ -f "$archive" ] || continue + sig=$(openssl dgst -sha512 -sign /tmp/signing-key.pem "$archive" | openssl base64 | tr -d '\n') + echo "$sig" > "${archive}.sig" + echo "::notice::Signed ${ext} archive (${#sig} chars)" + done + rm -f /tmp/signing-key.pem + + # TODO: enable once the old release script is retired + # Currently the old release script uploads .sig files to the release. + # - name: Attach signatures to GitHub release + # env: + # GH_TOKEN: ${{ secrets.RELEASE_TOKEN || github.token }} + # run: | + # TAG="${{ needs.init.outputs.tag }}" + # VERSION="${{ needs.init.outputs.version }}" + # for sig in releases/nextcloud-${VERSION}.*.sig; do + # [ -f "$sig" ] || continue + # gh release upload "$TAG" "$sig" --clobber 2>/dev/null \ + # || echo "::warning::Could not attach $(basename "$sig") to release $TAG" + # done + - name: Upload build artifacts uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: diff --git a/.github/workflows/release-updater.yml b/.github/workflows/release-updater.yml new file mode 100644 index 00000000000..36338fad932 --- /dev/null +++ b/.github/workflows/release-updater.yml @@ -0,0 +1,125 @@ +# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Update updater server +run-name: "Updater PR ${{ inputs.tag }}" + +on: + workflow_call: + inputs: + tag: + required: true + type: string + deploy: + required: false + type: number + default: 0 + workflow_dispatch: + inputs: + tag: + description: 'Release tag (e.g., v34.0.1)' + required: true + deploy: + description: 'Deploy percentage (auto: .0.0=30%, .0.1=70%, else 100%. Set 0 for auto)' + type: number + default: 0 + dry_run: + description: 'Dry run (show diff, no PR)' + type: boolean + default: false + +permissions: + contents: read + +concurrency: + group: release-updater-${{ inputs.tag || github.ref_name }} + cancel-in-progress: false + +jobs: + update: + runs-on: ubuntu-latest + + steps: + - name: Check actor permission + uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v3.0 + with: + require: write + + - name: Checkout scripts + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + + - name: Set up PHP + uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc # v2.37.1 + with: + php-version: '8.2' + + - name: Parse version + id: parse + run: | + TAG="${{ inputs.tag }}" + VERSION=$(echo "$TAG" | sed 's/^v//') + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + - name: Download signatures from release + id: sigs + env: + GH_TOKEN: ${{ secrets.RELEASE_TOKEN || github.token }} + run: | + TAG="${{ inputs.tag }}" + VERSION="${{ steps.parse.outputs.version }}" + mkdir -p /tmp/release + + # Download .sig files attached to the GitHub release + for ext in tar.bz2 zip; do + sigfile="nextcloud-${VERSION}.${ext}.sig" + if gh release download "$TAG" \ + --repo "${{ github.repository }}" \ + --pattern "$sigfile" \ + --dir /tmp/release 2>/dev/null; then + echo "::notice::Downloaded ${sigfile} from release" + else + echo "::error::Signature file ${sigfile} not found on release ${TAG}" + echo "::error::Run the build workflow first, or attach .sig files manually" + exit 1 + fi + done + + BZ2_SIG=$(cat "/tmp/release/nextcloud-${VERSION}.tar.bz2.sig") + ZIP_SIG=$(cat "/tmp/release/nextcloud-${VERSION}.zip.sig") + echo "bz2=${BZ2_SIG}" >> "$GITHUB_OUTPUT" + echo "zip=${ZIP_SIG}" >> "$GITHUB_OUTPUT" + echo "::notice::bz2 sig length: ${#BZ2_SIG}, zip sig length: ${#ZIP_SIG}" + + - name: Run update script + env: + GH_TOKEN: ${{ secrets.RELEASE_TOKEN || github.token }} + run: | + ARGS=("${{ inputs.tag }}" "${{ steps.sigs.outputs.bz2 }}" "${{ steps.sigs.outputs.zip }}") + + DEPLOY="${{ inputs.deploy }}" + if [ "$DEPLOY" != "0" ] && [ -n "$DEPLOY" ]; then + ARGS+=(--deploy "$DEPLOY") + fi + # deploy=0 or omitted → script auto-calculates from version + + if [ "${{ inputs.dry_run || 'false' }}" = "true" ]; then + ARGS+=(--dry-run) + fi + + bash .github/scripts/update-updater-server.sh "${ARGS[@]}" + + - name: Write step summary + if: always() + run: | + VERSION="${{ steps.parse.outputs.version }}" + DEPLOY="${{ inputs.deploy }}" + DRY="${{ inputs.dry_run || 'false' }}" + { + echo "## Updater Server Update: ${{ inputs.tag }}" + echo "" + echo "| | |" + echo "|---|---|" + echo "| Version | ${VERSION} |" + echo "| Deploy | ${DEPLOY}% (0 = auto) |" + echo "| Dry run | ${DRY} |" + } >> "$GITHUB_STEP_SUMMARY" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 89e8cb5ed64..f37c354a825 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,3 +34,11 @@ jobs: with: tag: ${{ inputs.tag }} secrets: inherit + + updater: + needs: build + if: startsWith(inputs.tag, 'v') + uses: ./.github/workflows/release-updater.yml + with: + tag: ${{ inputs.tag }} + secrets: inherit diff --git a/.github/workflows/test-updater-script.yml b/.github/workflows/test-updater-script.yml new file mode 100644 index 00000000000..ff7ce5f2059 --- /dev/null +++ b/.github/workflows/test-updater-script.yml @@ -0,0 +1,39 @@ +# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Test updater script + +on: + push: + branches: + - main + paths: + - '.github/scripts/update-updater-server.sh' + - 'tests/updater-script/**' + pull_request: + paths: + - '.github/scripts/update-updater-server.sh' + - 'tests/updater-script/**' + +permissions: + contents: read + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + + - name: Set up PHP + uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc # v2.37.1 + with: + php-version: '8.2' + tools: none + + - name: Shellcheck + run: shellcheck .github/scripts/update-updater-server.sh tests/updater-script/run.sh + + - name: Run snapshot tests + run: bash tests/updater-script/run.sh diff --git a/tests/updater-script/base/Makefile b/tests/updater-script/base/Makefile new file mode 100644 index 00000000000..f9c6527c5a5 --- /dev/null +++ b/tests/updater-script/base/Makefile @@ -0,0 +1,5 @@ +config/config.php: config/major_versions.json config/releases.json $(wildcard config/enterprise_*.json) + @echo '🏗 Build configuration file $(@)…' + build/config_builder > $(@) + +.ONESHELL: diff --git a/tests/updater-script/base/build/config_builder b/tests/updater-script/base/build/config_builder new file mode 100755 index 00000000000..c16682b4deb --- /dev/null +++ b/tests/updater-script/base/build/config_builder @@ -0,0 +1,133 @@ +#!/usr/bin/env php + $version) { + if (isset($enterpriseMajorVersions[$name])) { + $majorVersions[$name] = array_merge($version, $enterpriseMajorVersions[$name]); + } + } + $majorVersions = array_replace_recursive($majorVersions + $enterpriseMajorVersions); + $releases = array_merge($releases, $enterpriseReleases); + $latestReleases = $generatedConfig = ['enterprise' => [], 'stable' => [], 'beta' => []]; +} catch (\Exception) { + $latestReleases = $generatedConfig = ['stable' => [], 'beta' => []]; +} + +// Search latest release for each major/stability +foreach ($releases as $releaseName => $info) { + $major = parseVersionName($releaseName)['major']; + $stability = getStabilityFromName($releaseName); + if (!isset($latestReleases[$stability][$major])) { + $latestReleases[$stability][$major] = $info['internalVersion']; + continue; + } + if (version_compare($latestReleases[$stability][$major], $releaseName, '<')) { + $latestReleases[$stability][$major] = $info['internalVersion']; + } +} + +// Generate previous configuration +foreach ($releases as $releaseName => $info) { + preg_match('/(\d+)\.(\d+).(\d+)(?: (.+))?/A', $releaseName, $matches); + [, $major, $minor, $patch] = $matches; + $stability = getStabilityFromName($releaseName); + $downloads = []; + foreach (['bz2', 'zip'] as $format) { + $downloads[$format] = []; + foreach ([HOST_GITHUB, HOST_NEXTCLOUD] as $host) { + $downloads[$format][] = buildDownloadUrl($releaseName, $info, $majorVersions[$major], $host, $format); + } + $downloads[$format] = array_values(array_filter($downloads[$format])); + } + $signatures = []; + if (!empty($info['signatures'])) { + $signatures = array_map(fn ($arg) => wordwrap($arg, 64, cut_long_words: true), $info['signatures']); + $signature = empty($signatures['zip']) + ? '' + : $signatures['zip']; + } else { + $signature = empty($info['signature']) + ? '' + : wordwrap($info['signature'], 64, cut_long_words: true); + $signatures['zip'] = $signature; + } + $generatedConfig[$stability][$major]['100'] = [ + 'latest' => $releaseName, + 'internalVersion' => $info['internalVersion'], + 'downloadUrl' => buildDownloadUrl($releaseName, $info, $majorVersions[$major]), + 'downloads' => $downloads, + 'web' => sprintf($docUrl, $major), + 'eol' => str_contains($releaseName, 'Enterprise') + ? ($majorVersions[$major]['eeol'] ?? '') + : ($majorVersions[$major]['eol'] ?? ''), + 'minPHPVersion' => $majorVersions[$major]['minPHP'] ?? '', + 'signature' => $signature, + 'signatures' => $signatures, + ]; + + // Check if we can upgrade from a previous major version + $previousMajor = $major - 1; + $deployPercent = $info['deploy'] ?? 100; + if (isset($latestReleases[$stability][$previousMajor])) { + $upgradeFrom = $latestReleases[$stability][$previousMajor]; + $generatedConfig[$stability][$upgradeFrom][$deployPercent] = $generatedConfig[$stability][$major]['100']; + } elseif (isset($latestReleases['stable'][$previousMajor])) { + $upgradeFrom = $latestReleases['stable'][$previousMajor]; + $generatedConfig[$stability][$upgradeFrom][$deployPercent] = $generatedConfig[$stability][$major]['100']; + } + + // For stable versions, check if we can upgrade from a beta version + // Beta version are always deployed at 100% + if ($stability === 'stable') { + if (isset($latestReleases['beta'][$previousMajor]) || $deployPercent !== 100) { + $upgradeFrom = $latestReleases['beta'][$previousMajor] ?? $latestReleases['stable'][$previousMajor]; + $generatedConfig['beta'][$upgradeFrom][100] = $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)); +$now = date('Y-m'); +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' => $info['eol'] ?? '', + 'minPHPVersion' => $info['minPHP'] ?? '7.2', + ]; +} + +// Settings +$generatedConfig['_settings'] = [ + 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', +]; + +// Display result +echo '\s*\n\s*\[/", '/(\s*)(\d+)(\s*=>)/', '/ /'], + ['[', ']', '=> [', "\\1'\\2'\\3", "\t"], + var_export($generatedConfig, true) +); +echo ';',PHP_EOL; diff --git a/tests/updater-script/base/build/utils.php b/tests/updater-script/base/build/utils.php new file mode 100755 index 00000000000..f36bb468743 --- /dev/null +++ b/tests/updater-script/base/build/utils.php @@ -0,0 +1,139 @@ + $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, array $majorVersion, string $host = HOST_NEXTCLOUD, string $format = 'zip'): false|string { + if (function_exists('buildEnterpriseDownloadUrl')) { + $url = buildEnterpriseDownloadUrl($releaseName, $info, $majorVersion, $host, $format); + if ($url !== null) { + return $url; + } + } + + $formats = [ + 'zip' => 'zip', + 'bz2' => 'tar.bz2', + ]; + + switch ($host) { + case HOST_NEXTCLOUD: + return buildNextcloudDownloadUrl($releaseName, $info, $majorVersion, $formats[$format]); + case HOST_GITHUB: + return buildGithubDownloadUrl($releaseName, $info, $majorVersion, $formats[$format]); + } + + return null; +} + +function buildNextcloudDownloadUrl(string $releaseName, array $info, array $majorVersion, string $extension): false|string { + $release = parseVersionName($releaseName); + $downloadUrl = 'https://download.nextcloud.com/server/%s/nextcloud-%d.%d.%d%s.%s'; + + return sprintf($downloadUrl, + $release['modifier'] === '' ? 'releases' : 'prereleases', + $release['major'], + $release['minor'], + $release['patch'], + $release['modifier'] === '' ? '' : str_replace(' ', '', strtolower($release['modifier'])), + $extension, + ); + +} + +function buildGithubDownloadUrl(string $releaseName, array $info, array $majorVersion, string $extension): false|string { + $release = parseVersionName($releaseName); + + // No releases on GitHub before 30.0.12 and 31.0.6 + if ( + $release['major'] < 30 + || ($release['major'] === 30 && $release['minor'] === 0 && $release['patch'] < 12) + || ($release['major'] === 31 && $release['minor'] === 0 && $release['patch'] < 6) + ) { + return false; + } + + $downloadUrl = 'https://github.com/nextcloud-releases/server/releases/download/v%1$d.%2$d.%3$d%4$s/nextcloud-%1$d.%2$d.%3$d%4$s.%5$s'; + + return sprintf($downloadUrl, + $release['major'], + $release['minor'], + $release['patch'], + $release['modifier'] === '' ? '' : str_replace(' ', '', strtolower($release['modifier'])), + $extension, + ); +} + +function isEol(string $releaseName, array $majorVersion): bool { + if (function_exists('isEnterpriseEol')) { + $isEol = isEnterpriseEol($releaseName, $majorVersion); + if ($isEol !== null) { + return $isEol; + } + } + + if (!isset($majorVersion['eol'])) { + return false; + } + + return $majorVersion['eol'] <= date('Y-m'); +} diff --git a/tests/updater-script/base/config/config.php b/tests/updater-script/base/config/config.php new file mode 100644 index 00000000000..8f83cca65e6 --- /dev/null +++ b/tests/updater-script/base/config/config.php @@ -0,0 +1,230 @@ + [ + '33' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32.0.11.1' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32' => [ + '100' => [ + 'latest' => '32.0.11', + 'internalVersion' => '32.0.11.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + 'signature' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + 'signatures' => [ + 'bz2' => 'NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0 +n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSk +vT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRV +uzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvx +QSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OL +Kj8h7Sxlq3dnZ2hAGKTB+Q==', + 'zip' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + ], + ], + ], + ], + 'beta' => [ + '34' => [ + '100' => [ + 'latest' => '34.0.0 RC5', + 'internalVersion' => '34.0.0.11', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + 'signatures' => [ + 'bz2' => 'W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H8 +3mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvy +KVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0d +HtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N5 +1fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAA +yfBdiRBgE/aekFAIWtOdfQ==', + 'zip' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + ], + ], + ], + '33.0.5.1' => [ + '100' => [ + 'latest' => '34.0.0 RC5', + 'internalVersion' => '34.0.0.11', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + 'signatures' => [ + 'bz2' => 'W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H8 +3mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvy +KVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0d +HtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N5 +1fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAA +yfBdiRBgE/aekFAIWtOdfQ==', + 'zip' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + ], + ], + ], + ], + 'daily' => [ + '34' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-master.zip', + 'web' => 'https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + ], + '33' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable33.zip', + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + ], + '32' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable32.zip', + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + ], + ], + '_settings' => [ + 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', + ], +]; diff --git a/tests/updater-script/base/config/major_versions.json b/tests/updater-script/base/config/major_versions.json new file mode 100644 index 00000000000..4df276719e7 --- /dev/null +++ b/tests/updater-script/base/config/major_versions.json @@ -0,0 +1,13 @@ +{ + "34": { + "minPHP": "8.2" + }, + "33": { + "eol": "2027-02-18", + "minPHP": "8.2" + }, + "32": { + "eol": "2026-09-27", + "minPHP": "8.1" + } +} diff --git a/tests/updater-script/base/config/releases.json b/tests/updater-script/base/config/releases.json new file mode 100644 index 00000000000..52006237671 --- /dev/null +++ b/tests/updater-script/base/config/releases.json @@ -0,0 +1,23 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "33.0.5": { + "internalVersion": "33.0.5.1", + "signatures": { + "bz2": "ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL723H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFTDUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHPmOPcSrbqMCEewD9BnNSiNg==", + "zip": "srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVCRr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21XiyDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoCp24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+Q36WWyhFw7is33ZSGoRW8w==" + } + }, + "34.0.0 RC5": { + "internalVersion": "34.0.0.11", + "signatures": { + "bz2": "W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H83mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvyKVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0dHtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N51fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAAyfBdiRBgE/aekFAIWtOdfQ==", + "zip": "ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrISILUlWHKNuhVMDCWn0BkbFw==" + } + } +} diff --git a/tests/updater-script/base/tests/integration/features/beta.feature b/tests/updater-script/base/tests/integration/features/beta.feature new file mode 100644 index 00000000000..aab0f17de71 --- /dev/null +++ b/tests/updater-script/base/tests/integration/features/beta.feature @@ -0,0 +1,101 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.5.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.11" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.11" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ diff --git a/tests/updater-script/base/tests/integration/features/latest.feature b/tests/updater-script/base/tests/integration/features/latest.feature new file mode 100644 index 00000000000..0ab7f5422bb --- /dev/null +++ b/tests/updater-script/base/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "33.0.5" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0 RC5" is the latest release + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" diff --git a/tests/updater-script/base/tests/integration/features/stable.feature b/tests/updater-script/base/tests/integration/features/stable.feature new file mode 100644 index 00000000000..e753ebf266e --- /dev/null +++ b/tests/updater-script/base/tests/integration/features/stable.feature @@ -0,0 +1,76 @@ +Feature: Testing the update scenario of stable releases + + Scenario: Updating Nextcloud 32 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "32.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html" + And EOL date is "2026-09-27" + And The signature is + """ + fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs + UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe + b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 + V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf + EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ + yvE6RPkGve7ePndOyln6mw== + """ + + Scenario: Updating Nextcloud latest 32 to 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "33.0.0.3" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ diff --git a/tests/updater-script/run.sh b/tests/updater-script/run.sh new file mode 100755 index 00000000000..5b64dee64a6 --- /dev/null +++ b/tests/updater-script/run.sh @@ -0,0 +1,143 @@ +#!/bin/bash +# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT +# +# Snapshot test runner for update-updater-server.sh. +# Runs each scenario against base fixtures and compares output to expected files. +# +# Usage: +# test-updater-script.sh [--update] # --update regenerates expected files +# +# Each scenario is a directory under tests/updater-script/scenarios/ containing: +# args.env - TAG, INTERNAL_VERSION, and optional DEPLOY +# expected/ - expected output files (config/, tests/) + +set -euo pipefail + +TEST_DIR="$(cd "$(dirname "$0")" && pwd)" +REPO_DIR="$(cd "$TEST_DIR/../.." && pwd)" +BASE_DIR="$TEST_DIR/base" +SCENARIOS_DIR="$TEST_DIR/scenarios" +SCRIPT="$REPO_DIR/.github/scripts/update-updater-server.sh" + +UPDATE_MODE=false +[[ "${1:-}" == "--update" ]] && UPDATE_MODE=true + +# Deterministic fake signatures: exactly 344 chars (RSA-2048 base64 output) +# 5 lines × 64 chars + 1 line × 24 chars = 344 total +# Generate deterministic 344-char fake sigs (matching RSA-2048 base64 length) +FAKE_BZ2=$(python3 -c "s='TestBZ2Sig'; print((s + '0' * (64 - len(s))) * 5 + s + '0' * (24 - len(s) - 2) + '==')") +FAKE_ZIP=$(python3 -c "s='TestZIPSig'; print((s + '0' * (64 - len(s))) * 5 + s + '0' * (24 - len(s) - 2) + '==')") + +PASS=0 +FAIL=0 +ERRORS="" + +run_scenario() { + local scenario_dir="$1" + local name + name=$(basename "$scenario_dir") + + echo "--- ${name} ---" + + # Read scenario args + local TAG INTERNAL_VERSION DEPLOY + DEPLOY="" + # shellcheck source=/dev/null + source "$scenario_dir/args.env" + + # Copy base fixtures to temp dir + local work_dir + work_dir=$(mktemp -d) + cp -r "$BASE_DIR"/* "$work_dir/" + + # Apply scenario-specific overrides on top of base (if any) + if [[ -d "$scenario_dir/override" ]]; then + cp -r "$scenario_dir/override/"* "$work_dir/" + # Regenerate config.php from overridden JSON + (cd "$work_dir" && make config/config.php > /dev/null 2>&1) + fi + + # Initialize as git repo (script uses git diff) + (cd "$work_dir" && git init -q \ + && git config user.email "test@test" && git config user.name "test" \ + && git add -A && git commit -q -m "base" --no-gpg-sign) + + # Build script args + local args=("$TAG" "$FAKE_BZ2" "$FAKE_ZIP" --dry-run --repo-dir "$work_dir" --internal-version "$INTERNAL_VERSION") + [[ -n "$DEPLOY" ]] && args+=(--deploy "$DEPLOY") + + # Run the script (suppress info output, capture errors) + if ! bash "$SCRIPT" "${args[@]}" > /dev/null 2>&1; then + echo " FAIL: script exited non-zero" + FAIL=$((FAIL + 1)) + ERRORS="${ERRORS}\n ${name}: script exited non-zero" + rm -rf "$work_dir" + return + fi + + # Regenerate config.php + if ! (cd "$work_dir" && make config/config.php > /dev/null 2>&1); then + echo " FAIL: make config/config.php failed" + FAIL=$((FAIL + 1)) + ERRORS="${ERRORS}\n ${name}: make config/config.php failed" + rm -rf "$work_dir" + return + fi + + if [[ "$UPDATE_MODE" == "true" ]]; then + # Update expected files from actual output + rm -rf "$scenario_dir/expected" + mkdir -p "$scenario_dir/expected/config" "$scenario_dir/expected/tests/integration/features" + cp "$work_dir/config/releases.json" "$scenario_dir/expected/config/" + cp "$work_dir/config/config.php" "$scenario_dir/expected/config/" + cp "$work_dir/config/major_versions.json" "$scenario_dir/expected/config/" + cp "$work_dir/tests/integration/features/"*.feature "$scenario_dir/expected/tests/integration/features/" + echo " UPDATED expected files" + PASS=$((PASS + 1)) + else + # Compare against expected output + local failed=false + + # Compare each expected file + for expected_file in $(find "$scenario_dir/expected" -type f | sort); do + local rel_path="${expected_file#"$scenario_dir/expected/"}" + local actual_file="$work_dir/$rel_path" + + if [[ ! -f "$actual_file" ]]; then + echo " FAIL: missing $rel_path" + failed=true + continue + fi + + if ! diff -q "$expected_file" "$actual_file" > /dev/null 2>&1; then + echo " FAIL: $rel_path differs" + diff -u "$expected_file" "$actual_file" | head -30 + failed=true + fi + done + + if [[ "$failed" == "true" ]]; then + FAIL=$((FAIL + 1)) + ERRORS="${ERRORS}\n ${name}: output differs from expected" + else + echo " PASS" + PASS=$((PASS + 1)) + fi + fi + + rm -rf "$work_dir" +} + +# Run all scenarios +for scenario in "$SCENARIOS_DIR"/*/; do + [[ -f "$scenario/args.env" ]] || continue + run_scenario "$scenario" +done + +echo "" +echo "=== Results: ${PASS} passed, ${FAIL} failed ===" +if [[ $FAIL -gt 0 ]]; then + echo -e "Failures:${ERRORS}" + exit 1 +fi diff --git a/tests/updater-script/scenarios/beta-bump/args.env b/tests/updater-script/scenarios/beta-bump/args.env new file mode 100644 index 00000000000..9db1aa8652a --- /dev/null +++ b/tests/updater-script/scenarios/beta-bump/args.env @@ -0,0 +1,3 @@ +# Beta bump: beta 1 → beta 2. Tests lowercase "beta N" modifier format. +TAG=v34.0.0beta2 +INTERNAL_VERSION=34.0.0.3 diff --git a/tests/updater-script/scenarios/beta-bump/expected/config/config.php b/tests/updater-script/scenarios/beta-bump/expected/config/config.php new file mode 100644 index 00000000000..2314a01cd08 --- /dev/null +++ b/tests/updater-script/scenarios/beta-bump/expected/config/config.php @@ -0,0 +1,230 @@ + [ + '33' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32.0.11.1' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32' => [ + '100' => [ + 'latest' => '32.0.11', + 'internalVersion' => '32.0.11.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + 'signature' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + 'signatures' => [ + 'bz2' => 'NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0 +n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSk +vT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRV +uzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvx +QSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OL +Kj8h7Sxlq3dnZ2hAGKTB+Q==', + 'zip' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + ], + ], + ], + ], + 'beta' => [ + '34' => [ + '100' => [ + 'latest' => '34.0.0 beta 2', + 'internalVersion' => '34.0.0.3', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta2/nextcloud-34.0.0beta2.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta2/nextcloud-34.0.0beta2.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '33.0.5.1' => [ + '100' => [ + 'latest' => '34.0.0 beta 2', + 'internalVersion' => '34.0.0.3', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta2/nextcloud-34.0.0beta2.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta2/nextcloud-34.0.0beta2.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + ], + 'daily' => [ + '34' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-master.zip', + 'web' => 'https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + ], + '33' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable33.zip', + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + ], + '32' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable32.zip', + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + ], + ], + '_settings' => [ + 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', + ], +]; diff --git a/tests/updater-script/scenarios/beta-bump/expected/config/major_versions.json b/tests/updater-script/scenarios/beta-bump/expected/config/major_versions.json new file mode 100644 index 00000000000..4df276719e7 --- /dev/null +++ b/tests/updater-script/scenarios/beta-bump/expected/config/major_versions.json @@ -0,0 +1,13 @@ +{ + "34": { + "minPHP": "8.2" + }, + "33": { + "eol": "2027-02-18", + "minPHP": "8.2" + }, + "32": { + "eol": "2026-09-27", + "minPHP": "8.1" + } +} diff --git a/tests/updater-script/scenarios/beta-bump/expected/config/releases.json b/tests/updater-script/scenarios/beta-bump/expected/config/releases.json new file mode 100644 index 00000000000..5650d3cafdf --- /dev/null +++ b/tests/updater-script/scenarios/beta-bump/expected/config/releases.json @@ -0,0 +1,23 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "33.0.5": { + "internalVersion": "33.0.5.1", + "signatures": { + "bz2": "ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL723H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFTDUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHPmOPcSrbqMCEewD9BnNSiNg==", + "zip": "srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVCRr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21XiyDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoCp24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+Q36WWyhFw7is33ZSGoRW8w==" + } + }, + "34.0.0 beta 2": { + "internalVersion": "34.0.0.3", + "signatures": { + "bz2": "TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000==", + "zip": "TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000==" + } + } +} diff --git a/tests/updater-script/scenarios/beta-bump/expected/tests/integration/features/beta.feature b/tests/updater-script/scenarios/beta-bump/expected/tests/integration/features/beta.feature new file mode 100644 index 00000000000..dc8eb7c2f8f --- /dev/null +++ b/tests/updater-script/scenarios/beta-bump/expected/tests/integration/features/beta.feature @@ -0,0 +1,101 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.5.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.3" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta2/nextcloud-34.0.0beta2.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta2/nextcloud-34.0.0beta2.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.3" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta2/nextcloud-34.0.0beta2.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta2/nextcloud-34.0.0beta2.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ diff --git a/tests/updater-script/scenarios/beta-bump/expected/tests/integration/features/latest.feature b/tests/updater-script/scenarios/beta-bump/expected/tests/integration/features/latest.feature new file mode 100644 index 00000000000..a4a89b9a337 --- /dev/null +++ b/tests/updater-script/scenarios/beta-bump/expected/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "33.0.5" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0 beta 2" is the latest release + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta2.zip" diff --git a/tests/updater-script/scenarios/beta-bump/expected/tests/integration/features/stable.feature b/tests/updater-script/scenarios/beta-bump/expected/tests/integration/features/stable.feature new file mode 100644 index 00000000000..e753ebf266e --- /dev/null +++ b/tests/updater-script/scenarios/beta-bump/expected/tests/integration/features/stable.feature @@ -0,0 +1,76 @@ +Feature: Testing the update scenario of stable releases + + Scenario: Updating Nextcloud 32 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "32.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html" + And EOL date is "2026-09-27" + And The signature is + """ + fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs + UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe + b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 + V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf + EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ + yvE6RPkGve7ePndOyln6mw== + """ + + Scenario: Updating Nextcloud latest 32 to 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "33.0.0.3" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ diff --git a/tests/updater-script/scenarios/beta-bump/override/config/releases.json b/tests/updater-script/scenarios/beta-bump/override/config/releases.json new file mode 100644 index 00000000000..b522aa96b72 --- /dev/null +++ b/tests/updater-script/scenarios/beta-bump/override/config/releases.json @@ -0,0 +1,23 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "33.0.5": { + "internalVersion": "33.0.5.1", + "signatures": { + "bz2": "ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL723H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFTDUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHPmOPcSrbqMCEewD9BnNSiNg==", + "zip": "srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVCRr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21XiyDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoCp24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+Q36WWyhFw7is33ZSGoRW8w==" + } + }, + "34.0.0 beta 1": { + "internalVersion": "34.0.0.2", + "signatures": { + "bz2": "ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrISILUlWHKNuhVMDCWn0BkbFw==", + "zip": "ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrISILUlWHKNuhVMDCWn0BkbFw==" + } + } +} diff --git a/tests/updater-script/scenarios/beta-bump/override/tests/integration/features/beta.feature b/tests/updater-script/scenarios/beta-bump/override/tests/integration/features/beta.feature new file mode 100644 index 00000000000..81726adba4e --- /dev/null +++ b/tests/updater-script/scenarios/beta-bump/override/tests/integration/features/beta.feature @@ -0,0 +1,101 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.5.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.2" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta1.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta1/nextcloud-34.0.0beta1.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta1/nextcloud-34.0.0beta1.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.2" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta1.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta1/nextcloud-34.0.0beta1.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta1/nextcloud-34.0.0beta1.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ diff --git a/tests/updater-script/scenarios/beta-bump/override/tests/integration/features/latest.feature b/tests/updater-script/scenarios/beta-bump/override/tests/integration/features/latest.feature new file mode 100644 index 00000000000..ac87d3d5775 --- /dev/null +++ b/tests/updater-script/scenarios/beta-bump/override/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "33.0.5" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0 beta 1" is the latest release + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta1.zip" diff --git a/tests/updater-script/scenarios/beta-to-rc/args.env b/tests/updater-script/scenarios/beta-to-rc/args.env new file mode 100644 index 00000000000..01337a6cd46 --- /dev/null +++ b/tests/updater-script/scenarios/beta-to-rc/args.env @@ -0,0 +1,3 @@ +# Beta to RC transition: "beta 5" → "RC1". Tests cross-modifier format change. +TAG=v34.0.0rc1 +INTERNAL_VERSION=34.0.0.7 diff --git a/tests/updater-script/scenarios/beta-to-rc/expected/config/config.php b/tests/updater-script/scenarios/beta-to-rc/expected/config/config.php new file mode 100644 index 00000000000..7d2ca1f92d5 --- /dev/null +++ b/tests/updater-script/scenarios/beta-to-rc/expected/config/config.php @@ -0,0 +1,230 @@ + [ + '33' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32.0.11.1' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32' => [ + '100' => [ + 'latest' => '32.0.11', + 'internalVersion' => '32.0.11.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + 'signature' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + 'signatures' => [ + 'bz2' => 'NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0 +n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSk +vT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRV +uzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvx +QSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OL +Kj8h7Sxlq3dnZ2hAGKTB+Q==', + 'zip' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + ], + ], + ], + ], + 'beta' => [ + '34' => [ + '100' => [ + 'latest' => '34.0.0 RC1', + 'internalVersion' => '34.0.0.7', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc1/nextcloud-34.0.0rc1.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc1/nextcloud-34.0.0rc1.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '33.0.5.1' => [ + '100' => [ + 'latest' => '34.0.0 RC1', + 'internalVersion' => '34.0.0.7', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc1/nextcloud-34.0.0rc1.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc1/nextcloud-34.0.0rc1.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + ], + 'daily' => [ + '34' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-master.zip', + 'web' => 'https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + ], + '33' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable33.zip', + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + ], + '32' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable32.zip', + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + ], + ], + '_settings' => [ + 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', + ], +]; diff --git a/tests/updater-script/scenarios/beta-to-rc/expected/config/major_versions.json b/tests/updater-script/scenarios/beta-to-rc/expected/config/major_versions.json new file mode 100644 index 00000000000..4df276719e7 --- /dev/null +++ b/tests/updater-script/scenarios/beta-to-rc/expected/config/major_versions.json @@ -0,0 +1,13 @@ +{ + "34": { + "minPHP": "8.2" + }, + "33": { + "eol": "2027-02-18", + "minPHP": "8.2" + }, + "32": { + "eol": "2026-09-27", + "minPHP": "8.1" + } +} diff --git a/tests/updater-script/scenarios/beta-to-rc/expected/config/releases.json b/tests/updater-script/scenarios/beta-to-rc/expected/config/releases.json new file mode 100644 index 00000000000..ac2f9b34cd9 --- /dev/null +++ b/tests/updater-script/scenarios/beta-to-rc/expected/config/releases.json @@ -0,0 +1,23 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "33.0.5": { + "internalVersion": "33.0.5.1", + "signatures": { + "bz2": "ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL723H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFTDUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHPmOPcSrbqMCEewD9BnNSiNg==", + "zip": "srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVCRr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21XiyDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoCp24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+Q36WWyhFw7is33ZSGoRW8w==" + } + }, + "34.0.0 RC1": { + "internalVersion": "34.0.0.7", + "signatures": { + "bz2": "TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000==", + "zip": "TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000==" + } + } +} diff --git a/tests/updater-script/scenarios/beta-to-rc/expected/tests/integration/features/beta.feature b/tests/updater-script/scenarios/beta-to-rc/expected/tests/integration/features/beta.feature new file mode 100644 index 00000000000..055b9943a98 --- /dev/null +++ b/tests/updater-script/scenarios/beta-to-rc/expected/tests/integration/features/beta.feature @@ -0,0 +1,101 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.5.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.7" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc1/nextcloud-34.0.0rc1.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc1/nextcloud-34.0.0rc1.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.7" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc1/nextcloud-34.0.0rc1.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc1/nextcloud-34.0.0rc1.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ diff --git a/tests/updater-script/scenarios/beta-to-rc/expected/tests/integration/features/latest.feature b/tests/updater-script/scenarios/beta-to-rc/expected/tests/integration/features/latest.feature new file mode 100644 index 00000000000..84eb29ad375 --- /dev/null +++ b/tests/updater-script/scenarios/beta-to-rc/expected/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "33.0.5" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0 RC1" is the latest release + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc1.zip" diff --git a/tests/updater-script/scenarios/beta-to-rc/expected/tests/integration/features/stable.feature b/tests/updater-script/scenarios/beta-to-rc/expected/tests/integration/features/stable.feature new file mode 100644 index 00000000000..e753ebf266e --- /dev/null +++ b/tests/updater-script/scenarios/beta-to-rc/expected/tests/integration/features/stable.feature @@ -0,0 +1,76 @@ +Feature: Testing the update scenario of stable releases + + Scenario: Updating Nextcloud 32 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "32.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html" + And EOL date is "2026-09-27" + And The signature is + """ + fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs + UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe + b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 + V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf + EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ + yvE6RPkGve7ePndOyln6mw== + """ + + Scenario: Updating Nextcloud latest 32 to 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "33.0.0.3" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ diff --git a/tests/updater-script/scenarios/beta-to-rc/override/config/releases.json b/tests/updater-script/scenarios/beta-to-rc/override/config/releases.json new file mode 100644 index 00000000000..5d40e298919 --- /dev/null +++ b/tests/updater-script/scenarios/beta-to-rc/override/config/releases.json @@ -0,0 +1,23 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "33.0.5": { + "internalVersion": "33.0.5.1", + "signatures": { + "bz2": "ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL723H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFTDUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHPmOPcSrbqMCEewD9BnNSiNg==", + "zip": "srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVCRr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21XiyDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoCp24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+Q36WWyhFw7is33ZSGoRW8w==" + } + }, + "34.0.0 beta 5": { + "internalVersion": "34.0.0.6", + "signatures": { + "bz2": "ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrISILUlWHKNuhVMDCWn0BkbFw==", + "zip": "ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrISILUlWHKNuhVMDCWn0BkbFw==" + } + } +} diff --git a/tests/updater-script/scenarios/beta-to-rc/override/tests/integration/features/beta.feature b/tests/updater-script/scenarios/beta-to-rc/override/tests/integration/features/beta.feature new file mode 100644 index 00000000000..9005a6a3a81 --- /dev/null +++ b/tests/updater-script/scenarios/beta-to-rc/override/tests/integration/features/beta.feature @@ -0,0 +1,101 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.5.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.6" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta5/nextcloud-34.0.0beta5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta5/nextcloud-34.0.0beta5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.6" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta5/nextcloud-34.0.0beta5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0beta5/nextcloud-34.0.0beta5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ diff --git a/tests/updater-script/scenarios/beta-to-rc/override/tests/integration/features/latest.feature b/tests/updater-script/scenarios/beta-to-rc/override/tests/integration/features/latest.feature new file mode 100644 index 00000000000..03de97cf3f6 --- /dev/null +++ b/tests/updater-script/scenarios/beta-to-rc/override/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "33.0.5" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0 beta 5" is the latest release + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0beta5.zip" diff --git a/tests/updater-script/scenarios/first-beta/args.env b/tests/updater-script/scenarios/first-beta/args.env new file mode 100644 index 00000000000..4e4ce36b875 --- /dev/null +++ b/tests/updater-script/scenarios/first-beta/args.env @@ -0,0 +1,2 @@ +TAG=v35.0.0beta1 +INTERNAL_VERSION=35.0.0.1 diff --git a/tests/updater-script/scenarios/first-beta/expected/config/config.php b/tests/updater-script/scenarios/first-beta/expected/config/config.php new file mode 100644 index 00000000000..5a97336d7e3 --- /dev/null +++ b/tests/updater-script/scenarios/first-beta/expected/config/config.php @@ -0,0 +1,316 @@ + [ + '33' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32.0.11.1' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32' => [ + '100' => [ + 'latest' => '32.0.11', + 'internalVersion' => '32.0.11.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + 'signature' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + 'signatures' => [ + 'bz2' => 'NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0 +n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSk +vT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRV +uzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvx +QSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OL +Kj8h7Sxlq3dnZ2hAGKTB+Q==', + 'zip' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + ], + ], + ], + ], + 'beta' => [ + '35' => [ + '100' => [ + 'latest' => '35.0.0 beta 1', + 'internalVersion' => '35.0.0.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v35.0.0beta1/nextcloud-35.0.0beta1.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v35.0.0beta1/nextcloud-35.0.0beta1.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/35/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '34.0.0.11' => [ + '100' => [ + 'latest' => '35.0.0 beta 1', + 'internalVersion' => '35.0.0.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v35.0.0beta1/nextcloud-35.0.0beta1.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v35.0.0beta1/nextcloud-35.0.0beta1.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/35/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '34' => [ + '100' => [ + 'latest' => '34.0.0 RC5', + 'internalVersion' => '34.0.0.11', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + 'signatures' => [ + 'bz2' => 'W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H8 +3mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvy +KVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0d +HtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N5 +1fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAA +yfBdiRBgE/aekFAIWtOdfQ==', + 'zip' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + ], + ], + ], + '33.0.5.1' => [ + '100' => [ + 'latest' => '34.0.0 RC5', + 'internalVersion' => '34.0.0.11', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + 'signatures' => [ + 'bz2' => 'W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H8 +3mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvy +KVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0d +HtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N5 +1fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAA +yfBdiRBgE/aekFAIWtOdfQ==', + 'zip' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + ], + ], + ], + ], + 'daily' => [ + '35' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-master.zip', + 'web' => 'https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + ], + '34' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable34.zip', + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + ], + '33' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable33.zip', + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + ], + '32' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable32.zip', + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + ], + ], + '_settings' => [ + 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', + ], +]; diff --git a/tests/updater-script/scenarios/first-beta/expected/config/major_versions.json b/tests/updater-script/scenarios/first-beta/expected/config/major_versions.json new file mode 100644 index 00000000000..3f170ee2f12 --- /dev/null +++ b/tests/updater-script/scenarios/first-beta/expected/config/major_versions.json @@ -0,0 +1,16 @@ +{ + "35": { + "minPHP": "8.2" + }, + "34": { + "minPHP": "8.2" + }, + "33": { + "eol": "2027-02-18", + "minPHP": "8.2" + }, + "32": { + "eol": "2026-09-27", + "minPHP": "8.1" + } +} diff --git a/tests/updater-script/scenarios/first-beta/expected/config/releases.json b/tests/updater-script/scenarios/first-beta/expected/config/releases.json new file mode 100644 index 00000000000..4a643120631 --- /dev/null +++ b/tests/updater-script/scenarios/first-beta/expected/config/releases.json @@ -0,0 +1,30 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "33.0.5": { + "internalVersion": "33.0.5.1", + "signatures": { + "bz2": "ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL723H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFTDUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHPmOPcSrbqMCEewD9BnNSiNg==", + "zip": "srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVCRr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21XiyDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoCp24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+Q36WWyhFw7is33ZSGoRW8w==" + } + }, + "34.0.0 RC5": { + "internalVersion": "34.0.0.11", + "signatures": { + "bz2": "W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H83mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvyKVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0dHtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N51fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAAyfBdiRBgE/aekFAIWtOdfQ==", + "zip": "ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrISILUlWHKNuhVMDCWn0BkbFw==" + } + }, + "35.0.0 beta 1": { + "internalVersion": "35.0.0.1", + "signatures": { + "bz2": "TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000==", + "zip": "TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000==" + } + } +} diff --git a/tests/updater-script/scenarios/first-beta/expected/tests/integration/features/beta.feature b/tests/updater-script/scenarios/first-beta/expected/tests/integration/features/beta.feature new file mode 100644 index 00000000000..23acac50c0a --- /dev/null +++ b/tests/updater-script/scenarios/first-beta/expected/tests/integration/features/beta.feature @@ -0,0 +1,151 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.5.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.11" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.11" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ + + Scenario: Updating Nextcloud latest 34 to 35 on the beta channel + Given There is a release with channel "beta" + And The received version is "null" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "35.0.0.1" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v35.0.0beta1/nextcloud-35.0.0beta1.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v35.0.0beta1/nextcloud-35.0.0beta1.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/35/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 35 on the beta channel + Given There is a release with channel "beta" + And The received version is "35.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "35.0.0.1" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v35.0.0beta1/nextcloud-35.0.0beta1.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v35.0.0beta1/nextcloud-35.0.0beta1.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/35/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ diff --git a/tests/updater-script/scenarios/first-beta/expected/tests/integration/features/latest.feature b/tests/updater-script/scenarios/first-beta/expected/tests/integration/features/latest.feature new file mode 100644 index 00000000000..b8fd4f2f394 --- /dev/null +++ b/tests/updater-script/scenarios/first-beta/expected/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "33.0.5" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "35.0.0 beta 1" is the latest release + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-35.0.0beta1.zip" diff --git a/tests/updater-script/scenarios/first-beta/expected/tests/integration/features/stable.feature b/tests/updater-script/scenarios/first-beta/expected/tests/integration/features/stable.feature new file mode 100644 index 00000000000..e753ebf266e --- /dev/null +++ b/tests/updater-script/scenarios/first-beta/expected/tests/integration/features/stable.feature @@ -0,0 +1,76 @@ +Feature: Testing the update scenario of stable releases + + Scenario: Updating Nextcloud 32 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "32.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html" + And EOL date is "2026-09-27" + And The signature is + """ + fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs + UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe + b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 + V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf + EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ + yvE6RPkGve7ePndOyln6mw== + """ + + Scenario: Updating Nextcloud latest 32 to 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "33.0.0.3" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ diff --git a/tests/updater-script/scenarios/first-stable/args.env b/tests/updater-script/scenarios/first-stable/args.env new file mode 100644 index 00000000000..e22e1a17b4e --- /dev/null +++ b/tests/updater-script/scenarios/first-stable/args.env @@ -0,0 +1,3 @@ +# First stable of new major: auto-deploy should be 30% +TAG=v34.0.0 +INTERNAL_VERSION=34.0.0.13 diff --git a/tests/updater-script/scenarios/first-stable/expected/config/config.php b/tests/updater-script/scenarios/first-stable/expected/config/config.php new file mode 100644 index 00000000000..1a29c13969c --- /dev/null +++ b/tests/updater-script/scenarios/first-stable/expected/config/config.php @@ -0,0 +1,270 @@ + [ + '34' => [ + '100' => [ + 'latest' => '34.0.0', + 'internalVersion' => '34.0.0.13', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-34.0.0.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '33.0.5.1' => [ + '30' => [ + 'latest' => '34.0.0', + 'internalVersion' => '34.0.0.13', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-34.0.0.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '33' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32.0.11.1' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32' => [ + '100' => [ + 'latest' => '32.0.11', + 'internalVersion' => '32.0.11.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + 'signature' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + 'signatures' => [ + 'bz2' => 'NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0 +n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSk +vT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRV +uzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvx +QSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OL +Kj8h7Sxlq3dnZ2hAGKTB+Q==', + 'zip' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + ], + ], + ], + ], + 'beta' => [ + '33.0.5.1' => [ + '100' => [ + 'latest' => '34.0.0', + 'internalVersion' => '34.0.0.13', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-34.0.0.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + ], + 'daily' => [ + '34' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-master.zip', + 'web' => 'https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + ], + '33' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable33.zip', + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + ], + '32' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable32.zip', + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + ], + ], + '_settings' => [ + 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', + ], +]; diff --git a/tests/updater-script/scenarios/first-stable/expected/config/major_versions.json b/tests/updater-script/scenarios/first-stable/expected/config/major_versions.json new file mode 100644 index 00000000000..4df276719e7 --- /dev/null +++ b/tests/updater-script/scenarios/first-stable/expected/config/major_versions.json @@ -0,0 +1,13 @@ +{ + "34": { + "minPHP": "8.2" + }, + "33": { + "eol": "2027-02-18", + "minPHP": "8.2" + }, + "32": { + "eol": "2026-09-27", + "minPHP": "8.1" + } +} diff --git a/tests/updater-script/scenarios/first-stable/expected/config/releases.json b/tests/updater-script/scenarios/first-stable/expected/config/releases.json new file mode 100644 index 00000000000..de5c74055d3 --- /dev/null +++ b/tests/updater-script/scenarios/first-stable/expected/config/releases.json @@ -0,0 +1,24 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "33.0.5": { + "internalVersion": "33.0.5.1", + "signatures": { + "bz2": "ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL723H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFTDUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHPmOPcSrbqMCEewD9BnNSiNg==", + "zip": "srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVCRr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21XiyDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoCp24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+Q36WWyhFw7is33ZSGoRW8w==" + } + }, + "34.0.0": { + "internalVersion": "34.0.0.13", + "signatures": { + "bz2": "TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000==", + "zip": "TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000==" + }, + "deploy": 30 + } +} diff --git a/tests/updater-script/scenarios/first-stable/expected/tests/integration/features/beta.feature b/tests/updater-script/scenarios/first-stable/expected/tests/integration/features/beta.feature new file mode 100644 index 00000000000..5c0b0c81fda --- /dev/null +++ b/tests/updater-script/scenarios/first-stable/expected/tests/integration/features/beta.feature @@ -0,0 +1,101 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.5.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.13" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.13" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ diff --git a/tests/updater-script/scenarios/first-stable/expected/tests/integration/features/latest.feature b/tests/updater-script/scenarios/first-stable/expected/tests/integration/features/latest.feature new file mode 100644 index 00000000000..42d01adbb07 --- /dev/null +++ b/tests/updater-script/scenarios/first-stable/expected/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip" diff --git a/tests/updater-script/scenarios/first-stable/expected/tests/integration/features/stable.feature b/tests/updater-script/scenarios/first-stable/expected/tests/integration/features/stable.feature new file mode 100644 index 00000000000..38294b65063 --- /dev/null +++ b/tests/updater-script/scenarios/first-stable/expected/tests/integration/features/stable.feature @@ -0,0 +1,126 @@ +Feature: Testing the update scenario of stable releases + + Scenario: Updating Nextcloud 32 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "32.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html" + And EOL date is "2026-09-27" + And The signature is + """ + fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs + UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe + b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 + V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf + EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ + yvE6RPkGve7ePndOyln6mw== + """ + + Scenario: Updating Nextcloud latest 32 to 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "33.0.0.3" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the stable channel + Given There is a release with channel "stable" + And The received version is "33.0.5.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.13" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 34 on the stable channel + Given There is a release with channel "stable" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.13" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-34.0.0.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0/nextcloud-34.0.0.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ diff --git a/tests/updater-script/scenarios/patch-release-01/args.env b/tests/updater-script/scenarios/patch-release-01/args.env new file mode 100644 index 00000000000..5a044cc6b9f --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-01/args.env @@ -0,0 +1,3 @@ +# First patch after stable: auto-deploy should be 70% +TAG=v33.0.1 +INTERNAL_VERSION=33.0.1.1 diff --git a/tests/updater-script/scenarios/patch-release-01/expected/config/config.php b/tests/updater-script/scenarios/patch-release-01/expected/config/config.php new file mode 100644 index 00000000000..86203f8b950 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-01/expected/config/config.php @@ -0,0 +1,270 @@ + [ + '33' => [ + '100' => [ + 'latest' => '33.0.1', + 'internalVersion' => '33.0.1.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.1.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '32.0.11.1' => [ + '70' => [ + 'latest' => '33.0.1', + 'internalVersion' => '33.0.1.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.1.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '32' => [ + '100' => [ + 'latest' => '32.0.11', + 'internalVersion' => '32.0.11.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + 'signature' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + 'signatures' => [ + 'bz2' => 'NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0 +n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSk +vT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRV +uzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvx +QSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OL +Kj8h7Sxlq3dnZ2hAGKTB+Q==', + 'zip' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + ], + ], + ], + ], + 'beta' => [ + '34' => [ + '100' => [ + 'latest' => '34.0.0 RC5', + 'internalVersion' => '34.0.0.11', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + 'signatures' => [ + 'bz2' => 'W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H8 +3mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvy +KVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0d +HtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N5 +1fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAA +yfBdiRBgE/aekFAIWtOdfQ==', + 'zip' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + ], + ], + ], + '33.0.1.1' => [ + '100' => [ + 'latest' => '34.0.0 RC5', + 'internalVersion' => '34.0.0.11', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + 'signatures' => [ + 'bz2' => 'W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H8 +3mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvy +KVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0d +HtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N5 +1fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAA +yfBdiRBgE/aekFAIWtOdfQ==', + 'zip' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + ], + ], + ], + '32.0.11.1' => [ + '100' => [ + 'latest' => '33.0.1', + 'internalVersion' => '33.0.1.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.1.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + ], + 'daily' => [ + '34' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-master.zip', + 'web' => 'https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + ], + '33' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable33.zip', + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + ], + '32' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable32.zip', + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + ], + ], + '_settings' => [ + 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', + ], +]; diff --git a/tests/updater-script/scenarios/patch-release-01/expected/config/major_versions.json b/tests/updater-script/scenarios/patch-release-01/expected/config/major_versions.json new file mode 100644 index 00000000000..4df276719e7 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-01/expected/config/major_versions.json @@ -0,0 +1,13 @@ +{ + "34": { + "minPHP": "8.2" + }, + "33": { + "eol": "2027-02-18", + "minPHP": "8.2" + }, + "32": { + "eol": "2026-09-27", + "minPHP": "8.1" + } +} diff --git a/tests/updater-script/scenarios/patch-release-01/expected/config/releases.json b/tests/updater-script/scenarios/patch-release-01/expected/config/releases.json new file mode 100644 index 00000000000..b4af2d60446 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-01/expected/config/releases.json @@ -0,0 +1,24 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "34.0.0 RC5": { + "internalVersion": "34.0.0.11", + "signatures": { + "bz2": "W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H83mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvyKVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0dHtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N51fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAAyfBdiRBgE/aekFAIWtOdfQ==", + "zip": "ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrISILUlWHKNuhVMDCWn0BkbFw==" + } + }, + "33.0.1": { + "internalVersion": "33.0.1.1", + "signatures": { + "bz2": "TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000==", + "zip": "TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000==" + }, + "deploy": 70 + } +} diff --git a/tests/updater-script/scenarios/patch-release-01/expected/tests/integration/features/beta.feature b/tests/updater-script/scenarios/patch-release-01/expected/tests/integration/features/beta.feature new file mode 100644 index 00000000000..f2b013dbcb2 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-01/expected/tests/integration/features/beta.feature @@ -0,0 +1,101 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.1.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.1.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.1.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.11" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.11" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ diff --git a/tests/updater-script/scenarios/patch-release-01/expected/tests/integration/features/latest.feature b/tests/updater-script/scenarios/patch-release-01/expected/tests/integration/features/latest.feature new file mode 100644 index 00000000000..059d74d7f42 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-01/expected/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "33.0.1" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0 RC5" is the latest release + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" diff --git a/tests/updater-script/scenarios/patch-release-01/expected/tests/integration/features/stable.feature b/tests/updater-script/scenarios/patch-release-01/expected/tests/integration/features/stable.feature new file mode 100644 index 00000000000..f5683464648 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-01/expected/tests/integration/features/stable.feature @@ -0,0 +1,76 @@ +Feature: Testing the update scenario of stable releases + + Scenario: Updating Nextcloud 32 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "32.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html" + And EOL date is "2026-09-27" + And The signature is + """ + fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs + UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe + b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 + V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf + EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ + yvE6RPkGve7ePndOyln6mw== + """ + + Scenario: Updating Nextcloud latest 32 to 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.1.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "33.0.0.3" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.1.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.1.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.1/nextcloud-33.0.1.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ diff --git a/tests/updater-script/scenarios/patch-release-02/args.env b/tests/updater-script/scenarios/patch-release-02/args.env new file mode 100644 index 00000000000..8c28ea0c4a4 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-02/args.env @@ -0,0 +1,3 @@ +# Second patch: auto-deploy should be 100% (no deploy key in JSON) +TAG=v33.0.2 +INTERNAL_VERSION=33.0.2.1 diff --git a/tests/updater-script/scenarios/patch-release-02/expected/config/config.php b/tests/updater-script/scenarios/patch-release-02/expected/config/config.php new file mode 100644 index 00000000000..26354639274 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-02/expected/config/config.php @@ -0,0 +1,230 @@ + [ + '33' => [ + '100' => [ + 'latest' => '33.0.2', + 'internalVersion' => '33.0.2.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.2.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '32.0.11.1' => [ + '100' => [ + 'latest' => '33.0.2', + 'internalVersion' => '33.0.2.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.2.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '32' => [ + '100' => [ + 'latest' => '32.0.11', + 'internalVersion' => '32.0.11.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + 'signature' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + 'signatures' => [ + 'bz2' => 'NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0 +n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSk +vT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRV +uzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvx +QSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OL +Kj8h7Sxlq3dnZ2hAGKTB+Q==', + 'zip' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + ], + ], + ], + ], + 'beta' => [ + '34' => [ + '100' => [ + 'latest' => '34.0.0 RC5', + 'internalVersion' => '34.0.0.11', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + 'signatures' => [ + 'bz2' => 'W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H8 +3mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvy +KVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0d +HtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N5 +1fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAA +yfBdiRBgE/aekFAIWtOdfQ==', + 'zip' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + ], + ], + ], + '33.0.2.1' => [ + '100' => [ + 'latest' => '34.0.0 RC5', + 'internalVersion' => '34.0.0.11', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + 'signatures' => [ + 'bz2' => 'W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H8 +3mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvy +KVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0d +HtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N5 +1fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAA +yfBdiRBgE/aekFAIWtOdfQ==', + 'zip' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + ], + ], + ], + ], + 'daily' => [ + '34' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-master.zip', + 'web' => 'https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + ], + '33' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable33.zip', + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + ], + '32' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable32.zip', + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + ], + ], + '_settings' => [ + 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', + ], +]; diff --git a/tests/updater-script/scenarios/patch-release-02/expected/config/major_versions.json b/tests/updater-script/scenarios/patch-release-02/expected/config/major_versions.json new file mode 100644 index 00000000000..4df276719e7 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-02/expected/config/major_versions.json @@ -0,0 +1,13 @@ +{ + "34": { + "minPHP": "8.2" + }, + "33": { + "eol": "2027-02-18", + "minPHP": "8.2" + }, + "32": { + "eol": "2026-09-27", + "minPHP": "8.1" + } +} diff --git a/tests/updater-script/scenarios/patch-release-02/expected/config/releases.json b/tests/updater-script/scenarios/patch-release-02/expected/config/releases.json new file mode 100644 index 00000000000..57553ae3121 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-02/expected/config/releases.json @@ -0,0 +1,23 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "34.0.0 RC5": { + "internalVersion": "34.0.0.11", + "signatures": { + "bz2": "W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H83mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvyKVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0dHtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N51fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAAyfBdiRBgE/aekFAIWtOdfQ==", + "zip": "ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrISILUlWHKNuhVMDCWn0BkbFw==" + } + }, + "33.0.2": { + "internalVersion": "33.0.2.1", + "signatures": { + "bz2": "TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000==", + "zip": "TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000==" + } + } +} diff --git a/tests/updater-script/scenarios/patch-release-02/expected/tests/integration/features/beta.feature b/tests/updater-script/scenarios/patch-release-02/expected/tests/integration/features/beta.feature new file mode 100644 index 00000000000..4741bc53d81 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-02/expected/tests/integration/features/beta.feature @@ -0,0 +1,101 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.2.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.2.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.2.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.11" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.11" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ diff --git a/tests/updater-script/scenarios/patch-release-02/expected/tests/integration/features/latest.feature b/tests/updater-script/scenarios/patch-release-02/expected/tests/integration/features/latest.feature new file mode 100644 index 00000000000..00317b1d8bb --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-02/expected/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "33.0.2" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0 RC5" is the latest release + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" diff --git a/tests/updater-script/scenarios/patch-release-02/expected/tests/integration/features/stable.feature b/tests/updater-script/scenarios/patch-release-02/expected/tests/integration/features/stable.feature new file mode 100644 index 00000000000..439570eeda5 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release-02/expected/tests/integration/features/stable.feature @@ -0,0 +1,76 @@ +Feature: Testing the update scenario of stable releases + + Scenario: Updating Nextcloud 32 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "32.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html" + And EOL date is "2026-09-27" + And The signature is + """ + fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs + UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe + b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 + V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf + EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ + yvE6RPkGve7ePndOyln6mw== + """ + + Scenario: Updating Nextcloud latest 32 to 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.2.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "33.0.0.3" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.2.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.2.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ diff --git a/tests/updater-script/scenarios/patch-release/args.env b/tests/updater-script/scenarios/patch-release/args.env new file mode 100644 index 00000000000..4aa75e5803f --- /dev/null +++ b/tests/updater-script/scenarios/patch-release/args.env @@ -0,0 +1,2 @@ +TAG=v33.0.6 +INTERNAL_VERSION=33.0.6.1 diff --git a/tests/updater-script/scenarios/patch-release/expected/config/config.php b/tests/updater-script/scenarios/patch-release/expected/config/config.php new file mode 100644 index 00000000000..3a9f69aefd5 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release/expected/config/config.php @@ -0,0 +1,230 @@ + [ + '33' => [ + '100' => [ + 'latest' => '33.0.6', + 'internalVersion' => '33.0.6.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.6.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '32.0.11.1' => [ + '100' => [ + 'latest' => '33.0.6', + 'internalVersion' => '33.0.6.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.6.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '32' => [ + '100' => [ + 'latest' => '32.0.11', + 'internalVersion' => '32.0.11.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + 'signature' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + 'signatures' => [ + 'bz2' => 'NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0 +n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSk +vT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRV +uzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvx +QSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OL +Kj8h7Sxlq3dnZ2hAGKTB+Q==', + 'zip' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + ], + ], + ], + ], + 'beta' => [ + '34' => [ + '100' => [ + 'latest' => '34.0.0 RC5', + 'internalVersion' => '34.0.0.11', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + 'signatures' => [ + 'bz2' => 'W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H8 +3mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvy +KVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0d +HtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N5 +1fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAA +yfBdiRBgE/aekFAIWtOdfQ==', + 'zip' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + ], + ], + ], + '33.0.6.1' => [ + '100' => [ + 'latest' => '34.0.0 RC5', + 'internalVersion' => '34.0.0.11', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + 'signatures' => [ + 'bz2' => 'W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H8 +3mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvy +KVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0d +HtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N5 +1fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAA +yfBdiRBgE/aekFAIWtOdfQ==', + 'zip' => 'ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 +/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid +2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB +3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA +4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS +ILUlWHKNuhVMDCWn0BkbFw==', + ], + ], + ], + ], + 'daily' => [ + '34' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-master.zip', + 'web' => 'https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + ], + '33' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable33.zip', + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + ], + '32' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable32.zip', + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + ], + ], + '_settings' => [ + 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', + ], +]; diff --git a/tests/updater-script/scenarios/patch-release/expected/config/major_versions.json b/tests/updater-script/scenarios/patch-release/expected/config/major_versions.json new file mode 100644 index 00000000000..4df276719e7 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release/expected/config/major_versions.json @@ -0,0 +1,13 @@ +{ + "34": { + "minPHP": "8.2" + }, + "33": { + "eol": "2027-02-18", + "minPHP": "8.2" + }, + "32": { + "eol": "2026-09-27", + "minPHP": "8.1" + } +} diff --git a/tests/updater-script/scenarios/patch-release/expected/config/releases.json b/tests/updater-script/scenarios/patch-release/expected/config/releases.json new file mode 100644 index 00000000000..c69c259e488 --- /dev/null +++ b/tests/updater-script/scenarios/patch-release/expected/config/releases.json @@ -0,0 +1,23 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "34.0.0 RC5": { + "internalVersion": "34.0.0.11", + "signatures": { + "bz2": "W/tiziEGARA4TVuHMOa51iu9HcPQkbM+x8NkwHUc1WET+jYEzhUZY0xmL811U7H83mbdabIb/5acIpVma+QNJE65kiNrkYPdPD1mOpHHtv+ORyH+KAhuLQ668fYNysvyKVapOcEkQHtLFVM9vT/wUqnVbHgFd0efgSz9hPzrS5Jm+MoeRvIGfEB54WPUgI0dHtB6/kPdL0vNMU2zEgZksDg0vhqy2UyNqXR5pcjbhRla4n5W4iYWYlMKXMHb30N51fvp5YwioA6Ll/2/tT1MHEdpKOlKRJ61kPAOt+kcRZHtjI16UezC+DE0b6gDXxAAyfBdiRBgE/aekFAIWtOdfQ==", + "zip": "ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1/VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrISILUlWHKNuhVMDCWn0BkbFw==" + } + }, + "33.0.6": { + "internalVersion": "33.0.6.1", + "signatures": { + "bz2": "TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000==", + "zip": "TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000==" + } + } +} diff --git a/tests/updater-script/scenarios/patch-release/expected/tests/integration/features/beta.feature b/tests/updater-script/scenarios/patch-release/expected/tests/integration/features/beta.feature new file mode 100644 index 00000000000..da1a34cdbde --- /dev/null +++ b/tests/updater-script/scenarios/patch-release/expected/tests/integration/features/beta.feature @@ -0,0 +1,101 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.6.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.6.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.6.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.11" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.11" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc5/nextcloud-34.0.0rc5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + ASRN+8v3PuruzBxeeuNlwJnNjFYfl3Z6BRcD6HK8J5F6horerzVM6oW94AY05+s1 + /VSHrcubkEHxg5146qr0W3QBgfJP5HwMtb7KhpnbopTdDFalUjlr6zIhlShGiHid + 2hy8y+Kb9yLieeG7QzP6qsTaftx9JXFD7V7GFdFrs1sVJZx9VVjUCCkfDizfqcrB + 3lpXUQe3ayXoF6Y740Ycz1BacuQsjuEAoKSVrCWnTQBfZX/sQwgr4DNE2G9v27VA + 4QVguGILzho/zR1XPQCv+vKeFvYnjV4HRGocUA9Y0A9Y4vhMWelebN/wLZGvMrIS + ILUlWHKNuhVMDCWn0BkbFw== + """ diff --git a/tests/updater-script/scenarios/patch-release/expected/tests/integration/features/latest.feature b/tests/updater-script/scenarios/patch-release/expected/tests/integration/features/latest.feature new file mode 100644 index 00000000000..f55e0f0f27d --- /dev/null +++ b/tests/updater-script/scenarios/patch-release/expected/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "33.0.6" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0 RC5" is the latest release + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc5.zip" diff --git a/tests/updater-script/scenarios/patch-release/expected/tests/integration/features/stable.feature b/tests/updater-script/scenarios/patch-release/expected/tests/integration/features/stable.feature new file mode 100644 index 00000000000..17ca789e5de --- /dev/null +++ b/tests/updater-script/scenarios/patch-release/expected/tests/integration/features/stable.feature @@ -0,0 +1,76 @@ +Feature: Testing the update scenario of stable releases + + Scenario: Updating Nextcloud 32 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "32.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html" + And EOL date is "2026-09-27" + And The signature is + """ + fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs + UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe + b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 + V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf + EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ + yvE6RPkGve7ePndOyln6mw== + """ + + Scenario: Updating Nextcloud latest 32 to 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.6.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "33.0.0.3" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.6.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.6.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.6/nextcloud-33.0.6.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ diff --git a/tests/updater-script/scenarios/rc-bump/args.env b/tests/updater-script/scenarios/rc-bump/args.env new file mode 100644 index 00000000000..e2dd1bef180 --- /dev/null +++ b/tests/updater-script/scenarios/rc-bump/args.env @@ -0,0 +1,2 @@ +TAG=v34.0.0rc6 +INTERNAL_VERSION=34.0.0.12 diff --git a/tests/updater-script/scenarios/rc-bump/expected/config/config.php b/tests/updater-script/scenarios/rc-bump/expected/config/config.php new file mode 100644 index 00000000000..185be4b6fc3 --- /dev/null +++ b/tests/updater-script/scenarios/rc-bump/expected/config/config.php @@ -0,0 +1,230 @@ + [ + '33' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32.0.11.1' => [ + '100' => [ + 'latest' => '33.0.5', + 'internalVersion' => '33.0.5.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + 'signature' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + 'signatures' => [ + 'bz2' => 'ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL7 +23H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5 +G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFT +DUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7 +zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHP +mOPcSrbqMCEewD9BnNSiNg==', + 'zip' => 'srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 +o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC +Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi +yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC +p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ +Q36WWyhFw7is33ZSGoRW8w==', + ], + ], + ], + '32' => [ + '100' => [ + 'latest' => '32.0.11', + 'internalVersion' => '32.0.11.1', + 'downloadUrl' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip', + '1' => 'https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + 'signature' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + 'signatures' => [ + 'bz2' => 'NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0 +n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSk +vT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRV +uzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvx +QSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OL +Kj8h7Sxlq3dnZ2hAGKTB+Q==', + 'zip' => 'fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs +UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe +b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 +V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf +EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ +yvE6RPkGve7ePndOyln6mw==', + ], + ], + ], + ], + 'beta' => [ + '34' => [ + '100' => [ + 'latest' => '34.0.0 RC6', + 'internalVersion' => '34.0.0.12', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc6/nextcloud-34.0.0rc6.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc6/nextcloud-34.0.0rc6.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + '33.0.5.1' => [ + '100' => [ + 'latest' => '34.0.0 RC6', + 'internalVersion' => '34.0.0.12', + 'downloadUrl' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.zip', + 'downloads' => [ + 'bz2' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc6/nextcloud-34.0.0rc6.tar.bz2', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.tar.bz2', + ], + 'zip' => [ + '0' => 'https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc6/nextcloud-34.0.0rc6.zip', + '1' => 'https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.zip', + ], + ], + 'web' => 'https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + 'signature' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + 'signatures' => [ + 'bz2' => 'TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000000000000000000000000000000000000000000000 +TestBZ2Sig000000000000==', + 'zip' => 'TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000000000000000000000000000000000000000000000 +TestZIPSig000000000000==', + ], + ], + ], + ], + 'daily' => [ + '34' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-master.zip', + 'web' => 'https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html', + 'eol' => '', + 'minPHPVersion' => '8.2', + ], + '33' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable33.zip', + 'web' => 'https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html', + 'eol' => '2027-02-18', + 'minPHPVersion' => '8.2', + ], + '32' => [ + 'downloadUrl' => 'https://download.nextcloud.com/server/daily/latest-stable32.zip', + 'web' => 'https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html', + 'eol' => '2026-09-27', + 'minPHPVersion' => '8.1', + ], + ], + '_settings' => [ + 'changelogServer' => 'https://updates.nextcloud.com/changelog_server/', + ], +]; diff --git a/tests/updater-script/scenarios/rc-bump/expected/config/major_versions.json b/tests/updater-script/scenarios/rc-bump/expected/config/major_versions.json new file mode 100644 index 00000000000..4df276719e7 --- /dev/null +++ b/tests/updater-script/scenarios/rc-bump/expected/config/major_versions.json @@ -0,0 +1,13 @@ +{ + "34": { + "minPHP": "8.2" + }, + "33": { + "eol": "2027-02-18", + "minPHP": "8.2" + }, + "32": { + "eol": "2026-09-27", + "minPHP": "8.1" + } +} diff --git a/tests/updater-script/scenarios/rc-bump/expected/config/releases.json b/tests/updater-script/scenarios/rc-bump/expected/config/releases.json new file mode 100644 index 00000000000..7951ab1880d --- /dev/null +++ b/tests/updater-script/scenarios/rc-bump/expected/config/releases.json @@ -0,0 +1,23 @@ +{ + "32.0.11": { + "internalVersion": "32.0.11.1", + "signatures": { + "bz2": "NGJLWSS5LG22tuRHNgIc1wXeX7L+NxCfW9p7bsGDJ2tPRbhSI95TMg09EWILZdg0n+XO+LAMzT3VPO/DtMLM8IOkhnAjT5cBlCdjF3alTAP7aZKA05vIgTxYq9J5HTSkvT3eolazQ8vXnDxkAEAGZpvHyXsIFKLMdyMtZNEYOvKiteRwnSyGR41v/5plgbRVuzKKT1ed9e9J1V8CKoJq/Yhaybt4jlSkaSCAA37iKwz0vECco6Jjnhts8l6cjRvxQSmoU7VtyXJAJbOU/EPT0L4PnZBJ6BkaxbtEJLyuAkqtMLWmyjWiFaVvJ803U9OLKj8h7Sxlq3dnZ2hAGKTB+Q==", + "zip": "fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUsUbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oeb65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRfEWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZyvE6RPkGve7ePndOyln6mw==" + } + }, + "33.0.5": { + "internalVersion": "33.0.5.1", + "signatures": { + "bz2": "ZVV1ugYQIUnV6DreCzY6MDSiqnH7QzAk/KaNSodG/cxVhqan20JCpFnxUuakBvL723H4gOaAzOtehrMTqNKxH+6vdk3Fri9Iv45t4M2uNIkWDrsviaqvrJN3zj43Wnx5G4SfEVa9WoKvhVDZUGWb3B2i3jiR7zbLf8kkXOIZfn/NJD3i/fnWC6wTxAl9zzFTDUuNQZO9CPX/u+AwYG6WL4MPlzSiHKUYqtWS7IYPPaK8ji4MxHVkz8phtG2P51r7zBvvvZ4m9RUd9NKHtj0pvEvv4eyhz9OF/JigjeGIYx3eIqgKhO2YQ1irk+CKiqHPmOPcSrbqMCEewD9BnNSiNg==", + "zip": "srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVCRr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21XiyDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoCp24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+Q36WWyhFw7is33ZSGoRW8w==" + } + }, + "34.0.0 RC6": { + "internalVersion": "34.0.0.12", + "signatures": { + "bz2": "TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000000000000000000000000000000000000000000000TestBZ2Sig000000000000==", + "zip": "TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000000000000000000000000000000000000000000000TestZIPSig000000000000==" + } + } +} diff --git a/tests/updater-script/scenarios/rc-bump/expected/tests/integration/features/beta.feature b/tests/updater-script/scenarios/rc-bump/expected/tests/integration/features/beta.feature new file mode 100644 index 00000000000..965f0aa41b1 --- /dev/null +++ b/tests/updater-script/scenarios/rc-bump/expected/tests/integration/features/beta.feature @@ -0,0 +1,101 @@ +Feature: Testing the update scenario of beta releases + + Scenario: Updating Nextcloud latest 32 to 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud latest 33 to 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "33.0.5.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.12" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc6/nextcloud-34.0.0rc6.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc6/nextcloud-34.0.0rc6.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ + + Scenario: Updating Nextcloud 34 on the beta channel + Given There is a release with channel "beta" + And The received version is "34.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "34.0.0.12" is available + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.zip" + And Download URLS contain "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc6/nextcloud-34.0.0rc6.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v34.0.0rc6/nextcloud-34.0.0rc6.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/34/admin_manual/maintenance/upgrade.html" + And EOL is set to "0" + And The signature is + """ + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000000000000000000000000000000000000000000000 + TestZIPSig000000000000== + """ diff --git a/tests/updater-script/scenarios/rc-bump/expected/tests/integration/features/latest.feature b/tests/updater-script/scenarios/rc-bump/expected/tests/integration/features/latest.feature new file mode 100644 index 00000000000..0f012d8181e --- /dev/null +++ b/tests/updater-script/scenarios/rc-bump/expected/tests/integration/features/latest.feature @@ -0,0 +1,15 @@ +Feature: Testing the latest endpoint + + Scenario: Get latest stable version + Given I want to know the latest stable release + When I send a request latest.php + Then The JSON response is non-empty + And Version "33.0.5" is the latest release + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + + Scenario: Get latest beta version + Given I want to know the latest beta release + When I send a request latest.php + Then The JSON response is non-empty + And Version "34.0.0 RC6" is the latest release + And URL to download is "https://download.nextcloud.com/server/prereleases/nextcloud-34.0.0rc6.zip" diff --git a/tests/updater-script/scenarios/rc-bump/expected/tests/integration/features/stable.feature b/tests/updater-script/scenarios/rc-bump/expected/tests/integration/features/stable.feature new file mode 100644 index 00000000000..e753ebf266e --- /dev/null +++ b/tests/updater-script/scenarios/rc-bump/expected/tests/integration/features/stable.feature @@ -0,0 +1,76 @@ +Feature: Testing the update scenario of stable releases + + Scenario: Updating Nextcloud 32 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.0.0" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "32.0.11.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-32.0.11.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v32.0.11/nextcloud-32.0.11.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/32/admin_manual/maintenance/upgrade.html" + And EOL date is "2026-09-27" + And The signature is + """ + fjrCxIdnySTTWKZifdp5+2SUF31Vv7d2JR0i8LL6O7NZ76xmKk8mQY44ecwNErUs + UbbEFO/s0WUbFGgU4ZUvDaxjYlQYYXkUAD6PSl/UnN/RBIQJhi0haM5oOsa+90oe + b65FFNyX4uGHjAWMNhv9ChZc5rmZgv35lmMLMJ2O4W+1xhLabppucMWEvwd2+EV2 + V/Iy9Qo5gZx82vCbZigpn6OQo011DiRY1Q4i2hlirZsp8Jk18CjAznZQ0s+1RxRf + EWl89AtaAYE7NPBhMYb5hTsDzRVizVUU3YYTCWqEpd4DV8q4RywFN03K9oiJAAdZ + yvE6RPkGve7ePndOyln6mw== + """ + + Scenario: Updating Nextcloud latest 32 to 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "32.0.11.1" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """ + + Scenario: Updating Nextcloud 33 on the stable channel + Given There is a release with channel "stable" + And The received version is "33.0.0.3" + And The received PHP version is "8.2.0" + And the installation mtime is "11" + When The request is sent + Then The response is non-empty + And Update to version "33.0.5.1" is available + And URL to download is "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.zip" + And Download URLS contain "https://download.nextcloud.com/server/releases/nextcloud-33.0.5.tar.bz2" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.zip" + And Download URLS contain "https://github.com/nextcloud-releases/server/releases/download/v33.0.5/nextcloud-33.0.5.tar.bz2" + And URL to documentation is "https://docs.nextcloud.com/server/33/admin_manual/maintenance/upgrade.html" + And EOL date is "2027-02-18" + And The signature is + """ + srq41voRX6MJhV4uKhKD63uZMYQ0OVrTfdC2aKEY6st/dVJtEa9Us5Gs8HCS0sJ0 + o5TzKh6vQ7ETyugEWoussxlLrdbsbkAj4D48zF4MOjhxVcsZd7SybTQkzVtd7JVC + Rr4RdAdARd9PAGJrTDWQlDi2SW+F0T9ZpZ44rlesWLWTH2OZlIsQLFGKzcuO21Xi + yDdkbvVmX9MdxwlFmxtlEpPliZNEVzJ0yBv9uH/je2WnRk8u2Evu5VS1I2iTfRoC + p24a00mGWzUJJVD2hMVktzBecm0ffoI0Phe1SngOqljAo5r5LCiqKswtDjD2Cfd+ + Q36WWyhFw7is33ZSGoRW8w== + """