Skip to content

Commit 4ca0990

Browse files
skripted-ioRon de las Alas
authored and
Ron de las Alas
committedNov 2, 2023
chore: gha boiler plate. nvmrc file
1 parent 1c9ff0d commit 4ca0990

File tree

4 files changed

+467
-336
lines changed

4 files changed

+467
-336
lines changed
 

‎.circleci/config.yml

+345-336
Original file line numberDiff line numberDiff line change
@@ -1,347 +1,356 @@
11
version: 2.1
22
orbs:
3-
browser-tools: circleci/browser-tools@1.2.4
4-
commitlint: conventional-changelog/commitlint@1.0.0
5-
node: circleci/node@5.1.0
3+
browser-tools: circleci/browser-tools@1.2.4
4+
commitlint: conventional-changelog/commitlint@1.0.0
5+
node: circleci/node@5.1.0
66
aliases:
7-
- &save_git_cache
8-
save_cache:
9-
paths:
10-
- .git
11-
key: v3-git-{{ .Revision }}
12-
- &restore_git_cache
13-
restore_cache:
14-
keys:
15-
- v3-git-{{ .Revision }}
16-
- v3-git-
17-
- &save_build_cache
18-
save_cache:
19-
paths:
20-
- build
21-
key: v3-build-{{ .Revision }}
22-
- &restore_build_cache
23-
restore_cache:
24-
keys:
25-
- v3-build-{{ .Revision }}
26-
- &save_dist_cache
27-
save_cache:
28-
paths:
29-
- dist
30-
key: v3-dist-{{ .Revision }}
31-
- &restore_dist_cache
32-
restore_cache:
33-
keys:
34-
- v3-dist-{{ .Revision }}
35-
- &save_npm_cache
36-
save_cache:
37-
paths:
38-
- node_modules
39-
- src/generated
40-
- static/microbit
41-
key: v4-npm-{{ checksum "package-lock.json" }}
42-
- &restore_npm_cache
43-
restore_cache:
44-
keys:
45-
- v4-npm-{{ checksum "package-lock.json" }}
46-
- v4-npm-
47-
- &defaults
48-
docker:
49-
# TODO: fix scratch-audio and change this to `cimg/node:lts-browsers`
50-
- image: cimg/node:14.21-browsers
51-
auth:
52-
username: $DOCKERHUB_USERNAME
53-
password: $DOCKERHUB_PASSWORD
54-
executor: node/default
55-
working_directory: ~/repo
7+
- &save_git_cache
8+
save_cache:
9+
paths:
10+
- .git
11+
key: v3-git-{{ .Revision }}
12+
- &restore_git_cache
13+
restore_cache:
14+
keys:
15+
- v3-git-{{ .Revision }}
16+
- v3-git-
17+
- &save_build_cache
18+
save_cache:
19+
paths:
20+
- build
21+
key: v3-build-{{ .Revision }}
22+
- &restore_build_cache
23+
restore_cache:
24+
keys:
25+
- v3-build-{{ .Revision }}
26+
- &save_dist_cache
27+
save_cache:
28+
paths:
29+
- dist
30+
key: v3-dist-{{ .Revision }}
31+
- &restore_dist_cache
32+
restore_cache:
33+
keys:
34+
- v3-dist-{{ .Revision }}
35+
- &save_npm_cache
36+
save_cache:
37+
paths:
38+
- node_modules
39+
- src/generated
40+
- static/microbit
41+
key: v4-npm-{{ checksum "package-lock.json" }}
42+
- &restore_npm_cache
43+
restore_cache:
44+
keys:
45+
- v4-npm-{{ checksum "package-lock.json" }}
46+
- v4-npm-
47+
- &defaults
48+
docker:
49+
# TODO: fix scratch-audio and change this to `cimg/node:lts-browsers`
50+
- image: cimg/node:14.21-browsers
51+
auth:
52+
username: $DOCKERHUB_USERNAME
53+
password: $DOCKERHUB_PASSWORD
54+
executor: node/default
55+
working_directory: ~/repo
5656

5757
jobs:
58-
build-test-no-cache:
59-
<<: *defaults
60-
environment:
61-
DETECT_CHROMEDRIVER_VERSION: "true"
62-
JEST_JUNIT_OUTPUT_DIR: test-results
63-
NODE_OPTIONS: --max-old-space-size=4000
64-
steps:
65-
- *restore_git_cache
66-
- checkout
67-
- browser-tools/install-chrome # must be before node/install-packages
68-
- node/install-packages
69-
- run:
70-
name: Lint
71-
command: npm run test:lint -- --quiet --output-file test-results/eslint-results.xml --format junit
72-
- run:
73-
name: Unit
74-
environment:
75-
JEST_JUNIT_OUTPUT_NAME: unit-results.xml
76-
command: npm run test:unit -- --reporters="default" --reporters="jest-junit" --coverage --coverageReporters=text --coverageReporters=lcov --maxWorkers="2"
77-
- run:
78-
name: Build
79-
environment:
58+
build-test-no-cache:
59+
<<: *defaults
60+
environment:
61+
DETECT_CHROMEDRIVER_VERSION: "true"
62+
JEST_JUNIT_OUTPUT_DIR: test-results
63+
NODE_OPTIONS: --max-old-space-size=4000
64+
steps:
65+
- *restore_git_cache
66+
- checkout
67+
- browser-tools/install-chrome # must be before node/install-packages
68+
- node/install-packages
69+
- run:
70+
name: Lint
71+
command: npm run test:lint -- --quiet --output-file test-results/eslint-results.xml --format junit
72+
- run:
73+
name: Unit
74+
environment:
75+
JEST_JUNIT_OUTPUT_NAME: unit-results.xml
76+
command: npm run test:unit -- --reporters="default" --reporters="jest-junit" --coverage --coverageReporters=text --coverageReporters=lcov --maxWorkers="2"
77+
- run:
78+
name: Build
79+
environment:
80+
NODE_ENV: production
81+
command: npm run build
82+
- run:
83+
name: Integration
84+
environment:
85+
JEST_JUNIT_OUTPUT_NAME: integration-results.xml
86+
command: |
87+
google-chrome --version
88+
npx --no -- chromedriver --version
89+
npm run test:integration -- --reporters="default" --reporters="jest-junit"
90+
- store_artifacts:
91+
path: coverage
92+
- store_test_results:
93+
path: test-results
94+
- run: npx --no -- semantic-release --dry-run
95+
96+
setup:
97+
<<: *defaults
98+
environment:
99+
DETECT_CHROMEDRIVER_VERSION: "true"
100+
steps:
101+
- *restore_git_cache
102+
- checkout
103+
- browser-tools/install-chrome # must be before node/install-packages
104+
- node/install-packages
105+
- *save_git_cache
106+
- *save_npm_cache
107+
108+
lint:
109+
<<: *defaults
110+
steps:
111+
- *restore_git_cache
112+
- checkout
113+
- *restore_npm_cache
114+
- run:
115+
name: Lint
116+
command: npm run test:lint -- --quiet --output-file test-results/eslint/results.xml --format junit
117+
- store_test_results:
118+
path: test-results
119+
120+
unit:
121+
<<: *defaults
122+
environment:
123+
JEST_JUNIT_OUTPUT_NAME: results.xml
124+
steps:
125+
- *restore_git_cache
126+
- checkout
127+
- *restore_npm_cache
128+
- run:
129+
name: Unit
130+
environment:
131+
JEST_JUNIT_OUTPUT_DIR: test-results/unit
132+
command: npm run test:unit -- --reporters="default" --reporters="jest-junit" --coverage --coverageReporters=text --coverageReporters=lcov --maxWorkers="2"
133+
- store_artifacts:
134+
path: coverage
135+
- store_test_results:
136+
path: test-results
137+
138+
build:
139+
<<: *defaults
140+
environment:
80141
NODE_ENV: production
81-
command: npm run build
82-
- run:
83-
name: Integration
84-
environment:
85-
JEST_JUNIT_OUTPUT_NAME: integration-results.xml
86-
command: |
87-
google-chrome --version
88-
npx --no -- chromedriver --version
89-
npm run test:integration -- --reporters="default" --reporters="jest-junit"
90-
- store_artifacts:
91-
path: coverage
92-
- store_test_results:
93-
path: test-results
94-
- run: npx --no -- semantic-release --dry-run
95-
setup:
96-
<<: *defaults
97-
environment:
98-
DETECT_CHROMEDRIVER_VERSION: "true"
99-
steps:
100-
- *restore_git_cache
101-
- checkout
102-
- browser-tools/install-chrome # must be before node/install-packages
103-
- node/install-packages
104-
- *save_git_cache
105-
- *save_npm_cache
106-
lint:
107-
<<: *defaults
108-
steps:
109-
- *restore_git_cache
110-
- checkout
111-
- *restore_npm_cache
112-
- run:
113-
name: Lint
114-
command: npm run test:lint -- --quiet --output-file test-results/eslint/results.xml --format junit
115-
- store_test_results:
116-
path: test-results
117-
unit:
118-
<<: *defaults
119-
environment:
120-
JEST_JUNIT_OUTPUT_NAME: results.xml
121-
steps:
122-
- *restore_git_cache
123-
- checkout
124-
- *restore_npm_cache
125-
- run:
126-
name: Unit
127-
environment:
128-
JEST_JUNIT_OUTPUT_DIR: test-results/unit
129-
command: npm run test:unit -- --reporters="default" --reporters="jest-junit" --coverage --coverageReporters=text --coverageReporters=lcov --maxWorkers="2"
130-
- store_artifacts:
131-
path: coverage
132-
- store_test_results:
133-
path: test-results
134-
build:
135-
<<: *defaults
136-
environment:
137-
NODE_ENV: production
138-
NODE_OPTIONS: --max-old-space-size=4000
139-
steps:
140-
- *restore_git_cache
141-
- checkout
142-
- *restore_npm_cache
143-
- run:
144-
name: Build
145-
command: npm run build
146-
- *save_build_cache
147-
- *save_dist_cache
148-
store_build:
149-
<<: *defaults
150-
steps:
151-
- *restore_build_cache
152-
- store_artifacts:
153-
path: build
154-
store_dist:
155-
<<: *defaults
156-
steps:
157-
- *restore_dist_cache
158-
- store_artifacts:
159-
path: dist
160-
integration:
161-
<<: *defaults
162-
parallelism: 2
163-
environment:
164-
JEST_JUNIT_OUTPUT_NAME: results.txt
165-
steps:
166-
- *restore_git_cache
167-
- checkout
168-
- *restore_npm_cache
169-
- *restore_build_cache
170-
- browser-tools/install-chrome
171-
- run:
172-
name: Integration
173-
environment:
174-
JEST_JUNIT_OUTPUT_DIR: test-results/integration
175-
command: |
176-
google-chrome --version
177-
npx --no -- chromedriver --version
178-
export TESTFILES=$(circleci tests glob "test/integration/*.test.js" | circleci tests split --split-by=timings)
179-
$(npm bin)/jest ${TESTFILES} --reporters="default" --reporters="jest-junit" --runInBand
180-
- store_test_results:
181-
path: test-results
142+
NODE_OPTIONS: --max-old-space-size=4000
143+
steps:
144+
- *restore_git_cache
145+
- checkout
146+
- *restore_npm_cache
147+
- run:
148+
name: Build
149+
command: npm run build
150+
- *save_build_cache
151+
- *save_dist_cache
152+
153+
store_build:
154+
<<: *defaults
155+
steps:
156+
- *restore_build_cache
157+
- store_artifacts:
158+
path: build
159+
store_dist:
160+
<<: *defaults
161+
steps:
162+
- *restore_dist_cache
163+
- store_artifacts:
164+
path: dist
182165

183-
deploy-npm:
184-
<<: *defaults
185-
steps:
186-
- *restore_git_cache
187-
- checkout
188-
- *restore_npm_cache
189-
- *restore_dist_cache
190-
- run:
191-
name: adjust config for hotfix if necessary
192-
command: |
193-
# double brackets are important for matching the wildcard
194-
if [[ "$CIRCLE_BRANCH" == hotfix/* ]]; then
195-
sed -e "s|hotfix/REPLACE|${CIRCLE_BRANCH}|" --in-place release.config.js
196-
fi
197-
- run: npx --no -- semantic-release
166+
integration:
167+
<<: *defaults
168+
parallelism: 2
169+
environment:
170+
JEST_JUNIT_OUTPUT_NAME: results.txt
171+
steps:
172+
- *restore_git_cache
173+
- checkout
174+
- *restore_npm_cache
175+
- *restore_build_cache
176+
- browser-tools/install-chrome
177+
- run:
178+
name: Integration
179+
environment:
180+
JEST_JUNIT_OUTPUT_DIR: test-results/integration
181+
command: |
182+
google-chrome --version
183+
npx --no -- chromedriver --version
184+
export TESTFILES=$(circleci tests glob "test/integration/*.test.js" | circleci tests split --split-by=timings)
185+
$(npm bin)/jest ${TESTFILES} --reporters="default" --reporters="jest-junit" --runInBand
186+
- store_test_results:
187+
path: test-results
198188

199-
deploy-gh-pages:
200-
<<: *defaults
201-
steps:
202-
- *restore_git_cache
203-
- checkout
204-
- *restore_npm_cache
205-
- *restore_build_cache
206-
- run: |
207-
git config --global user.email $(git log --pretty=format:"%ae" -n1)
208-
git config --global user.name $(git log --pretty=format:"%an" -n1)
209-
- run: npm run deploy -- -e $CIRCLE_BRANCH
210-
push-translations:
211-
<<: *defaults
212-
steps:
213-
- *restore_git_cache
214-
- checkout
215-
- *restore_npm_cache
216-
- run: npm run i18n:src
217-
- run: npm run i18n:push
189+
deploy-npm:
190+
<<: *defaults
191+
steps:
192+
- *restore_git_cache
193+
- checkout
194+
- *restore_npm_cache
195+
- *restore_dist_cache
196+
- run:
197+
name: adjust config for hotfix if necessary
198+
command: |
199+
# double brackets are important for matching the wildcard
200+
if [[ "$CIRCLE_BRANCH" == hotfix/* ]]; then
201+
sed -e "s|hotfix/REPLACE|${CIRCLE_BRANCH}|" --in-place release.config.js
202+
fi
203+
- run: npx --no -- semantic-release
204+
205+
deploy-gh-pages:
206+
<<: *defaults
207+
steps:
208+
- *restore_git_cache
209+
- checkout
210+
- *restore_npm_cache
211+
- *restore_build_cache
212+
- run: |
213+
git config --global user.email $(git log --pretty=format:"%ae" -n1)
214+
git config --global user.name $(git log --pretty=format:"%an" -n1)
215+
- run: npm run deploy -- -e $CIRCLE_BRANCH
216+
push-translations:
217+
<<: *defaults
218+
steps:
219+
- *restore_git_cache
220+
- checkout
221+
- *restore_npm_cache
222+
- run: npm run i18n:src
223+
- run: npm run i18n:push
218224

219225
workflows:
220-
version: 2
221-
commitlint:
222-
jobs:
223-
- commitlint/lint:
224-
target-branch: develop
225-
filters:
226-
branches:
227-
ignore:
228-
- master
229-
- develop
230-
- beta
231-
- /^hotfix\/.*/
232-
push-translations:
233-
triggers:
234-
- schedule:
235-
cron: 0 0 * * * # daily at 12 UTC, 8 ET
236-
filters:
237-
branches:
238-
only:
239-
- develop
240-
jobs:
241-
- setup:
242-
context:
243-
- dockerhub-credentials
244-
- push-translations:
245-
context:
246-
- dockerhub-credentials
247-
requires:
248-
- setup
226+
version: 2
227+
228+
commitlint:
229+
jobs:
230+
- commitlint/lint:
231+
target-branch: develop
232+
filters:
233+
branches:
234+
ignore:
235+
- master
236+
- develop
237+
- beta
238+
- /^hotfix\/.*/
239+
240+
push-translations:
241+
triggers:
242+
- schedule:
243+
cron: 0 0 * * * # daily at 12 UTC, 8 ET
244+
filters:
245+
branches:
246+
only:
247+
- develop
248+
jobs:
249+
- setup:
250+
context:
251+
- dockerhub-credentials
252+
- push-translations:
253+
context:
254+
- dockerhub-credentials
255+
requires:
256+
- setup
257+
258+
# build-test-no-deploy: (ms: does nothing)
259+
# jobs:
260+
# - build-test-no-cache:
261+
# context:
262+
# - dockerhub-credentials
263+
# filters:
264+
# branches:
265+
# ignore:
266+
# - master
267+
# - develop
268+
# - beta
269+
# - /^hotfix\/.*/
249270

250-
build-test-no-deploy:
251-
jobs:
252-
- build-test-no-cache:
253-
context:
254-
- dockerhub-credentials
255-
filters:
256-
branches:
257-
ignore:
258-
- master
259-
- develop
260-
- beta
261-
- /^hotfix\/.*/
262-
build-test-deploy:
263-
jobs:
264-
- setup:
265-
context:
266-
- dockerhub-credentials
267-
filters:
268-
branches:
269-
only:
270-
- master
271-
- develop
272-
- beta
273-
- /^hotfix\/.*/
274-
- lint:
275-
context:
276-
- dockerhub-credentials
277-
requires:
278-
- setup
279-
- unit:
280-
context:
281-
- dockerhub-credentials
282-
requires:
283-
- setup
284-
- build:
285-
context:
286-
- dockerhub-credentials
287-
requires:
288-
- setup
289-
- integration:
290-
context:
291-
- dockerhub-credentials
292-
requires:
293-
- build
294-
- store_build:
295-
context:
296-
- dockerhub-credentials
297-
requires:
298-
- build
299-
filters:
300-
branches:
301-
only:
302-
- master
303-
- develop
304-
- beta
305-
- /^hotfix\/.*/
306-
- store_dist:
307-
context:
308-
- dockerhub-credentials
309-
requires:
310-
- build
311-
filters:
312-
branches:
313-
only:
314-
- master
315-
- develop
316-
- beta
317-
- /^hotfix\/.*/
318-
- deploy-npm:
319-
context:
320-
- dockerhub-credentials
321-
- scratch-npm-creds
322-
requires:
323-
- lint
324-
- unit
325-
- integration
326-
- build
327-
filters:
328-
branches:
329-
only:
330-
- master
331-
- develop
332-
- beta
333-
- /^hotfix\/.*/
334-
- deploy-gh-pages:
335-
context:
336-
- dockerhub-credentials
337-
requires:
338-
- lint
339-
- unit
340-
- integration
341-
- build
342-
filters:
343-
branches:
344-
ignore:
345-
- /^dependabot/.*/
346-
- /^renovate/.*/
347-
- /^pull/.*/ # don't deploy to gh pages on PRs.
271+
build-test-deploy:
272+
jobs:
273+
- setup:
274+
context:
275+
- dockerhub-credentials
276+
filters:
277+
branches:
278+
only:
279+
- master
280+
- develop
281+
- beta
282+
- /^hotfix\/.*/
283+
- lint:
284+
context:
285+
- dockerhub-credentials
286+
requires:
287+
- setup
288+
- unit:
289+
context:
290+
- dockerhub-credentials
291+
requires:
292+
- setup
293+
- build:
294+
context:
295+
- dockerhub-credentials
296+
requires:
297+
- setup
298+
- integration:
299+
context:
300+
- dockerhub-credentials
301+
requires:
302+
- build
303+
- store_build:
304+
context:
305+
- dockerhub-credentials
306+
requires:
307+
- build
308+
filters:
309+
branches:
310+
only:
311+
- master
312+
- develop
313+
- beta
314+
- /^hotfix\/.*/
315+
- store_dist:
316+
context:
317+
- dockerhub-credentials
318+
requires:
319+
- build
320+
filters:
321+
branches:
322+
only:
323+
- master
324+
- develop
325+
- beta
326+
- /^hotfix\/.*/
327+
- deploy-npm:
328+
context:
329+
- dockerhub-credentials
330+
- scratch-npm-creds
331+
requires:
332+
- lint
333+
- unit
334+
- integration
335+
- build
336+
filters:
337+
branches:
338+
only:
339+
- master
340+
- develop
341+
- beta
342+
- /^hotfix\/.*/
343+
- deploy-gh-pages:
344+
context:
345+
- dockerhub-credentials
346+
requires:
347+
- lint
348+
- unit
349+
- integration
350+
- build
351+
filters:
352+
branches:
353+
ignore:
354+
- /^dependabot/.*/
355+
- /^renovate/.*/
356+
- /^pull/.*/ # don't deploy to gh pages on PRs.

‎.github/workflows/ci-cd.yml

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
name: CI/CD
2+
3+
on:
4+
workflow_dispatch: # Allows you to run this workflow manually from the Actions tab
5+
pull_request: # Runs whenever a pull request is created or updated
6+
push: # Runs whenever a commit is pushed to the repository
7+
branches: [master, develop, beta, hotfix/*]
8+
9+
concurrency:
10+
group: "${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}"
11+
cancel-in-progress: true
12+
13+
permissions:
14+
contents: write # publish a GitHub release
15+
pages: write # deploy to GitHub Pages
16+
issues: write # comment on released issues
17+
pull-requests: write # comment on released pull requests
18+
19+
jobs:
20+
ci-cd:
21+
runs-on: ubuntu-latest
22+
env:
23+
TRIGGER_DEPLOY: ${{ startsWith(github.ref, 'refs/heads/master') }}
24+
steps:
25+
- uses: actions/checkout@v4
26+
- uses: wagoid/commitlint-github-action@v5
27+
if: github.event_name == 'pull_request'
28+
- uses: actions/setup-node@v3
29+
with:
30+
cache: "npm"
31+
node-version-file: ".nvmrc"
32+
33+
- name: Info
34+
run: |
35+
cat <<EOF
36+
Node version: $(node --version)
37+
NPM version: $(npm --version)
38+
GitHub ref: ${{ github.ref }}
39+
GitHub head ref: ${{ github.head_ref }}
40+
EOF
41+
42+
- name: Install Google Chrome
43+
uses: browser-actions/setup-chrome@v1
44+
with:
45+
chrome-version: beta
46+
id: setup-chrome
47+
48+
- name: Chrome Info
49+
run: |
50+
echo Installed chromium version: ${{ steps.setup-chrome.outputs.chrome-version }}
51+
${{ steps.setup-chrome.outputs.chrome-path }} --version
52+
53+
- name: Install dependencies
54+
run: npm ci
55+
56+
- name: Setup & Test
57+
run: |
58+
mkdir -p ./test/results
59+
npm test
60+
61+
- name: Generate release version
62+
run: |
63+
export RELEASE_TIMESTAMP=$(date +'%Y%m%d%H%M%S')
64+
export VPKG=$($(npm bin)/json -f package.json version)
65+
export VERSION=${VPKG}-prerelease.${RELEASE_TIMESTAMP}
66+
67+
echo "RELEASE_VERSION=${VERSION}" >> $GITHUB_ENV
68+
69+
if [[ "${GITHUB_REF##*/}" == hotfix/* ]]; then
70+
echo "NPM_TAG=hotfix" >> $GITHUB_ENV
71+
else
72+
echo "NPM_TAG=latest" >> $GITHUB_ENV
73+
fi
74+
75+
- name: Build
76+
run: |
77+
npm run build
78+
npm --no-git-tag-version version $RELEASE_VERSION
79+
80+
- name: Semantic release (configured to run dry if branch is other than 'master')
81+
env:
82+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
83+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
84+
run: |
85+
npx --no -- semantic-release $([[ "$TRIGGER_DEPLOY" == "false" ]] && echo "--dry-run")

‎.github/workflows/daily-tx-pull.yml

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
name: Daily TX Push
2+
3+
on:
4+
workflow_dispatch: # Allows you to run this workflow manually from the Actions tab
5+
schedule:
6+
# daily-tx-push (e.g., daily at 12 UTC, 8 ET)
7+
- cron: "0 0 * * *"
8+
9+
concurrency:
10+
group: "${{ github.workflow }}"
11+
cancel-in-progress: true
12+
13+
permissions:
14+
contents: write # publish a GitHub release
15+
pages: write # deploy to GitHub Pages
16+
issues: write # comment on released issues
17+
pull-requests: write # comment on released pull requests
18+
19+
jobs:
20+
daily-tx-push:
21+
runs-on: ubuntu-latest
22+
23+
env:
24+
# Organization-wide secrets
25+
TX_TOKEN: ${{ secrets.TX_TOKEN }}
26+
27+
steps:
28+
- uses: actions/checkout@v4
29+
- uses: actions/setup-node@v3
30+
with:
31+
cache: "npm"
32+
node-version-file: ".nvmrc"
33+
34+
- name: Install dependencies
35+
run: npm ci
36+
# todo...

‎.nvmrc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
v16

0 commit comments

Comments
 (0)
Please sign in to comment.