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() {