diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..14a1122 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +/*/**/Dockerfile linguist-generated +/*/**/docker-entrypoint.sh linguist-generated +/Dockerfile*.template linguist-language=Dockerfile diff --git a/1.6/bookworm/Dockerfile b/1.6/bookworm/Dockerfile deleted file mode 100644 index 5cb9571..0000000 --- a/1.6/bookworm/Dockerfile +++ /dev/null @@ -1,96 +0,0 @@ -# -# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh" -# -# PLEASE DO NOT EDIT IT DIRECTLY. -# - -FROM debian:bookworm-slim - -# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN groupadd --system --gid 11211 memcache && useradd --system --gid memcache --uid 11211 memcache - -# ensure SASL's "libplain.so" is installed as per https://github.com/memcached/memcached/wiki/SASLHowto -RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - libsasl2-modules \ - ; \ - rm -rf /var/lib/apt/lists/* - -ENV MEMCACHED_VERSION 1.6.22 -ENV MEMCACHED_DOWNLOAD_URL https://memcached.org/files/memcached-1.6.22.tar.gz -ENV MEMCACHED_SHA1 7a691f390d59616dbebfc9e2e4942d499c39a338 - -RUN set -x \ - \ - && savedAptMark="$(apt-mark showmanual)" \ - && apt-get update \ - && apt-get install -y --no-install-recommends \ - ca-certificates \ - dpkg-dev \ - gcc \ - libc6-dev \ - libevent-dev \ - libio-socket-ssl-perl \ - libsasl2-dev \ - libssl-dev \ - make \ - perl \ - wget \ - && rm -rf /var/lib/apt/lists/* \ - \ - && wget -O memcached.tar.gz "$MEMCACHED_DOWNLOAD_URL" \ - && echo "$MEMCACHED_SHA1 memcached.tar.gz" | sha1sum -c - \ - && mkdir -p /usr/src/memcached \ - && tar -xzf memcached.tar.gz -C /usr/src/memcached --strip-components=1 \ - && rm memcached.tar.gz \ - \ - && cd /usr/src/memcached \ - \ - && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ - && enableExtstore="$( \ -# https://github.com/docker-library/memcached/pull/38 - case "$gnuArch" in \ -# https://github.com/memcached/memcached/issues/381 "--enable-extstore on s390x (IBM System Z mainframe architecture) fails tests" - s390x-*) ;; \ - *) echo '--enable-extstore' ;; \ - esac \ - )" \ - && ./configure \ - --build="$gnuArch" \ - --enable-sasl \ - --enable-sasl-pwdb \ - --enable-tls \ - $enableExtstore \ - && nproc="$(nproc)" \ - && make -j "$nproc" \ - \ -# see https://github.com/docker-library/memcached/pull/54#issuecomment-562797748 and https://bugs.debian.org/927461 for why we have to munge openssl.cnf - && sed -i.bak 's/SECLEVEL=2/SECLEVEL=1/g' /etc/ssl/openssl.cnf \ - && make test PARALLEL="$nproc" \ - && mv /etc/ssl/openssl.cnf.bak /etc/ssl/openssl.cnf \ - \ - && make install \ - \ - && cd / && rm -rf /usr/src/memcached \ - \ - && apt-mark auto '.*' > /dev/null \ - && apt-mark manual $savedAptMark > /dev/null \ - && find /usr/local -type f -executable -exec ldd '{}' ';' \ - | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' \ - | sort -u \ - | xargs -r dpkg-query --search \ - | cut -d: -f1 \ - | sort -u \ - | xargs -r apt-mark manual \ - && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - \ - && memcached -V - -COPY docker-entrypoint.sh /usr/local/bin/ -RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat -ENTRYPOINT ["docker-entrypoint.sh"] - -USER memcache -EXPOSE 11211 -CMD ["memcached"] diff --git a/1.6/alpine3.18/Dockerfile b/1/alpine/Dockerfile similarity index 58% rename from 1.6/alpine3.18/Dockerfile rename to 1/alpine/Dockerfile index 8c496e9..26edd37 100644 --- a/1.6/alpine3.18/Dockerfile +++ b/1/alpine/Dockerfile @@ -7,21 +7,24 @@ FROM alpine:3.18 # add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN addgroup -g 11211 memcache && adduser -D -u 11211 -G memcache memcache +RUN set -eux; \ + addgroup -g 11211 memcache; \ + adduser -D -u 11211 -G memcache memcache # ensure SASL's "libplain.so" is installed as per https://github.com/memcached/memcached/wiki/SASLHowto RUN apk add --no-cache libsasl ENV MEMCACHED_VERSION 1.6.22 -ENV MEMCACHED_DOWNLOAD_URL https://memcached.org/files/memcached-1.6.22.tar.gz +ENV MEMCACHED_URL https://memcached.org/files/memcached-1.6.22.tar.gz ENV MEMCACHED_SHA1 7a691f390d59616dbebfc9e2e4942d499c39a338 -RUN set -x \ +RUN set -eux; \ \ - && apk add --no-cache --virtual .build-deps \ + apk add --no-cache --virtual .build-deps \ ca-certificates \ coreutils \ cyrus-sasl-dev \ + dpkg-dev dpkg \ gcc \ libc-dev \ libevent-dev \ @@ -32,40 +35,44 @@ RUN set -x \ perl \ perl-io-socket-ssl \ perl-utils \ + ; \ \ - && wget -O memcached.tar.gz "$MEMCACHED_DOWNLOAD_URL" \ - && echo "$MEMCACHED_SHA1 memcached.tar.gz" | sha1sum -c - \ - && mkdir -p /usr/src/memcached \ - && tar -xzf memcached.tar.gz -C /usr/src/memcached --strip-components=1 \ - && rm memcached.tar.gz \ + wget -O memcached.tar.gz "$MEMCACHED_URL"; \ + echo "$MEMCACHED_SHA1 memcached.tar.gz" | sha1sum -c -; \ + mkdir -p /usr/src/memcached; \ + tar -xzf memcached.tar.gz -C /usr/src/memcached --strip-components=1; \ + rm memcached.tar.gz; \ \ - && cd /usr/src/memcached \ + cd /usr/src/memcached; \ \ - && ./configure \ + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ + ./configure \ --build="$gnuArch" \ --enable-extstore \ --enable-sasl \ --enable-sasl-pwdb \ --enable-tls \ - && nproc="$(nproc)" \ - && make -j "$nproc" \ + ; \ + nproc="$(nproc)"; \ + make -j "$nproc"; \ \ - && make test PARALLEL="$nproc" \ + make test PARALLEL="$nproc"; \ \ - && make install \ + make install; \ \ - && cd / && rm -rf /usr/src/memcached \ + cd /; \ + rm -rf /usr/src/memcached; \ \ - && runDeps="$( \ + runDeps="$( \ scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ | tr ',' '\n' \ | sort -u \ | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ - )" \ - && apk add --no-network --virtual .memcached-rundeps $runDeps \ - && apk del --no-network .build-deps \ + )"; \ + apk add --no-network --virtual .memcached-rundeps $runDeps; \ + apk del --no-network .build-deps; \ \ - && memcached -V + memcached -V COPY docker-entrypoint.sh /usr/local/bin/ RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat diff --git a/1.6/alpine3.18/docker-entrypoint.sh b/1/alpine/docker-entrypoint.sh similarity index 100% rename from 1.6/alpine3.18/docker-entrypoint.sh rename to 1/alpine/docker-entrypoint.sh diff --git a/1/debian/Dockerfile b/1/debian/Dockerfile new file mode 100644 index 0000000..999c90a --- /dev/null +++ b/1/debian/Dockerfile @@ -0,0 +1,94 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh" +# +# PLEASE DO NOT EDIT IT DIRECTLY. +# + +FROM debian:bookworm-slim + +# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added +RUN set -eux; \ + groupadd --system --gid 11211 memcache; \ + useradd --system --gid memcache --uid 11211 memcache + +# ensure SASL's "libplain.so" is installed as per https://github.com/memcached/memcached/wiki/SASLHowto +RUN set -eux; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + libsasl2-modules \ + ; \ + rm -rf /var/lib/apt/lists/* + +ENV MEMCACHED_VERSION 1.6.22 +ENV MEMCACHED_URL https://memcached.org/files/memcached-1.6.22.tar.gz +ENV MEMCACHED_SHA1 7a691f390d59616dbebfc9e2e4942d499c39a338 + +RUN set -eux; \ + \ + savedAptMark="$(apt-mark showmanual)"; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + dpkg-dev \ + gcc \ + libc6-dev \ + libevent-dev \ + libio-socket-ssl-perl \ + libsasl2-dev \ + libssl-dev \ + make \ + perl \ + wget \ + ; \ + rm -rf /var/lib/apt/lists/*; \ + \ + wget -O memcached.tar.gz "$MEMCACHED_URL"; \ + echo "$MEMCACHED_SHA1 memcached.tar.gz" | sha1sum -c -; \ + mkdir -p /usr/src/memcached; \ + tar -xzf memcached.tar.gz -C /usr/src/memcached --strip-components=1; \ + rm memcached.tar.gz; \ + \ + cd /usr/src/memcached; \ + \ + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ + ./configure \ + --build="$gnuArch" \ + --enable-extstore \ + --enable-sasl \ + --enable-sasl-pwdb \ + --enable-tls \ + ; \ + nproc="$(nproc)"; \ + make -j "$nproc"; \ + \ +# see https://github.com/docker-library/memcached/pull/54#issuecomment-562797748 and https://bugs.debian.org/927461 for why we have to munge openssl.cnf + sed -i.bak 's/SECLEVEL=2/SECLEVEL=1/g' /etc/ssl/openssl.cnf; \ + make test PARALLEL="$nproc"; \ + mv /etc/ssl/openssl.cnf.bak /etc/ssl/openssl.cnf; \ + \ + make install; \ + \ + cd /; \ + rm -rf /usr/src/memcached; \ + \ + apt-mark auto '.*' > /dev/null; \ + apt-mark manual $savedAptMark > /dev/null; \ + find /usr/local -type f -executable -exec ldd '{}' ';' \ + | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' \ + | sort -u \ + | xargs -r dpkg-query --search \ + | cut -d: -f1 \ + | sort -u \ + | xargs -r apt-mark manual \ + ; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ + \ + memcached -V + +COPY docker-entrypoint.sh /usr/local/bin/ +RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat +ENTRYPOINT ["docker-entrypoint.sh"] + +USER memcache +EXPOSE 11211 +CMD ["memcached"] diff --git a/1.6/bookworm/docker-entrypoint.sh b/1/debian/docker-entrypoint.sh similarity index 100% rename from 1.6/bookworm/docker-entrypoint.sh rename to 1/debian/docker-entrypoint.sh diff --git a/Dockerfile-alpine.template b/Dockerfile-alpine.template deleted file mode 100644 index 580bfeb..0000000 --- a/Dockerfile-alpine.template +++ /dev/null @@ -1,70 +0,0 @@ -FROM alpine:{{ env.variant | ltrimstr("alpine") }} - -# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN addgroup -g 11211 memcache && adduser -D -u 11211 -G memcache memcache - -# ensure SASL's "libplain.so" is installed as per https://github.com/memcached/memcached/wiki/SASLHowto -RUN apk add --no-cache libsasl - -ENV MEMCACHED_VERSION {{ .version }} -ENV MEMCACHED_DOWNLOAD_URL {{ .downloadUrl }} -ENV MEMCACHED_SHA1 {{ .sha1 }} - -RUN set -x \ - \ - && apk add --no-cache --virtual .build-deps \ - ca-certificates \ - coreutils \ - cyrus-sasl-dev \ - gcc \ - libc-dev \ - libevent-dev \ - linux-headers \ - make \ - openssl \ - openssl-dev \ - perl \ - perl-io-socket-ssl \ - perl-utils \ - \ - && wget -O memcached.tar.gz "$MEMCACHED_DOWNLOAD_URL" \ - && echo "$MEMCACHED_SHA1 memcached.tar.gz" | sha1sum -c - \ - && mkdir -p /usr/src/memcached \ - && tar -xzf memcached.tar.gz -C /usr/src/memcached --strip-components=1 \ - && rm memcached.tar.gz \ - \ - && cd /usr/src/memcached \ - \ - && ./configure \ - --build="$gnuArch" \ - --enable-extstore \ - --enable-sasl \ - --enable-sasl-pwdb \ - --enable-tls \ - && nproc="$(nproc)" \ - && make -j "$nproc" \ - \ - && make test PARALLEL="$nproc" \ - \ - && make install \ - \ - && cd / && rm -rf /usr/src/memcached \ - \ - && runDeps="$( \ - scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ - | tr ',' '\n' \ - | sort -u \ - | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ - )" \ - && apk add --no-network --virtual .memcached-rundeps $runDeps \ - && apk del --no-network .build-deps \ - \ - && memcached -V - -COPY docker-entrypoint.sh /usr/local/bin/ -RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat -ENTRYPOINT ["docker-entrypoint.sh"] - -USER memcache -EXPOSE 11211 -CMD ["memcached"] diff --git a/Dockerfile-debian.template b/Dockerfile-debian.template deleted file mode 100644 index 2189824..0000000 --- a/Dockerfile-debian.template +++ /dev/null @@ -1,90 +0,0 @@ -FROM debian:{{ env.variant }}-slim - -# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN groupadd --system --gid 11211 memcache && useradd --system --gid memcache --uid 11211 memcache - -# ensure SASL's "libplain.so" is installed as per https://github.com/memcached/memcached/wiki/SASLHowto -RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - libsasl2-modules \ - ; \ - rm -rf /var/lib/apt/lists/* - -ENV MEMCACHED_VERSION {{ .version }} -ENV MEMCACHED_DOWNLOAD_URL {{ .downloadUrl }} -ENV MEMCACHED_SHA1 {{ .sha1 }} - -RUN set -x \ - \ - && savedAptMark="$(apt-mark showmanual)" \ - && apt-get update \ - && apt-get install -y --no-install-recommends \ - ca-certificates \ - dpkg-dev \ - gcc \ - libc6-dev \ - libevent-dev \ - libio-socket-ssl-perl \ - libsasl2-dev \ - libssl-dev \ - make \ - perl \ - wget \ - && rm -rf /var/lib/apt/lists/* \ - \ - && wget -O memcached.tar.gz "$MEMCACHED_DOWNLOAD_URL" \ - && echo "$MEMCACHED_SHA1 memcached.tar.gz" | sha1sum -c - \ - && mkdir -p /usr/src/memcached \ - && tar -xzf memcached.tar.gz -C /usr/src/memcached --strip-components=1 \ - && rm memcached.tar.gz \ - \ - && cd /usr/src/memcached \ - \ - && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ - && enableExtstore="$( \ -# https://github.com/docker-library/memcached/pull/38 - case "$gnuArch" in \ -# https://github.com/memcached/memcached/issues/381 "--enable-extstore on s390x (IBM System Z mainframe architecture) fails tests" - s390x-*) ;; \ - *) echo '--enable-extstore' ;; \ - esac \ - )" \ - && ./configure \ - --build="$gnuArch" \ - --enable-sasl \ - --enable-sasl-pwdb \ - --enable-tls \ - $enableExtstore \ - && nproc="$(nproc)" \ - && make -j "$nproc" \ - \ -# see https://github.com/docker-library/memcached/pull/54#issuecomment-562797748 and https://bugs.debian.org/927461 for why we have to munge openssl.cnf - && sed -i.bak 's/SECLEVEL=2/SECLEVEL=1/g' /etc/ssl/openssl.cnf \ - && make test PARALLEL="$nproc" \ - && mv /etc/ssl/openssl.cnf.bak /etc/ssl/openssl.cnf \ - \ - && make install \ - \ - && cd / && rm -rf /usr/src/memcached \ - \ - && apt-mark auto '.*' > /dev/null \ - && apt-mark manual $savedAptMark > /dev/null \ - && find /usr/local -type f -executable -exec ldd '{}' ';' \ - | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' \ - | sort -u \ - | xargs -r dpkg-query --search \ - | cut -d: -f1 \ - | sort -u \ - | xargs -r apt-mark manual \ - && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - \ - && memcached -V - -COPY docker-entrypoint.sh /usr/local/bin/ -RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat -ENTRYPOINT ["docker-entrypoint.sh"] - -USER memcache -EXPOSE 11211 -CMD ["memcached"] diff --git a/Dockerfile.template b/Dockerfile.template new file mode 100644 index 0000000..2edbccd --- /dev/null +++ b/Dockerfile.template @@ -0,0 +1,136 @@ +{{ if env.variant == "alpine" then ( -}} +FROM alpine:{{ .alpine.version }} +{{ ) else ( -}} +FROM debian:{{ .debian.version }}-slim +{{ ) end -}} + +# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added +{{ if env.variant == "alpine" then ( -}} +RUN set -eux; \ + addgroup -g 11211 memcache; \ + adduser -D -u 11211 -G memcache memcache +{{ ) else ( -}} +RUN set -eux; \ + groupadd --system --gid 11211 memcache; \ + useradd --system --gid memcache --uid 11211 memcache +{{ ) end -}} + +# ensure SASL's "libplain.so" is installed as per https://github.com/memcached/memcached/wiki/SASLHowto +{{ if env.variant == "alpine" then ( -}} +RUN apk add --no-cache libsasl +{{ ) else ( -}} +RUN set -eux; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + libsasl2-modules \ + ; \ + rm -rf /var/lib/apt/lists/* +{{ ) end -}} + +ENV MEMCACHED_VERSION {{ .version }} +ENV MEMCACHED_URL {{ .url }} +ENV MEMCACHED_SHA1 {{ .sha1 }} + +RUN set -eux; \ + \ +{{ if env.variant == "alpine" then ( -}} + apk add --no-cache --virtual .build-deps \ + ca-certificates \ + coreutils \ + cyrus-sasl-dev \ + dpkg-dev dpkg \ + gcc \ + libc-dev \ + libevent-dev \ + linux-headers \ + make \ + openssl \ + openssl-dev \ + perl \ + perl-io-socket-ssl \ + perl-utils \ + ; \ +{{ ) else ( -}} + savedAptMark="$(apt-mark showmanual)"; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + dpkg-dev \ + gcc \ + libc6-dev \ + libevent-dev \ + libio-socket-ssl-perl \ + libsasl2-dev \ + libssl-dev \ + make \ + perl \ + wget \ + ; \ + rm -rf /var/lib/apt/lists/*; \ +{{ ) end -}} + \ + wget -O memcached.tar.gz "$MEMCACHED_URL"; \ + echo "$MEMCACHED_SHA1 memcached.tar.gz" | sha1sum -c -; \ + mkdir -p /usr/src/memcached; \ + tar -xzf memcached.tar.gz -C /usr/src/memcached --strip-components=1; \ + rm memcached.tar.gz; \ + \ + cd /usr/src/memcached; \ + \ + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ + ./configure \ + --build="$gnuArch" \ + --enable-extstore \ + --enable-sasl \ + --enable-sasl-pwdb \ + --enable-tls \ + ; \ + nproc="$(nproc)"; \ + make -j "$nproc"; \ + \ +{{ if env.variant == "debian" then ( -}} +# see https://github.com/docker-library/memcached/pull/54#issuecomment-562797748 and https://bugs.debian.org/927461 for why we have to munge openssl.cnf + sed -i.bak 's/SECLEVEL=2/SECLEVEL=1/g' /etc/ssl/openssl.cnf; \ +{{ ) else "" end -}} + make test PARALLEL="$nproc"; \ +{{ if env.variant == "debian" then ( -}} + mv /etc/ssl/openssl.cnf.bak /etc/ssl/openssl.cnf; \ +{{ ) else "" end -}} + \ + make install; \ + \ + cd /; \ + rm -rf /usr/src/memcached; \ + \ +{{ if env.variant == "alpine" then ( -}} + runDeps="$( \ + scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ + | tr ',' '\n' \ + | sort -u \ + | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ + )"; \ + apk add --no-network --virtual .memcached-rundeps $runDeps; \ + apk del --no-network .build-deps; \ +{{ ) else ( -}} + apt-mark auto '.*' > /dev/null; \ + apt-mark manual $savedAptMark > /dev/null; \ + find /usr/local -type f -executable -exec ldd '{}' ';' \ + | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' \ + | sort -u \ + | xargs -r dpkg-query --search \ + | cut -d: -f1 \ + | sort -u \ + | xargs -r apt-mark manual \ + ; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ +{{ ) end -}} + \ + memcached -V + +COPY docker-entrypoint.sh /usr/local/bin/ +RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat +ENTRYPOINT ["docker-entrypoint.sh"] + +USER memcache +EXPOSE 11211 +CMD ["memcached"] diff --git a/apply-templates.sh b/apply-templates.sh index 41cb3bb..2af30c7 100755 --- a/apply-templates.sh +++ b/apply-templates.sh @@ -3,8 +3,6 @@ set -Eeuo pipefail [ -f versions.json ] # run "versions.sh" first -cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" - jqt='.jq-template.awk' if [ -n "${BASHBREW_SCRIPTS:-}" ]; then jqt="$BASHBREW_SCRIPTS/jq-template.awk" @@ -30,44 +28,22 @@ generated_warning() { } for version; do - export version - - if [ -d "$version" ]; then - rm -rf "$version" - fi - - if jq -e '.[env.version] | not' versions.json > /dev/null; then - echo "skipping $version ..." - continue - fi - - variants="$(jq -r '.[env.version].variants | map(@sh) | join(" ")' versions.json)" - eval "variants=( $variants )" + rm -rf "$version" - for variant in "${variants[@]}"; do - export variant + for variant in debian alpine; do + export version variant - echo "processing $version/$variant ..." + dir="$version/$variant" - dir="$version${variant:+/$variant}" + echo "processing $dir ..." mkdir -p "$dir" - cp -f docker-entrypoint.sh "$dir/" - - case "$variant" in - alpine*) - template='Dockerfile-alpine.template' - sed -i -e 's/gosu/su-exec/g' "$dir/docker-entrypoint.sh" - ;; - *) - template='Dockerfile-debian.template' - ;; - esac - { generated_warning - gawk -f "$jqt" "$template" + gawk -f "$jqt" Dockerfile.template } > "$dir/Dockerfile" + + cp -a docker-entrypoint.sh "$dir/" done done diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index 0f32373..3df0b30 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash -set -eu +set -Eeuo pipefail declare -A aliases=( - [1.6]='latest' + [1]='latest' ) self="$(basename "$BASH_SOURCE")" @@ -69,12 +69,6 @@ join() { for version; do export version - variants="$(jq -r '.[env.version].variants | map(@sh) | join(" ")' versions.json)" - eval "variants=( $variants )" - - alpine="$(jq -r '.[env.version].alpine' versions.json)" - debian="$(jq -r '.[env.version].debian' versions.json)" - fullVersion="$(jq -r '.[env.version].version' versions.json)" versionAliases=() @@ -87,28 +81,30 @@ for version; do ${aliases[$version]:-} ) - for variant in "${variants[@]}"; do + for variant in debian alpine; do + export variant dir="$version/$variant" + commit="$(dirCommit "$dir")" + if [ "$variant" = 'debian' ]; then + variantAliases=( "${versionAliases[@]}" ) + else + variantAliases=( "${versionAliases[@]/%/-$variant}" ) + variantAliases=( "${variantAliases[@]//latest-/}" ) + fi + parent="$(awk 'toupper($1) == "FROM" { print $2 }' "$dir/Dockerfile")" arches="${parentRepoToArches[$parent]}" - variantAliases=( "${versionAliases[@]/%/-$variant}" ) - variantAliases=( "${variantAliases[@]//latest-/}" ) - - case "$variant" in - "$debian") - variantAliases=( - "${versionAliases[@]}" - "${variantAliases[@]}" - ) - ;; - alpine"$alpine") - variantAliases+=( "${versionAliases[@]/%/-alpine}" ) - variantAliases=( "${variantAliases[@]//latest-/}" ) - ;; - esac + suite="${parent#*:}" # "bookworm-slim", "bookworm" + suite="${suite%-slim}" # "bookworm" + if [ "$variant" = 'alpine' ]; then + suite="alpine$suite" # "alpine3.18" + fi + suiteAliases=( "${versionAliases[@]/%/-$suite}" ) + suiteAliases=( "${suiteAliases[@]//latest-/}" ) + variantAliases+=( "${suiteAliases[@]}" ) # https://github.com/memcached/memcached/issues/799 # https://github.com/docker-library/memcached/issues/69 diff --git a/versions.json b/versions.json index b14da3c..8f5d5cb 100644 --- a/versions.json +++ b/versions.json @@ -1,13 +1,13 @@ { - "1.6": { - "alpine": "3.18", - "debian": "bookworm", - "downloadUrl": "https://memcached.org/files/memcached-1.6.22.tar.gz", + "1": { + "version": "1.6.22", + "url": "https://memcached.org/files/memcached-1.6.22.tar.gz", "sha1": "7a691f390d59616dbebfc9e2e4942d499c39a338", - "variants": [ - "bookworm", - "alpine3.18" - ], - "version": "1.6.22" + "alpine": { + "version": "3.18" + }, + "debian": { + "version": "bookworm" + } } } diff --git a/versions.sh b/versions.sh index e326473..915398d 100755 --- a/versions.sh +++ b/versions.sh @@ -1,21 +1,20 @@ #!/usr/bin/env bash set -Eeuo pipefail -# we will support at most two entries in each of these lists, and both should be in descending order -supportedDebianSuites=( - bookworm -) -supportedAlpineVersions=( - 3.18 -) -defaultDebianSuite="${supportedDebianSuites[0]}" -declare -A debianSuites=( - #[7.2]='3.17' -) -defaultAlpineVersion="${supportedAlpineVersions[0]}" -declare -A alpineVersions=( - #[14]='3.16' -) +alpine="$( + bashbrew cat --format '{{ .TagEntry.Tags | join "\n" }}' https://github.com/docker-library/official-images/raw/HEAD/library/alpine:latest \ + | grep -E '^[0-9]+[.][0-9]+$' +)" +[ "$(wc -l <<<"$alpine")" = 1 ] +export alpine + +debian="$( + bashbrew cat --format '{{ .TagEntry.Tags | join "\n" }}' https://github.com/docker-library/official-images/raw/HEAD/library/debian:latest \ + | grep -vE '^latest$|[0-9.-]' \ + | head -1 +)" +[ "$(wc -l <<<"$debian")" = 1 ] +export debian cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" @@ -28,84 +27,50 @@ else fi versions=( "${versions[@]%/}" ) -packagesBase='https://github.com/memcached/memcached.git' - -packages=() - -fetch_package_list() { - local -; set +x # make sure running with "set -x" doesn't spam the terminal with the raw package lists - - if [ "${#packages[@]}" -le 0 ]; then - packages=( $( - git ls-remote --tags 'https://github.com/memcached/memcached.git' \ - | cut -d/ -f3- \ - | cut -d^ -f1 \ - | grep -E '^[0-9]+' \ - | grep -vE -- '-(beta|rc)' \ - | sort -urV - ) ) - fi -} - -get_version() { - local version="$1"; shift - - versionPattern="^${version/\./\\.}\.[0-9]*$" - filteredVersions=($(printf "%s\n" "${packages[@]}" | grep -E "${versionPattern}")) - fullVersion="${filteredVersions[0]}" - - downloadUrl="https://memcached.org/files/memcached-$fullVersion.tar.gz" - - shaHash="$(curl -fsSL "${downloadUrl}.sha1")" - - if [ -n "$shaHash" ]; then - shaHash="${shaHash%% *}" - fi -} +possibles="$( + git ls-remote --tags 'https://github.com/memcached/memcached.git' \ + | cut -d/ -f3- \ + | cut -d^ -f1 \ + | grep -E '^[0-9]+' \ + | grep -vE -- '-(beta|rc)' \ + | sort -urV +)" for version in "${versions[@]}"; do export version - versionAlpineVersion="${alpineVersions[$version]:-$defaultAlpineVersion}" - versionDebianSuite="${debianSuites[$version]:-$defaultDebianSuite}" - export versionAlpineVersion versionDebianSuite - - doc="$(jq -nc '{ - alpine: env.versionAlpineVersion, - debian: env.versionDebianSuite, - }')" - - fetch_package_list - get_version "$version" - - if [ -z "$fullVersion" ] || [ -z "$shaHash" ]; then - echo >&2 "error: could not determine latest release of memcached" + versionPossibles="$(grep <<<"$possibles" -E "^$version([.-]|\$)")" + + fullVersion= + sha1= + url= + for possible in $versionPossibles; do + url="https://memcached.org/files/memcached-$possible.tar.gz" + if sha1="$(curl -fsSL "$url.sha1")" && [ -n "$sha1" ]; then + sha1="${sha1%% *}" + fullVersion="$possible" + break + fi + done + if [ -z "$fullVersion" ]; then + echo >&2 "error: could not determine latest release for $version" exit 1 fi - - for suite in "${supportedDebianSuites[@]}"; do - export suite - doc="$(jq <<<"$doc" -c ' - .variants += [ env.suite ] - ')" - done - - for alpineVersion in "${supportedAlpineVersions[@]}"; do - doc="$(jq <<<"$doc" -c --arg v "$alpineVersion" ' - .variants += [ "alpine" + $v ] - ')" - done + [ -n "$sha1" ] + [ -n "$url" ] echo "$version: $fullVersion" - export fullVersion shaHash downloadUrl - json="$(jq <<<"$json" -c --argjson doc "$doc" ' - .[env.version] = ($doc + { + export fullVersion sha1 url + json="$(jq <<<"$json" -c ' + .[env.version] = { version: env.fullVersion, - downloadUrl: env.downloadUrl, - sha1: env.shaHash - }) + url: env.url, + sha1: env.sha1, + alpine: { version: env.alpine }, + debian: { version: env.debian }, + } ')" done -jq <<<"$json" -S . > versions.json +jq <<<"$json" . > versions.json