student life social platform
at main 212 lines 4.7 kB view raw
1ARG CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX=docker.io # override with git.inpt.fr/churros/dependency_proxy/containers, for example 2ARG REPOSITORY_URL=https://git.inpt.fr/churros/churros 3 4 5 6##### 7# Common builder 8##### 9 10 11FROM $CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX/node:20.18.3-alpine AS builder 12 13ARG TAG=dev 14 15WORKDIR /app 16 17RUN apk add --no-cache git patch 18 19# Yarn 20COPY .yarn/ /app/.yarn/ 21COPY .yarnrc.yml /app/ 22COPY yarn.lock /app/ 23 24# packages 25COPY package.json /app/ 26 27COPY CHANGELOG.md /app/CHANGELOG.md 28COPY .env.example /app/.env.example 29COPY .merge-drivers.yml /app/.merge-drivers.yml 30COPY .git /app/.git 31COPY packages/ /app/packages/ 32COPY scripts/ /app/scripts/ 33 34# Remove unused packages 35RUN rm -rf packages/mock-n7-ldap pack 36RUN rm -rf packages/oauth-client 37 38RUN if ! yarn install; then cat /tmp/xfs-*/build.log; exit 1; fi 39RUN yarn cp-env 40RUN yarn generate-buildinfo 41 42# Build arborist 43RUN yarn workspace arborist build 44 45 46##### 47# Package-specific builders 48##### 49 50 51FROM builder AS builder-api 52 53WORKDIR /app 54RUN apk add --update --no-cache openssl 55RUN yarn workspace @churros/api build 56 57FROM builder AS builder-app 58 59WORKDIR /app 60COPY packages/app/schema.graphql /app/packages/api/build/schema.graphql 61ENV NODE_OPTIONS="--max-old-space-size=4096" 62RUN --mount=type=secret,id=SENTRY_AUTH_TOKEN \ 63 SENTRY_AUTH_TOKEN=$(cat /run/secrets/SENTRY_AUTH_TOKEN || true) \ 64 yarn workspace @churros/app build 65 66FROM builder AS builder-sync 67 68WORKDIR /app 69RUN yarn workspace @churros/db generate 70RUN yarn workspace @churros/sync build 71 72 73 74#### 75# Runtime common base 76#### 77 78 79 80FROM $CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX/node:20.18.3-alpine AS base 81 82WORKDIR /app 83 84COPY yarn.lock /app/ 85COPY .yarnrc.yml /app/ 86COPY .yarn/ /app/.yarn/ 87COPY package.json /app/ 88 89# Builded arborist 90COPY --from=builder /app/packages/arborist/ /app/packages/arborist/ 91 92 93 94#### 95# Final images 96#### 97 98 99#### API 100 101 102FROM base AS api 103 104LABEL org.opencontainers.image.source=$REPOSITORY_URL/packages/api 105 106WORKDIR /app 107 108ENV NODE_ENV="production" 109 110RUN apk add --update --no-cache openssl git 111 112# Prisma 113COPY --from=builder-api /app/packages/db/prisma/ /app/packages/db/prisma/ 114COPY --from=builder-api /app/packages/db/src/ /app/packages/db/src/ 115COPY --from=builder-api /app/packages/db/package.json /app/packages/db/ 116 117# Builded api 118COPY --from=builder-api /app/packages/api/build/src/ /app/packages/api/build/src/ 119COPY --from=builder-api /app/packages/api/build/schema.graphql /app/packages/api/build/schema.graphql 120COPY --from=builder-api /app/packages/api/static/ /app/packages/api/static/ 121COPY --from=builder-api /app/packages/api/package.json /app/packages/api/ 122 123# Install dependencies 124RUN yarn workspaces focus @churros/api --production 125 126# Copy prisma client script 127COPY packages/api/prisma-client.sh /app/prisma-client.sh 128 129# Copy entrypoint 130COPY packages/api/entrypoint.sh /app/entrypoint.sh 131RUN chmod +x /app/entrypoint.sh 132 133ENTRYPOINT ["./entrypoint.sh"] 134 135 136### App 137 138 139FROM base AS app 140 141LABEL org.opencontainers.image.source=$REPOSITORY_URL/packages/app 142 143WORKDIR /app 144 145# Builded app 146ENV NODE_ENV="production" 147COPY --from=builder-app /app/packages/app/build/ /app/packages/app/build/ 148COPY --from=builder-app /app/packages/app/package.json /app/packages/app/ 149 150# Install dependencies 151RUN yarn workspaces focus @churros/app --production 152 153# Copy entrypoint 154COPY packages/app/entrypoint.sh /app/entrypoint.sh 155RUN chmod +x /app/entrypoint.sh 156 157ENTRYPOINT ["./entrypoint.sh"] 158 159 160### Sync 161 162 163FROM base AS sync 164 165LABEL org.opencontainers.image.source=$REPOSITORY_URL/packages/sync 166 167RUN apk add --update --no-cache openssl 168 169ENV NODE_ENV="production" 170COPY --from=builder-sync /app/packages/db/src/ /app/packages/db/src/ 171COPY --from=builder-sync /app/packages/db/package.json /app/packages/db/ 172 173COPY --from=builder-sync /app/packages/sync/build/src/ /app/packages/sync/build/src/ 174COPY --from=builder-sync /app/packages/sync/package.json /app/packages/sync/ 175 176RUN yarn workspaces focus @churros/sync --production 177 178WORKDIR /app 179 180ENTRYPOINT ["node", "packages/sync/build/src/index.js"] 181 182 183### Database 184 185 186FROM $CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX/node:20.18.3-alpine AS prisma 187 188LABEL org.opencontainers.image.source=$REPOSITORY_URL/packages/db 189 190RUN apk add --update --no-cache openssl 191 192WORKDIR /app 193COPY packages/db/prisma/ /app/packages/db/prisma/ 194COPY packages/db/prisma /app/prisma 195COPY packages/db/package.json /app/package.json 196COPY packages/db/entrypoint.sh /app/entrypoint.sh 197 198RUN chmod +x /app/entrypoint.sh 199 200RUN npm install -g corepack 201RUN yarn install 202 203ENTRYPOINT ["./entrypoint.sh"] 204 205 206##### 207# Artifacts 208##### 209 210FROM scratch as graphql-schema 211 212COPY --from=builder-api /app/packages/api/build/schema.graphql /schema.graphql