11name : ci
22
33on :
4- - pull_request
5- - push
4+ push :
5+ branches :
6+ - ' v2'
7+ paths-ignore :
8+ - ' *.md'
9+ pull_request :
10+ branches :
11+ - ' v2'
12+ paths-ignore :
13+ - ' *.md'
14+
15+ permissions :
16+ contents : read
17+
18+ # Cancel in progress workflows
19+ # in the scenario where we already had a run going for that PR/branch/tag but then triggered a new run
20+ concurrency :
21+ group : " ${{ github.workflow }} ✨ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}"
22+ cancel-in-progress : true
623
724jobs :
25+ lint :
26+ name : Lint
27+ runs-on : ubuntu-latest
28+ steps :
29+ - uses : actions/checkout@v4
30+ - name : Setup Node.js
31+ uses : actions/setup-node@v4
32+ with :
33+ node-version : ' lts/*'
34+
35+ - name : Install dependencies
36+ run : npm install --ignore-scripts --include=dev
37+
38+ - name : Run lint
39+ run : npm run lint
40+
841 test :
942 runs-on : ubuntu-latest
1043 strategy :
44+ fail-fast : false
1145 matrix :
12- name :
13- - Node.js 0.8
14- - Node.js 0.10
15- - Node.js 0.12
16- - io.js 1.x
17- - io.js 2.x
18- - io.js 3.x
19- - Node.js 4.x
20- - Node.js 5.x
21- - Node.js 6.x
22- - Node.js 7.x
23- - Node.js 8.x
24- - Node.js 9.x
25- - Node.js 10.x
26- - Node.js 11.x
27- - Node.js 12.x
28- - Node.js 13.x
29- - Node.js 14.x
30- - Node.js 15.x
31- - Node.js 16.x
32- - Node.js 17.x
33- - Node.js 18.x
34- - Node.js 19.x
35- - Node.js 20.x
36- - Node.js 21.x
37-
38- include :
39- - name : Node.js 0.8
40- node-version : " 0.8"
41- npm-i : mocha@2.5.3 supertest@1.1.0
42- npm-rm : nyc
43-
44- - name : Node.js 0.10
45- node-version : " 0.10"
46- npm-i : mocha@2.5.3 nyc@10.3.2 supertest@2.0.0
47-
48- - name : Node.js 0.12
49- node-version : " 0.12"
50- npm-i : mocha@2.5.3 nyc@10.3.2 supertest@2.0.0
51-
52- - name : io.js 1.x
53- node-version : " 1.8"
54- npm-i : mocha@2.5.3 nyc@10.3.2 supertest@2.0.0
55-
56- - name : io.js 2.x
57- node-version : " 2.5"
58- npm-i : mocha@2.5.3 nyc@10.3.2 supertest@2.0.0
59-
60- - name : io.js 3.x
61- node-version : " 3.3"
62- npm-i : mocha@2.5.3 nyc@10.3.2 supertest@2.0.0
63-
64- - name : Node.js 4.x
65- node-version : " 4.9"
66- npm-i : mocha@5.2.0 nyc@11.9.0 supertest@3.4.2
67-
68- - name : Node.js 5.x
69- node-version : " 5.12"
70- npm-i : mocha@5.2.0 nyc@11.9.0 supertest@3.4.2
71-
72- - name : Node.js 6.x
73- node-version : " 6.17"
74- npm-i : mocha@6.2.2 nyc@14.1.1 supertest@6.1.6
75-
76- - name : Node.js 7.x
77- node-version : " 7.10"
78- npm-i : mocha@6.2.2 nyc@14.1.1 supertest@6.1.6
79-
80- - name : Node.js 8.x
81- node-version : " 8.17"
82- npm-i : mocha@7.2.0 nyc@14.1.1
83-
84- - name : Node.js 9.x
85- node-version : " 9.11"
86- npm-i : mocha@7.2.0 nyc@14.1.1
87-
88- - name : Node.js 10.x
89- node-version : " 10.24"
90- npm-i : mocha@8.4.0
91-
92- - name : Node.js 11.x
93- node-version : " 11.15"
94- npm-i : mocha@8.4.0
95-
96- - name : Node.js 12.x
97- node-version : " 12.22"
98- npm-i : mocha@9.2.2
99-
100- - name : Node.js 13.x
101- node-version : " 13.14"
102- npm-i : mocha@9.2.2
103-
104- - name : Node.js 14.x
105- node-version : " 14.21"
106-
107- - name : Node.js 15.x
108- node-version : " 15.14"
109-
110- - name : Node.js 16.x
111- node-version : " 16.20"
112-
113- - name : Node.js 17.x
114- node-version : " 17.9"
115-
116- - name : Node.js 18.x
117- node-version : " 18.19"
118-
119- - name : Node.js 19.x
120- node-version : " 19.9"
121-
122- - name : Node.js 20.x
123- node-version : " 20.11"
124-
125- - name : Node.js 21.x
126- node-version : " 21.6"
127-
46+ node-version : [18, 19, 20, 21, 22, 23]
47+ # Node.js release schedule: https://nodejs.org/en/about/releases/
48+ name : Test - Node.js ${{ matrix.node-version }}
12849 steps :
129- - uses : actions/checkout@v4
130-
131- - name : Install Node.js ${{ matrix.node-version }}
132- shell : bash -eo pipefail -l {0}
133- run : |
134- nvm install --default ${{ matrix.node-version }}
135- if [[ "${{ matrix.node-version }}" == 0.* && "$(cut -d. -f2 <<< "${{ matrix.node-version }}")" -lt 10 ]]; then
136- nvm install --alias=npm 0.10
137- nvm use ${{ matrix.node-version }}
138- sed -i '1s;^.*$;'"$(printf '#!%q' "$(nvm which npm)")"';' "$(readlink -f "$(which npm)")"
139- npm config set strict-ssl false
140- fi
141- dirname "$(nvm which ${{ matrix.node-version }})" >> "$GITHUB_PATH"
142-
143- - name : Configure npm
144- run : |
145- if [[ "$(npm config get package-lock)" == "true" ]]; then
146- npm config set package-lock false
147- else
148- npm config set shrinkwrap false
149- fi
150-
151- - name : Remove npm module(s) ${{ matrix.npm-rm }}
152- run : npm rm --silent --save-dev ${{ matrix.npm-rm }}
153- if : matrix.npm-rm != ''
154-
155- - name : Install npm module(s) ${{ matrix.npm-i }}
156- run : npm install --save-dev ${{ matrix.npm-i }}
157- if : matrix.npm-i != ''
158-
159- - name : Setup Node.js version-specific dependencies
160- shell : bash
161- run : |
162- # eslint for linting
163- # - remove on Node.js < 12
164- if [[ "$(cut -d. -f1 <<< "${{ matrix.node-version }}")" -lt 12 ]]; then
165- node -pe 'Object.keys(require("./package").devDependencies).join("\n")' | \
166- grep -E '^eslint(-|$)' | \
167- sort -r | \
168- xargs -n1 npm rm --silent --save-dev
169- fi
170-
171- - name : Install Node.js dependencies
172- run : npm install
173-
174- - name : List environment
175- id : list_env
176- shell : bash
177- run : |
178- echo "node@$(node -v)"
179- echo "npm@$(npm -v)"
180- npm -s ls ||:
181- (npm -s ls --depth=0 ||:) | awk -F'[ @]' 'NR>1 && $2 { print $2 "=" $3 }' >> "$GITHUB_OUTPUT"
182-
183- - name : Run tests
184- shell : bash
185- run : |
186- if npm -ps ls nyc | grep -q nyc; then
187- npm run test-ci
188- cp coverage/lcov.info "coverage/${{ matrix.node-version }}.lcov"
189- else
190- npm test
191- fi
192-
193- - name : Lint code
194- if : steps.list_env.outputs.eslint != ''
195- run : npm run lint
196-
197- - name : Collect code coverage
198- if : steps.list_env.outputs.nyc != ''
199- run : |
200- if [[ -d ./coverage ]]; then
201- mv ./coverage "./${{ matrix.node-version }}"
202- mkdir ./coverage
203- mv "./${{ matrix.node-version }}" "./coverage/${{ matrix.node-version }}"
204- fi
205-
206- - name : Upload code coverage
207- uses : actions/upload-artifact@v4
208- if : steps.list_env.outputs.nyc != ''
209- with :
210- name : coverage-${{ matrix.node-version }}
211- path : " ./coverage/${{ matrix.node-version }}"
212- retention-days : 1
50+ - uses : actions/checkout@v4
51+ with :
52+ persist-credentials : false
21353
214- coverage :
215- needs : test
216- runs-on : ubuntu-latest
217- steps :
218- - uses : actions/checkout@v4
54+ - name : Setup Node.js ${{ matrix.node-version }}
55+ uses : actions/setup-node@v4
56+ with :
57+ node-version : ${{ matrix.node-version }}
58+
59+ - name : Configure npm loglevel
60+ run : |
61+ npm config set loglevel error
62+ shell : bash
63+
64+ - name : Install dependencies
65+ run : npm install
21966
220- - name : Install lcov
221- shell : bash
222- run : sudo apt-get -y install lcov
22367
224- - name : Collect coverage reports
225- uses : actions/download-artifact@v4
226- with :
227- path : ./coverage
68+ - name : Run tests
69+ shell : bash
70+ run : npm run test-ci
22871
229- - name : Merge coverage reports
230- shell : bash
231- run : find ./coverage -name lcov.info -exec printf '-a %q\n' {} \; | xargs lcov -o ./coverage/lcov.info
72+ - name : Upload code coverage
73+ uses : actions/upload-artifact@v4
74+ with :
75+ name : coverage-node-${{ matrix.node-version }}
76+ path : ./coverage/lcov.info
77+ retention-days : 1
23278
233- - name : Upload coverage report
234- uses : coverallsapp/github-action@master
235- with :
236- github-token : ${{ secrets.GITHUB_TOKEN }}
79+ coverage :
80+ needs : test
81+ runs-on : ubuntu-latest
82+ permissions :
83+ contents : read
84+ checks : write
85+ steps :
86+ - uses : actions/checkout@v4
87+
88+ - name : Install lcov
89+ shell : bash
90+ run : sudo apt-get -y install lcov
91+
92+ - name : Collect coverage reports
93+ uses : actions/download-artifact@v4
94+ with :
95+ path : ./coverage
96+ pattern : coverage-node-*
97+
98+ - name : Merge coverage reports
99+ shell : bash
100+ run : find ./coverage -name lcov.info -exec printf '-a %q\n' {} \; | xargs lcov -o ./lcov.info
101+
102+ - name : Upload coverage report
103+ uses : coverallsapp/github-action@v2
104+ with :
105+ file : ./lcov.info
0 commit comments