Skip to content

Commit 1e8c5f5

Browse files
authored
Merge pull request #74 from bcgov/lefthook-precommit
Add type-checking, lefthook and CI lint steps
2 parents a99fe8f + 075fda7 commit 1e8c5f5

16 files changed

Lines changed: 31962 additions & 30549 deletions

File tree

.github/workflows/backend-qa.yml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,12 @@ jobs:
3535
run: npm run db:generate
3636
env:
3737
DATABASE_URL: "file:dev.db"
38-
- name: Run tests
39-
working-directory: apps/backend-services
40-
run: npm run test:cov
41-
- name: Run Linter
38+
- name: Lint
4239
working-directory: apps/backend-services
4340
run: npm run lint
41+
- name: Type Check
42+
working-directory: apps/backend-services
43+
run: npm run type-check
44+
- name: Test
45+
working-directory: apps/backend-services
46+
run: npm run test:cov

.github/workflows/frontend-qa.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ jobs:
3131
- name: Run Linter
3232
working-directory: apps/frontend
3333
run: npm run lint
34+
- name: Type Check
35+
working-directory: apps/frontend
36+
run: npm run type-check
3437
- name: Run Unit Tests
3538
working-directory: apps/frontend
3639
run: npm run test

.github/workflows/temporal-qa.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ jobs:
3636
run: npm run db:generate
3737
env:
3838
DATABASE_URL: "postgresql://localhost:5432/dummy"
39+
- name: Lint
40+
working-directory: apps/temporal
41+
run: npm run lint
42+
- name: Type Check
43+
working-directory: apps/temporal
44+
run: npm run type-check
3945
- name: Run tests
4046
working-directory: apps/temporal
4147
run: npm test

apps/backend-services/biome.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"$schema": "https://biomejs.dev/schemas/2.3.7/schema.json",
2+
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
33
"vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
44
"files": {
5-
"includes": ["**", "!!**/dist", "!!**/node_modules"]
5+
"includes": ["**", "!!**/dist", "!!**/node_modules", "!!package.json"]
66
},
77
"formatter": { "enabled": true, "indentStyle": "space" },
88
"linter": {

apps/backend-services/package.json

Lines changed: 134 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -1,134 +1,136 @@
11
{
2-
"name": "ai-ocr-backend-services",
3-
"version": "1.0.0",
4-
"description": "AI OCR Backend Services",
5-
"author": "",
6-
"private": true,
7-
"license": "Apache-2.0",
8-
"scripts": {
9-
"build": "npm run db:generate && nest build",
10-
"build:prod": "NODE_ENV=production npm run db:generate && nest build",
11-
"format": "prettier --write \"src/**/*.ts\"",
12-
"start": "nest start",
13-
"start:dev": "CHOKIDAR_USEPOLLING=true CHOKIDAR_INTERVAL=1000 nest start --watch --preserveWatchOutput",
14-
"start:prod": "node dist/main",
15-
"lint": "npx @biomejs/biome check",
16-
"lint:fix": "npm run lint -- --write",
17-
"test": "jest --passWithNoTests",
18-
"test:watch": "jest --watch",
19-
"test:int": "./integration-tests/run.sh",
20-
"test:int:workflow": "ts-node -r tsconfig-paths/register integration-tests/test-graph-workflow.ts",
21-
"test:int:workflow:with-worker": "MANAGE_WORKER=true ts-node -r tsconfig-paths/register integration-tests/test-graph-workflow.ts",
22-
"test:cov": "jest --coverage",
23-
"db:generate": "node ../shared/scripts/generate-prisma.js",
24-
"db:migrate": "prisma migrate dev",
25-
"db:reset": "prisma migrate reset",
26-
"db:status": "prisma migrate status",
27-
"db:studio": "BROWSER=none prisma studio --port 5555",
28-
"db:seed": "prisma db seed"
29-
},
30-
"dependencies": {
31-
"@aws-sdk/client-s3": "^3.990.0",
32-
"@azure-rest/ai-document-intelligence": "1.1.0",
33-
"@azure/storage-blob": "12.30.0",
34-
"@nestjs/axios": "4.0.1",
35-
"@nestjs/common": "^11.1.12",
36-
"@nestjs/config": "^4.0.2",
37-
"@nestjs/core": "^11.1.12",
38-
"@nestjs/passport": "^11.0.5",
39-
"@nestjs/platform-express": "11.1.13",
40-
"@nestjs/schedule": "6.1.0",
41-
"@nestjs/swagger": "11.2.5",
42-
"@nestjs/throttler": "^6.5.0",
43-
"@prisma/adapter-pg": "7.2.0",
44-
"@prisma/client": "7.2.0",
45-
"@temporalio/client": "^1.10.0",
46-
"@types/helmet": "^0.0.48",
47-
"ajv": "^8.17.1",
48-
"bcrypt": "^6.0.0",
49-
"body-parser": "^1.20.3",
50-
"class-transformer": "^0.5.1",
51-
"class-validator": "^0.14.3",
52-
"cookie-parser": "^1.4.7",
53-
"dotenv": "^17.2.3",
54-
"express": "^5.2.1",
55-
"helmet": "^8.1.0",
56-
"jwks-rsa": "^3.2.0",
57-
"openid-client": "^6.8.2",
58-
"passport": "^0.7.0",
59-
"passport-jwt": "^4.0.1",
60-
"pg": "^8.16.3",
61-
"prisma": "7.2.0",
62-
"rxjs": "^7.8.2",
63-
"uuid": "13.0.0"
64-
},
65-
"devDependencies": {
66-
"@nestjs/cli": "^11.0.13",
67-
"@nestjs/schematics": "^11.0.9",
68-
"@nestjs/testing": "11.1.9",
69-
"@swc/cli": "^0.7.9",
70-
"@swc/core": "^1.15.3",
71-
"@testcontainers/postgresql": "11.10.0",
72-
"@types/cookie-parser": "^1.4.10",
73-
"@types/express": "5.0.6",
74-
"@types/jest": "30.0.0",
75-
"@types/multer": "2.0.0",
76-
"@types/node": "24.10.1",
77-
"@types/passport-jwt": "^4.0.1",
78-
"@types/supertest": "6.0.3",
79-
"@types/uuid": "11.0.0",
80-
"import-local": "3.2.0",
81-
"jest": "30.2.0",
82-
"source-map-support": "^0.5.21",
83-
"supertest": "7.1.4",
84-
"testcontainers": "11.10.0",
85-
"ts-jest": "29.4.5",
86-
"ts-node": "^10.9.2",
87-
"tsconfig-paths": "^4.2.0",
88-
"tsx": "^4.20.6",
89-
"typescript": "^5.9.3"
90-
},
91-
"engines": {
92-
"node": ">=24.0.0",
93-
"npm": ">=10.0.0"
94-
},
95-
"jest": {
96-
"moduleFileExtensions": [
97-
"js",
98-
"json",
99-
"ts"
100-
],
101-
"rootDir": "src",
102-
"testRegex": ".*\\.spec\\.ts$",
103-
"transform": {
104-
"^.+\\.(t|j)s$": "ts-jest"
105-
},
106-
"collectCoverageFrom": [
107-
"**/*.(t|j)s",
108-
"!**/*.spec.ts",
109-
"!**/node_modules/**",
110-
"!**/generated/**",
111-
"!main.ts"
112-
],
113-
"coverageDirectory": "../coverage",
114-
"testEnvironment": "node",
115-
"transformIgnorePatterns": [
116-
"node_modules/(?!(uuid|openid-client|oauth4webapi|jose))"
117-
],
118-
"moduleNameMapper": {
119-
"^@/(.*)$": "<rootDir>/$1",
120-
"^@generated/(.*)$": "<rootDir>/generated/$1"
121-
},
122-
"setupFiles": [
123-
"./testUtils/testSetup.ts"
124-
],
125-
"coverageThreshold": {
126-
"global": {
127-
"branches": 70,
128-
"functions": 70,
129-
"lines": 70,
130-
"statements": 70
131-
}
132-
}
133-
}
2+
"name": "ai-ocr-backend-services",
3+
"version": "1.0.0",
4+
"description": "AI OCR Backend Services",
5+
"author": "",
6+
"private": true,
7+
"license": "Apache-2.0",
8+
"scripts": {
9+
"build": "npm run db:generate && nest build",
10+
"build:prod": "NODE_ENV=production npm run db:generate && nest build",
11+
"format": "prettier --write \"src/**/*.ts\"",
12+
"start": "nest start",
13+
"start:dev": "CHOKIDAR_USEPOLLING=true CHOKIDAR_INTERVAL=1000 nest start --watch --preserveWatchOutput",
14+
"start:prod": "node dist/main",
15+
"lint": "npx @biomejs/biome check",
16+
"lint:fix": "npm run lint -- --write",
17+
"type-check": "tsc --noEmit",
18+
"test": "jest --passWithNoTests",
19+
"test:watch": "jest --watch",
20+
"test:int": "./integration-tests/run.sh",
21+
"test:int:workflow": "ts-node -r tsconfig-paths/register integration-tests/test-graph-workflow.ts",
22+
"test:int:workflow:with-worker": "MANAGE_WORKER=true ts-node -r tsconfig-paths/register integration-tests/test-graph-workflow.ts",
23+
"test:cov": "jest --coverage",
24+
"db:generate": "node ../shared/scripts/generate-prisma.js",
25+
"db:migrate": "prisma migrate dev",
26+
"db:reset": "prisma migrate reset",
27+
"db:status": "prisma migrate status",
28+
"db:studio": "BROWSER=none prisma studio --port 5555",
29+
"db:seed": "prisma db seed"
30+
},
31+
"dependencies": {
32+
"@aws-sdk/client-s3": "^3.990.0",
33+
"@azure-rest/ai-document-intelligence": "1.1.0",
34+
"@azure/storage-blob": "12.30.0",
35+
"@nestjs/axios": "4.0.1",
36+
"@nestjs/common": "^11.1.12",
37+
"@nestjs/config": "^4.0.2",
38+
"@nestjs/core": "^11.1.12",
39+
"@nestjs/passport": "^11.0.5",
40+
"@nestjs/platform-express": "11.1.13",
41+
"@nestjs/schedule": "6.1.0",
42+
"@nestjs/swagger": "11.2.5",
43+
"@nestjs/throttler": "^6.5.0",
44+
"@prisma/adapter-pg": "7.2.0",
45+
"@prisma/client": "7.2.0",
46+
"@temporalio/client": "^1.10.0",
47+
"@types/helmet": "^0.0.48",
48+
"ajv": "^8.17.1",
49+
"bcrypt": "^6.0.0",
50+
"body-parser": "^1.20.3",
51+
"class-transformer": "^0.5.1",
52+
"class-validator": "^0.14.3",
53+
"cookie-parser": "^1.4.7",
54+
"dotenv": "^17.2.3",
55+
"express": "^5.2.1",
56+
"helmet": "^8.1.0",
57+
"jwks-rsa": "^3.2.0",
58+
"openid-client": "^6.8.2",
59+
"passport": "^0.7.0",
60+
"passport-jwt": "^4.0.1",
61+
"pg": "^8.16.3",
62+
"prisma": "7.2.0",
63+
"rxjs": "^7.8.2",
64+
"uuid": "13.0.0"
65+
},
66+
"devDependencies": {
67+
"@biomejs/biome": "2.4.8",
68+
"@nestjs/cli": "^11.0.13",
69+
"@nestjs/schematics": "^11.0.9",
70+
"@nestjs/testing": "11.1.9",
71+
"@swc/cli": "^0.7.9",
72+
"@swc/core": "^1.15.3",
73+
"@testcontainers/postgresql": "11.10.0",
74+
"@types/cookie-parser": "^1.4.10",
75+
"@types/express": "5.0.6",
76+
"@types/jest": "30.0.0",
77+
"@types/multer": "2.0.0",
78+
"@types/node": "24.10.1",
79+
"@types/passport-jwt": "^4.0.1",
80+
"@types/supertest": "6.0.3",
81+
"@types/uuid": "11.0.0",
82+
"import-local": "3.2.0",
83+
"jest": "30.2.0",
84+
"source-map-support": "^0.5.21",
85+
"supertest": "7.1.4",
86+
"testcontainers": "11.10.0",
87+
"ts-jest": "29.4.5",
88+
"ts-node": "^10.9.2",
89+
"tsconfig-paths": "^4.2.0",
90+
"tsx": "^4.20.6",
91+
"typescript": "^5.9.3"
92+
},
93+
"engines": {
94+
"node": ">=24.0.0",
95+
"npm": ">=10.0.0"
96+
},
97+
"jest": {
98+
"moduleFileExtensions": [
99+
"js",
100+
"json",
101+
"ts"
102+
],
103+
"rootDir": "src",
104+
"testRegex": ".*\\.spec\\.ts$",
105+
"transform": {
106+
"^.+\\.(t|j)s$": "ts-jest"
107+
},
108+
"collectCoverageFrom": [
109+
"**/*.(t|j)s",
110+
"!**/*.spec.ts",
111+
"!**/node_modules/**",
112+
"!**/generated/**",
113+
"!main.ts"
114+
],
115+
"coverageDirectory": "../coverage",
116+
"testEnvironment": "node",
117+
"transformIgnorePatterns": [
118+
"node_modules/(?!(uuid|openid-client|oauth4webapi|jose))"
119+
],
120+
"moduleNameMapper": {
121+
"^@/(.*)$": "<rootDir>/$1",
122+
"^@generated/(.*)$": "<rootDir>/generated/$1"
123+
},
124+
"setupFiles": [
125+
"./testUtils/testSetup.ts"
126+
],
127+
"coverageThreshold": {
128+
"global": {
129+
"branches": 70,
130+
"functions": 70,
131+
"lines": 70,
132+
"statements": 70
133+
}
134+
}
135+
}
134136
}

apps/backend-services/src/benchmark/dataset.service.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,6 @@ export class DatasetService {
642642
);
643643

644644
if (
645-
// biome-ignore lint/security/noSecrets: not a secret, bucket error check
646645
err.message.includes("NoSuchBucket") ||
647646
err.message.includes("bucket does not exist")
648647
) {

apps/frontend/biome.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
{
2-
"$schema": "https://biomejs.dev/schemas/2.3.7/schema.json",
2+
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
33
"vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
4-
"files": { "includes": ["**", "!!**/dist", "!!**/node_modules"] },
4+
"files": {
5+
"includes": ["**", "!!**/dist", "!!**/node_modules", "!!package.json"]
6+
},
57
"formatter": { "enabled": true, "indentStyle": "space" },
68
"linter": {
79
"enabled": true,

0 commit comments

Comments
 (0)