-
-
Notifications
You must be signed in to change notification settings - Fork 49
154 lines (136 loc) · 4.35 KB
/
tests-release.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
145
146
147
148
149
150
151
152
153
154
name: Tests for Release
on:
push:
branches:
- release-* # all release-<version> branches
pull_request:
# only non-draft PR and when there are "pushes" to the open PR
types: [review_requested, ready_for_review, synchronize]
branches:
- release-* # all release-<version> branches
jobs:
# STEP 1 - NPM Audit
# Before we even test a thing we want to have a clean audit! Since this is
# sufficient to be done using the lowest node version, we can easily use
# a fixed one:
audit:
name: NPM Audit
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
show-progress: false
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm clean-install && npm audit --production
# STEP 2 - basic unit tests
# This is the standard unit tests as we do in the basic tests for every PR
unittest:
name: Basic unit tests
runs-on: ubuntu-latest
needs: [audit]
strategy:
matrix:
node: [16, 18, 20]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
show-progress: false
- name: Setup node ${{ matrix.node }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
cache: npm
# for this workflow we also require npm audit to pass
- run: npm clean-install
- run: npm run test:coverage
# with the following action we enforce PRs to have a high coverage
# and ensure, changes are tested well enough so that coverage won't fail
- name: check coverage
uses: VeryGoodOpenSource/very_good_coverage@v3
with:
path: './coverage/lcov.info'
min_coverage: 95
# STEP 3 - Integration tests
# Since our release may affect several packages that depend on it we need to
# cover the closest ones, like adapters and examples.
integrationtests:
name: Extended integration tests
runs-on: ubuntu-latest
needs: [unittest]
strategy:
matrix:
node: [16, 18, 20] # TODO get running for node 16+
steps:
# checkout this repo
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
show-progress: false
# checkout express-adapter repo
- name: Checkout express-adapter
uses: actions/checkout@v4
with:
persist-credentials: false
show-progress: false
repository: node-oauth/express-oauth-server
path: github/testing/express
- name: Setup node ${{ matrix.node }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
cache: npm
# in order to test the adapter we need to use the current checkout
# and install it as local dependency
# we just cloned and install it as local dependency
# xxx: added bluebird as explicit dependency
- run: |
cd github/testing/express
npm install
npm install https://github.com/node-oauth/node-oauth2-server.git#${{ github.ref_name }}
npm run test
# todo repeat with other adapters
publish-npm-dry:
runs-on: ubuntu-latest
needs: [integrationtests]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
show-progress: false
- uses: actions/setup-node@v4
with:
node-version: 16
registry-url: https://registry.npmjs.org/
- run: npm clean-install
- run: npm publish --dry-run
env:
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
publish-github-dry:
needs: [integrationtests]
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
show-progress: false
- uses: actions/setup-node@v4
with:
# we always publish targeting the lowest supported node version
node-version: 16
registry-url: $registry-url(npm)
- run: npm clean-install
- run: npm publish --dry-run
env:
NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}