From 441ab575fa84037d4121a72ab3a25ea01162c3d5 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Tue, 23 Jul 2024 11:56:24 +0100 Subject: [PATCH 01/26] refactor: Update Dockerfile to remove unnecessary code and comments --- proxy/Dockerfile | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/proxy/Dockerfile b/proxy/Dockerfile index 846ef67c9..49ab0700b 100644 --- a/proxy/Dockerfile +++ b/proxy/Dockerfile @@ -8,19 +8,19 @@ COPY app/client-v2 /app ENV BUILD_TARGET docker RUN npm install && npm run build -FROM nginx:stable +# FROM nginx:stable -# Clear out existing configuration -RUN rm /etc/nginx/conf.d/default.conf -RUN rm /usr/share/nginx/html -rf +# # Clear out existing configuration +# RUN rm /etc/nginx/conf.d/default.conf +# RUN rm /usr/share/nginx/html -rf -VOLUME /var/log/nginx -VOLUME /run/proxy +# VOLUME /var/log/nginx +# VOLUME /run/proxy -COPY proxy/nginx.conf.template /etc/nginx/nginx.conf.template -COPY proxy/bin /usr/local/bin -COPY proxy/ssl/dhparam.pem /run/proxy/dhparam.pem +# COPY proxy/nginx.conf.template /etc/nginx/nginx.conf.template +# COPY proxy/bin /usr/local/bin +# COPY proxy/ssl/dhparam.pem /run/proxy/dhparam.pem -COPY --from=0 /app/dist /usr/share/nginx/html +# COPY --from=0 /app/dist /usr/share/nginx/html -ENTRYPOINT ["/usr/local/bin/reverse-proxy"] +# ENTRYPOINT ["/usr/local/bin/reverse-proxy"] From eb18aa4ba77dbd4e9ff5afa67e86ba55887bfe0c Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Tue, 23 Jul 2024 13:46:17 +0100 Subject: [PATCH 02/26] refactor: Update Dockerfile to include npm serve for serving the built app --- proxy/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/proxy/Dockerfile b/proxy/Dockerfile index 49ab0700b..33ce7abdd 100644 --- a/proxy/Dockerfile +++ b/proxy/Dockerfile @@ -8,6 +8,8 @@ COPY app/client-v2 /app ENV BUILD_TARGET docker RUN npm install && npm run build +RUN npm install -g serve +CMD ["serve", "-s", "dist"] # FROM nginx:stable # # Clear out existing configuration From 56d5c517ae2536d873019d7af8129ed8b0b03007 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Tue, 23 Jul 2024 13:50:29 +0100 Subject: [PATCH 03/26] refactor: Update Dockerfile to include npm serve and expose port 3000 for serving the built app --- proxy/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/proxy/Dockerfile b/proxy/Dockerfile index 33ce7abdd..9dd2cc76f 100644 --- a/proxy/Dockerfile +++ b/proxy/Dockerfile @@ -9,6 +9,7 @@ ENV BUILD_TARGET docker RUN npm install && npm run build RUN npm install -g serve +EXPOSE 3000 CMD ["serve", "-s", "dist"] # FROM nginx:stable From 6a4041fc43e7bbc176fc545ce7ba1be449cabe52 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 08:22:41 +0100 Subject: [PATCH 04/26] chore: Update environment variable configuration --- app/server/src/index.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/server/src/index.ts b/app/server/src/index.ts index fb3b5cd3d..5818d61f6 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -20,7 +20,22 @@ if (!fs.existsSync(filename)) { } const configText = fs.readFileSync(filename, { encoding: "utf-8" }); -const config = JSON.parse(configText); +// const config = JSON.parse(configText); +dotenv.config(); + +const config = { + server_port: process.env.PORT || 4000, + api_url: process.env.API_URL || "http://localhost:5000", + client_url: process.env.CLIENT_URL || "http://localhost:5173", + server_url: process.env.SERVER_URL || "http://localhost:4000", + redis_url: process.env.REDIS_URL || "redis://localhost:6379", + GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, + GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, + SESSION_SECRET: process.env.SESSION_SECRET || "beebop-is-great", + GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID, + GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, +}; + if (!fs.existsSync(filename)) { throw new Error(`File ${configPath} does not exist`); } From 9caecc4969a1983b0a09774de1b422ece8b49753 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 08:23:07 +0100 Subject: [PATCH 05/26] refactor: Update SESSION_SECRET configuration --- app/server/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/server/src/index.ts b/app/server/src/index.ts index 5818d61f6..fec23ae08 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -31,7 +31,7 @@ const config = { redis_url: process.env.REDIS_URL || "redis://localhost:6379", GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, - SESSION_SECRET: process.env.SESSION_SECRET || "beebop-is-great", + SESSION_SECRET: process.env.SESSION_SECRET, GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, }; From c5a8a2e84fcc476175f0e4465dc83e2c6057c83c Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 08:25:10 +0100 Subject: [PATCH 06/26] chore: Update environment variable configuration --- app/server/src/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/server/src/index.ts b/app/server/src/index.ts index fec23ae08..b09685038 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -24,11 +24,11 @@ const configText = fs.readFileSync(filename, { encoding: "utf-8" }); dotenv.config(); const config = { - server_port: process.env.PORT || 4000, - api_url: process.env.API_URL || "http://localhost:5000", - client_url: process.env.CLIENT_URL || "http://localhost:5173", - server_url: process.env.SERVER_URL || "http://localhost:4000", - redis_url: process.env.REDIS_URL || "redis://localhost:6379", + server_port: process.env.PORT, + api_url: process.env.API_URL, + client_url: process.env.CLIENT_URL, + server_url: process.env.SERVER_URL, + redis_url: process.env.REDIS_URL, GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, SESSION_SECRET: process.env.SESSION_SECRET, From cb0e1abeebb8fececbe8951be7676d62e7b5a764 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 08:25:44 +0100 Subject: [PATCH 07/26] refactor: Remove unused code and comments from environment variable configuration --- app/server/src/index.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/app/server/src/index.ts b/app/server/src/index.ts index b09685038..127bc8b4f 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -23,19 +23,6 @@ const configText = fs.readFileSync(filename, { encoding: "utf-8" }); // const config = JSON.parse(configText); dotenv.config(); -const config = { - server_port: process.env.PORT, - api_url: process.env.API_URL, - client_url: process.env.CLIENT_URL, - server_url: process.env.SERVER_URL, - redis_url: process.env.REDIS_URL, - GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, - GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, - SESSION_SECRET: process.env.SESSION_SECRET, - GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID, - GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, -}; - if (!fs.existsSync(filename)) { throw new Error(`File ${configPath} does not exist`); } From 73e7848edaf33784c2ccbca32bd74e8db274ccba Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 08:25:59 +0100 Subject: [PATCH 08/26] refactor: Remove unused code and comments from environment variable configuration --- app/server/src/index.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/server/src/index.ts b/app/server/src/index.ts index 127bc8b4f..641b59343 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -23,6 +23,19 @@ const configText = fs.readFileSync(filename, { encoding: "utf-8" }); // const config = JSON.parse(configText); dotenv.config(); +// const config = { +// server_port: process.env.PORT, +// api_url: process.env.API_URL, +// client_url: process.env.CLIENT_URL, +// server_url: process.env.SERVER_URL, +// redis_url: process.env.REDIS_URL, +// GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, +// GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, +// SESSION_SECRET: process.env.SESSION_SECRET, +// GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID, +// GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, +// }; + if (!fs.existsSync(filename)) { throw new Error(`File ${configPath} does not exist`); } From 7be7eb60bc9bfdb708787c67b6df865c72c3f5d9 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 08:26:05 +0100 Subject: [PATCH 09/26] refactor: Remove unused code and comments from environment variable configuration --- app/server/src/index.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/app/server/src/index.ts b/app/server/src/index.ts index 641b59343..127bc8b4f 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -23,19 +23,6 @@ const configText = fs.readFileSync(filename, { encoding: "utf-8" }); // const config = JSON.parse(configText); dotenv.config(); -// const config = { -// server_port: process.env.PORT, -// api_url: process.env.API_URL, -// client_url: process.env.CLIENT_URL, -// server_url: process.env.SERVER_URL, -// redis_url: process.env.REDIS_URL, -// GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, -// GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, -// SESSION_SECRET: process.env.SESSION_SECRET, -// GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID, -// GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, -// }; - if (!fs.existsSync(filename)) { throw new Error(`File ${configPath} does not exist`); } From 4f9f2b25b8670b092dbeeae62224af2c877fefe0 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 08:26:35 +0100 Subject: [PATCH 10/26] refactor: Update environment variable configuration --- app/server/src/index.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/server/src/index.ts b/app/server/src/index.ts index 127bc8b4f..b09685038 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -23,6 +23,19 @@ const configText = fs.readFileSync(filename, { encoding: "utf-8" }); // const config = JSON.parse(configText); dotenv.config(); +const config = { + server_port: process.env.PORT, + api_url: process.env.API_URL, + client_url: process.env.CLIENT_URL, + server_url: process.env.SERVER_URL, + redis_url: process.env.REDIS_URL, + GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, + GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, + SESSION_SECRET: process.env.SESSION_SECRET, + GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID, + GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, +}; + if (!fs.existsSync(filename)) { throw new Error(`File ${configPath} does not exist`); } From c86db5665227b1c26b17db2f896bc8da1747c59c Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 08:27:37 +0100 Subject: [PATCH 11/26] refactor: Remove unused code and comments from environment variable configuration --- app/server/src/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/server/src/index.ts b/app/server/src/index.ts index b09685038..80a7bbf34 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -29,8 +29,7 @@ const config = { client_url: process.env.CLIENT_URL, server_url: process.env.SERVER_URL, redis_url: process.env.REDIS_URL, - GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, - GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, + SESSION_SECRET: process.env.SESSION_SECRET, GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, From 40ddccc57097e6f963e0a788e18780f94f8f3ae0 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 08:48:24 +0100 Subject: [PATCH 12/26] chore: Update environment variable configuration --- app/server/.gitignore | 1 + app/server/src/index.ts | 44 +++++++++++++++++++++-------------------- package-lock.json | 12 +++++++++++ package.json | 1 + 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/app/server/.gitignore b/app/server/.gitignore index bd07d4e1b..a690fca41 100644 --- a/app/server/.gitignore +++ b/app/server/.gitignore @@ -1,2 +1,3 @@ node_modules /dist +.env \ No newline at end of file diff --git a/app/server/src/index.ts b/app/server/src/index.ts index 80a7bbf34..a7460cd03 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -1,22 +1,24 @@ import express from "express"; -import MockStrategy from 'passport-mock-strategy'; -import passport from 'passport'; +import MockStrategy from "passport-mock-strategy"; +import passport from "passport"; -import { configureApp } from './configureApp'; -import { router } from './routes/routes'; +import { configureApp } from "./configureApp"; +import { router } from "./routes/routes"; import fs from "fs"; import path from "path"; import configPath from "./args"; import { redisConnection } from "./db/redis"; -import {initialiseLogging} from "./logging"; -import {handleError} from "./errors/handleError"; +import { initialiseLogging } from "./logging"; +import { handleError } from "./errors/handleError"; +import dotenv from "dotenv"; +dotenv.config(); const filename = path.join(configPath, "config.json"); if (!fs.existsSync(filename)) { - throw new Error(`File ${configPath} does not exist`); + throw new Error(`File ${configPath} does not exist`); } const configText = fs.readFileSync(filename, { encoding: "utf-8" }); @@ -24,19 +26,20 @@ const configText = fs.readFileSync(filename, { encoding: "utf-8" }); dotenv.config(); const config = { - server_port: process.env.PORT, - api_url: process.env.API_URL, - client_url: process.env.CLIENT_URL, - server_url: process.env.SERVER_URL, - redis_url: process.env.REDIS_URL, - + server_port: process.env.PORT || 4000, + api_url: process.env.API_URL || "http://localhost:5000", + client_url: process.env.CLIENT_URL || "http://localhost:5173", + server_url: process.env.SERVER_URL || "http://localhost:4000", + redis_url: process.env.REDIS_URL || "redis://localhost:6379", + GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, + GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, SESSION_SECRET: process.env.SESSION_SECRET, GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, }; if (!fs.existsSync(filename)) { - throw new Error(`File ${configPath} does not exist`); + throw new Error(`File ${configPath} does not exist`); } const app = express(); initialiseLogging(app); @@ -47,20 +50,19 @@ router(app, config); if (process.env.BEEBOP_TEST === "true") { passport.use(new MockStrategy()); - app.get('/login/mock', passport.authenticate('mock'), (req, res) => { - res.send({ status: 'ok' }); + app.get("/login/mock", passport.authenticate("mock"), (req, res) => { + res.send({ status: "ok" }); }); } - + const port = process.env.PORT || config.server_port; app.listen(port, () => { console.log(`listening on ${port}`); }); -const redis = redisConnection( - config.redis_url, - () => { throw Error(`Failed to connect to redis server ${config.redis_url}`); } -); +const redis = redisConnection(config.redis_url, () => { + throw Error(`Failed to connect to redis server ${config.redis_url}`); +}); app.locals.redis = redis; app.use(handleError); diff --git a/package-lock.json b/package-lock.json index 279b0121c..6d2efcb2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "packages": { "": { "dependencies": { + "dotenv": "^16.4.5", "pm2": "^5.4.2" } }, @@ -364,6 +365,17 @@ "node": ">= 14" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", diff --git a/package.json b/package.json index 2d52aed8a..2cf5ff2c2 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "dependencies": { + "dotenv": "^16.4.5", "pm2": "^5.4.2" } } From 795b7a7c01b425fdda962a1b16f84e32b62769a9 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 09:51:08 +0100 Subject: [PATCH 13/26] refactor: Update dotenv configuration to use .env.development file --- app/server/.env.development | 10 ++++++++++ app/server/src/index.ts | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 app/server/.env.development diff --git a/app/server/.env.development b/app/server/.env.development new file mode 100644 index 000000000..782b69275 --- /dev/null +++ b/app/server/.env.development @@ -0,0 +1,10 @@ +SERVER_PORT=4000 +API_URL=http://localhost:5000 +CLIENT_URL=http://localhost:5173 +SERVER_URL=http://localhost:4000 +REDIS_URL=redis://localhost:6379 +GOOGLE_CLIENT_ID=305786403888-u41f860jqrn0pt2fhmmecv0im18c8te0.apps.googleusercontent.com +GOOGLE_CLIENT_SECRET=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 +SESSION_SECRET=beebop-is-great +GITHUB_CLIENT_ID=6faae102e0cf9eafd34b +GITHUB_CLIENT_SECRET=06a34af335b8f3197da25016d90ef98a85112727 \ No newline at end of file diff --git a/app/server/src/index.ts b/app/server/src/index.ts index a7460cd03..7a0562794 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -23,7 +23,7 @@ if (!fs.existsSync(filename)) { const configText = fs.readFileSync(filename, { encoding: "utf-8" }); // const config = JSON.parse(configText); -dotenv.config(); +dotenv.config({ path: ".env.development" }); const config = { server_port: process.env.PORT || 4000, From b448c1114217cae80dbc715903a7939de9d36b5a Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 10:01:19 +0100 Subject: [PATCH 14/26] refactor: Update dotenv dependency to version 16.4.5 --- app/server/package-lock.json | 17 +++++++++++++++++ app/server/package.json | 1 + 2 files changed, 18 insertions(+) diff --git a/app/server/package-lock.json b/app/server/package-lock.json index 47d852e5d..f7b926b6a 100644 --- a/app/server/package-lock.json +++ b/app/server/package-lock.json @@ -16,6 +16,7 @@ "axios-mock-adapter": "^1.20.0", "body-parser": "^1.19.2", "cors": "^2.8.5", + "dotenv": "^16.4.5", "express": "^4.17.3", "express-session": "^1.17.2", "ioredis": "^5.2.4", @@ -5542,6 +5543,17 @@ "node": ">=8" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/download": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", @@ -18152,6 +18164,11 @@ } } }, + "dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" + }, "download": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", diff --git a/app/server/package.json b/app/server/package.json index 0d4d6844e..871c22da4 100644 --- a/app/server/package.json +++ b/app/server/package.json @@ -21,6 +21,7 @@ "axios-mock-adapter": "^1.20.0", "body-parser": "^1.19.2", "cors": "^2.8.5", + "dotenv": "^16.4.5", "express": "^4.17.3", "express-session": "^1.17.2", "ioredis": "^5.2.4", From c33d37782bccf463a9819cc5aa3e0ea030a2a0c5 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 24 Jul 2024 12:00:05 +0100 Subject: [PATCH 15/26] refactor: Remove commented out code and unnecessary sleep in entrypoint.sh --- app/server/docker/entrypoint.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/server/docker/entrypoint.sh b/app/server/docker/entrypoint.sh index bc7e2b752..53affa04b 100755 --- a/app/server/docker/entrypoint.sh +++ b/app/server/docker/entrypoint.sh @@ -2,9 +2,9 @@ set -eu PATH_CONFIG=/app/src/resources/config.json -echo "Waiting for config at $PATH_CONFIG" -while [ ! -e $PATH_CONFIG ]; do - sleep 1 -done +# echo "Waiting for config at $PATH_CONFIG" +# while [ ! -e $PATH_CONFIG ]; do +# sleep 1 +# done ts-node --transpile-only src/index.ts --config src/resources From 3fda0c8971609cc85a0aacf16bcf788d11e77c78 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Tue, 3 Sep 2024 08:28:31 +0100 Subject: [PATCH 16/26] refactor: Remove commented out code and unnecessary sleep in entrypoint.sh --- app/server/src/index.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/server/src/index.ts b/app/server/src/index.ts index 7a0562794..aaceffaf0 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -15,13 +15,13 @@ import { handleError } from "./errors/handleError"; import dotenv from "dotenv"; dotenv.config(); -const filename = path.join(configPath, "config.json"); +// const filename = path.join(configPath, "config.json"); -if (!fs.existsSync(filename)) { - throw new Error(`File ${configPath} does not exist`); -} +// if (!fs.existsSync(filename)) { +// throw new Error(`File ${configPath} does not exist`); +// } -const configText = fs.readFileSync(filename, { encoding: "utf-8" }); +// const configText = fs.readFileSync(filename, { encoding: "utf-8" }); // const config = JSON.parse(configText); dotenv.config({ path: ".env.development" }); @@ -38,9 +38,9 @@ const config = { GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, }; -if (!fs.existsSync(filename)) { - throw new Error(`File ${configPath} does not exist`); -} +// if (!fs.existsSync(filename)) { +// throw new Error(`File ${configPath} does not exist`); +// } const app = express(); initialiseLogging(app); From 9737f550399650e63137e528688d0a5aceb64c71 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Tue, 3 Sep 2024 14:22:46 +0100 Subject: [PATCH 17/26] refactor: Remove unnecessary code and comments in entrypoint.sh and environment variable configuration --- app/server/docker/entrypoint.sh | 8 +----- app/server/src/index.ts | 22 +++------------ .../src/resources/config.json.in.development | 12 --------- .../src/resources/config.json.in.docker | 12 --------- .../src/resources/config.json.in.production | 12 --------- buildkite/pipeline.yml | 5 ---- proxy/Dockerfile | 15 ----------- scripts/docker_smoke_test | 27 ------------------- 8 files changed, 4 insertions(+), 109 deletions(-) delete mode 100644 app/server/src/resources/config.json.in.development delete mode 100644 app/server/src/resources/config.json.in.docker delete mode 100644 app/server/src/resources/config.json.in.production delete mode 100755 scripts/docker_smoke_test diff --git a/app/server/docker/entrypoint.sh b/app/server/docker/entrypoint.sh index 53affa04b..62d6d3d70 100755 --- a/app/server/docker/entrypoint.sh +++ b/app/server/docker/entrypoint.sh @@ -1,10 +1,4 @@ #!/usr/bin/env bash set -eu -PATH_CONFIG=/app/src/resources/config.json -# echo "Waiting for config at $PATH_CONFIG" -# while [ ! -e $PATH_CONFIG ]; do -# sleep 1 -# done - -ts-node --transpile-only src/index.ts --config src/resources +ts-node --transpile-only src/index.ts diff --git a/app/server/src/index.ts b/app/server/src/index.ts index aaceffaf0..da24ccbc5 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -1,28 +1,15 @@ import express from "express"; -import MockStrategy from "passport-mock-strategy"; import passport from "passport"; +import MockStrategy from "passport-mock-strategy"; import { configureApp } from "./configureApp"; import { router } from "./routes/routes"; -import fs from "fs"; -import path from "path"; - -import configPath from "./args"; +import dotenv from "dotenv"; import { redisConnection } from "./db/redis"; -import { initialiseLogging } from "./logging"; import { handleError } from "./errors/handleError"; -import dotenv from "dotenv"; - -dotenv.config(); -// const filename = path.join(configPath, "config.json"); - -// if (!fs.existsSync(filename)) { -// throw new Error(`File ${configPath} does not exist`); -// } +import { initialiseLogging } from "./logging"; -// const configText = fs.readFileSync(filename, { encoding: "utf-8" }); -// const config = JSON.parse(configText); dotenv.config({ path: ".env.development" }); const config = { @@ -38,9 +25,6 @@ const config = { GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, }; -// if (!fs.existsSync(filename)) { -// throw new Error(`File ${configPath} does not exist`); -// } const app = express(); initialiseLogging(app); diff --git a/app/server/src/resources/config.json.in.development b/app/server/src/resources/config.json.in.development deleted file mode 100644 index f40651abd..000000000 --- a/app/server/src/resources/config.json.in.development +++ /dev/null @@ -1,12 +0,0 @@ -{ - "server_port": 4000, - "api_url": "http://localhost:5000", - "client_url": "http://localhost:5173", - "server_url": "http://localhost:4000", - "redis_url": "redis://localhost:6379", - "GOOGLE_CLIENT_ID": "${GOOGLE_ID}", - "GOOGLE_CLIENT_SECRET": "$GOOGLE_SECRET", - "SESSION_SECRET": "$EXPRESS_SESSION_SECRET", - "GITHUB_CLIENT_ID":"$GITHUB_ID", - "GITHUB_CLIENT_SECRET":"$GITHUB_SECRET" -} diff --git a/app/server/src/resources/config.json.in.docker b/app/server/src/resources/config.json.in.docker deleted file mode 100644 index dc2f11bd5..000000000 --- a/app/server/src/resources/config.json.in.docker +++ /dev/null @@ -1,12 +0,0 @@ -{ - "server_port": 4000, - "api_url": "http://beebop-py-api:5000", - "client_url": "https://localhost", - "server_url": "https://localhost/api", - "redis_url": "redis://beebop-redis:6379", - "GOOGLE_CLIENT_ID": "$DOCKER_GOOGLE_ID", - "GOOGLE_CLIENT_SECRET": "$DOCKER_GOOGLE_SECRET", - "SESSION_SECRET": "1234", - "GITHUB_CLIENT_ID": "$DOCKER_GITHUB_ID", - "GITHUB_CLIENT_SECRET": "$DOCKER_GITHUB_SECRET" -} diff --git a/app/server/src/resources/config.json.in.production b/app/server/src/resources/config.json.in.production deleted file mode 100644 index c95b6355a..000000000 --- a/app/server/src/resources/config.json.in.production +++ /dev/null @@ -1,12 +0,0 @@ -{ - "server_port": 4000, - "api_url": "http://beebop-py-api:5000", - "client_url": "https://beebop.dide.ic.ac.uk", - "server_url": "https://beebop.dide.ic.ac.uk/api", - "redis_url": "redis://beebop-redis:6379", - "GOOGLE_CLIENT_ID": "${PROD_GOOGLE_ID}", - "GOOGLE_CLIENT_SECRET": "$PROD_GOOGLE_SECRET", - "SESSION_SECRET": "$PROD_EXPRESS_SESSION_SECRET", - "GITHUB_CLIENT_ID":"$PROD_GITHUB_ID", - "GITHUB_CLIENT_SECRET":"$PROD_GITHUB_SECRET" -} diff --git a/buildkite/pipeline.yml b/buildkite/pipeline.yml index 033737e48..781a1ee97 100644 --- a/buildkite/pipeline.yml +++ b/buildkite/pipeline.yml @@ -13,8 +13,3 @@ steps: - label: ":shipit: Push Proxy images" command: proxy/docker/push - - wait - - - label: ":mag: Docker smoke test" - command: scripts/docker_smoke_test - diff --git a/proxy/Dockerfile b/proxy/Dockerfile index 9dd2cc76f..b0b14210d 100644 --- a/proxy/Dockerfile +++ b/proxy/Dockerfile @@ -11,19 +11,4 @@ RUN npm install && npm run build RUN npm install -g serve EXPOSE 3000 CMD ["serve", "-s", "dist"] -# FROM nginx:stable -# # Clear out existing configuration -# RUN rm /etc/nginx/conf.d/default.conf -# RUN rm /usr/share/nginx/html -rf - -# VOLUME /var/log/nginx -# VOLUME /run/proxy - -# COPY proxy/nginx.conf.template /etc/nginx/nginx.conf.template -# COPY proxy/bin /usr/local/bin -# COPY proxy/ssl/dhparam.pem /run/proxy/dhparam.pem - -# COPY --from=0 /app/dist /usr/share/nginx/html - -# ENTRYPOINT ["/usr/local/bin/reverse-proxy"] diff --git a/scripts/docker_smoke_test b/scripts/docker_smoke_test deleted file mode 100755 index ab7bf3689..000000000 --- a/scripts/docker_smoke_test +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -set -ex - -HERE=$(realpath "$(dirname $0)") - -function cleanup() { - $HERE/stop_docker -} -trap cleanup EXIT - -cp app/server/src/resources/config.json.in.docker app/server/src/resources/config.json -$HERE/run_docker - -URL=https://localhost - -STATUS=$(curl -k -s --write-out %{http_code} --output /dev/null $URL) -if (test $STATUS -ne 200;) then - echo "Unexpected status code: $STATUS" - exit 1 -fi - -CONTENT=$(curl -k -s $URL) -if (! echo "$CONTENT" | grep "Beebop") then - echo "Unexpected home page content:" - echo $CONTENT - exit 1 -fi \ No newline at end of file From 3d4bdb899f772fd15859c23bed1914d04f004347 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Tue, 3 Sep 2024 14:26:55 +0100 Subject: [PATCH 18/26] refactor: Remove unnecessary code and comments in entrypoint.sh and environment variable configuration --- .github/workflows/playwrightCI.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/playwrightCI.yml b/.github/workflows/playwrightCI.yml index 98b3723c0..a848f4c22 100644 --- a/.github/workflows/playwrightCI.yml +++ b/.github/workflows/playwrightCI.yml @@ -26,10 +26,6 @@ jobs: node-version: ${{ matrix.node-version }} cache: "npm" cache-dependency-path: ./app/client-v2/package-lock.json - - name: get config file - run: | - pwd - cp ./app/server/src/resources/config.json.in.development ./app/server/src/resources/config.json - name: Run all components working-directory: . run: ./scripts/run_test From 6a1429cfa95ae2ff4654e2ced5b5a2124b69f291 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Tue, 3 Sep 2024 14:27:21 +0100 Subject: [PATCH 19/26] refactor: Remove unnecessary code and comments in entrypoint.sh and environment variable configuration --- .github/workflows/jestCI.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/jestCI.yml b/.github/workflows/jestCI.yml index 86a4cd52d..ba82b7791 100644 --- a/.github/workflows/jestCI.yml +++ b/.github/workflows/jestCI.yml @@ -56,10 +56,6 @@ jobs: cache: "npm" cache-dependency-path: ./app/server/package-lock.json - run: npm ci - - name: get config file - run: | - pwd - cp ./src/resources/config.json.in.development ./src/resources/config.json - name: run all components working-directory: . run: ./scripts/run_test server-only From bd3628229f3309e153adcf6897113baff64f9080 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Tue, 3 Sep 2024 14:38:08 +0100 Subject: [PATCH 20/26] refactor: Update buildConfig to use environment variables for configuration --- app/server/src/buildConfig.ts | 12 +++ app/server/src/index.ts | 14 +--- app/server/tests/integration/router.test.ts | 87 +++++++++++---------- 3 files changed, 59 insertions(+), 54 deletions(-) create mode 100644 app/server/src/buildConfig.ts diff --git a/app/server/src/buildConfig.ts b/app/server/src/buildConfig.ts new file mode 100644 index 000000000..38618d2eb --- /dev/null +++ b/app/server/src/buildConfig.ts @@ -0,0 +1,12 @@ +export const buildConfig = () => ({ + server_port: process.env.PORT || 4000, + api_url: process.env.API_URL || "http://localhost:5000", + client_url: process.env.CLIENT_URL || "http://localhost:5173", + server_url: process.env.SERVER_URL || "http://localhost:4000", + redis_url: process.env.REDIS_URL || "redis://localhost:6379", + GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, + GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, + SESSION_SECRET: process.env.SESSION_SECRET, + GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID, + GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, +}); diff --git a/app/server/src/index.ts b/app/server/src/index.ts index da24ccbc5..5ee07b15a 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -9,21 +9,11 @@ import dotenv from "dotenv"; import { redisConnection } from "./db/redis"; import { handleError } from "./errors/handleError"; import { initialiseLogging } from "./logging"; +import { buildConfig } from "./buildConfig"; dotenv.config({ path: ".env.development" }); -const config = { - server_port: process.env.PORT || 4000, - api_url: process.env.API_URL || "http://localhost:5000", - client_url: process.env.CLIENT_URL || "http://localhost:5173", - server_url: process.env.SERVER_URL || "http://localhost:4000", - redis_url: process.env.REDIS_URL || "redis://localhost:6379", - GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, - GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET, - SESSION_SECRET: process.env.SESSION_SECRET, - GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID, - GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET, -}; +const config = buildConfig(); const app = express(); initialiseLogging(app); diff --git a/app/server/tests/integration/router.test.ts b/app/server/tests/integration/router.test.ts index 83df6a8c2..db16e1d9c 100644 --- a/app/server/tests/integration/router.test.ts +++ b/app/server/tests/integration/router.test.ts @@ -1,57 +1,60 @@ -import request from 'supertest'; -import Agent from'supertest'; +import request from "supertest"; +import Agent from "supertest"; import express from "express"; -import axios from 'axios'; -import passport from 'passport'; -import MockAdapter from 'axios-mock-adapter'; -import { router } from '../../src/routes/routes'; -import { configureApp } from '../../src/configureApp'; -import versionInfo from '../../../server/resources/versionInfo.json'; -import config from '../../src/resources/config.json'; -import MockStrategy from 'passport-mock-strategy'; +import axios from "axios"; +import passport from "passport"; +import MockAdapter from "axios-mock-adapter"; +import { router } from "../../src/routes/routes"; +import { configureApp } from "../../src/configureApp"; +import versionInfo from "../../../server/resources/versionInfo.json"; +import MockStrategy from "passport-mock-strategy"; +import dotenv from "dotenv"; +import { buildConfig } from "../../src/buildConfig"; +dotenv.config({ path: ".env.development" }); +const config = buildConfig(); const app = express(); configureApp(app, config); -router(app, config) +router(app, config); // adding passport mock strategy and route for tests passport.use(new MockStrategy()); -app.get('/login/mock', passport.authenticate('mock'), (req, res) => { - res.send({ status: 'ok' }); - }); +app.get("/login/mock", passport.authenticate("mock"), (req, res) => { + res.send({ status: "ok" }); +}); describe("testing-server-routes", () => { - const mock = new MockAdapter(axios); - mock.onGet(`${config.api_url}/version`).reply(200, versionInfo); + const mock = new MockAdapter(axios); + mock.onGet(`${config.api_url}/version`).reply(200, versionInfo); - it("GET /version", async () => { - const response= await request(app).get("/version"); - expect(response.body).toMatchObject(versionInfo); - }); - it("GET /", async () => { - const { body } = await request(app).get("/"); - expect(body).toEqual({ message: 'Welcome to beebop!' }); - }); - it("GET /user", async () => { - const { body } = await request(app).get("/user"); - expect(body.status).toEqual('failure'); - }); + it("GET /version", async () => { + const response = await request(app).get("/version"); + expect(response.body).toMatchObject(versionInfo); + }); + it("GET /", async () => { + const { body } = await request(app).get("/"); + expect(body).toEqual({ message: "Welcome to beebop!" }); + }); + it("GET /user", async () => { + const { body } = await request(app).get("/user"); + expect(body.status).toEqual("failure"); + }); }); describe("testing-server-routes as logged in user", () => { - let agent; - beforeEach(() => { - agent = Agent.agent(app); - }); + let agent; + beforeEach(() => { + agent = Agent.agent(app); + }); - it('should authenticate the user', () => { - return agent.get('/login/mock').expect(200, { status: 'ok' }); - }); + it("should authenticate the user", () => { + return agent.get("/login/mock").expect(200, { status: "ok" }); + }); - it("GET /user", async () => { - Agent.agent - await agent.get('/login/mock'); - const { body } = await agent.get("/user"); - expect(body.data).toEqual({id:'1234', provider:'mock', name:'Foo'}); - }); -}); \ No newline at end of file + it("GET /user", async () => { + Agent.agent; + await agent.get("/login/mock"); + const { body } = await agent.get("/user"); + expect(body.data).toEqual({ id: "1234", provider: "mock", name: "Foo" }); + }); +}); From 82f6e79e9c00d33efec30b12a1ef6b80f60ffe70 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Tue, 3 Sep 2024 15:16:31 +0100 Subject: [PATCH 21/26] fix: tests --- app/server/package.json | 2 +- app/server/src/args.ts | 14 -------------- .../tests/unit/controllers/indexController.test.ts | 5 ++++- .../unit/controllers/projectController.test.ts | 5 ++++- 4 files changed, 9 insertions(+), 17 deletions(-) delete mode 100644 app/server/src/args.ts diff --git a/app/server/package.json b/app/server/package.json index 871c22da4..9b10f6ddc 100644 --- a/app/server/package.json +++ b/app/server/package.json @@ -4,7 +4,7 @@ "description": "", "main": "index.ts", "scripts": { - "express": "ts-node src/index.ts --config src/resources", + "express": "ts-node src/index.ts", "test": "jest", "test:dev": "jest --watch", "eslint": "eslint src tests --ext .js,.jsx,.ts,.tsx", diff --git a/app/server/src/args.ts b/app/server/src/args.ts deleted file mode 100644 index c39a76bfc..000000000 --- a/app/server/src/args.ts +++ /dev/null @@ -1,14 +0,0 @@ -import yargs from "yargs/yargs"; -import path from "path"; -import {hideBin} from "yargs/helpers"; - -const {argv} = yargs(hideBin(process.argv)); -const configPathGiven = argv.config as string; -if (!configPathGiven) { - throw new Error("Usage index.js --config path/to/config/dir"); -} -const configPath = path.resolve(configPathGiven); - -console.log(`Config path: ${configPathGiven} (${configPath})`); - -export default configPath; diff --git a/app/server/tests/unit/controllers/indexController.test.ts b/app/server/tests/unit/controllers/indexController.test.ts index 3ca36a648..6c26e7b07 100644 --- a/app/server/tests/unit/controllers/indexController.test.ts +++ b/app/server/tests/unit/controllers/indexController.test.ts @@ -7,12 +7,15 @@ jest.mock("../../../src/db/userStore", () => ({ })); import { mockApp, mockRedis, mockResponse } from "../utils"; -import config from "../../../src/resources/config.json"; import versionInfo from "../../../resources/versionInfo.json"; import MockAdapter from "axios-mock-adapter"; import axios from "axios"; import indexController from "../../../src/controllers/indexController"; +import { buildConfig } from "../../../src/buildConfig"; +import dotenv from "dotenv"; +dotenv.config(); +const config = buildConfig(); describe("indexController", () => { const mockRequest: any = {}; diff --git a/app/server/tests/unit/controllers/projectController.test.ts b/app/server/tests/unit/controllers/projectController.test.ts index 58f307e95..dc2ebbf93 100644 --- a/app/server/tests/unit/controllers/projectController.test.ts +++ b/app/server/tests/unit/controllers/projectController.test.ts @@ -44,13 +44,16 @@ jest.mock("../../../src/utils/projectUtils", () => ({ })); import {mockApp, mockRedis, mockResponse} from "../utils"; -import config from "../../../src/resources/config.json"; import projectController from "../../../src/controllers/projectController"; import MockAdapter from "axios-mock-adapter"; import axios from "axios"; import { BeebopError } from "../../../src/errors/beebopError"; +import dotenv from "dotenv"; +import { buildConfig } from "../../../src/buildConfig"; const mockAxios = new MockAdapter(axios); +dotenv.config({ path: ".env.development" }); +const config = buildConfig() describe("projectController", () => { beforeEach(() => { From c32b7fdc1b6dcab8359c573d2789dcf1ae0eef07 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 4 Sep 2024 09:15:41 +0100 Subject: [PATCH 22/26] refactor: Update buildConfig to use environment variables for configuration --- README.md | 21 +++--------------- app/server/.env.development | 6 +---- app/server/docker/Dockerfile | 2 +- app/server/docker/entrypoint.sh | 4 ---- app/server/src/buildConfig.ts | 1 + proxy/Dockerfile | 1 - scripts/decrypt_config | 39 +++++++++++++-------------------- 7 files changed, 21 insertions(+), 53 deletions(-) delete mode 100755 app/server/docker/entrypoint.sh diff --git a/README.md b/README.md index 6ab2e34da..a4c87fe89 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,8 @@ docker --version ``` -If you run the application for the first time (or for the first time after running in docker), you need to replace the -secrets in the config file in `app/server/src/resources` first. +If you run the application for the first time in development you need to add the secrets into `env.development`. Run the following command to decrypt the secrets: + Login to the vault: ``` export VAULT_ADDR=https://vault.dide.ic.ac.uk:8200 @@ -78,28 +78,13 @@ You can also run everything outside pm2, by separately running: - `./scripts/run_client` ## Config -Config for the front-end lives in `./app/client/src/settings` and by default webpack (via the vue-cli) will use the config -defined in `./app/client/src/settings/development`; this gets overriden by setting an env var called `BUILD_TARGET` - see `./proxy/Dockerfile`. - -Config for the back-end lives in `./app/server/src/resources`. When deploying using a docker image this file has to be -copied into the running container before the app will start - see `./app/server/docker/entrypoint.sh`. +Config for the back-end should be done via env variables. All needed variables can be found at `./app/server/src/buildConfig.ts`. In development, these are set in `./app/server/.env.development`. ## Deploying with docker Docker images are built on CI using `./proxy/docker/build`, `./app/server/docker/build`. If you want to generate them from changed local sources you can run those same scripts locally to build images. -Generate the correct server config file with -``` - ./scripts/decrypt_config docker -``` - -Then run the dockerised app with - -``` - ./scripts/run_docker -``` - By default this will configure the nginx proxy for host `localhost`. To deploy with a different hostname, pass it as an argument, e.g. diff --git a/app/server/.env.development b/app/server/.env.development index 782b69275..f30cfe2bd 100644 --- a/app/server/.env.development +++ b/app/server/.env.development @@ -3,8 +3,4 @@ API_URL=http://localhost:5000 CLIENT_URL=http://localhost:5173 SERVER_URL=http://localhost:4000 REDIS_URL=redis://localhost:6379 -GOOGLE_CLIENT_ID=305786403888-u41f860jqrn0pt2fhmmecv0im18c8te0.apps.googleusercontent.com -GOOGLE_CLIENT_SECRET=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 -SESSION_SECRET=beebop-is-great -GITHUB_CLIENT_ID=6faae102e0cf9eafd34b -GITHUB_CLIENT_SECRET=06a34af335b8f3197da25016d90ef98a85112727 \ No newline at end of file +# run decrypt_config to populate secrets diff --git a/app/server/docker/Dockerfile b/app/server/docker/Dockerfile index 44541ecd5..0eb0831a0 100644 --- a/app/server/docker/Dockerfile +++ b/app/server/docker/Dockerfile @@ -9,4 +9,4 @@ COPY . /app EXPOSE 4000 RUN npm run build RUN npm install -g ts-node -ENTRYPOINT ["docker/entrypoint.sh"] +ENTRYPOINT ["ts-node", "--transpile-only", "src/index.ts"] diff --git a/app/server/docker/entrypoint.sh b/app/server/docker/entrypoint.sh deleted file mode 100755 index 62d6d3d70..000000000 --- a/app/server/docker/entrypoint.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -set -eu - -ts-node --transpile-only src/index.ts diff --git a/app/server/src/buildConfig.ts b/app/server/src/buildConfig.ts index 38618d2eb..de9674c15 100644 --- a/app/server/src/buildConfig.ts +++ b/app/server/src/buildConfig.ts @@ -1,3 +1,4 @@ +// These environment variables can override the default values in the .env file export const buildConfig = () => ({ server_port: process.env.PORT || 4000, api_url: process.env.API_URL || "http://localhost:5000", diff --git a/proxy/Dockerfile b/proxy/Dockerfile index b0b14210d..282fedbd9 100644 --- a/proxy/Dockerfile +++ b/proxy/Dockerfile @@ -5,7 +5,6 @@ WORKDIR /app RUN npm install COPY app/client-v2 /app -ENV BUILD_TARGET docker RUN npm install && npm run build RUN npm install -g serve diff --git a/scripts/decrypt_config b/scripts/decrypt_config index c250ed5bf..240e6436a 100755 --- a/scripts/decrypt_config +++ b/scripts/decrypt_config @@ -1,31 +1,22 @@ #!/usr/bin/env bash set -e -if [ "$#" -eq 1 ]; then - FILE_IN_SERVER=app/server/src/resources/config.json.in.$1 -else - FILE_IN_SERVER=app/server/src/resources/config.json.in.development -fi +export GITHUB_CLIENT_ID=$(vault read -field=clientid secret/beebop/auth/github) +export GITHUB_CLIENT_SECRET=$(vault read -field=secret secret/beebop/auth/github) +export GOOGLE_CLIENT_ID=$(vault read -field=clientid secret/beebop/auth/google) +export GOOGLE_CLIENT_SECRET=$(vault read -field=secret secret/beebop/auth/google) +export SESSION_SECRET=$(vault read -field=secret secret/beebop/express-session) -FILE_CLEAR_SERVER=app/server/src/resources/config.json - -export GITHUB_ID=$(vault read -field=clientid secret/beebop/auth/github) -export GITHUB_SECRET=$(vault read -field=secret secret/beebop/auth/github) -export DOCKER_GITHUB_ID=$(vault read -field=clientid secret/beebop/auth/devdocker/github) -export DOCKER_GITHUB_SECRET=$(vault read -field=secret secret/beebop/auth/devdocker/github) -export DOCKER_GOOGLE_ID=$(vault read -field=clientid secret/beebop/auth/devdocker/google) -export DOCKER_GOOGLE_SECRET=$(vault read -field=secret secret/beebop/auth/devdocker/google) -export PROD_GITHUB_ID=$(vault read -field=clientid secret/beebop/auth/production/github) -export PROD_GITHUB_SECRET=$(vault read -field=secret secret/beebop/auth/production/github) -export PROD_GOOGLE_ID=$(vault read -field=clientid secret/beebop/auth/production/google) -export PROD_GOOGLE_SECRET=$(vault read -field=secret secret/beebop/auth/production/google) -export PROD_EXPRESS_SESSION_SECRET=$(vault read -field=secret secret/beebop/express-session/production) -export GOOGLE_ID=$(vault read -field=clientid secret/beebop/auth/google) -export GOOGLE_SECRET=$(vault read -field=secret secret/beebop/auth/google) -export EXPRESS_SESSION_SECRET=$(vault read -field=secret secret/beebop/express-session) mkdir proxy/ssl/production -p -vault read -field=key secret/beebop/ssl > proxy/ssl/production/key.pem -vault read -field=cert secret/beebop/ssl > proxy/ssl/production/certificate.pem +vault read -field=key secret/beebop/ssl/production > proxy/ssl/production/key.pem +vault read -field=cert secret/beebop/ssl/production > proxy/ssl/production/certificate.pem + +envsubst >> app/server/.env.development < $FILE_CLEAR_SERVER +GOOGLE_CLIENT_ID=$GOOGLE_CLIENT_ID +GOOGLE_CLIENT_SECRET=$GOOGLE_CLIENT_SECRET +SESSION_SECRET=$SESSION_SECRET +GITHUB_CLIENT_ID=$GITHUB_CLIENT_ID +GITHUB_CLIENT_SECRET=$GITHUB_CLIENT_SECRET +EOF From f0b181761226f52403a681507492fc10f8727026 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 4 Sep 2024 09:52:55 +0100 Subject: [PATCH 23/26] refactor: Configure environment variables in CI workflows --- .github/workflows/jestCI.yml | 2 ++ .github/workflows/playwrightCI.yml | 2 ++ .gitignore | 1 + README.md | 4 ++-- app/server/.env.development | 6 ------ app/server/src/index.ts | 2 +- app/server/tests/integration/router.test.ts | 2 +- .../tests/unit/controllers/projectController.test.ts | 2 +- scripts/decrypt_config | 8 ++++++-- 9 files changed, 16 insertions(+), 13 deletions(-) delete mode 100644 app/server/.env.development diff --git a/.github/workflows/jestCI.yml b/.github/workflows/jestCI.yml index ba82b7791..ccb9feca2 100644 --- a/.github/workflows/jestCI.yml +++ b/.github/workflows/jestCI.yml @@ -55,6 +55,8 @@ jobs: node-version: ${{ matrix.node-version }} cache: "npm" cache-dependency-path: ./app/server/package-lock.json + - name: configure env variables + run: ./scripts/decrypt_config - run: npm ci - name: run all components working-directory: . diff --git a/.github/workflows/playwrightCI.yml b/.github/workflows/playwrightCI.yml index a848f4c22..a2f6d6130 100644 --- a/.github/workflows/playwrightCI.yml +++ b/.github/workflows/playwrightCI.yml @@ -26,6 +26,8 @@ jobs: node-version: ${{ matrix.node-version }} cache: "npm" cache-dependency-path: ./app/client-v2/package-lock.json + - name: configure env variables + run: ./scripts/decrypt_config - name: Run all components working-directory: . run: ./scripts/run_test diff --git a/.gitignore b/.gitignore index 1f33378f6..67e5a1620 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ app/server/coverage .idea proxy/ssl/production .vscode +.env diff --git a/README.md b/README.md index a4c87fe89..97b73400d 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ docker --version ``` -If you run the application for the first time in development you need to add the secrets into `env.development`. Run the following command to decrypt the secrets: +If you run the application for the first time in development you need to env variables into `.env`. Login to the vault: ``` @@ -78,7 +78,7 @@ You can also run everything outside pm2, by separately running: - `./scripts/run_client` ## Config -Config for the back-end should be done via env variables. All needed variables can be found at `./app/server/src/buildConfig.ts`. In development, these are set in `./app/server/.env.development`. +Config for the back-end should be done via env variables. All needed variables can be found at `./app/server/src/buildConfig.ts`. In development, these are set in `./app/server/.env` which can be set by running `./scripts/decrypt_config`. ## Deploying with docker diff --git a/app/server/.env.development b/app/server/.env.development deleted file mode 100644 index f30cfe2bd..000000000 --- a/app/server/.env.development +++ /dev/null @@ -1,6 +0,0 @@ -SERVER_PORT=4000 -API_URL=http://localhost:5000 -CLIENT_URL=http://localhost:5173 -SERVER_URL=http://localhost:4000 -REDIS_URL=redis://localhost:6379 -# run decrypt_config to populate secrets diff --git a/app/server/src/index.ts b/app/server/src/index.ts index 5ee07b15a..1a3576ab6 100644 --- a/app/server/src/index.ts +++ b/app/server/src/index.ts @@ -11,7 +11,7 @@ import { handleError } from "./errors/handleError"; import { initialiseLogging } from "./logging"; import { buildConfig } from "./buildConfig"; -dotenv.config({ path: ".env.development" }); +dotenv.config(); const config = buildConfig(); diff --git a/app/server/tests/integration/router.test.ts b/app/server/tests/integration/router.test.ts index db16e1d9c..0a5722952 100644 --- a/app/server/tests/integration/router.test.ts +++ b/app/server/tests/integration/router.test.ts @@ -11,7 +11,7 @@ import MockStrategy from "passport-mock-strategy"; import dotenv from "dotenv"; import { buildConfig } from "../../src/buildConfig"; -dotenv.config({ path: ".env.development" }); +dotenv.config(); const config = buildConfig(); const app = express(); configureApp(app, config); diff --git a/app/server/tests/unit/controllers/projectController.test.ts b/app/server/tests/unit/controllers/projectController.test.ts index dc2ebbf93..3f49d2868 100644 --- a/app/server/tests/unit/controllers/projectController.test.ts +++ b/app/server/tests/unit/controllers/projectController.test.ts @@ -52,7 +52,7 @@ import dotenv from "dotenv"; import { buildConfig } from "../../../src/buildConfig"; const mockAxios = new MockAdapter(axios); -dotenv.config({ path: ".env.development" }); +dotenv.config(); const config = buildConfig() describe("projectController", () => { diff --git a/scripts/decrypt_config b/scripts/decrypt_config index 240e6436a..0a7285656 100755 --- a/scripts/decrypt_config +++ b/scripts/decrypt_config @@ -12,8 +12,12 @@ mkdir proxy/ssl/production -p vault read -field=key secret/beebop/ssl/production > proxy/ssl/production/key.pem vault read -field=cert secret/beebop/ssl/production > proxy/ssl/production/certificate.pem -envsubst >> app/server/.env.development < app/server/.env < Date: Wed, 4 Sep 2024 10:02:37 +0100 Subject: [PATCH 24/26] refactor: Update CI workflows to use environment variables for configuration --- .github/workflows/jestCI.yml | 8 ++++++-- .github/workflows/playwrightCI.yml | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/workflows/jestCI.yml b/.github/workflows/jestCI.yml index ccb9feca2..38f237c74 100644 --- a/.github/workflows/jestCI.yml +++ b/.github/workflows/jestCI.yml @@ -55,12 +55,16 @@ jobs: node-version: ${{ matrix.node-version }} cache: "npm" cache-dependency-path: ./app/server/package-lock.json - - name: configure env variables - run: ./scripts/decrypt_config - run: npm ci - name: run all components working-directory: . run: ./scripts/run_test server-only + env: + GITHUB_CLIENT_ID: ${{ secrets.CLIENT_ID_GITHUB }} + GITHUB_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET_GITHUB }} + GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} + SESSION_SECRET: ${{ secrets.SESSION_SECRET }} - name: Run unit and integration tests run: npm run test - name: stop all components diff --git a/.github/workflows/playwrightCI.yml b/.github/workflows/playwrightCI.yml index a2f6d6130..8578f1abc 100644 --- a/.github/workflows/playwrightCI.yml +++ b/.github/workflows/playwrightCI.yml @@ -26,11 +26,15 @@ jobs: node-version: ${{ matrix.node-version }} cache: "npm" cache-dependency-path: ./app/client-v2/package-lock.json - - name: configure env variables - run: ./scripts/decrypt_config - name: Run all components working-directory: . run: ./scripts/run_test + env: + GITHUB_CLIENT_ID: ${{ secrets.CLIENT_ID_GITHUB }} + GITHUB_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET_GITHUB }} + GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} + SESSION_SECRET: ${{ secrets.SESSION_SECRET }} - name: Install playwright working-directory: ./app/client-v2 run: npx playwright install --with-deps From 24ce1d312333955f365fec27f1177573cfe06bce Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 4 Sep 2024 10:12:46 +0100 Subject: [PATCH 25/26] refactor: Update CI workflows to use environment variables for configuration --- .github/workflows/jestCI.yml | 6 ++++++ .github/workflows/playwrightCI.yml | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/.github/workflows/jestCI.yml b/.github/workflows/jestCI.yml index 38f237c74..30e4a8895 100644 --- a/.github/workflows/jestCI.yml +++ b/.github/workflows/jestCI.yml @@ -67,6 +67,12 @@ jobs: SESSION_SECRET: ${{ secrets.SESSION_SECRET }} - name: Run unit and integration tests run: npm run test + env: + GITHUB_CLIENT_ID: ${{ secrets.CLIENT_ID_GITHUB }} + GITHUB_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET_GITHUB }} + GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} + SESSION_SECRET: ${{ secrets.SESSION_SECRET }} - name: stop all components working-directory: . run: ./scripts/stop_test server-only diff --git a/.github/workflows/playwrightCI.yml b/.github/workflows/playwrightCI.yml index 8578f1abc..5a737cd3b 100644 --- a/.github/workflows/playwrightCI.yml +++ b/.github/workflows/playwrightCI.yml @@ -41,6 +41,11 @@ jobs: - name: Run e2e tests env: MICROREACT_TOKEN: ${{ secrets.MICROREACT_TOKEN }} + GITHUB_CLIENT_ID: ${{ secrets.CLIENT_ID_GITHUB }} + GITHUB_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET_GITHUB }} + GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} + SESSION_SECRET: ${{ secrets.SESSION_SECRET }} working-directory: ./app/client-v2 run: npm run test:e2e:${{ matrix.browser}} - name: Stop all components From 03658d4cf55a7aab22409531f8502d3e6d0ceca6 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Wed, 4 Sep 2024 10:20:08 +0100 Subject: [PATCH 26/26] refactor: Update CI workflows to use environment variables for configuration --- .github/workflows/jestCI.yml | 19 +++++++------------ .github/workflows/playwrightCI.yml | 20 +++++++------------- 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/.github/workflows/jestCI.yml b/.github/workflows/jestCI.yml index 30e4a8895..75d27375a 100644 --- a/.github/workflows/jestCI.yml +++ b/.github/workflows/jestCI.yml @@ -9,6 +9,13 @@ on: - main - "bacpop-*" +env: + GITHUB_CLIENT_ID: ${{ secrets.CLIENT_ID_GITHUB }} + GITHUB_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET_GITHUB }} + GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} + SESSION_SECRET: ${{ secrets.SESSION_SECRET }} + jobs: unit_frontend: runs-on: ubuntu-latest @@ -59,20 +66,8 @@ jobs: - name: run all components working-directory: . run: ./scripts/run_test server-only - env: - GITHUB_CLIENT_ID: ${{ secrets.CLIENT_ID_GITHUB }} - GITHUB_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET_GITHUB }} - GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} - GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} - SESSION_SECRET: ${{ secrets.SESSION_SECRET }} - name: Run unit and integration tests run: npm run test - env: - GITHUB_CLIENT_ID: ${{ secrets.CLIENT_ID_GITHUB }} - GITHUB_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET_GITHUB }} - GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} - GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} - SESSION_SECRET: ${{ secrets.SESSION_SECRET }} - name: stop all components working-directory: . run: ./scripts/stop_test server-only diff --git a/.github/workflows/playwrightCI.yml b/.github/workflows/playwrightCI.yml index 5a737cd3b..9d8b79433 100644 --- a/.github/workflows/playwrightCI.yml +++ b/.github/workflows/playwrightCI.yml @@ -9,6 +9,13 @@ on: - main - "bacpop-*" +env: + GITHUB_CLIENT_ID: ${{ secrets.CLIENT_ID_GITHUB }} + GITHUB_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET_GITHUB }} + GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} + SESSION_SECRET: ${{ secrets.SESSION_SECRET }} + jobs: playwright-tests: timeout-minutes: 60 @@ -29,23 +36,10 @@ jobs: - name: Run all components working-directory: . run: ./scripts/run_test - env: - GITHUB_CLIENT_ID: ${{ secrets.CLIENT_ID_GITHUB }} - GITHUB_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET_GITHUB }} - GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} - GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} - SESSION_SECRET: ${{ secrets.SESSION_SECRET }} - name: Install playwright working-directory: ./app/client-v2 run: npx playwright install --with-deps - name: Run e2e tests - env: - MICROREACT_TOKEN: ${{ secrets.MICROREACT_TOKEN }} - GITHUB_CLIENT_ID: ${{ secrets.CLIENT_ID_GITHUB }} - GITHUB_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET_GITHUB }} - GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} - GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} - SESSION_SECRET: ${{ secrets.SESSION_SECRET }} working-directory: ./app/client-v2 run: npm run test:e2e:${{ matrix.browser}} - name: Stop all components