-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile.build
65 lines (51 loc) · 1.48 KB
/
Dockerfile.build
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
FROM node:21@sha256:b9ccc4aca32eebf124e0ca0fd573dacffba2b9236987a1d4d2625ce3c162ecc8 AS build
# via https://pnpm.io/docker
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
COPY package.json pnpm-lock.yaml /app/
WORKDIR /app
RUN \
--mount=type=cache,id=pnpm,target=/pnpm/store \
pnpm install --frozen-lockfile
# Pre-fixups
RUN <<EOS
#!/bin/bash
set -euxo pipefail
declare -rA LINKS=(
["../styles"]="/"
)
mkdir -p public
for TARGET in ${!LINKS[@]}; do
DEST=${LINKS[$TARGET]#/}
BASEDIR=${DEST%/*}
[ -n "$BASEDIR" ] && mkdir -p "public/$BASEDIR"
ln -s "$TARGET" "public/${DEST}"
done
EOS
RUN \
--mount=type=bind,source=astro,target=/app/astro \
--mount=type=bind,source=content,target=/app/content \
--mount=type=bind,source=lib,target=/app/lib \
--mount=type=bind,source=pages,target=/app/pages \
--mount=type=bind,source=styles,target=/app/styles \
--mount=type=bind,source=wasm,target=/app/wasm \
--mount=type=bind,source=./astro.config.ts,target=/app/astro.config.ts \
--mount=type=bind,source=./tsconfig.json,target=/app/tsconfig.json \
pnpm run astro build
# Post-fixups
RUN --mount=type=bind,source=wasm,target=/app/wasm <<EOS
#!/bin/bash
set -euxo pipefail
for WASM_FILE in dist/_astro/*.wasm ; do
BASE=${WASM_FILE##dist/_astro/}
HASH=${BASE%.wasm}
HASH=${HASH#*.}
NAME=${BASE%."${HASH}".wasm}
ORIG=${NAME}.wasm
[ -f "wasm/$ORIG.dwp" ] && \
cp "wasm/$ORIG.dwp" "dist/_astro/$NAME.$HASH.wasm.dwp"
done
EOS
FROM scratch
COPY --from=build /app/dist /