-
Notifications
You must be signed in to change notification settings - Fork 60
139 lines (118 loc) · 4.67 KB
/
build.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
name: Node.js CI
on: [push]
env:
DEFAULT_NODE_VERSION: '20.x'
DEFAULT_OS_VERSION: 'ubuntu-latest'
CI: true
HUSKY: 0
jobs:
build:
name: Test
strategy:
fail-fast: false
max-parallel: 15
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
node-version: [18.x, 20.x, 22.x]
runs-on: ${{ matrix.os }}
env:
OS: ${{ matrix.os }}
NODE_VERSION: ${{ matrix.node-version }}
outputs:
is-release-candidate: ${{ steps.is-release-candidate.outputs.is-release-candidate }}
artifact-name: ${{ steps.set-artifact-name.outputs.artifact-name }}
steps:
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- uses: actions/checkout@v4
- name: Setup Cache
uses: actions/cache@v4
with:
path: '**/node_modules'
key: ${{ matrix.os }}-${{ matrix.node-version }}-pkgs-${{ hashFiles('**/package.json') }}
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install packages
run: npm install --ignore-scripts
- name: Clean
run: npm run clean
- name: Prettier Check
run: npm run prettier-check
- name: Build
run: npm run build
- name: Test
run: npm run test
- name: Docs
run: npm run docs
- name: Main CLI version smoke test
run: node ./dist/cli/leasot.js --version
- name: Main CLI smoke test
run: node ./dist/cli/leasot.js --help
- name: Reporter CLI smoke test
run: node ./dist/cli/leasot-reporter.js --help
- name: Check if release candidate
id: is-release-candidate
run: echo "is-release-candidate=${{ matrix.node-version == env.DEFAULT_NODE_VERSION && matrix.os == env.DEFAULT_OS_VERSION }}" >> $GITHUB_OUTPUT
- if: steps.is-release-candidate.outputs.is-release-candidate == 'true'
name: Set artifact build name output
id: set-artifact-name
run: echo "artifact-name=build-${{ matrix.os }}-${{ matrix.node-version }}" >> $GITHUB_OUTPUT
- if: steps.is-release-candidate.outputs.is-release-candidate == 'true'
uses: actions/upload-artifact@v4
with:
name: ${{ steps.set-artifact-name.outputs.artifact-name }}
retention-days: 7
path: |
./
!./node_modules/**/*
!./tests/**/*
!./media/**/*
!./src/**/*
ensure-valid-artifact:
name: Ensure valid artifact
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/download-artifact@v4
with:
name: ${{ needs.build.outputs.artifact-name }}
- name: Check artifact
run: test -d "./dist"
deploy-docs:
name: Deploy Docs
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
runs-on: ubuntu-latest
needs: [build, ensure-valid-artifact]
steps:
- uses: actions/download-artifact@v4
with:
name: ${{ needs.build.outputs.artifact-name }}
- name: Deploy Docs
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs
deploy-npm:
name: Deploy NPM
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
runs-on: ubuntu-latest
needs: [build, ensure-valid-artifact]
steps:
- uses: actions/download-artifact@v4
with:
name: ${{ needs.build.outputs.artifact-name }}
- name: Use Node.js ${{ env.DEFAULT_NODE_VERSION }} with NPM registry
uses: actions/setup-node@v4
with:
node-version: ${{ env.DEFAULT_NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'
- name: Disable prepare script (for husky)
run: npm set-script prepare ""
- name: Publish to NPM
run: npm publish --access public --ignore-scripts
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}