-
-
Notifications
You must be signed in to change notification settings - Fork 531
156 lines (155 loc) · 4.78 KB
/
continuous-integration.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
155
156
name: Continuous Integration
on:
# branches pushed by collaborators
push:
branches:
- main
# pull request from non-collaborators
pull_request: {}
# nightly
schedule:
- cron: '0 0 * * *'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
lint-build:
name: "Lint & Build"
runs-on: ubuntu-latest
steps:
# checkout code
- name: Checkout
uses: actions/checkout@v3
# install node
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 18
- name: Get cache directory
id: get-cache-directory
run: |
yarn config get cacheFolder
echo "path=$( yarn config get cacheFolder )" >> $GITHUB_OUTPUT
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ${{ steps.get-cache-directory.outputs.path }}
key: yarn-cache-packaging-${{ hashFiles('yarn.lock') }}
restore-keys: yarn-cache-packaging-
# lint, build, test
- name: Install dependencies
run: yarn install --immutable
- name: Lint
run: yarn lint
- name: Build
run: yarn build
- name: Upload package artifact
uses: actions/upload-artifact@v1
with:
name: ts-node-packed.tgz
path: tests/ts-node-packed.tgz
test:
needs: lint-build
name: "Test: ${{ matrix.os }}, node ${{ matrix.node }}, TS ${{ matrix.typescript }}"
runs-on: ${{ matrix.os }}-latest
env:
TEST_MATRIX_NODE_VERSION: ${{ matrix.node }}
TEST_MATRIX_TYPESCRIPT_VERSION: ${{ matrix.typescript }}
strategy:
fail-fast: false
matrix:
os: [ubuntu, windows]
# Don't forget to add all new flavors to this list!
flavor: [1, 2, 3, 4, 5, 6]
include:
# Node 16
- flavor: 1
node: 16
nodeFlag: 16
typescript: latest
typescriptFlag: latest
- flavor: 2
node: 16
nodeFlag: 16
typescript: 4.2
typescriptFlag: 4_2
# Node 18
- flavor: 3
node: 18
nodeFlag: 18
typescript: latest
typescriptFlag: latest
- flavor: 4
node: 18
nodeFlag: 18
typescript: next
typescriptFlag: next
# Node 20
- flavor: 5
node: 20
nodeFlag: 20
typescript: latest
typescriptFlag: latest
# Node nightly
- flavor: 6
node: 21-nightly
nodeFlag: 21_nightly
typescript: latest
typescriptFlag: latest
steps:
# checkout code
- name: Checkout
uses: actions/checkout@v3
# install node
- name: Use Node.js ${{ matrix.node }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
# lint, build, test
- name: Get cache directory
id: get-cache-directory
run: |
yarn config get cacheFolder
echo "path=$( yarn config get cacheFolder )" >> $GITHUB_OUTPUT
- name: Cache dependencies
if: ${{ matrix.os != 'windows' }}
uses: actions/cache@v3
with:
path: ${{ steps.get-cache-directory.outputs.path }}
key: yarn-cache-${{ matrix.os }}-${{ hashFiles('yarn.lock') }}
restore-keys: yarn-cache-${{matrix.os }}-
- name: Install dependencies
run: yarn install --immutable --mode=skip-build
- name: Build tests
run: yarn build-tsc
- name: Download package artifact
uses: actions/download-artifact@v1
with:
name: ts-node-packed.tgz
path: tests/
- name: Install typescript version to test against
run: yarn add -D typescript@${{ matrix.typescript }}
- name: Test
run: yarn test-cov
- name: Check for yarn logs
id: check-yarn-logs-exist
if: ${{ failure() }}
uses: andstor/file-existence-action@v2
with:
files: yarn-error.log
- name: Upload yarn logs
if: ${{ failure() && steps.check-yarn-logs-exist.outputs.files_exists == 'true' }}
uses: actions/upload-artifact@v1
with:
name: yarn-logs-${{ matrix.os }}-node-${{ matrix.nodeFlag }}-typescript-${{ matrix.typescriptFlag }}
path: yarn-error.log
- name: Coverage Report
run: yarn coverage-report
if: ${{ always() }}
- name: Codecov
if: ${{ always() }}
uses: codecov/codecov-action@v3
with:
flags: ${{ matrix.os }},node_${{ matrix.nodeFlag }},typescript_${{ matrix.typescriptFlag }}