blob: 6aa88c17d4754fae9543db9571f75d17d78bfc50 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#
# Copy this Dockerfile to the root of each branch you want to create an archive
# and rename it to X.Y.Dockerfile, where X.Y the major.minor GitLab version.
#
#- Start of minifier stage -#
#
# Build minifier utility
# Adapted from https://github.com/docker/docker.github.io/blob/publish-tools/Dockerfile.builder
#
FROM golang:1.13-alpine AS minifier
RUN apk add --no-cache git \
&& export GO111MODULE=on \
&& go get -d github.com/tdewolff/minify/v2@latest \
&& go build -v -o /minify github.com/tdewolff/minify/cmd/minify
#- End of minifier stage -#
#- Start of builder stage -#
FROM ruby:2.7.6-alpine3.16 AS builder
# Copy minifier binary from the minifier stage
COPY --from=minifier /minify /usr/local/bin/minify
# Set to the version for this archive (must match the branch name)
ENV VER=X.Y
ENV CI_COMMIT_REF_NAME=X.Y
# Replace the versions to match the stable branches of the upstream projects
ENV BRANCH_EE=X-Y-stable-ee
ENV BRANCH_OMNIBUS=X-Y-stable
ENV BRANCH_RUNNER=X-Y-stable
ENV BRANCH_CHARTS=W-Z-stable
# Set NANOC_ENV to production
ENV NANOC_ENV=production
#
# Install Nanoc dependencies and tools that
# are needed to build the docs site and run the tests.
#
RUN apk add --no-cache -U \
bash \
build-base \
curl \
gcompat \
git \
gnupg \
go \
grep \
gzip \
jq \
libcurl \
libxslt \
libxslt-dev \
nodejs \
openssl \
pngquant \
ruby-dev \
tar \
xz \
xz-dev \
yarn \
&& echo 'gem: --no-document' >> /etc/gemrc \
&& gem update --silent --system \
&& printf "\n\e[32mINFO: Dependency versions:\e[39m\n" \
&& echo "Ruby: $(ruby --version)" \
&& echo "RubyGems: $(gem --version)" \
&& echo "Node.js: $(node --version)" \
&& echo "Yarn: $(yarn --version)" \
&& printf "\n"
# Build the docs from this branch
COPY . /source/
WORKDIR /source
RUN yarn install --frozen-lockfile \
&& yarn cache clean \
&& bundle config set --local deployment true \
&& bundle install --jobs 4 \
&& bundle exec rake setup_git default \
&& bundle exec nanoc compile -VV
# Move generated HTML to /site
RUN mkdir /site \
&& mv public "/site/${VER}"
# Do some HTML post-processing on the archive, compress images, and minify assets
RUN /source/scripts/normalize-links.sh /site "${VER}" \
&& /source/scripts/compress_images.sh /site "${VER}" \
&& /source/scripts/minify-assets.sh /site "${VER}" # ATTENTION: This should be the last script to run
# Make an index.html and 404.html which will redirect / to /${VER}/
RUN echo "<html><head><title>Redirect for ${VER}</title><meta http-equiv=\"refresh\" content=\"0;url='/${VER}/'\" /></head><body><p>If you are not redirected automatically, click <a href=\"/${VER}/\">here</a>.</p></body></html>" > /site/index.html \
&& echo "<html><head><title>Redirect for ${VER}</title><meta http-equiv=\"refresh\" content=\"0;url='/${VER}/'\" /></head><body><p>If you are not redirected automatically, click <a href=\"/${VER}/\">here</a>.</p></body></html>" > /site/404.html
#- End of builder build stage -#
#- Start of NGINX stage -#
#
# Copy the ending HTML files from the previous 'builder' stage and copy them
# to an NGINX Docker image.
#
FROM nginx:alpine
# Clean out any existing HTML files, and copy the HTML from the builder stage
# to the default location for Nginx.
RUN rm -rf /usr/share/nginx/html/*
COPY --from=builder /site /usr/share/nginx/html
# Copy the Nginx config
COPY dockerfiles/nginx-overrides.conf /etc/nginx/conf.d/default.conf
# Start Nginx to serve the archive at / (which will redirect to the version-specific dir)
CMD ["sh", "-c", "echo 'GitLab docs are viewable at: http://0.0.0.0:4000'; exec nginx -g 'daemon off;'"]
#- End of NGINX stage -#
|