-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathContainerfile
102 lines (90 loc) · 3.78 KB
/
Containerfile
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
#################################################
## Base Image
#################################################
FROM node:20-bullseye-slim AS base
WORKDIR /code
#################################################
## Dependencies Image
#################################################
FROM base AS deps
ARG BUILDARCH
# Install package manager, puppeteer dependencies (for inlining css), pnpm, and the aws cli (for uploading content to s3)
RUN apt update && \
apt install -y \
curl \
unzip \
groff \
fonts-liberation \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libcups2 \
libdrm2 \
libgbm1 \
libgtk-3-0 \
libnspr4 \
libnss3 \
libx11-xcb1 \
libxcomposite1 \
libxdamage1 \
libxrandr2 \
xdg-utils \
libu2f-udev \
libxshmfence1 \
libglu1-mesa \
chromium && \
curl "https://awscli.amazonaws.com/awscli-exe-linux-$( [ "$BUILDARCH" = "amd64" ] && echo "x86_64" || echo "aarch64").zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && \
./aws/install && \
apt-get clean autoclean && \
apt-get autoremove -y && \
rm -rf /var/lib/{apt,dpkg,cache,log}/ && \
npm i -g [email protected]
# Use the debian version of chrome
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
# Install Dependencies
COPY package.json pnpm-lock.yaml .npmrc pnpm-workspace.yaml .
COPY packages/website/package.json packages/website/
COPY packages/eslint/ packages/eslint/
RUN --mount=type=cache,id=pnpm,target=/code/.pnpm pnpm install --frozen-lockfile
#################################################
## Builder Image
#################################################
FROM deps AS builder
ARG ALGOLIA_APP_ID
ARG ALGOLIA_SEARCH_API_KEY
ARG ALGOLIA_INDEX_NAME
ARG SITE_URL
ENV NODE_ENV=production
WORKDIR /code/packages/website
COPY packages/website .
RUN mkdir /code/packages/website/dist
RUN --mount=type=cache,id=website-build,target=/code/packages/website/.cache \
ALGOLIA_APP_ID=${ALGOLIA_APP_ID} \
ALGOLIA_SEARCH_API_KEY=${ALGOLIA_SEARCH_API_KEY} \
ALGOLIA_INDEX_NAME=${ALGOLIA_INDEX_NAME} \
SITE_URL=${SITE_URL} \
NODE_OPTIONS=--max-old-space-size=8192 \
pnpm run build
RUN --mount=type=secret,id=AWS_ACCESS_KEY_ID,target=/run/secrets/AWS_ACCESS_KEY_ID \
--mount=type=secret,id=AWS_SECRET_ACCESS_KEY,target=/run/secrets/AWS_SECRET_ACCESS_KEY \
--mount=type=secret,id=AWS_SESSION_TOKEN,target=/run/secrets/AWS_SESSION_TOKEN \
AWS_ACCESS_KEY_ID=$(cat /run/secrets/AWS_ACCESS_KEY_ID) \
AWS_SECRET_ACCESS_KEY=$(cat /run/secrets/AWS_SECRET_ACCESS_KEY) \
AWS_SESSION_TOKEN=$(cat /run/secrets/AWS_SESSION_TOKEN) \
aws s3 sync ./dist/_astro s3://pf-website-astro/_astro --delete --cache-control "public,max-age=31536000,immutable"
RUN --mount=type=secret,id=AWS_ACCESS_KEY_ID,target=/run/secrets/AWS_ACCESS_KEY_ID \
--mount=type=secret,id=AWS_SECRET_ACCESS_KEY,target=/run/secrets/AWS_SECRET_ACCESS_KEY \
--mount=type=secret,id=AWS_SESSION_TOKEN,target=/run/secrets/AWS_SESSION_TOKEN \
AWS_ACCESS_KEY_ID=$(cat /run/secrets/AWS_ACCESS_KEY_ID) \
AWS_SECRET_ACCESS_KEY=$(cat /run/secrets/AWS_SECRET_ACCESS_KEY) \
AWS_SESSION_TOKEN=$(cat /run/secrets/AWS_SESSION_TOKEN) \
aws s3 sync ./dist/fonts s3://pf-website-astro/fonts --delete --cache-control "public,max-age=31536000,immutable"
RUN --mount=type=secret,id=AWS_ACCESS_KEY_ID,target=/run/secrets/AWS_ACCESS_KEY_ID \
--mount=type=secret,id=AWS_SECRET_ACCESS_KEY,target=/run/secrets/AWS_SECRET_ACCESS_KEY \
--mount=type=secret,id=AWS_SESSION_TOKEN,target=/run/secrets/AWS_SESSION_TOKEN \
AWS_ACCESS_KEY_ID=$(cat /run/secrets/AWS_ACCESS_KEY_ID) \
AWS_SECRET_ACCESS_KEY=$(cat /run/secrets/AWS_SECRET_ACCESS_KEY) \
AWS_SESSION_TOKEN=$(cat /run/secrets/AWS_SESSION_TOKEN) \
aws s3 sync ./dist s3://pf-website-astro --delete --exclude '_astro/*' --exclude 'fonts/*'