From 33279e38ee66aa6579fed2b19c81b05e24805e97 Mon Sep 17 00:00:00 2001 From: karlosvas <126987511+karlosvas@users.noreply.github.com> Date: Sun, 12 Jan 2025 10:51:33 +0100 Subject: [PATCH] Github actions to create dist in server --- .github/workflows/build.yml | 77 +++++++++++++++++++++++++++++++++++++ .gitignore | 1 - client/.gitignore | 1 + client/vercel.json | 7 ---- server/.gitignore | 1 + server/package.json | 2 +- server/tsconfig.json | 2 +- server/vercel.json | 16 -------- vercel.json | 32 +++++++++++++++ 9 files changed, 113 insertions(+), 26 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 client/.gitignore delete mode 100644 client/vercel.json create mode 100644 server/.gitignore delete mode 100644 server/vercel.json create mode 100644 vercel.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..6b39c136 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,77 @@ +name: Build and Deploy +on: + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: "21.2.0" + + - name: Install dependencies + run: | + echo -e "\e[34mInstalling dependencies...\e[0m" + cd server + npm install + + - name: Build project + run: | + echo -e "\e[34mBuilding project...\e[0m" + cd server + npm run build + ls + if [ ! -d "public" ]; then + echo -e "\e[31mBuild failed: 'public' directory not found.\e[0m" + exit 1 + else + echo -e "\e[32mBuild succeeded.\e[0m" + fi + + - name: Upload build artifacts + uses: actions/upload-artifact@v3 + with: + name: public + path: server/public + + deploy: + runs-on: ubuntu-latest + needs: build + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Download build artifacts + uses: actions/download-artifact@v3 + with: + name: public + path: server/public/ + + - name: Deploy server to Vercel + run: | + cd server + npm install --g vercel@latest + vercel link --yes --project ${{ secrets.PROJECT_ID_SERVER }} --token=${{ secrets.VERCEL_TOKEN }} + vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} + vercel build --token=${{ secrets.VERCEL_TOKEN }} + vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }} + + - name: Deploy client to Vercel + run: | + echo -e "\e[34mDeploying client to Vercel...\e[0m" + npm install -g vercel + cd client + npm install + npm run build + vercel link --yes --project ${{ secrets.PROJECT_ID_CLIENT }} --token=${{ secrets.VERCEL_TOKEN }} + vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} + vercel build --token=${{ secrets.VERCEL_TOKEN }} + npx vercel --token ${{ secrets.VERCEL_TOKEN }} --yes diff --git a/.gitignore b/.gitignore index 907aa4c4..7d1bee05 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,6 @@ dev dist-ssr client/dist *.local -dist # Editor directories and files .vscode/* diff --git a/client/.gitignore b/client/.gitignore new file mode 100644 index 00000000..e985853e --- /dev/null +++ b/client/.gitignore @@ -0,0 +1 @@ +.vercel diff --git a/client/vercel.json b/client/vercel.json deleted file mode 100644 index 3cc3e4ea..00000000 --- a/client/vercel.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "rewrites": [ - { "source": "/robots.txt", "destination": "/public/robots.txt" }, - { "source": "/sitemap.xml", "destination": "/public/sitemap.xml" }, - { "source": "/(.*)", "destination": "/" } - ] -} diff --git a/server/.gitignore b/server/.gitignore new file mode 100644 index 00000000..e985853e --- /dev/null +++ b/server/.gitignore @@ -0,0 +1 @@ +.vercel diff --git a/server/package.json b/server/package.json index 8df370d0..3c1160ea 100644 --- a/server/package.json +++ b/server/package.json @@ -5,7 +5,7 @@ "main": "index.ts", "scripts": { "start": "npm run build && node dist/index.js", - "dev": "node --loader ts-node/esm src/index.js", + "dev": "node --loader ts-node/esm index.js", "test": "npm run build && playwright test", "build": "tsc" }, diff --git a/server/tsconfig.json b/server/tsconfig.json index 61df3bf8..d2dec51c 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -6,7 +6,7 @@ "rootDir": "./" /* Specify the root folder within your source files. */, "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, - "outDir": "dist" /* Specify an output folder for all emitted files. */, + "outDir": "public" /* Specify an output folder for all emitted files. */, "paths": { "types/*": ["types/*"] } /* Specify a set of entries that re-map imports to additional lookup locations. */, diff --git a/server/vercel.json b/server/vercel.json deleted file mode 100644 index 957d5ead..00000000 --- a/server/vercel.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "version": 2, - "builds": [ - { - "src": "package.json", - "use": "@vercel/node", - "config": { "distDir": "dist" } - } - ], - "routes": [ - { - "src": "/(.*)", - "dest": "/dist/index.js" - } - ] -} diff --git a/vercel.json b/vercel.json new file mode 100644 index 00000000..4ea93105 --- /dev/null +++ b/vercel.json @@ -0,0 +1,32 @@ +{ + "version": 2, + "builds": [ + { + "src": "server/package.json", + "use": "@vercel/node" + }, + { + "src": "client/package.json", + "use": "@vercel/static-build", + "config": { + "distDir": "build" + } + } + ], + "routes": [ + { + "src": "/api/(.*)", + "dest": "/server/$1" + }, + { + "src": "/(.*)", + "dest": "/client/$1" + } + ], + "rewrites": [ + { "source": "/robots.txt", "destination": "/public/robots.txt" }, + { "source": "/sitemap.xml", "destination": "/public/sitemap.xml" }, + { "source": "/api/(.*)", "destination": "/server/api/$1" }, + { "source": "/(.*)", "destination": "/client/$1" } + ] +}