-
Notifications
You must be signed in to change notification settings - Fork 2
144 lines (112 loc) Β· 4.41 KB
/
ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
name: CI
on:
push:
branches: [main, develop, dependabot/develop]
pull_request:
branches: [main, develop, dependabot/develop]
env:
# Note: The schema is dev (rather than develop) because that is the branch name on the API repo
# If this is a push to main or a pull request targeting main, use the main schema
SCHEMA_VERSION: "${{ github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'pull_request' && github.base_ref == 'main' && 'main' || 'dev' }}"
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout π
uses: actions/checkout@master
- name: Setup node env π
uses: actions/setup-node@v4
with:
node-version: 20
check-latest: true
- name: Get yarn cache directory path π
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- name: Cache node_modules π¦
uses: actions/cache@v4
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies π¨π»βπ»
run: yarn
- name: Load GraphQL πΈ
run: API_BASE=https://staging.api.uobtheatre.com yarn codegen
- name: Run tests π§ͺ
run: yarn test:unit --coverage
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout π
uses: actions/checkout@master
- name: Setup node env π
uses: actions/setup-node@v4
with:
node-version: 20
check-latest: true
- name: Get yarn cache directory path π
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- name: Cache node_modules π¦
uses: actions/cache@v4
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies π¨π»βπ»
run: yarn
- name: Load GraphQL Codegen πΈ
run: GQL_SCHEMA=https://raw.githubusercontent.com/BristolSTA/uobtheatre-api/${{ env.SCHEMA_VERSION }}/schema.graphql yarn codegen
- name: Run linter π
run: yarn lint:tsc && yarn lint:js
- name: Check Prettier β¨
run: yarn prettier:check
e2e:
runs-on: ubuntu-latest
steps:
- name: Checkout π
uses: actions/checkout@master
- name: Copy Testing Env β
run: cp .env.test .env
- name: Setup node env π
uses: actions/setup-node@v4
with:
node-version: 20
check-latest: true
- name: Get yarn cache directory path π
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- name: Cache node_modules π¦
uses: actions/cache@v4
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install Yarn Dependencies π¨π»βπ»
run: yarn
- name: Authenticate with GitHub Container Registry π
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Copy Dev Container Env π
run: cp .devcontainer/.env.example .devcontainer/.env
- name: Start Real API β
run: docker compose -f .devcontainer/docker-compose.yml up -d postgres uobtheatre-api
- name: Wait for API to boot π«
run: node .github/scripts/waiton-api.js http://localhost:9000
- name: Load GraphQL Codegen πΈ
run: API_BASE=http://localhost:9000 yarn codegen
- name: Run End-to-End Tests π§ͺ
uses: cypress-io/github-action@v6
timeout-minutes: 7
with:
start: yarn beforetest:e2e:ci
wait-on: 'http://localhost:3000'