diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index fbf449ba76..52b8c4cb45 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -28,7 +28,10 @@ "hashicorp.terraform", "ms-azuretools.vscode-docker", "prisma.prisma" - ] + ], + "settings": { + "extensions.verifySignature": false + } } }, "features": { diff --git a/.github/workflows/cd-prod.yml b/.github/workflows/cd-prod.yml index 86b0cff8ef..06084ce560 100644 --- a/.github/workflows/cd-prod.yml +++ b/.github/workflows/cd-prod.yml @@ -122,7 +122,7 @@ jobs: - name: Terraform Init working-directory: ./apps/infra/deploy - run: terraform init + run: terraform init -upgrade # TODO: plan in the other job, and reuse the plan file - name: Terraform Plan diff --git a/.github/workflows/cd-stage.yml b/.github/workflows/cd-stage.yml index 9f783ac18e..888c4ec551 100644 --- a/.github/workflows/cd-stage.yml +++ b/.github/workflows/cd-stage.yml @@ -89,7 +89,7 @@ jobs: scripts/deploy.sh .env.stage apps/infra/stage/Caddyfile - grafana-logs/promtail/promtail-config.yml + apps/grafana-logs/promtail/promtail-config.yml - name: Load dotenv from secret run: | diff --git a/apps/backend/Dockerfile b/apps/backend/Dockerfile index 18a5f0042d..8f0eaa1521 100644 --- a/apps/backend/Dockerfile +++ b/apps/backend/Dockerfile @@ -4,7 +4,7 @@ ### BUILDER ### ARG target=client -FROM node:20.12.2-alpine AS builder +FROM node:20.13.0-alpine AS builder ARG target COPY . /build @@ -18,7 +18,7 @@ RUN npx prisma generate RUN npm run build ${target} ### PRODUCTION ### -FROM node:20.12.2-alpine +FROM node:20.13.0-alpine ARG target ENV NODE_ENV=production diff --git a/apps/backend/package.json b/apps/backend/package.json index 1d25c6fa4f..ca8793ae73 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -19,11 +19,11 @@ }, "dependencies": { "@apollo/server": "^4.10.4", - "@aws-sdk/client-s3": "^3.567.0", - "@aws-sdk/client-ses": "^3.567.0", - "@aws-sdk/credential-provider-node": "^3.567.0", + "@aws-sdk/client-s3": "^3.572.0", + "@aws-sdk/client-ses": "^3.572.0", + "@aws-sdk/credential-provider-node": "^3.572.0", "@golevelup/nestjs-rabbitmq": "^5.3.0", - "@nestjs-modules/mailer": "^1.11.2", + "@nestjs-modules/mailer": "^2.0.2", "@nestjs/apollo": "^12.1.0", "@nestjs/axios": "^3.0.2", "@nestjs/cache-manager": "^2.2.2", @@ -36,16 +36,16 @@ "@nestjs/platform-express": "^10.3.8", "@nestjs/swagger": "^7.3.1", "@opentelemetry/api": "~1.8.0", - "@opentelemetry/exporter-metrics-otlp-http": "^0.51.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.51.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.51.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.51.1", "@opentelemetry/host-metrics": "^0.35.1", "@opentelemetry/instrumentation-express": "^0.38.0", - "@opentelemetry/instrumentation-http": "^0.51.0", - "@opentelemetry/resources": "^1.24.0", - "@opentelemetry/sdk-metrics": "^1.24.0", - "@opentelemetry/sdk-node": "^0.51.0", - "@opentelemetry/sdk-trace-node": "^1.24.0", - "@opentelemetry/semantic-conventions": "^1.24.0", + "@opentelemetry/instrumentation-http": "^0.51.1", + "@opentelemetry/resources": "^1.24.1", + "@opentelemetry/sdk-metrics": "^1.24.1", + "@opentelemetry/sdk-node": "^0.51.1", + "@opentelemetry/sdk-trace-node": "^1.24.1", + "@opentelemetry/semantic-conventions": "^1.24.1", "@prisma/client": "^5.13.0", "@prisma/instrumentation": "~5.13.0", "argon2": "^0.40.1", @@ -76,7 +76,7 @@ "pino-pretty": "^11.0.0", "reflect-metadata": "^0.2.1", "sql-formatter": "^15.3.1", - "zod": "^3.23.5" + "zod": "^3.23.8" }, "devDependencies": { "@faker-js/faker": "^8.4.1", @@ -85,12 +85,12 @@ "@nestjs/schematics": "^10.1.1", "@nestjs/testing": "^10.3.8", "@types/cache-manager": "^4.0.6", - "@types/chai": "^4.3.15", + "@types/chai": "^4.3.16", "@types/chai-as-promised": "^7.1.8", "@types/express": "^4.17.21", "@types/graphql-upload": "8.0.12", "@types/mocha": "^10.0.6", - "@types/node": "^20.12.8", + "@types/node": "^20.12.11", "@types/nodemailer": "^6.4.15", "@types/passport-jwt": "^4.0.1", "@types/proxyquire": "^1.3.31", @@ -102,7 +102,7 @@ "prisma": "^5.13.0", "prisma-nestjs-graphql": "^20.0.2", "proxyquire": "^2.1.3", - "sinon": "^17.0.1", + "sinon": "^17.0.2", "source-map-support": "^0.5.21", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", diff --git a/apps/frontend/app/admin/_components/GroupSelect.tsx b/apps/frontend/app/admin/_components/GroupSelect.tsx index fce80cbc52..204e249f66 100644 --- a/apps/frontend/app/admin/_components/GroupSelect.tsx +++ b/apps/frontend/app/admin/_components/GroupSelect.tsx @@ -5,7 +5,8 @@ import { Command, CommandEmpty, CommandGroup, - CommandItem + CommandItem, + CommandList } from '@/components/ui/command' import { Popover, @@ -56,28 +57,30 @@ export default function GroupSelect() { - No group found. - - {groups.map((framework) => ( - { - setValue(currentValue === value ? '' : currentValue) - setOpen(false) - }} - > - - {framework.label} - - ))} - + + No group found. + + {groups.map((framework) => ( + { + setValue(currentValue === value ? '' : currentValue) + setOpen(false) + }} + > + + {framework.label} + + ))} + + diff --git a/apps/frontend/components/CheckboxSelect.tsx b/apps/frontend/components/CheckboxSelect.tsx index 44f12573ba..25a033bf9b 100644 --- a/apps/frontend/components/CheckboxSelect.tsx +++ b/apps/frontend/components/CheckboxSelect.tsx @@ -7,7 +7,8 @@ import { Command, CommandEmpty, CommandGroup, - CommandItem + CommandItem, + CommandList } from '@/components/ui/command' import { Popover, @@ -91,18 +92,20 @@ export default function LanguageSelect({ - No language found. - - {options.map((option) => ( - - handleCheckboxChange(option)} - > - {option} - - ))} - + + No language found. + + {options.map((option) => ( + + handleCheckboxChange(option)} + > + {option} + + ))} + + diff --git a/apps/frontend/components/DataTableLangFilter.tsx b/apps/frontend/components/DataTableLangFilter.tsx index f594c4ff29..01a3cfb2f4 100644 --- a/apps/frontend/components/DataTableLangFilter.tsx +++ b/apps/frontend/components/DataTableLangFilter.tsx @@ -5,7 +5,8 @@ import { Command, CommandEmpty, CommandGroup, - CommandItem + CommandItem, + CommandList } from '@/components/ui/command' import { Popover, @@ -73,28 +74,30 @@ export default function DataTableLangFilter({ - No language found. - - {options.map((option) => ( - - { - if (selectedValues.has(option)) { - selectedValues.delete(option) - } else { - selectedValues.add(option) - } - const filterValues = Array.from(selectedValues) - column?.setFilterValue( - filterValues.length ? filterValues : undefined - ) - }} - /> - {option} - - ))} - + + No language found. + + {options.map((option) => ( + + { + if (selectedValues.has(option)) { + selectedValues.delete(option) + } else { + selectedValues.add(option) + } + const filterValues = Array.from(selectedValues) + column?.setFilterValue( + filterValues.length ? filterValues : undefined + ) + }} + /> + {option} + + ))} + + diff --git a/apps/frontend/components/auth/SignUpRegister.tsx b/apps/frontend/components/auth/SignUpRegister.tsx index 144e8ffe7c..2ae7b9b250 100644 --- a/apps/frontend/components/auth/SignUpRegister.tsx +++ b/apps/frontend/components/auth/SignUpRegister.tsx @@ -57,6 +57,7 @@ export default function SignUpRegister() { const [inputFocus, setInputFocus] = useState(0) const [disableUsername, setDisableUsername] = useState(false) const [usernameVerify, setUsernameVerify] = useState(false) + const [signUpDisable, setSignUpDisable] = useState(false) const { handleSubmit, @@ -75,6 +76,7 @@ export default function SignUpRegister() { username: string }) => { try { + setSignUpDisable(true) await fetch(baseUrl + '/user/sign-up', { method: 'POST', headers: { @@ -94,6 +96,7 @@ export default function SignUpRegister() { }) } catch { toast.error('Sign up failed!') + setSignUpDisable(false) } } const validation = async (field: string) => { @@ -269,7 +272,7 @@ export default function SignUpRegister() {