forgejo-ci-antora (sha256:a79f585d5d234c1add940502c6c2b7620a9985fd48d0143fb88c3a36edc8c059)
Published 2026-10-17 13:38:03 +02:00 by release-bot
Installation
docker pull git.frankenbit.de/frankenbit/forgejo-ci-antora@sha256:a79f585d5d234c1add940502c6c2b7620a9985fd48d0143fb88c3a36edc8c059sha256:a79f585d5d234c1add940502c6c2b7620a9985fd48d0143fb88c3a36edc8c059Image layers
| ADD alpine-minirootfs-3.24.2-x86_64.tar.gz / # buildkit |
| CMD ["/bin/sh"] |
| ENV NODE_VERSION=24.21.0 |
| RUN /bin/sh -c addgroup -g 1000 node && adduser -u 1000 -G node -s /bin/sh -D node && apk add --no-cache libstdc++ && apk add --no-cache --virtual .build-deps curl && ARCH= OPENSSL_ARCH='linux*' && alpineArch="$(apk --print-arch)" && case "${alpineArch##*-}" in x86_64) ARCH='x64' CHECKSUM="dd5ca647e656c8200c873f45098a16623129c47f2387829f0a15a6de1dac1220" OPENSSL_ARCH=linux-x86_64;; aarch64) OPENSSL_ARCH=linux-aarch64;; s390x) OPENSSL_ARCH=linux-s390x;; *) echo "unsupported architecture"; exit 1 ;; esac && if [ -n "${CHECKSUM}" ]; then set -eu; curl -fsSLO --compressed "https://unofficial-builds.nodejs.org/download/release/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz"; echo "$CHECKSUM node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz" | sha256sum -c - && tar -xJf "node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz" -C /usr/local --strip-components=1 --no-same-owner && ln -s /usr/local/bin/node /usr/local/bin/nodejs; else echo "Building from source" && apk add --no-cache --virtual .build-deps-full binutils-gold g++ gcc gnupg libgcc linux-headers make python3 py-setuptools && export GNUPGHOME="$(mktemp -d)" && for key in 5BE8A3F6C8A5C01D106C0AD820B1A390B168D356 DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 CC68F5A3106FF448322E48ED27F5E38D5B0A215F 890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C 108F52B48DB57BB0CC439B2997B01419BD92F80A 655F3B5C1FB3FA8D1A0CA6BDE4A7D232B936D2FD A363A499291CBBC940DD62E41F10027AF002F8B0 ; do { gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" && gpg --batch --fingerprint "$key"; } || { gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" && gpg --batch --fingerprint "$key"; } ; done && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION.tar.xz" && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc && gpgconf --kill all && rm -rf "$GNUPGHOME" && grep " node-v$NODE_VERSION.tar.xz\$" SHASUMS256.txt | sha256sum -c - && tar -xf "node-v$NODE_VERSION.tar.xz" && cd "node-v$NODE_VERSION" && ./configure && make -j$(getconf _NPROCESSORS_ONLN) V= && make install && apk del .build-deps-full && cd .. && rm -Rf "node-v$NODE_VERSION" && rm "node-v$NODE_VERSION.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt; fi && rm -f "node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz" && find /usr/local/include/node/openssl/archs -mindepth 1 -maxdepth 1 ! -name "$OPENSSL_ARCH" -exec rm -rf {} \; && apk del .build-deps && node --version && npm --version && rm -rf /tmp/* # buildkit |
| ENV YARN_VERSION=1.22.22 |
| RUN /bin/sh -c apk add --no-cache --virtual .build-deps-yarn curl gnupg tar && export GNUPGHOME="$(mktemp -d)" && for key in 6A010C5166006599AA17F08146C2130DFD2497F5 ; do { gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" && gpg --batch --fingerprint "$key"; } || { gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" && gpg --batch --fingerprint "$key"; } ; done && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz && gpgconf --kill all && rm -rf "$GNUPGHOME" && mkdir -p /opt && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ && ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn && ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz && apk del .build-deps-yarn && yarn --version && rm -rf /tmp/* # buildkit |
| COPY docker-entrypoint.sh /usr/local/bin/ # buildkit |
| ENTRYPOINT ["docker-entrypoint.sh"] |
| CMD ["node"] |
| LABEL org.opencontainers.image.source=https://gitlab.com/antora/docker-antora |
| ENV NODE_PATH=/usr/local/share/.config/yarn/global/node_modules |
| RUN /bin/sh -c apk --no-cache add curl findutils jq && yarn global add --ignore-optional --silent @antora/cli@3.2.1 @antora/site-generator-default@3.2.1 && yarn global add --ignore-optional --silent $(grep -o '^isomorphic-git@[^:]*' `yarn global dir`/yarn.lock) && rm -rf $(yarn cache dir)/* && find $(yarn global dir)/node_modules/`[ -d $(yarn global dir)/node_modules/asciidoctor.js ] && echo asciidoctor.js || echo @asciidoctor/core`/dist -mindepth 1 -maxdepth 1 -not -name node -exec rm -rf {} \; && find $(yarn global dir)/node_modules/handlebars/dist -mindepth 1 -maxdepth 1 -not -name cjs -exec rm -rf {} \; && find $(yarn global dir)/node_modules/handlebars/lib -mindepth 1 -maxdepth 1 -not -name index.js -exec rm -rf {} \; && find $(yarn global dir)/node_modules/isomorphic-git -mindepth 2 -maxdepth 2 -regex '.+/dist/[^/]+' -not -name for-node -exec rm -rf {} \; && find $(yarn global dir)/node_modules/isomorphic-git -mindepth 2 -maxdepth 2 -regex '.+/http/[^/]+' -not -name node -exec rm -rf {} \; && find $(yarn global dir)/node_modules/isomorphic-git -type f -not -name cli.js -not -regex '.+\.\(cjs\|json\|md\)' -exec rm -f {} \; && find $(yarn global dir)/node_modules/js-yaml/dist -type f -not -regex '.+\.js' -exec rm -f {} \; && rm -rf $(yarn global dir)/node_modules/js-yaml/dist/browser && rm -rf $(yarn global dir)/node_modules/json5/dist && rm -rf $(yarn global dir)/node_modules/moment/min && rm -rf $(yarn global dir)/node_modules/moment/src && rm -rf $(yarn global dir)/node_modules/pako/dist && find $(yarn global dir)/node_modules/pino -mindepth 1 -maxdepth 1 -not -name pino.js -not -name file.js -not -name package.json -not -name lib -exec rm -rf {} \; && rm -rf $(yarn global dir)/node_modules/source-map/dist && rm -rf /tmp/* # buildkit |
| WORKDIR /antora |
| COPY docker-entrypoint.sh /usr/local/bin/ # buildkit |
| ENTRYPOINT ["docker-entrypoint.sh"] |
| CMD ["antora"] |
| USER root |
| RUN /bin/sh -c set -eux; apk add --no-cache git rsync curl; mkdir -p /opt/antora-ui; curl -fsSL -o /opt/antora-ui/ui-bundle.zip 'https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable' # buildkit |
| RUN /bin/sh -c set -eux; yarn global add @antora/lunr-extension@1.0.0-alpha.13; node -e "require.resolve('@antora/lunr-extension')" # buildkit |
| RUN /bin/sh -c set -eux; apk add --no-cache ruby ruby-bundler; apk add --no-cache --virtual .pdf-build ruby-dev build-base; gem install --no-document asciidoctor-pdf; gem install --no-document prawn -v 2.5.0; spec="$(ls /usr/lib/ruby/gems/*/specifications/asciidoctor-pdf-*.gemspec)"; test -f "$spec" || { echo "MISSING: asciidoctor-pdf gemspec" >&2; exit 1; }; sed -i 's/2\.4\.0/2.5.0/g; s/1\.7\.0/1.8.0/g' "$spec"; grep -q '2\.5\.0' "$spec" || { echo "MISSING: the prawn pin was not relaxed in $spec" >&2; exit 1; }; n=0; for post in /usr/lib/ruby/gems/*/gems/ttfunk-*/lib/ttfunk/table/post.rb; do grep -qF '257 + strings.length' "$post" || continue; sed -i 's/257 + strings\.length/258 + strings.length/' "$post"; grep -qF '258 + strings.length' "$post" || { echo "MISSING: the ttfunk post patch did not apply in $post" >&2; exit 1; }; n=$((n+1)); echo "ai#891: patched $post"; done; [ "$n" -ge 1 ] || { echo "MISSING: no installed ttfunk carries the post off-by-one -- if upstream fixed it, drop this patch (ai#891)" >&2; exit 1; }; apk del .pdf-build; yarn global add @antora/pdf-extension@1.0.1; node -e "require.resolve('@antora/pdf-extension')" # buildkit |
| RUN /bin/sh -c set -eux; command -v antora >/dev/null || { echo "MISSING: antora" >&2; exit 1; }; command -v node >/dev/null || { echo "MISSING: node" >&2; exit 1; }; command -v git >/dev/null || { echo "MISSING: git" >&2; exit 1; }; command -v rsync >/dev/null || { echo "MISSING: rsync" >&2; exit 1; }; command -v curl >/dev/null || { echo "MISSING: curl" >&2; exit 1; }; node -e "require.resolve('@antora/lunr-extension')" || { echo "MISSING: lunr extension" >&2; exit 1; }; node -e "require.resolve('@antora/pdf-extension')" || { echo "MISSING: pdf extension" >&2; exit 1; }; command -v ruby >/dev/null || { echo "MISSING: ruby" >&2; exit 1; }; command -v asciidoctor-pdf >/dev/null || { echo "MISSING: asciidoctor-pdf" >&2; exit 1; }; ruby -e 'gem "asciidoctor-pdf"; require "prawn"; abort("WRONG: asciidoctor-pdf activates prawn #{Prawn::VERSION}, want 2.5.0") unless Prawn::VERSION == "2.5.0"'; ruby -e 'gem "asciidoctor-pdf"; require "ttfunk"; require "ttfunk/subset"; p0 = Dir["/usr/lib/ruby/gems/*/gems/asciidoctor-pdf-*/data/fonts/notoemoji-subset.ttf"].first or abort("MISSING: notoemoji-subset.ttf, so the ai#891 glyph-name contract cannot be graded"); s = TTFunk::Subset.for(TTFunk::File.open(p0), :unicode); [0x26A0, 0x1F511].each { |c| s.use(c) }; g = TTFunk::File.new(s.encode); n = (0...g.maximum_profile.num_glyphs).map { |i| g.postscript.glyph_for(i) }; abort("WRONG: the subset ttfunk emits mis-numbers custom glyph names (ai#891); got #{n.inspect}") unless n.include?("uni26A0") && n.include?("u1F511") && !n.include?("dcroat")'; test -s /opt/antora-ui/ui-bundle.zip || { echo "MISSING: vendored ui-bundle.zip" >&2; exit 1; }; antora --version; node --version; git --version; rsync --version | head -1; ruby --version; asciidoctor-pdf --version > /tmp/apdf.version 2>&1 || { echo "MISSING: asciidoctor-pdf is installed but cannot start" >&2; cat /tmp/apdf.version >&2; exit 1; }; head -1 /tmp/apdf.version; rm -f /tmp/apdf.version; printf 'ui-bundle.zip %s bytes\n' "$(stat -c %s /opt/antora-ui/ui-bundle.zip)" # buildkit |
| ARG CI_IMAGE_SHA=49bdaea2f80fc2597a845c04c9691c06881d680b |
| ARG CI_IMAGE_TAG=git.frankenbit.de/frankenbit/forgejo-ci-antora:49bdaea2f80fc2597a845c04c9691c06881d680b-48 |
| RUN |2 CI_IMAGE_SHA=49bdaea2f80fc2597a845c04c9691c06881d680b CI_IMAGE_TAG=git.frankenbit.de/frankenbit/forgejo-ci-antora:49bdaea2f80fc2597a845c04c9691c06881d680b-48 /bin/sh -c printf 'ci_image_name=%s\nci_image_infra_sha=%s\nci_image_tag=%s\nci_image_base=%s\n' 'forgejo-ci-antora' "$CI_IMAGE_SHA" "$CI_IMAGE_TAG" 'docker.io/antora/antora:3.2.1 (FLOATING tag, not digest-pinned — see README §Base images)' > /etc/ci-image-provenance # buildkit |
Labels
| Key | Value |
|---|---|
| org.opencontainers.image.source | https://gitlab.com/antora/docker-antora |
Details
2026-10-17 13:38:03 +02:00
2026-11-01 20:11:57 +01:00
Versions (3)
View all
Container
3
OCI / Docker
linux/amd64
107 MiB