build: Node.js@16.15
[express.git] / .github / workflows / ci.yml
bloba4b40dc982f10ef995269af06a617a3269175f14
1 name: ci
3 on:
4 - pull_request
5 - push
7 jobs:
8   test:
9     runs-on: ubuntu-latest
10     strategy:
11       fail-fast: false
12       matrix:
13         name:
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
35         include:
36         - name: Node.js 0.10
37           node-version: "0.10"
38           npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0
40         - name: Node.js 0.12
41           node-version: "0.12"
42           npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0
44         - name: io.js 1.x
45           node-version: "1.8"
46           npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0
48         - name: io.js 2.x
49           node-version: "2.5"
50           npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0
52         - name: io.js 3.x
53           node-version: "3.3"
54           npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0
56         - name: Node.js 4.x
57           node-version: "4.9"
58           npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2
60         - name: Node.js 5.x
61           node-version: "5.12"
62           npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2
64         - name: Node.js 6.x
65           node-version: "6.17"
66           npm-i: mocha@6.2.2 nyc@14.1.1 supertest@3.4.2
68         - name: Node.js 7.x
69           node-version: "7.10"
70           npm-i: mocha@6.2.2 nyc@14.1.1 supertest@6.1.6
72         - name: Node.js 8.x
73           node-version: "8.17"
74           npm-i: mocha@7.2.0
76         - name: Node.js 9.x
77           node-version: "9.11"
78           npm-i: mocha@7.2.0
80         - name: Node.js 10.x
81           node-version: "10.24"
82           npm-i: mocha@8.4.0
84         - name: Node.js 11.x
85           node-version: "11.15"
86           npm-i: mocha@8.4.0
88         - name: Node.js 12.x
89           node-version: "12.22"
91         - name: Node.js 13.x
92           node-version: "13.14"
94         - name: Node.js 14.x
95           node-version: "14.19"
97         - name: Node.js 15.x
98           node-version: "15.14"
100         - name: Node.js 16.x
101           node-version: "16.15"
103         - name: Node.js 17.x
104           node-version: "17.9"
106         - name: Node.js 18.x
107           node-version: "18.0"
109     steps:
110     - uses: actions/checkout@v2
112     - name: Install Node.js ${{ matrix.node-version }}
113       shell: bash -eo pipefail -l {0}
114       run: |
115         nvm install --default ${{ matrix.node-version }}
116         dirname "$(nvm which ${{ matrix.node-version }})" >> "$GITHUB_PATH"
118     - name: Configure npm
119       run: |
120         npm config set loglevel error
121         npm config set shrinkwrap false
123     - name: Install npm module(s) ${{ matrix.npm-i }}
124       run: npm install --save-dev ${{ matrix.npm-i }}
125       if: matrix.npm-i != ''
127     - name: Remove non-test dependencies
128       run: npm rm --silent --save-dev connect-redis
130     - name: Setup Node.js version-specific dependencies
131       shell: bash
132       run: |
133         # eslint for linting
134         # - remove on Node.js < 10
135         if [[ "$(cut -d. -f1 <<< "${{ matrix.node-version }}")" -lt 10 ]]; then
136           node -pe 'Object.keys(require("./package").devDependencies).join("\n")' | \
137             grep -E '^eslint(-|$)' | \
138             sort -r | \
139             xargs -n1 npm rm --silent --save-dev
140         fi
142     - name: Install Node.js dependencies
143       run: npm install
145     - name: List environment
146       id: list_env
147       shell: bash
148       run: |
149         echo "node@$(node -v)"
150         echo "npm@$(npm -v)"
151         npm -s ls ||:
152         (npm -s ls --depth=0 ||:) | awk -F'[ @]' 'NR>1 && $2 { print "::set-output name=" $2 "::" $3 }'
154     - name: Run tests
155       shell: bash
156       run: npm run test-ci
158     - name: Lint code
159       if: steps.list_env.outputs.eslint != ''
160       run: npm run lint
162     - name: Collect code coverage
163       uses: coverallsapp/github-action@master
164       with:
165         github-token: ${{ secrets.GITHUB_TOKEN }}
166         flag-name: run-${{ matrix.test_number }}
167         parallel: true
169   coverage:
170     needs: test
171     runs-on: ubuntu-latest
172     steps:
173     - name: Upload code coverage
174       uses: coverallsapp/github-action@master
175       with:
176         github-token: ${{ secrets.github_token }}
177         parallel-finished: true