-
Notifications
You must be signed in to change notification settings - Fork 28
144 lines (118 loc) · 4.17 KB
/
test-publish.yaml
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
name: Test and Conditionally Publish
on:
push:
paths-ignore:
- '.anylint'
- '.editorconfig'
- '.env.example'
- '.gitattributes'
- '.gitignore'
- 'commitlint.config.js'
- 'LICENSE'
pull_request:
branches:
- master
paths-ignore:
- '.anylint'
- '.editorconfig'
- '.env.example'
- '.gitattributes'
- '.gitignore'
- 'commitlint.config.js'
- 'LICENSE'
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up pnpm
uses: pnpm/action-setup@v2
with:
run_install: false # For cache
# pnpm should be installed before the setup-node action. REF: https://github.com/actions/setup-node/issues/530
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
cache: pnpm
- name: Install Dependencies
run: pnpm install --silent --frozen-lockfile --ignore-scripts
- name: Test
run: pnpm test
- name: Lint
run: pnpm eslint .
- name: Lint Markdown
run: pnpm markdownlint .
e2etest:
needs: test
runs-on: ${{ matrix.os }}
strategy:
matrix:
node-version: [16, 18, 20]
os: [ubuntu-latest, macOS-latest, windows-latest, windows-2019]
steps:
- uses: actions/checkout@v4
- name: Set up pnpm
uses: pnpm/action-setup@v2
with:
run_install: false # For cache
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: pnpm
- name: Install Dependencies
run: pnpm install --silent --frozen-lockfile --ignore-scripts
- name: Run Local Npm Registry (Verdaccio) On Linux Or macOS
# verdaccio is private npm registry. [link](https://github.com/verdaccio/verdaccio/)
if: startsWith(matrix.os, 'windows') == false # use an operrator "==" as "!startsWith(matrix.os, 'windows')" causes an error
run: |
# trailing `&` detaches process from foreground
pnpm verdaccio &
- name: Run Local Npm Registry (Verdaccio) On Windows
if: startsWith(matrix.os, 'windows')
run: |
pnpm add --global forever
forever start node_modules\verdaccio\bin\verdaccio --config ./verdaccio/conf/default.yaml
- name: Publish To Local NPM Registry
run: |
# From npm v7, `npm adduser` is required before `npm publish`.
# (adduser REF: https://docs.npmjs.com/cli/v7/commands/npm-adduser)
# However, `npm adduser` is interactive
# and can be substituted by setting `_authToken`.
# By local verdaccio setting(verdaccio/conf/default.yaml),
# the _authToken can be any random string,
# and anyone can publish hasura-cli.
npm config set //localhost:4873/:_authToken helloworld
npm publish --registry http://localhost:4873
- name: Test Installation
run: |
npm install --global hasura-cli --registry http://localhost:4873
hasura version --skip-update-check
- name: Test Uninstallation
if: startsWith(matrix.os, 'windows') == false
run: npm uninstall --global hasura-cli
publish:
needs: e2etest
if: startsWith(github.ref, 'refs/tags/v2.') && ( github.event.base_ref == 'refs/heads/master' )
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up pnpm
uses: pnpm/action-setup@v2
with:
run_install: false # For cache
- name: Set Up Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
cache: pnpm
- name: Install Dependencies
run: pnpm install --silent --frozen-lockfile --ignore-scripts
- name: Build and Publish
# only runs if name of git tag starts with 'v1.' and on branch master
run: |
pnpm build # to prevent a mistake though there is already prepublishOnly lifecycle hook.
pnpm publish
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}