0
0
Fork 0
mirror of https://github.com/nextcloud/docker.git synced 2024-11-17 18:46:43 +01:00
nextcloud-docker/update.sh

170 lines
4.4 KiB
Bash
Raw Normal View History

2016-09-02 15:11:38 +02:00
#!/bin/bash
set -eo pipefail
2018-03-08 09:52:55 +01:00
declare -A php_version=(
[default]='7.4'
2018-03-08 09:52:55 +01:00
)
declare -A cmd=(
[apache]='apache2-foreground'
[fpm]='php-fpm'
2018-02-11 02:58:17 +01:00
[fpm-alpine]='php-fpm'
)
declare -A base=(
[apache]='debian'
[fpm]='debian'
[fpm-alpine]='alpine'
)
2018-01-04 22:35:31 +01:00
declare -A extras=(
[apache]='\nRUN a2enmod headers 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 22:35:31 +01:00
[fpm]=''
2018-02-11 02:58:17 +01:00
[fpm-alpine]=''
2018-01-04 22:35:31 +01:00
)
declare -A crontab_int=(
[default]='5'
)
apcu_version="$(
git ls-remote --tags https://github.com/krakjoe/apcu.git \
| cut -d/ -f3 \
| grep -vE -- '-rc|-b' \
| sed -E 's/^v//' \
| sort -V \
| tail -1
)"
memcached_version="$(
git ls-remote --tags https://github.com/php-memcached-dev/php-memcached.git \
| cut -d/ -f3 \
| grep -vE -- '-rc|-b' \
| sed -E 's/^[rv]//' \
| sort -V \
| tail -1
)"
redis_version="$(
git ls-remote --tags https://github.com/phpredis/phpredis.git \
| cut -d/ -f3 \
| grep -viE '[a-z]' \
| tr -d '^{}' \
| sort -V \
| tail -1
)"
imagick_version="$(
git ls-remote --tags https://github.com/mkoppanen/imagick.git \
| cut -d/ -f3 \
| grep -viE '[a-z]' \
| tr -d '^{}' \
| sort -V \
| tail -1
)"
2018-03-08 09:38:24 +01:00
declare -A pecl_versions=(
[APCu]="$apcu_version"
[memcached]="$memcached_version"
[redis]="$redis_version"
[imagick]="$imagick_version"
2018-03-08 09:38:24 +01:00
)
2018-03-13 10:58:19 +01:00
variants=(
apache
fpm
fpm-alpine
)
2021-07-06 19:50:40 +02:00
min_version='20.0'
2018-03-13 10:58:19 +01:00
2017-03-07 15:33:57 +01: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 10:58:19 +01:00
function create_variant() {
dir="$1/$variant"
phpVersion=${php_version[$version]-${php_version[default]}}
crontabInt=${crontab_int[$version]-${crontab_int[default]}}
2018-03-13 10:58:19 +01:00
# Create the version+variant directory with a Dockerfile.
mkdir -p "$dir"
2018-08-01 23:19:53 +02: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 10:58:19 +01:00
echo "updating $fullversion [$1] $variant"
# Replace the variables.
sed -ri -e '
s/%%PHP_VERSION%%/'"$phpVersion"'/g;
2018-03-13 10:58:19 +01:00
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 10:58:19 +01: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;
s/%%CRONTAB_INT%%/'"$crontabInt"'/g;
2018-03-13 10:58:19 +01:00
' "$dir/Dockerfile"
case "$phpVersion" in
7.4 )
sed -ri -e '
\@docker-php-ext-configure gmp --with-gmp@d;
\@/usr/include/gmp.h@d;
' "$dir/Dockerfile"
;;
7.3 )
sed -ri -e '
s@gd --with-freetype --with-jpeg --with-webp@gd --with-freetype-dir=/usr --with-png-dir=/usr --with-jpeg-dir=/usr --with-webp-dir=/usr@g;
' "$dir/Dockerfile"
;;
esac
2018-03-13 10:58:19 +01:00
# 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 10:58:19 +01: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 16:12:44 +02:00
fi
2018-03-13 10:58:19 +01:00
}
2017-03-14 10:48:58 +01:00
curl -fsSL 'https://download.nextcloud.com/server/releases/' |tac|tac| \
grep -oE 'nextcloud-[[:digit:]]+(\.[[:digit:]]+){2}' | \
grep -oE '[[:digit:]]+(\.[[:digit:]]+){2}' | \
sort -uV | \
tail -1 > latest.txt
find . -maxdepth 1 -type d -regextype sed -regex '\./[[:digit:]]\+\.[[:digit:]]\+\(-rc\|-beta\|-alpha\)\?' -exec rm -r '{}' \;
2017-04-17 23:02:25 +02:00
2018-03-13 10:58:19 +01: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 10:23:46 +02:00
2018-03-13 10:58:19 +01:00
if version_greater_or_equal "$version" "$min_version"; then
for variant in "${variants[@]}"; do
2018-08-01 22:55:25 +02:00
2018-03-13 10:58:19 +01:00
create_variant "$version" "https:\/\/download.nextcloud.com\/server\/releases"
2017-06-10 23:15:01 +02:00
done
fi
done