-
Notifications
You must be signed in to change notification settings - Fork 9
140 lines (120 loc) · 4.08 KB
/
lint-format.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
name: Linting and Formatting Checks
on:
pull_request:
types: [opened, reopened, synchronize, ready_for_review]
concurrency:
group: ${{ github.workflow }}-${{ github.event.number }}
cancel-in-progress: true
jobs:
# Checkout the repo once and cache it for use in subsequent jobs
checkoutRepo:
name: Checkout and cache target branch
runs-on: ubuntu-latest
timeout-minutes: 20
env:
PR_NUMBER: ${{ github.event.number }}
steps:
# Install Node - for `node` and `npm` commands
# Note: This already uses actions/cache internally, so repeat calls in subsequent jobs are not a performance hit
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Checkout Target Branch
uses: actions/checkout@v4
with:
persist-credentials: false
# Cache the repo
- name: Cache repo
uses: actions/cache@v4
id: cache-repo
env:
cache-name: cache-repo
with:
# Cache repo based on the commit sha that triggered the workflow
path: ${{ github.workspace }}/*
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }}
lintAndFormat:
name: Running Linter and Formatter
runs-on: ubuntu-latest
timeout-minutes: 20
needs:
- checkoutRepo
steps:
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
# Load repo from cache
- name: Cache repo
uses: actions/cache@v4
id: cache-repo
env:
cache-name: cache-repo
with:
path: ${{ github.workspace }}/*
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }}
# Checkout the branch if not restored via cache
- name: Checkout Target Branch
if: steps.cache-repo.outputs.cache-hit != 'true'
uses: actions/checkout@v4
# api
- name: Cache api node modules
uses: actions/cache@v4
env:
cache-name: cache-api-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('api/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
- name: Install api dependencies
working-directory: api
run: npm ci --include=dev
- name: Run api linter
working-directory: api
run: CI=true npm run lint
- name: Run api formater
working-directory: api
run: CI=true npm run format
# app
- name: Cache app node modules
uses: actions/cache@v4
env:
cache-name: cache-app-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
- name: Install app dependencies
working-directory: app
run: npm ci --include=dev
- name: Run app linter
working-directory: app
run: CI=true npm run lint
- name: Run app formater
working-directory: app
run: CI=true npm run format
# database
- name: Cache database node modules
uses: actions/cache@v4
env:
cache-name: cache-database-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('database/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
- name: Install database dependencies
working-directory: database
run: npm ci --include=dev
- name: Run database linter
working-directory: database
run: CI=true npm run lint
- name: Run database formatter
working-directory: database
run: CI=true npm run format