A social knowledge tool for researchers built on ATProto
1name: Tests
2
3on:
4 push:
5 branches: [main, development]
6 pull_request:
7 branches: [main, development]
8
9jobs:
10 dependencies:
11 name: Install Dependencies
12 runs-on: ubuntu-latest
13 outputs:
14 cache-hit: ${{ steps.cache-deps.outputs.cache-hit }}
15 steps:
16 - name: Checkout code
17 uses: actions/checkout@v4
18
19 - name: Setup Node.js
20 uses: actions/setup-node@v4
21 with:
22 node-version: '20'
23
24 - name: Cache dependencies
25 id: cache-deps
26 uses: actions/cache@v4
27 with:
28 path: |
29 node_modules
30 src/webapp/node_modules
31 src/types/node_modules
32 key: ${{ runner.os }}-deps-${{ hashFiles('package-lock.json') }}
33 restore-keys: |
34 ${{ runner.os }}-deps-
35
36 - name: Install dependencies
37 if: steps.cache-deps.outputs.cache-hit != 'true'
38 run: npm ci
39
40 build:
41 name: Build
42 runs-on: ubuntu-latest
43 needs: dependencies
44 steps:
45 - name: Checkout code
46 uses: actions/checkout@v4
47
48 - name: Setup Node.js
49 uses: actions/setup-node@v4
50 with:
51 node-version: '20'
52
53 - name: Restore dependencies
54 uses: actions/cache@v4
55 with:
56 path: |
57 node_modules
58 src/webapp/node_modules
59 src/types/node_modules
60 key: ${{ runner.os }}-deps-${{ hashFiles('package-lock.json') }}
61
62 - name: Install dependencies (if cache miss)
63 run: |
64 if [ ! -d "node_modules" ]; then
65 npm ci
66 fi
67
68 - name: Build project
69 run: |
70 npm run build:types
71 npm run build
72
73 unit-tests:
74 name: Unit Tests
75 runs-on: ubuntu-latest
76 needs: dependencies
77 steps:
78 - name: Checkout code
79 uses: actions/checkout@v4
80
81 - name: Setup Node.js
82 uses: actions/setup-node@v4
83 with:
84 node-version: '20'
85
86 - name: Restore dependencies
87 uses: actions/cache@v4
88 with:
89 path: |
90 node_modules
91 src/webapp/node_modules
92 src/types/node_modules
93 key: ${{ runner.os }}-deps-${{ hashFiles('package-lock.json') }}
94
95 - name: Install dependencies (if cache miss)
96 run: |
97 if [ ! -d "node_modules" ]; then
98 npm ci
99 fi
100
101 - name: Run unit tests
102 run: npm run test:unit -- --maxWorkers=2
103
104 integration-tests:
105 name: Integration Tests
106 runs-on: ubuntu-latest
107 needs: dependencies
108
109 services:
110 docker:
111 image: docker:24-dind
112 options: --privileged
113
114 steps:
115 - name: Checkout code
116 uses: actions/checkout@v4
117
118 - name: Setup Node.js
119 uses: actions/setup-node@v4
120 with:
121 node-version: '20'
122
123 - name: Restore dependencies
124 uses: actions/cache@v4
125 with:
126 path: |
127 node_modules
128 src/webapp/node_modules
129 src/types/node_modules
130 key: ${{ runner.os }}-deps-${{ hashFiles('package-lock.json') }}
131
132 - name: Install dependencies (if cache miss)
133 run: |
134 if [ ! -d "node_modules" ]; then
135 npm ci
136 fi
137
138 - name: Run database integration tests
139 run: npm run test:integration:db -- --maxWorkers=2
140 env:
141 # Testcontainers needs Docker
142 TESTCONTAINERS_RYUK_DISABLED: true