Skip to content

Commit 87d316e

Browse files
authored
Merge pull request #117 from per1234/check-npm
Add infrastructure to check for problems with npm configuration files
2 parents b5d4453 + f402045 commit 87d316e

File tree

3 files changed

+170
-0
lines changed

3 files changed

+170
-0
lines changed

.github/workflows/check-npm-task.yml

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/check-npm-task.md
2+
name: Check npm
3+
4+
env:
5+
# See: https://github.com/actions/setup-node/#readme
6+
NODE_VERSION: 16.x
7+
8+
# See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows
9+
on:
10+
create:
11+
push:
12+
paths:
13+
- ".github/workflows/check-npm-task.ya?ml"
14+
- "**/package.json"
15+
- "**/package-lock.json"
16+
- "Taskfile.ya?ml"
17+
pull_request:
18+
paths:
19+
- ".github/workflows/check-npm-task.ya?ml"
20+
- "**/package.json"
21+
- "**/package-lock.json"
22+
- "Taskfile.ya?ml"
23+
schedule:
24+
# Run every Tuesday at 8 AM UTC to catch breakage resulting from changes to the JSON schema.
25+
- cron: "0 8 * * TUE"
26+
workflow_dispatch:
27+
repository_dispatch:
28+
29+
permissions:
30+
contents: read
31+
32+
jobs:
33+
run-determination:
34+
runs-on: ubuntu-latest
35+
outputs:
36+
result: ${{ steps.determination.outputs.result }}
37+
steps:
38+
- name: Determine if the rest of the workflow should run
39+
id: determination
40+
run: |
41+
RELEASE_BRANCH_REGEX="refs/heads/[0-9]+.[0-9]+.x"
42+
# The `create` event trigger doesn't support `branches` filters, so it's necessary to use Bash instead.
43+
if [[
44+
"${{ github.event_name }}" != "create" ||
45+
"${{ github.ref }}" =~ $RELEASE_BRANCH_REGEX
46+
]]; then
47+
# Run the other jobs.
48+
RESULT="true"
49+
else
50+
# There is no need to run the other jobs.
51+
RESULT="false"
52+
fi
53+
54+
echo "result=$RESULT" >> $GITHUB_OUTPUT
55+
56+
validate:
57+
needs: run-determination
58+
if: needs.run-determination.outputs.result == 'true'
59+
runs-on: ubuntu-latest
60+
61+
steps:
62+
- name: Checkout repository
63+
uses: actions/checkout@v3
64+
65+
- name: Setup Node.js
66+
uses: actions/setup-node@v3
67+
with:
68+
node-version: ${{ env.NODE_VERSION }}
69+
70+
- name: Install Task
71+
uses: arduino/setup-task@v1
72+
with:
73+
repo-token: ${{ secrets.GITHUB_TOKEN }}
74+
version: 3.x
75+
76+
- name: Validate package.json
77+
run: task --silent npm:validate
78+
79+
check-sync:
80+
needs: run-determination
81+
if: needs.run-determination.outputs.result == 'true'
82+
runs-on: ubuntu-latest
83+
84+
steps:
85+
- name: Checkout repository
86+
uses: actions/checkout@v3
87+
88+
- name: Setup Node.js
89+
uses: actions/setup-node@v3
90+
with:
91+
node-version: ${{ env.NODE_VERSION }}
92+
93+
- name: Install Task
94+
uses: arduino/setup-task@v1
95+
with:
96+
repo-token: ${{ secrets.GITHUB_TOKEN }}
97+
version: 3.x
98+
99+
- name: Install npm dependencies
100+
run: task npm:install-deps
101+
102+
- name: Check package-lock.json
103+
run: git diff --color --exit-code package-lock.json

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
[![Check General Formatting status](https://github.com/arduino/compile-sketches/actions/workflows/check-general-formatting-task.yml/badge.svg)](https://github.com/arduino/compile-sketches/actions/workflows/check-general-formatting-task.yml)
66
[![Check License status](https://github.com/arduino/compile-sketches/actions/workflows/check-license.yml/badge.svg)](https://github.com/arduino/compile-sketches/actions/workflows/check-license.ym
77
[![Check Markdown status](https://github.com/arduino/compile-sketches/actions/workflows/check-markdown-task.yml/badge.svg)](https://github.com/arduino/compile-sketches/actions/workflows/check-markdown-task.yml)
8+
[![Check npm status](https://github.com/arduino/compile-sketches/actions/workflows/check-npm-task.yml/badge.svg)](https://github.com/arduino/compile-sketches/actions/workflows/check-npm-task.yml)
89
[![Check Python status](https://github.com/arduino/compile-sketches/actions/workflows/check-python-task.yml/badge.svg)](https://github.com/arduino/compile-sketches/actions/workflows/check-python-task.yml)
910
[![Spell Check status](https://github.com/arduino/compile-sketches/actions/workflows/spell-check-task.yml/badge.svg)](https://github.com/arduino/compile-sketches/actions/workflows/spell-check-task.yml)
1011
[![Sync Labels status](https://github.com/arduino/compile-sketches/actions/workflows/sync-labels-npm.yml/badge.svg)](https://github.com/arduino/compile-sketches/actions/workflows/sync-labels-npm.yml)

Taskfile.yml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ version: "3"
33

44
vars:
55
PYTHON_PROJECT_PATH: compilesketches
6+
# Last version of ajv-cli with support for the JSON schema "Draft 4" specification
7+
SCHEMA_DRAFT_4_AJV_CLI_VERSION: 3.3.0
68

79
tasks:
810
check:
@@ -261,6 +263,70 @@ tasks:
261263
cmds:
262264
- npm install
263265

266+
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-npm-task/Taskfile.yml
267+
npm:validate:
268+
desc: Validate npm configuration files against their JSON schema
269+
vars:
270+
# Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/package.json
271+
SCHEMA_URL: https://json.schemastore.org/package.json
272+
SCHEMA_PATH:
273+
sh: task utility:mktemp-file TEMPLATE="package-json-schema-XXXXXXXXXX.json"
274+
# Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/ava.json
275+
AVA_SCHEMA_URL: https://json.schemastore.org/ava.json
276+
AVA_SCHEMA_PATH:
277+
sh: task utility:mktemp-file TEMPLATE="ava-schema-XXXXXXXXXX.json"
278+
# Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/eslintrc.json
279+
ESLINTRC_SCHEMA_URL: https://json.schemastore.org/eslintrc.json
280+
ESLINTRC_SCHEMA_PATH:
281+
sh: task utility:mktemp-file TEMPLATE="eslintrc-schema-XXXXXXXXXX.json"
282+
# Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/jscpd.json
283+
JSCPD_SCHEMA_URL: https://json.schemastore.org/jscpd.json
284+
JSCPD_SCHEMA_PATH:
285+
sh: task utility:mktemp-file TEMPLATE="jscpd-schema-XXXXXXXXXX.json"
286+
# Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/npm-badges.json
287+
NPM_BADGES_SCHEMA_URL: https://json.schemastore.org/npm-badges.json
288+
NPM_BADGES_SCHEMA_PATH:
289+
sh: task utility:mktemp-file TEMPLATE="npm-badges-schema-XXXXXXXXXX.json"
290+
# Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/prettierrc.json
291+
PRETTIERRC_SCHEMA_URL: https://json.schemastore.org/prettierrc.json
292+
PRETTIERRC_SCHEMA_PATH:
293+
sh: task utility:mktemp-file TEMPLATE="prettierrc-schema-XXXXXXXXXX.json"
294+
# Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/semantic-release.json
295+
SEMANTIC_RELEASE_SCHEMA_URL: https://json.schemastore.org/semantic-release.json
296+
SEMANTIC_RELEASE_SCHEMA_PATH:
297+
sh: task utility:mktemp-file TEMPLATE="semantic-release-schema-XXXXXXXXXX.json"
298+
# Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/stylelintrc.json
299+
STYLELINTRC_SCHEMA_URL: https://json.schemastore.org/stylelintrc.json
300+
STYLELINTRC_SCHEMA_PATH:
301+
sh: task utility:mktemp-file TEMPLATE="stylelintrc-schema-XXXXXXXXXX.json"
302+
INSTANCE_PATH: "**/package.json"
303+
PROJECT_FOLDER:
304+
sh: pwd
305+
WORKING_FOLDER:
306+
sh: task utility:mktemp-folder TEMPLATE="dependabot-validate-XXXXXXXXXX"
307+
cmds:
308+
- wget --quiet --output-document="{{.SCHEMA_PATH}}" {{.SCHEMA_URL}}
309+
- wget --quiet --output-document="{{.AVA_SCHEMA_PATH}}" {{.AVA_SCHEMA_URL}}
310+
- wget --quiet --output-document="{{.ESLINTRC_SCHEMA_PATH}}" {{.ESLINTRC_SCHEMA_URL}}
311+
- wget --quiet --output-document="{{.JSCPD_SCHEMA_PATH}}" {{.JSCPD_SCHEMA_URL}}
312+
- wget --quiet --output-document="{{.NPM_BADGES_SCHEMA_PATH}}" {{.NPM_BADGES_SCHEMA_URL}}
313+
- wget --quiet --output-document="{{.PRETTIERRC_SCHEMA_PATH}}" {{.PRETTIERRC_SCHEMA_URL}}
314+
- wget --quiet --output-document="{{.SEMANTIC_RELEASE_SCHEMA_PATH}}" {{.SEMANTIC_RELEASE_SCHEMA_URL}}
315+
- wget --quiet --output-document="{{.STYLELINTRC_SCHEMA_PATH}}" {{.STYLELINTRC_SCHEMA_URL}}
316+
- |
317+
cd "{{.WORKING_FOLDER}}" # Workaround for https://github.com/npm/cli/issues/3210
318+
npx ajv-cli@{{.SCHEMA_DRAFT_4_AJV_CLI_VERSION}} validate \
319+
--all-errors \
320+
-s "{{.SCHEMA_PATH}}" \
321+
-r "{{.AVA_SCHEMA_PATH}}" \
322+
-r "{{.ESLINTRC_SCHEMA_PATH}}" \
323+
-r "{{.JSCPD_SCHEMA_PATH}}" \
324+
-r "{{.NPM_BADGES_SCHEMA_PATH}}" \
325+
-r "{{.PRETTIERRC_SCHEMA_PATH}}" \
326+
-r "{{.SEMANTIC_RELEASE_SCHEMA_PATH}}" \
327+
-r "{{.STYLELINTRC_SCHEMA_PATH}}" \
328+
-d "{{.PROJECT_FOLDER}}/{{.INSTANCE_PATH}}"
329+
264330
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/poetry-task/Taskfile.yml
265331
poetry:install-deps:
266332
desc: Install dependencies managed by Poetry

0 commit comments

Comments
 (0)