Skip to content

Commit 81333b8

Browse files
committed
ci: restructure workflow for parallel execution with dependency caching
- Add setup job that installs dependencies and caches them - Split linting, type-checking, and testing into parallel jobs - Update build job to depend on all parallel jobs - All jobs now use cached dependencies for faster execution
1 parent 52e2125 commit 81333b8

File tree

1 file changed

+98
-3
lines changed

1 file changed

+98
-3
lines changed

.github/workflows/ci.yml

Lines changed: 98 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ on:
77
branches: [main, develop]
88

99
jobs:
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

@@ -47,7 +130,7 @@ jobs:
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

Comments
 (0)