forked from dart-lang/site-www
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
154 lines (123 loc) · 4.46 KB
/
Dockerfile
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
FROM ruby:3.2.3-slim-bookworm@sha256:97fccffe954d1e0c7fa6634020379417d67435a7f9a7c10b6ef3f49e498307e6 as base
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=US/Pacific
RUN apt update && apt install -yq --no-install-recommends \
build-essential \
ca-certificates \
curl \
git \
gnupg \
lsof \
make \
unzip \
&& rm -rf /var/lib/apt/lists/*
RUN echo "alias lla='ls -lAhG --color=auto'" >> ~/.bashrc
WORKDIR /root
# google-chrome-stable
# ============== DART ==============
# See https://github.com/dart-lang/dart-docker
# See https://github.com/dart-lang/setup-dart/blob/main/setup.sh
FROM base as dart
ARG DART_VERSION=latest
ARG DART_CHANNEL=stable
ENV DART_VERSION=$DART_VERSION
ENV DART_CHANNEL=$DART_CHANNEL
ENV DART_SDK=/usr/lib/dart
ENV PATH=$DART_SDK/bin:$PATH
RUN set -eu; \
case "$(dpkg --print-architecture)_${DART_CHANNEL}" in \
# BEGIN dart-sha
amd64_stable) \
DART_SHA256="e35e66f6cb5f511eb909fc27f9cebe81712925b6abd4494310003cdf26410ab1"; \
SDK_ARCH="x64";; \
arm64_stable) \
DART_SHA256="aa840a615e90fc26ca0ca348be8359b254a144cff6a0e2c3f7eb361ed9aef393"; \
SDK_ARCH="arm64";; \
amd64_beta) \
DART_SHA256="a7ed5168acabce7cfb292de210d5fedb33a481548470a6e8142b20946ca81cfb"; \
SDK_ARCH="x64";; \
arm64_beta) \
DART_SHA256="e9516c29f1261dd985685a0d1e68ec85c531795e6aed6d7da72604a9a978e9b9"; \
SDK_ARCH="arm64";; \
amd64_dev) \
DART_SHA256="6f43abe4c8ad3a82b4048c80fe71edff99aeb5497af4a13f66c31170db311ab6"; \
SDK_ARCH="x64";; \
arm64_dev) \
DART_SHA256="69493b600f1338bd955b24446143a8c9426784d8ea2b779a3450d65034cbebfc"; \
SDK_ARCH="arm64";; \
# END dart-sha
esac; \
SDK="dartsdk-linux-${SDK_ARCH}-release.zip"; \
BASEURL="https://storage.googleapis.com/dart-archive/channels"; \
URL="$BASEURL/$DART_CHANNEL/release/$DART_VERSION/sdk/$SDK"; \
curl -fsSLO "$URL"; \
unzip "$SDK" > /dev/null && mv dart-sdk "$DART_SDK" && rm "$SDK";
ENV PUB_CACHE="${HOME}/.pub-cache"
RUN dart --disable-analytics
RUN echo -e "Successfully installed Dart SDK:" && dart --version
# ============== NODEJS INSTALL ==============
FROM dart as node
RUN mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \
&& apt-get update -yq \
&& apt-get install nodejs -yq \
&& npm install -g npm # Ensure latest npm
# ============== DEV/JEKYLL SETUP ==============
FROM node as dev
WORKDIR /app
ENV JEKYLL_ENV=development
ENV RUBY_YJIT_ENABLE=1
COPY Gemfile Gemfile.lock ./
RUN gem update --system && gem install bundler
RUN BUNDLE_WITHOUT="test production" bundle install --jobs=4 --retry=2
ENV NODE_ENV=development
COPY package.json package-lock.json ./
RUN npm install -g firebase-tools@13.0.2
RUN npm install
COPY ./ ./
# Ensure packages are still up-to-date if anything has changed
# RUN dart pub get --offline
RUN dart pub get
# Let's not play "which dir is this"
ENV BASE_DIR=/app
ENV TOOL_DIR=$BASE_DIR/tool
# Jekyl
EXPOSE 4000
EXPOSE 35729
# Firebase emulator port
# Airplay runs on :5000 by default now
EXPOSE 5500
# re-enable defult in case we want to test packages
ENV DEBIAN_FRONTEND=dialog
# ============== FIREBASE EMULATE ==============
FROM dev as emulate
RUN bundle exec jekyll build --config _config.yml,_config_test.yml
CMD ["make", "emulate"]
# ============== BUILD PROD JEKYLL SITE ==============
FROM node AS build
WORKDIR /app
ENV JEKYLL_ENV=production
ENV RUBY_YJIT_ENABLE=1
COPY Gemfile Gemfile.lock ./
RUN gem update --system && gem install bundler
RUN BUNDLE_WITHOUT="test development" bundle install --jobs=4 --retry=2 --quiet
ENV NODE_ENV=production
COPY package.json package-lock.json ./
RUN npm install
COPY ./ ./
RUN dart pub get
ENV BASE_DIR=/app
ENV TOOL_DIR=$BASE_DIR/tool
ARG BUILD_CONFIGS=_config.yml
ENV BUILD_CONFIGS=$BUILD_CONFIGS
RUN bundle exec jekyll build --config $BUILD_CONFIGS
# ============== DEPLOY to FIREBASE ==============
FROM build as deploy
RUN npm install -g firebase-tools@13.0.2
ARG FIREBASE_TOKEN
ENV FIREBASE_TOKEN=$FIREBASE_TOKEN
ARG FIREBASE_PROJECT=default
ENV FIREBASE_PROJECT=$FIREBASE_PROJECT
RUN [[ -z "$FIREBASE_TOKEN" ]] && echo "FIREBASE_TOKEN is required for container deploy!"
RUN make deploy-ci