Nextcloud-Docker/update.sh

172 lines
5.1 KiB
Bash
Raw Normal View History

2016-09-02 13:11:38 +00:00
#!/bin/bash
set -eo pipefail
2018-03-08 08:52:55 +00:00
declare -A php_version=(
[default]='7.2'
[12.0]='7.1'
2018-03-08 08:52:55 +00:00
)
declare -A cmd=(
[apache]='apache2-foreground'
[fpm]='php-fpm'
2018-02-11 01:58:17 +00:00
[fpm-alpine]='php-fpm'
)
declare -A base=(
[apache]='debian'
[fpm]='debian'
[fpm-alpine]='alpine'
)
2018-01-04 21:35:31 +00:00
declare -A extras=(
[apache]='\nRUN a2enmod rewrite remoteip ;\\\n {\\\n echo RemoteIPHeader X-Real-IP ;\\\n echo RemoteIPTrustedProxy 10.0.0.0/8 ;\\\n echo RemoteIPTrustedProxy 172.16.0.0/12 ;\\\n echo RemoteIPTrustedProxy 192.168.0.0/16 ;\\\n } > /etc/apache2/conf-available/remoteip.conf;\\\n a2enconf remoteip'
2018-01-04 21:35:31 +00:00
[fpm]=''
2018-02-11 01:58:17 +00:00
[fpm-alpine]=''
2018-01-04 21:35:31 +00:00
)
2018-03-08 08:38:24 +00:00
declare -A pecl_versions=(
[APCu]='5.1.15'
2018-03-08 08:38:24 +00:00
[memcached]='3.0.4'
[redis]='4.2.0'
[imagick]='3.4.3'
2018-03-08 08:38:24 +00:00
)
2018-03-13 09:58:19 +00:00
variants=(
apache
fpm
fpm-alpine
)
min_version='13.0'
2018-03-13 09:58:19 +00:00
2017-03-07 14:33:57 +00:00
# version_greater_or_equal A B returns whether A >= B
function version_greater_or_equal() {
[[ "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1" || "$1" == "$2" ]];
}
2018-03-13 09:58:19 +00:00
# checks if the the rc is already released
function check_released() {
printf '%s\n' "${fullversions[@]}" | grep -qE "^$( echo "$1" | grep -oE '[[:digit:]]+(\.[[:digit:]]+){2}' )"
}
2017-06-10 21:15:01 +00:00
# checks if the the beta has already a rc
function check_rc_released() {
printf '%s\n' "${fullversions_rc[@]}" | grep -qE "^$( echo "$1" | grep -oE '[[:digit:]]+(\.[[:digit:]]+){2}' )"
}
2017-03-14 09:48:58 +00:00
travisEnv=
2018-03-13 09:58:19 +00:00
function create_variant() {
dir="$1/$variant"
# Create the version+variant directory with a Dockerfile.
mkdir -p "$dir"
2018-08-01 21:19:53 +00:00
template="Dockerfile-${base[$variant]}.template"
echo "# DO NOT EDIT: created by update.sh from $template" > "$dir/Dockerfile"
cat "$template" >> "$dir/Dockerfile"
2018-03-13 09:58:19 +00:00
echo "updating $fullversion [$1] $variant"
# Replace the variables.
sed -ri -e '
s/%%PHP_VERSION%%/'"${php_version[$version]-${php_version[default]}}"'/g;
s/%%VARIANT%%/'"$variant"'/g;
s/%%VERSION%%/'"$fullversion"'/g;
s/%%BASE_DOWNLOAD_URL%%/'"$2"'/g;
s/%%CMD%%/'"${cmd[$variant]}"'/g;
s|%%VARIANT_EXTRAS%%|'"${extras[$variant]}"'|g;
2018-03-13 09:58:19 +00:00
s/%%APCU_VERSION%%/'"${pecl_versions[APCu]}"'/g;
s/%%MEMCACHED_VERSION%%/'"${pecl_versions[memcached]}"'/g;
s/%%REDIS_VERSION%%/'"${pecl_versions[redis]}"'/g;
s/%%IMAGICK_VERSION%%/'"${pecl_versions[imagick]}"'/g;
2018-03-13 09:58:19 +00:00
' "$dir/Dockerfile"
# Copy the shell scripts
for name in entrypoint cron; do
cp "docker-$name.sh" "$dir/$name.sh"
done
# Copy the upgrade.exclude
cp upgrade.exclude "$dir/"
2018-03-13 09:58:19 +00:00
# Copy the config directory
cp -rT .config "$dir/config"
# Remove Apache config if we're not an Apache variant.
if [ "$variant" != "apache" ]; then
rm "$dir/config/apache-pretty-urls.config.php"
2017-06-23 14:12:44 +00:00
fi
2018-03-13 09:58:19 +00:00
for arch in i386 amd64; do
travisEnv=' - env: VERSION='"$1"' VARIANT='"$variant"' ARCH='"$arch"'\n'"$travisEnv"
2018-03-13 09:58:19 +00:00
done
}
2017-03-14 09:48:58 +00:00
find . -maxdepth 1 -type d -regextype sed -regex '\./[[:digit:]]\+\.[[:digit:]]\+\(-rc\|-beta\)\?' -exec rm -r '{}' \;
2017-04-17 21:02:25 +00:00
2018-03-13 09:58:19 +00:00
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-2 | sort -urV ) )
for version in "${versions[@]}"; do
fullversion="$( printf '%s\n' "${fullversions[@]}" | grep -E "^$version" | head -1 )"
2017-09-14 08:23:46 +00:00
2018-03-13 09:58:19 +00:00
if version_greater_or_equal "$version" "$min_version"; then
for variant in "${variants[@]}"; do
2018-08-01 20:55:25 +00:00
2018-03-13 09:58:19 +00:00
create_variant "$version" "https:\/\/download.nextcloud.com\/server\/releases"
2017-06-10 21:15:01 +00:00
done
fi
done
2017-03-14 09:48:58 +00:00
2018-03-13 09:58:19 +00:00
fullversions_rc=( $( curl -fsSL 'https://download.nextcloud.com/server/prereleases/' |tac|tac| \
grep -oE 'nextcloud-[[:digit:]]+(\.[[:digit:]]+){2}RC[[:digit:]]+' | \
grep -oE '[[:digit:]]+(\.[[:digit:]]+){2}RC[[:digit:]]+' | \
sort -urV ) )
versions_rc=( $( printf '%s\n' "${fullversions_rc[@]}" | cut -d. -f1-2 | sort -urV ) )
for version in "${versions_rc[@]}"; do
fullversion="$( printf '%s\n' "${fullversions_rc[@]}" | grep -E "^$version" | head -1 )"
if version_greater_or_equal "$version" "$min_version"; then
if ! check_released "$fullversion"; then
for variant in "${variants[@]}"; do
2018-08-01 20:55:25 +00:00
2018-03-13 09:58:19 +00:00
create_variant "$version-rc" "https:\/\/download.nextcloud.com\/server\/prereleases"
done
fi
fi
done
fullversions_beta=( $( curl -fsSL 'https://download.nextcloud.com/server/prereleases/' |tac|tac| \
grep -oE 'nextcloud-[[:digit:]]+(\.[[:digit:]]+){2}beta[[:digit:]]+' | \
grep -oE '[[:digit:]]+(\.[[:digit:]]+){2}beta[[:digit:]]+' | \
sort -urV ) )
versions_beta=( $( printf '%s\n' "${fullversions_beta[@]}" | cut -d. -f1-2 | sort -urV ) )
for version in "${versions_beta[@]}"; do
fullversion="$( printf '%s\n' "${fullversions_beta[@]}" | grep -E "^$version" | head -1 )"
if version_greater_or_equal "$version" "$min_version"; then
if ! check_rc_released "$fullversion"; then
for variant in "${variants[@]}"; do
2018-08-01 20:55:25 +00:00
create_variant "$version-beta" "https:\/\/download.nextcloud.com\/server\/prereleases"
done
fi
fi
done
# remove everything after '- stage: test images'
travis="$(awk '!p; /- stage: test images/ {p=1}' .travis.yml)"
echo "$travis" > .travis.yml
2017-06-23 14:12:44 +00:00
# replace the fist '-' with ' '
travisEnv="$(echo "$travisEnv" | sed '0,/-/{s/-/ /}')"
printf "$travisEnv" >> .travis.yml