From 570ac60ed20c5197eb050c8ec55eae5d9c3e58eb Mon Sep 17 00:00:00 2001 From: Daniel Rudolf Date: Wed, 31 May 2023 14:13:56 +0200 Subject: [PATCH] Add versions.json (#1995) * Add %%DEBIAN_VERSION%% placeholder Signed-off-by: Daniel Rudolf * Replace %%BASE_DOWNLOAD_URL%% placeholder by %%DOWNLOAD_URL{_ASC}%% Signed-off-by: Daniel Rudolf * Add version.json 'versions.json' contains information about the latest branches and variants. It is managed by `./update.sh`, there's no need to edit this file manually, just run `./update.sh`. Signed-off-by: Daniel Rudolf * Run update.sh Signed-off-by: Daniel Rudolf --------- Signed-off-by: Daniel Rudolf --- 25/apache/Dockerfile | 6 ++-- 25/fpm-alpine/Dockerfile | 6 ++-- 25/fpm/Dockerfile | 6 ++-- 26/apache/Dockerfile | 6 ++-- 26/fpm-alpine/Dockerfile | 6 ++-- 26/fpm/Dockerfile | 6 ++-- Dockerfile-alpine.template | 6 ++-- Dockerfile-debian.template | 8 ++--- update.sh | 61 ++++++++++++++++++++++++-------------- versions.json | 54 +++++++++++++++++++++++++++++++++ 10 files changed, 110 insertions(+), 55 deletions(-) create mode 100644 versions.json diff --git a/25/apache/Dockerfile b/25/apache/Dockerfile index 45ff8489..150d0cc7 100644 --- a/25/apache/Dockerfile +++ b/25/apache/Dockerfile @@ -135,10 +135,8 @@ RUN set -ex; \ apt-get update; \ apt-get install -y --no-install-recommends $fetchDeps; \ \ - curl -fsSL -o nextcloud.tar.bz2 \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \ - curl -fsSL -o nextcloud.tar.bz2.asc \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \ + curl -fsSL -o nextcloud.tar.bz2 "https://download.nextcloud.com/server/releases/nextcloud-25.0.7.tar.bz2"; \ + curl -fsSL -o nextcloud.tar.bz2.asc "https://download.nextcloud.com/server/releases/nextcloud-25.0.7.tar.bz2.asc"; \ export GNUPGHOME="$(mktemp -d)"; \ # gpg key from https://nextcloud.com/nextcloud.asc gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \ diff --git a/25/fpm-alpine/Dockerfile b/25/fpm-alpine/Dockerfile index a8ad27ea..7af9e2af 100644 --- a/25/fpm-alpine/Dockerfile +++ b/25/fpm-alpine/Dockerfile @@ -113,10 +113,8 @@ RUN set -ex; \ gnupg \ ; \ \ - curl -fsSL -o nextcloud.tar.bz2 \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \ - curl -fsSL -o nextcloud.tar.bz2.asc \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \ + curl -fsSL -o nextcloud.tar.bz2 "https://download.nextcloud.com/server/releases/nextcloud-25.0.7.tar.bz2"; \ + curl -fsSL -o nextcloud.tar.bz2.asc "https://download.nextcloud.com/server/releases/nextcloud-25.0.7.tar.bz2.asc"; \ export GNUPGHOME="$(mktemp -d)"; \ # gpg key from https://nextcloud.com/nextcloud.asc gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \ diff --git a/25/fpm/Dockerfile b/25/fpm/Dockerfile index 3ba5e4ae..94ad0813 100644 --- a/25/fpm/Dockerfile +++ b/25/fpm/Dockerfile @@ -127,10 +127,8 @@ RUN set -ex; \ apt-get update; \ apt-get install -y --no-install-recommends $fetchDeps; \ \ - curl -fsSL -o nextcloud.tar.bz2 \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \ - curl -fsSL -o nextcloud.tar.bz2.asc \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \ + curl -fsSL -o nextcloud.tar.bz2 "https://download.nextcloud.com/server/releases/nextcloud-25.0.7.tar.bz2"; \ + curl -fsSL -o nextcloud.tar.bz2.asc "https://download.nextcloud.com/server/releases/nextcloud-25.0.7.tar.bz2.asc"; \ export GNUPGHOME="$(mktemp -d)"; \ # gpg key from https://nextcloud.com/nextcloud.asc gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \ diff --git a/26/apache/Dockerfile b/26/apache/Dockerfile index 7a79974b..9efd8fd6 100644 --- a/26/apache/Dockerfile +++ b/26/apache/Dockerfile @@ -136,10 +136,8 @@ RUN set -ex; \ apt-get update; \ apt-get install -y --no-install-recommends $fetchDeps; \ \ - curl -fsSL -o nextcloud.tar.bz2 \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \ - curl -fsSL -o nextcloud.tar.bz2.asc \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \ + curl -fsSL -o nextcloud.tar.bz2 "https://download.nextcloud.com/server/releases/nextcloud-26.0.2.tar.bz2"; \ + curl -fsSL -o nextcloud.tar.bz2.asc "https://download.nextcloud.com/server/releases/nextcloud-26.0.2.tar.bz2.asc"; \ export GNUPGHOME="$(mktemp -d)"; \ # gpg key from https://nextcloud.com/nextcloud.asc gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \ diff --git a/26/fpm-alpine/Dockerfile b/26/fpm-alpine/Dockerfile index 0507b90f..1ef8f5b9 100644 --- a/26/fpm-alpine/Dockerfile +++ b/26/fpm-alpine/Dockerfile @@ -114,10 +114,8 @@ RUN set -ex; \ gnupg \ ; \ \ - curl -fsSL -o nextcloud.tar.bz2 \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \ - curl -fsSL -o nextcloud.tar.bz2.asc \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \ + curl -fsSL -o nextcloud.tar.bz2 "https://download.nextcloud.com/server/releases/nextcloud-26.0.2.tar.bz2"; \ + curl -fsSL -o nextcloud.tar.bz2.asc "https://download.nextcloud.com/server/releases/nextcloud-26.0.2.tar.bz2.asc"; \ export GNUPGHOME="$(mktemp -d)"; \ # gpg key from https://nextcloud.com/nextcloud.asc gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \ diff --git a/26/fpm/Dockerfile b/26/fpm/Dockerfile index d4d594f7..303f0efb 100644 --- a/26/fpm/Dockerfile +++ b/26/fpm/Dockerfile @@ -128,10 +128,8 @@ RUN set -ex; \ apt-get update; \ apt-get install -y --no-install-recommends $fetchDeps; \ \ - curl -fsSL -o nextcloud.tar.bz2 \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \ - curl -fsSL -o nextcloud.tar.bz2.asc \ - "https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \ + curl -fsSL -o nextcloud.tar.bz2 "https://download.nextcloud.com/server/releases/nextcloud-26.0.2.tar.bz2"; \ + curl -fsSL -o nextcloud.tar.bz2.asc "https://download.nextcloud.com/server/releases/nextcloud-26.0.2.tar.bz2.asc"; \ export GNUPGHOME="$(mktemp -d)"; \ # gpg key from https://nextcloud.com/nextcloud.asc gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \ diff --git a/Dockerfile-alpine.template b/Dockerfile-alpine.template index 59b73bcc..5aaded89 100644 --- a/Dockerfile-alpine.template +++ b/Dockerfile-alpine.template @@ -113,10 +113,8 @@ RUN set -ex; \ gnupg \ ; \ \ - curl -fsSL -o nextcloud.tar.bz2 \ - "%%BASE_DOWNLOAD_URL%%/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \ - curl -fsSL -o nextcloud.tar.bz2.asc \ - "%%BASE_DOWNLOAD_URL%%/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \ + curl -fsSL -o nextcloud.tar.bz2 "%%DOWNLOAD_URL%%"; \ + curl -fsSL -o nextcloud.tar.bz2.asc "%%DOWNLOAD_URL_ASC%%"; \ export GNUPGHOME="$(mktemp -d)"; \ # gpg key from https://nextcloud.com/nextcloud.asc gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \ diff --git a/Dockerfile-debian.template b/Dockerfile-debian.template index d3fb81ee..4a9d975f 100644 --- a/Dockerfile-debian.template +++ b/Dockerfile-debian.template @@ -1,4 +1,4 @@ -FROM php:%%PHP_VERSION%%-%%VARIANT%%-bullseye +FROM php:%%PHP_VERSION%%-%%VARIANT%%-%%DEBIAN_VERSION%% # entrypoint.sh and cron.sh dependencies RUN set -ex; \ @@ -127,10 +127,8 @@ RUN set -ex; \ apt-get update; \ apt-get install -y --no-install-recommends $fetchDeps; \ \ - curl -fsSL -o nextcloud.tar.bz2 \ - "%%BASE_DOWNLOAD_URL%%/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \ - curl -fsSL -o nextcloud.tar.bz2.asc \ - "%%BASE_DOWNLOAD_URL%%/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \ + curl -fsSL -o nextcloud.tar.bz2 "%%DOWNLOAD_URL%%"; \ + curl -fsSL -o nextcloud.tar.bz2.asc "%%DOWNLOAD_URL_ASC%%"; \ export GNUPGHOME="$(mktemp -d)"; \ # gpg key from https://nextcloud.com/nextcloud.asc gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \ diff --git a/update.sh b/update.sh index d19cad71..45864735 100755 --- a/update.sh +++ b/update.sh @@ -8,6 +8,10 @@ declare -A alpine_version=( [default]='3.17' ) +declare -A debian_version=( + [default]='bullseye' +) + declare -A php_version=( [default]='8.1' ) @@ -93,8 +97,11 @@ function version_greater_or_equal() { function create_variant() { dir="$1/$variant" alpineVersion=${alpine_version[$version]-${alpine_version[default]}} + debianVersion=${debian_version[$version]-${debian_version[default]}} phpVersion=${php_version[$version]-${php_version[default]}} crontabInt=${crontab_int[$version]-${crontab_int[default]}} + url="https://download.nextcloud.com/server/releases/nextcloud-$fullversion.tar.bz2" + ascUrl="https://download.nextcloud.com/server/releases/nextcloud-$fullversion.tar.bz2.asc" # Create the version+variant directory with a Dockerfile. mkdir -p "$dir" @@ -105,13 +112,30 @@ function create_variant() { echo "updating $fullversion [$1] $variant" + # Apply version+variant-specific patches + case "$version" in + 25) + case "$variant" in + fpm-alpine) + # Alpine 3.16 / OpenSSL 1.1 is only available for PHP 8.0 + phpVersion=8.0 + ;; + esac + + # Nextcloud 26+ recommends sysvsem + sed -ri -e '/sysvsem/d' "$dir/Dockerfile" + ;; + esac + # Replace the variables. sed -ri -e ' s/%%ALPINE_VERSION%%/'"$alpineVersion"'/g; + s/%%DEBIAN_VERSION%%/'"$debianVersion"'/g; s/%%PHP_VERSION%%/'"$phpVersion"'/g; s/%%VARIANT%%/'"$variant"'/g; s/%%VERSION%%/'"$fullversion"'/g; - s/%%BASE_DOWNLOAD_URL%%/'"$2"'/g; + s/%%DOWNLOAD_URL%%/'"$(sed -e 's/[\/&]/\\&/g' <<< "$url")"'/g; + s/%%DOWNLOAD_URL_ASC%%/'"$(sed -e 's/[\/&]/\\&/g' <<< "$ascUrl")"'/g; s/%%CMD%%/'"${cmd[$variant]}"'/g; s|%%VARIANT_EXTRAS%%|'"${extras[$variant]}"'|g; s/%%APCU_VERSION%%/'"${pecl_versions[APCu]}"'/g; @@ -121,24 +145,6 @@ function create_variant() { s/%%CRONTAB_INT%%/'"$crontabInt"'/g; ' "$dir/Dockerfile" - # Nextcloud 26+ recommends sysvsem - case "$version" in - 25 ) - case "$variant" in - fpm-alpine ) - # Alpine 3.16 / OpenSSL 1.1 is only available for PHP 8.0 - sed -ri -e ' - s/FROM php:8\.1-fpm-alpine/FROM php:8.0-fpm-alpine/ - ' "$dir/Dockerfile" - ;; - esac - - sed -ri -e ' - /sysvsem/d - ' "$dir/Dockerfile" - ;; - esac - # Copy the shell scripts for name in entrypoint cron; do cp "docker-$name.sh" "$dir/$name.sh" @@ -154,6 +160,16 @@ function create_variant() { if [ "$variant" != "apache" ]; then rm "$dir/config/apache-pretty-urls.config.php" fi + + # Add variant to versions.json + [ "${base[$variant]}" == "alpine" ] && baseVersion="$alpineVersion" || baseVersion="$debianVersion" + versionVariantsJson="$(jq -e \ + --arg version "$version" --arg variant "$variant" --arg base "${base[$variant]}" --arg baseVersion "$baseVersion" --arg phpVersion "$phpVersion" \ + '.[$version].variants[$variant] = {"variant": $variant, "base": $base, "baseVersion": $baseVersion, "phpVersion": $phpVersion}' versions.json)" + versionJson="$(jq -e \ + --arg version "$version" --arg fullversion "$fullversion" --arg url "$url" --arg ascUrl "$ascUrl" --argjson variants "$versionVariantsJson" \ + '.[$version] = {"branch": $version, "version": $fullversion, "url": $url, "ascUrl": $ascUrl, "variants": $variants[$version].variants}' versions.json)" + printf '%s\n' "$versionJson" > versions.json } curl -fsSL 'https://download.nextcloud.com/server/releases/' |tac|tac| \ @@ -164,19 +180,20 @@ curl -fsSL 'https://download.nextcloud.com/server/releases/' |tac|tac| \ find . -maxdepth 1 -type d -regextype sed -regex '\./[[:digit:]]\+\.[[:digit:]]\+\(-rc\|-beta\|-alpha\)\?' -exec rm -r '{}' \; +printf '%s' "{}" > versions.json + fullversions=( $( curl -fsSL 'https://download.nextcloud.com/server/releases/' |tac|tac| \ grep -oE 'nextcloud-[[:digit:]]+(\.[[:digit:]]+){2}' | \ grep -oE '[[:digit:]]+(\.[[:digit:]]+){2}' | \ sort -urV ) ) versions=( $( printf '%s\n' "${fullversions[@]}" | cut -d. -f1 | sort -urV ) ) + for version in "${versions[@]}"; do fullversion="$( printf '%s\n' "${fullversions[@]}" | grep -E "^$version" | head -1 )" if version_greater_or_equal "$version" "$min_version"; then - for variant in "${variants[@]}"; do - - create_variant "$version" "https:\/\/download.nextcloud.com\/server\/releases" + create_variant "$version" done fi done diff --git a/versions.json b/versions.json new file mode 100644 index 00000000..de910976 --- /dev/null +++ b/versions.json @@ -0,0 +1,54 @@ +{ + "26": { + "branch": "26", + "version": "26.0.2", + "url": "https://download.nextcloud.com/server/releases/nextcloud-26.0.2.tar.bz2", + "ascUrl": "https://download.nextcloud.com/server/releases/nextcloud-26.0.2.tar.bz2.asc", + "variants": { + "apache": { + "variant": "apache", + "base": "debian", + "baseVersion": "bullseye", + "phpVersion": "8.1" + }, + "fpm": { + "variant": "fpm", + "base": "debian", + "baseVersion": "bullseye", + "phpVersion": "8.1" + }, + "fpm-alpine": { + "variant": "fpm-alpine", + "base": "alpine", + "baseVersion": "3.17", + "phpVersion": "8.1" + } + } + }, + "25": { + "branch": "25", + "version": "25.0.7", + "url": "https://download.nextcloud.com/server/releases/nextcloud-25.0.7.tar.bz2", + "ascUrl": "https://download.nextcloud.com/server/releases/nextcloud-25.0.7.tar.bz2.asc", + "variants": { + "apache": { + "variant": "apache", + "base": "debian", + "baseVersion": "bullseye", + "phpVersion": "8.1" + }, + "fpm": { + "variant": "fpm", + "base": "debian", + "baseVersion": "bullseye", + "phpVersion": "8.1" + }, + "fpm-alpine": { + "variant": "fpm-alpine", + "base": "alpine", + "baseVersion": "3.16", + "phpVersion": "8.0" + } + } + } +}