blob: 5c864d3c16b2095fd0a058d226bac0e55828e066 (
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
|
#
# 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.
#
FROM ruby:3.2.1-alpine3.17 as builder
# Set versions as build args to fetch corresponding branches
ARG VER
ARG SEARCH_BACKEND
ARG NANOC_ENV
ENV CI_COMMIT_REF_NAME=$VER
ENV SEARCH_BACKEND=$SEARCH_BACKEND
ENV NANOC_ENV=$NANOC_ENV
#
# 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 \
minify \
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 \
&& bundle exec rake default \
&& bundle exec nanoc compile -VV
RUN if [ "$SEARCH_BACKEND" = "lunr" ]; then make build-lunr-index; fi
# Run post-processing on archive:
#
# 1. Normalize the links in /source/public using version $VER.
# 2. Compress images in /source/public.
# 3. Minify the files in /source/public into /dest, creating /dest/public. Must run last.
# 4. Rename /dest/public to /dest/$VER
RUN /source/scripts/normalize-links.sh /source/public $VER \
&& /source/scripts/compress_images.sh /source/public \
&& mkdir /dest \
&& /source/scripts/minify-assets.sh /dest /source/public \
&& mv /dest/public "/dest/${VER}"
# 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>" > /dest/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>" > /dest/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:stable-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 /dest /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 -#
|