# Introduction This PR contains a big test file and few snapshots Related to https://github.com/twentyhq/core-team-issues/issues/487 ## New env var `APP_VERSION` Now will be injected directly in a built docker image the twenty's built version. Inferred from the build git tag name. Which mean on main or other `not a tag version` built APP_VERSION will be `null` ## New upgrade-commander-runner Refactored the upgrade command to be more strict regarding: - Version management - Sync metadata command always run - Added failing workspaces aggregator + logs on cleanup From now on the `upgrade` command will compare the `WORKSPACE_VERSION` to the `APP_VERSION` in order to bypass any workspace version != than the upgrade version `fromVersion` ## Existing commands Note that the version validation will be done only when passing by the `upgrade` command. Which means that running the following command `upgrade:x.y-some-specific-command` won't result in workspace version mutation This is to enforce that all an upgrade commands + sync-metadata has been run on a workspace ## Will do in other PR but related ### New workspace New workspace will now be inserted with version equal to the APP_VERSION they've been created by ### Old workspace Will create a command that should be ran outside of any `upgrade-runner` extending command, the command will have to be ran on every workspace before making the next release upgrade This command iterates over any active and suspended workspace that has `version` to `NULL` in order to update it `APP_VERSION` -1 minor ### SENTRY_RELEASE - Either deprecate SENTRY_RELEASE in favor of `APP_VERSION` => What about main with null version ? or create a new env var that would be `APP_COMMIT_SHA` instead of SENTRY third party ref ### Update CD to inject APP_VERSION from branch name ### Update docs and release logs Adding documentation for `APP_VERSION` ## Related PRs: https://github.com/twentyhq/twenty-infra/pull/181
88 lines
3.1 KiB
Docker
88 lines
3.1 KiB
Docker
# Base image for common dependencies
|
|
FROM node:18.17.1-alpine as common-deps
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy only the necessary files for dependency resolution
|
|
COPY ./package.json ./yarn.lock ./.yarnrc.yml ./tsconfig.base.json ./nx.json /app/
|
|
COPY ./.yarn/releases /app/.yarn/releases
|
|
|
|
COPY ./packages/twenty-emails/package.json /app/packages/twenty-emails/
|
|
COPY ./packages/twenty-server/package.json /app/packages/twenty-server/
|
|
COPY ./packages/twenty-server/patches /app/packages/twenty-server/patches
|
|
COPY ./packages/twenty-ui/package.json /app/packages/twenty-ui/
|
|
COPY ./packages/twenty-shared/package.json /app/packages/twenty-shared/
|
|
COPY ./packages/twenty-front/package.json /app/packages/twenty-front/
|
|
|
|
# Install all dependencies
|
|
RUN yarn && yarn cache clean && npx nx reset
|
|
|
|
|
|
# Build the back
|
|
FROM common-deps as twenty-server-build
|
|
|
|
# Copy sourcecode after installing dependences to accelerate subsequents builds
|
|
COPY ./packages/twenty-emails /app/packages/twenty-emails
|
|
COPY ./packages/twenty-shared /app/packages/twenty-shared
|
|
COPY ./packages/twenty-server /app/packages/twenty-server
|
|
|
|
RUN npx nx run twenty-server:build
|
|
RUN mv /app/packages/twenty-server/dist /app/packages/twenty-server/build
|
|
RUN npx nx run twenty-server:build:packageJson
|
|
RUN mv /app/packages/twenty-server/dist/package.json /app/packages/twenty-server/package.json
|
|
RUN rm -rf /app/packages/twenty-server/dist
|
|
RUN mv /app/packages/twenty-server/build /app/packages/twenty-server/dist
|
|
|
|
RUN yarn workspaces focus --production twenty-emails twenty-shared twenty-server
|
|
|
|
|
|
# Build the front
|
|
FROM common-deps as twenty-front-build
|
|
|
|
ARG REACT_APP_SERVER_BASE_URL
|
|
|
|
COPY ./packages/twenty-front /app/packages/twenty-front
|
|
COPY ./packages/twenty-ui /app/packages/twenty-ui
|
|
COPY ./packages/twenty-shared /app/packages/twenty-shared
|
|
RUN npx nx build twenty-front
|
|
|
|
|
|
# Final stage: Run the application
|
|
FROM node:18.17.1-alpine as twenty
|
|
|
|
# Used to run healthcheck in docker
|
|
RUN apk add --no-cache curl jq
|
|
|
|
RUN npm install -g tsx
|
|
|
|
RUN apk add --no-cache postgresql-client
|
|
|
|
COPY ./packages/twenty-docker/twenty/entrypoint.sh /app/entrypoint.sh
|
|
RUN chmod +x /app/entrypoint.sh
|
|
WORKDIR /app/packages/twenty-server
|
|
|
|
ARG REACT_APP_SERVER_BASE_URL
|
|
ENV REACT_APP_SERVER_BASE_URL $REACT_APP_SERVER_BASE_URL
|
|
ARG SENTRY_RELEASE
|
|
ENV SENTRY_RELEASE $SENTRY_RELEASE
|
|
|
|
ARG APP_VERSION
|
|
|
|
# Copy built applications from previous stages
|
|
COPY --chown=1000 --from=twenty-server-build /app /app
|
|
COPY --chown=1000 --from=twenty-server-build /app/packages/twenty-server /app/packages/twenty-server
|
|
COPY --chown=1000 --from=twenty-front-build /app/packages/twenty-front/build /app/packages/twenty-server/dist/front
|
|
|
|
# Set metadata and labels
|
|
LABEL org.opencontainers.image.source=https://github.com/twentyhq/twenty
|
|
LABEL org.opencontainers.image.description="This image provides a consistent and reproducible environment for the backend and frontend, ensuring it deploys faster and runs the same way regardless of the deployment environment."
|
|
|
|
RUN mkdir /app/.local-storage
|
|
RUN chown -R 1000 /app
|
|
|
|
# Use non root user with uid 1000
|
|
USER 1000
|
|
|
|
CMD ["node", "dist/src/main"]
|
|
ENTRYPOINT ["/app/entrypoint.sh"]
|