77 branches : [main, develop]
88
99jobs :
10- lint-and-test :
11- name : Lint, Type-Check, and Test
10+ setup :
11+ name : Setup Dependencies
1212 runs-on : ubuntu-latest
13+ outputs :
14+ cache-hit : ${{ steps.cache-node-modules.outputs.cache-hit }}
1315
1416 steps :
1517 - name : Checkout code
@@ -21,15 +23,96 @@ jobs:
2123 node-version : " 20"
2224 cache : " npm"
2325
26+ - name : Cache node modules
27+ id : cache-node-modules
28+ uses : actions/cache@v4
29+ with :
30+ path : ~/.npm
31+ key : ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
32+ restore-keys : |
33+ ${{ runner.os }}-node-
34+
35+ - name : Install dependencies
36+ run : npm ci
37+
38+ lint :
39+ name : Lint Code
40+ runs-on : ubuntu-latest
41+ needs : setup
42+
43+ steps :
44+ - name : Checkout code
45+ uses : actions/checkout@v4
46+
47+ - name : Setup Node.js
48+ uses : actions/setup-node@v4
49+ with :
50+ node-version : " 20"
51+ cache : " npm"
52+
53+ - name : Restore cached dependencies
54+ uses : actions/cache@v4
55+ with :
56+ path : ~/.npm
57+ key : ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
58+
2459 - name : Install dependencies
2560 run : npm ci
2661
2762 - name : Run linter
2863 run : npm run lint
2964
65+ type-check :
66+ name : Type Check
67+ runs-on : ubuntu-latest
68+ needs : setup
69+
70+ steps :
71+ - name : Checkout code
72+ uses : actions/checkout@v4
73+
74+ - name : Setup Node.js
75+ uses : actions/setup-node@v4
76+ with :
77+ node-version : " 20"
78+ cache : " npm"
79+
80+ - name : Restore cached dependencies
81+ uses : actions/cache@v4
82+ with :
83+ path : ~/.npm
84+ key : ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
85+
86+ - name : Install dependencies
87+ run : npm ci
88+
3089 - name : Run type-check
3190 run : npx tsc --noEmit
3291
92+ test :
93+ name : Run Tests
94+ runs-on : ubuntu-latest
95+ needs : setup
96+
97+ steps :
98+ - name : Checkout code
99+ uses : actions/checkout@v4
100+
101+ - name : Setup Node.js
102+ uses : actions/setup-node@v4
103+ with :
104+ node-version : " 20"
105+ cache : " npm"
106+
107+ - name : Restore cached dependencies
108+ uses : actions/cache@v4
109+ with :
110+ path : ~/.npm
111+ key : ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
112+
113+ - name : Install dependencies
114+ run : npm ci
115+
33116 - name : Run tests
34117 run : npm run test:run
35118
47130 build :
48131 name : Build Application
49132 runs-on : ubuntu-latest
50- needs : lint-and- test
133+ needs : [ lint, type-check, test]
51134
52135 steps :
53136 - name : Checkout code
@@ -59,6 +142,12 @@ jobs:
59142 node-version : " 20"
60143 cache : " npm"
61144
145+ - name : Restore cached dependencies
146+ uses : actions/cache@v4
147+ with :
148+ path : ~/.npm
149+ key : ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
150+
62151 - name : Install dependencies
63152 run : npm ci
64153
@@ -88,6 +177,12 @@ jobs:
88177 node-version : " 20"
89178 cache : " npm"
90179
180+ - name : Restore cached dependencies
181+ uses : actions/cache@v4
182+ with :
183+ path : ~/.npm
184+ key : ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
185+
91186 - name : Install dependencies
92187 run : npm ci
93188
0 commit comments