From fab3ebd35c6a16571c45439805dd619413a29856 Mon Sep 17 00:00:00 2001 From: Nevo David Date: Tue, 6 May 2025 20:16:50 +0700 Subject: [PATCH] feat: move to pnpm --- .dockerignore | 12 ++- Dockerfile.dev | 81 +++---------------- apps/backend/package.json | 2 +- apps/commands/package.json | 3 +- apps/cron/package.json | 3 +- apps/frontend/next.config.js | 3 + apps/frontend/package.json | 5 +- .../src/app/auth/return.url.component.tsx | 4 +- .../src/components/launches/editor.tsx | 4 - .../components/launches/helpers/use.values.ts | 1 + .../integration.redirect.component.tsx | 4 +- .../polonto/polonto.picture.generation.tsx | 30 +++---- .../components/layout/new.subscription.tsx | 4 +- apps/frontend/tailwind.config.js | 10 +-- apps/workers/package.json | 3 +- package.json | 38 ++++----- var/docker/entrypoint.sh | 51 +++--------- var/docker/supervisord/backend.conf | 9 --- var/docker/supervisord/cron.conf | 9 --- var/docker/supervisord/frontend.conf | 10 --- var/docker/supervisord/workers.conf | 9 --- 21 files changed, 88 insertions(+), 207 deletions(-) delete mode 100644 var/docker/supervisord/backend.conf delete mode 100644 var/docker/supervisord/cron.conf delete mode 100644 var/docker/supervisord/frontend.conf delete mode 100644 var/docker/supervisord/workers.conf diff --git a/.dockerignore b/.dockerignore index 7acfe507..d0ef2155 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,12 +2,22 @@ # any half-built stuff in the build context as a pre-caution (also saves copying # 180k files in node_modules that isn't used!). **/node_modules +node_modules/* +node_modules +docker-data/* dist .nx +/apps/frontend/.next +/apps/backend/dist +/apps/workers/dist +/apps/cron/dist +/apps/commands/dist .devcontainer **/.git -**/dist **/*.md **/LICENSE **/npm-debug.log **/*.vscode +.git +.github +reports \ No newline at end of file diff --git a/Dockerfile.dev b/Dockerfile.dev index 8e176612..e824fa69 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,78 +1,19 @@ -# This Dockerfile is used for producing 3 container images. -# -# base - which is thrown away, that contains node and the basic infrastructure. -# devcontainer - which is used for development, and contains the source code and the node_modules. -# dist - which is used for production, and contains the built source code and the node_modules. - -ARG NODE_VERSION="20.17" - -# Base image -FROM docker.io/node:${NODE_VERSION}-alpine3.19 AS base - -## Just reduce unccessary noise in the logs. -ENV NPM_CONFIG_UPDATE_NOTIFIER=false -ENV NEXT_TELEMETRY_DISABLED=1 - -RUN apk add --no-cache \ - caddy \ - bash=5.2.21-r0 \ - supervisor=4.2.5-r4 +FROM node:20-alpine3.19 +RUN apk add --no-cache g++ make py3-pip supervisor bash caddy +RUN npm --no-update-notifier --no-fund --global install pnpm@10.6.1 pm2 WORKDIR /app -EXPOSE 3000 -EXPOSE 4200 -EXPOSE 5000 - -COPY var/docker/entrypoint.sh /app/entrypoint.sh +COPY . /app COPY var/docker/supervisord.conf /etc/supervisord.conf -COPY var/docker/supervisord /app/supervisord_available_configs/ COPY var/docker/Caddyfile /app/Caddyfile -COPY .env.example /config/postiz.env +COPY var/docker/entrypoint.sh /app/entrypoint.sh +COPY var/docker/supervisord/caddy.conf /etc/supervisor.d/caddy.conf +RUN chmod +x /app/entrypoint.sh -VOLUME /config -VOLUME /uploads +RUN pnpm install +RUN pnpm run build -LABEL org.opencontainers.image.source=https://github.com/gitroomhq/postiz-app +EXPOSE 4200 -ENTRYPOINT ["/app/entrypoint.sh"] - -# Builder image -FROM base AS devcontainer - -RUN apk add --no-cache \ - pkgconfig \ - gcc \ - pixman-dev \ - cairo-dev \ - pango-dev \ - make \ - build-base - -COPY nx.json tsconfig.base.json package.json package-lock.json build.plugins.js /app/ -COPY apps /app/apps/ -COPY libraries /app/libraries/ - -RUN npm ci --no-fund && npx nx run-many --target=build --projects=frontend,backend,workers,cron - -VOLUME /config -VOLUME /uploads - -LABEL org.opencontainers.image.title="Postiz App (DevContainer)" - -# Output image -FROM base AS dist - -COPY --from=devcontainer /app/node_modules/ /app/node_modules/ -COPY --from=devcontainer /app/dist/ /app/dist/ - -# Required for prisma -COPY --from=devcontainer /app/libraries/ /app/libraries/ - -COPY package.json nx.json /app/ - -VOLUME /config -VOLUME /uploads - -## Labels at the bottom, because CI will eventually add dates, commit hashes, etc. -LABEL org.opencontainers.image.title="Postiz App (Production)" +CMD ["pnpm", "run", "pm2"] diff --git a/apps/backend/package.json b/apps/backend/package.json index 1498b335..d60484c3 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "dotenv -e ../../.env -- nest start --watch --entryFile=./apps/backend/src/main", "build": "NODE_ENV=production nest build", - "start": "node ./dist/apps/backend/src/main.js", + "start": "dotenv -e ../../.env -- node ./dist/apps/backend/src/main.js", "pm2": "pm2 start pnpm --name backend -- start" }, "keywords": [], diff --git a/apps/commands/package.json b/apps/commands/package.json index be23c408..390ad103 100644 --- a/apps/commands/package.json +++ b/apps/commands/package.json @@ -5,8 +5,7 @@ "scripts": { "dev": "dotenv -e ../../.env -- nest start --watch --entryFile=./apps/command/src/main", "build": "NODE_ENV=production nest build", - "start": "node ./dist/apps/command/src/main.js", - "pm2": "pm2 start pnpm --name command -- start" + "start": "node ./dist/apps/command/src/main.js" }, "keywords": [], "author": "", diff --git a/apps/cron/package.json b/apps/cron/package.json index b5c3fb5f..69a6f999 100644 --- a/apps/cron/package.json +++ b/apps/cron/package.json @@ -5,7 +5,8 @@ "scripts": { "dev": "dotenv -e ../../.env -- nest start --watch --entryFile=./apps/cron/src/main", "build": "NODE_ENV=production nest build", - "start": "node ./dist/apps/cron/src/main.js" + "start": "dotenv -e ../../.env -- node ./dist/apps/cron/src/main.js", + "pm2": "pm2 start pnpm --name cron -- start" }, "keywords": [], "author": "", diff --git a/apps/frontend/next.config.js b/apps/frontend/next.config.js index 23fbabe0..8244048e 100644 --- a/apps/frontend/next.config.js +++ b/apps/frontend/next.config.js @@ -1,3 +1,6 @@ +// @ts-check + +/** @type {import('next').NextConfig} */ const nextConfig = { experimental: { proxyTimeout: 90_000, diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 54053d54..219b42c5 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -2,11 +2,12 @@ "name": "postiz-frontend", "version": "1.0.0", "description": "", + "type": "module", "scripts": { "dev": "dotenv -e ../../.env -- next dev -p 4200", "build": "next build", - "start": "PORT=4200 next start", - "pm2": "PORT=4200 pm2 start pnpm --name frontend -- start" + "start": "dotenv -e ../../.env -- next start -p 4200", + "pm2": "pm2 start pnpm --name frontend -- start" }, "keywords": [], "author": "", diff --git a/apps/frontend/src/app/auth/return.url.component.tsx b/apps/frontend/src/app/auth/return.url.component.tsx index 9e0303a8..5df89330 100644 --- a/apps/frontend/src/app/auth/return.url.component.tsx +++ b/apps/frontend/src/app/auth/return.url.component.tsx @@ -1,8 +1,8 @@ 'use client'; import { useSearchParams } from 'next/navigation'; -import { useCallback, useEffect } from 'react'; +import { FC, useCallback, useEffect } from 'react'; -const ReturnUrlComponent = () => { +const ReturnUrlComponent: FC = () => { const params = useSearchParams(); const url = params.get('returnUrl'); useEffect(() => { diff --git a/apps/frontend/src/components/launches/editor.tsx b/apps/frontend/src/components/launches/editor.tsx index fe022144..3b07243a 100644 --- a/apps/frontend/src/components/launches/editor.tsx +++ b/apps/frontend/src/components/launches/editor.tsx @@ -17,16 +17,12 @@ export const Editor = forwardRef< RefMDEditor, MDEditorProps & { order: number; - currentWatching: string; - isGlobal: boolean; totalPosts: number; } >( ( props: MDEditorProps & { order: number; - currentWatching: string; - isGlobal: boolean; totalPosts: number; }, ref: React.ForwardedRef diff --git a/apps/frontend/src/components/launches/helpers/use.values.ts b/apps/frontend/src/components/launches/helpers/use.values.ts index 3b1e0492..ac358fec 100644 --- a/apps/frontend/src/components/launches/helpers/use.values.ts +++ b/apps/frontend/src/components/launches/helpers/use.values.ts @@ -44,6 +44,7 @@ export const useValues = ( return () => ({ ...form.getValues(), __type: identifier }); }, [form, integration]); + // @ts-ignore finalInformation[integration] = finalInformation[integration] || {}; finalInformation[integration].posts = value; finalInformation[integration].isValid = form.formState.isValid; diff --git a/apps/frontend/src/components/launches/integration.redirect.component.tsx b/apps/frontend/src/components/launches/integration.redirect.component.tsx index edc07883..07790949 100644 --- a/apps/frontend/src/components/launches/integration.redirect.component.tsx +++ b/apps/frontend/src/components/launches/integration.redirect.component.tsx @@ -3,12 +3,12 @@ import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc'; import timezone from 'dayjs/plugin/timezone'; import { usePathname, useRouter, useSearchParams } from 'next/navigation'; -import { useEffect } from 'react'; +import { FC, useEffect } from 'react'; dayjs.extend(utc); dayjs.extend(timezone); -export const IntegrationRedirectComponent = () => { +export const IntegrationRedirectComponent: FC = () => { const offset = dayjs.tz().utcOffset(); const pathname = usePathname(); const searchParams = useSearchParams(); diff --git a/apps/frontend/src/components/launches/polonto/polonto.picture.generation.tsx b/apps/frontend/src/components/launches/polonto/polonto.picture.generation.tsx index add5e6a5..3d899e52 100644 --- a/apps/frontend/src/components/launches/polonto/polonto.picture.generation.tsx +++ b/apps/frontend/src/components/launches/polonto/polonto.picture.generation.tsx @@ -2,8 +2,8 @@ import React, { useCallback } from 'react'; import { observer } from 'mobx-react-lite'; -// import { InputGroup } from '@blueprintjs/core'; -// import { Clean } from '@blueprintjs/icons'; +import { InputGroup } from '@blueprintjs/core'; +import { Clean } from '@blueprintjs/icons'; import { SectionTab } from 'polotno/side-panel'; import { getImageSize } from 'polotno/utils/image'; @@ -71,18 +71,18 @@ const GenerateTab = observer(({ store }: any) => {
Generate image with AI {data?.credits ? `(${data?.credits} left)` : ``}
- {/* {*/} - {/* if (e.key === 'Enter') {*/} - {/* handleGenerate();*/} - {/* }*/} - {/* }}*/} - {/* style={{*/} - {/* marginBottom: '20px',*/} - {/* }}*/} - {/* inputRef={inputRef}*/} - {/*/>*/} + { + if (e.key === 'Enter') { + handleGenerate(); + } + }} + style={{ + marginBottom: '20px', + }} + inputRef={inputRef} + />