The recipes.blue monorepo
recipes.blue
recipes
appview
atproto
1FROM oven/bun:1.3.3 AS base
2WORKDIR /app
3
4FROM base AS deps
5COPY package.json bun.lock ./
6COPY apps/api/package.json apps/api/package.json
7COPY apps/ingester/package.json apps/ingester/package.json
8COPY apps/web/package.json apps/web/package.json
9COPY libs/database/package.json libs/database/package.json
10COPY libs/lexicons/package.json libs/lexicons/package.json
11COPY libs/tsconfig/package.json libs/tsconfig/package.json
12
13RUN \
14 --mount=type=cache,target=/root/.bun/install/cache \
15 bun install \
16 --frozen-lockfile \
17 --filter '@cookware/api'
18
19FROM base AS build
20COPY --from=deps /app/node_modules ./node_modules/
21COPY . .
22
23RUN bun build /app/apps/api/src/index.ts \
24 --compile \
25 --minify \
26 --sourcemap \
27 --bytecode \
28 --outfile=/app/dist/api \
29 --target=bun \
30 --external '@libsql/*'
31
32FROM base AS libsql
33WORKDIR /app
34COPY bun.lock ./
35RUN LIBSQL_VERSION=$(grep -oP '"@libsql/client@\K[0-9.]+' bun.lock | head -1) && \
36 bun install @libsql/client@${LIBSQL_VERSION} --production
37
38FROM rockylinux/rockylinux:9.4-ubi AS run
39ENV NODE_PATH=/app/node_modules
40COPY --from=build /app/dist/api /app/api
41COPY --from=libsql /app/node_modules /app/node_modules
42ENTRYPOINT ["/app/api"]