|
1 | 1 | # See: https://taskfile.dev/#/usage
|
2 | 2 | version: "3"
|
3 | 3 |
|
| 4 | +vars: |
| 5 | + # Last version of ajv-cli with support for the JSON schema "Draft 4" specification |
| 6 | + SCHEMA_DRAFT_4_AJV_CLI_VERSION: 3.3.0 |
| 7 | + |
4 | 8 | tasks:
|
5 | 9 | # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-dependencies-task/Taskfile.yml
|
6 | 10 | general:cache-dep-licenses:
|
@@ -116,3 +120,102 @@ tasks:
|
116 | 120 | - task: npm:install-deps
|
117 | 121 | cmds:
|
118 | 122 | - npx markdownlint-cli "**/*.md"
|
| 123 | + |
| 124 | + # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-npm-task/Taskfile.yml |
| 125 | + npm:validate: |
| 126 | + desc: Validate npm configuration files against their JSON schema |
| 127 | + vars: |
| 128 | + # Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/package.json |
| 129 | + SCHEMA_URL: https://json.schemastore.org/package.json |
| 130 | + SCHEMA_PATH: |
| 131 | + sh: task utility:mktemp-file TEMPLATE="package-json-schema-XXXXXXXXXX.json" |
| 132 | + # Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/ava.json |
| 133 | + AVA_SCHEMA_URL: https://json.schemastore.org/ava.json |
| 134 | + AVA_SCHEMA_PATH: |
| 135 | + sh: task utility:mktemp-file TEMPLATE="ava-schema-XXXXXXXXXX.json" |
| 136 | + # Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/eslintrc.json |
| 137 | + ESLINTRC_SCHEMA_URL: https://json.schemastore.org/eslintrc.json |
| 138 | + ESLINTRC_SCHEMA_PATH: |
| 139 | + sh: task utility:mktemp-file TEMPLATE="eslintrc-schema-XXXXXXXXXX.json" |
| 140 | + # Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/jscpd.json |
| 141 | + JSCPD_SCHEMA_URL: https://json.schemastore.org/jscpd.json |
| 142 | + JSCPD_SCHEMA_PATH: |
| 143 | + sh: task utility:mktemp-file TEMPLATE="jscpd-schema-XXXXXXXXXX.json" |
| 144 | + # Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/npm-badges.json |
| 145 | + NPM_BADGES_SCHEMA_URL: https://json.schemastore.org/npm-badges.json |
| 146 | + NPM_BADGES_SCHEMA_PATH: |
| 147 | + sh: task utility:mktemp-file TEMPLATE="npm-badges-schema-XXXXXXXXXX.json" |
| 148 | + # Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/prettierrc.json |
| 149 | + PRETTIERRC_SCHEMA_URL: https://json.schemastore.org/prettierrc.json |
| 150 | + PRETTIERRC_SCHEMA_PATH: |
| 151 | + sh: task utility:mktemp-file TEMPLATE="prettierrc-schema-XXXXXXXXXX.json" |
| 152 | + # Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/semantic-release.json |
| 153 | + SEMANTIC_RELEASE_SCHEMA_URL: https://json.schemastore.org/semantic-release.json |
| 154 | + SEMANTIC_RELEASE_SCHEMA_PATH: |
| 155 | + sh: task utility:mktemp-file TEMPLATE="semantic-release-schema-XXXXXXXXXX.json" |
| 156 | + # Source: https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/stylelintrc.json |
| 157 | + STYLELINTRC_SCHEMA_URL: https://json.schemastore.org/stylelintrc.json |
| 158 | + STYLELINTRC_SCHEMA_PATH: |
| 159 | + sh: task utility:mktemp-file TEMPLATE="stylelintrc-schema-XXXXXXXXXX.json" |
| 160 | + INSTANCE_PATH: "**/package.json" |
| 161 | + PROJECT_FOLDER: |
| 162 | + sh: pwd |
| 163 | + WORKING_FOLDER: |
| 164 | + sh: task utility:mktemp-folder TEMPLATE="dependabot-validate-XXXXXXXXXX" |
| 165 | + cmds: |
| 166 | + - wget --quiet --output-document="{{.SCHEMA_PATH}}" {{.SCHEMA_URL}} |
| 167 | + - wget --quiet --output-document="{{.AVA_SCHEMA_PATH}}" {{.AVA_SCHEMA_URL}} |
| 168 | + - wget --quiet --output-document="{{.ESLINTRC_SCHEMA_PATH}}" {{.ESLINTRC_SCHEMA_URL}} |
| 169 | + - wget --quiet --output-document="{{.JSCPD_SCHEMA_PATH}}" {{.JSCPD_SCHEMA_URL}} |
| 170 | + - wget --quiet --output-document="{{.NPM_BADGES_SCHEMA_PATH}}" {{.NPM_BADGES_SCHEMA_URL}} |
| 171 | + - wget --quiet --output-document="{{.PRETTIERRC_SCHEMA_PATH}}" {{.PRETTIERRC_SCHEMA_URL}} |
| 172 | + - wget --quiet --output-document="{{.SEMANTIC_RELEASE_SCHEMA_PATH}}" {{.SEMANTIC_RELEASE_SCHEMA_URL}} |
| 173 | + - wget --quiet --output-document="{{.STYLELINTRC_SCHEMA_PATH}}" {{.STYLELINTRC_SCHEMA_URL}} |
| 174 | + - | |
| 175 | + cd "{{.WORKING_FOLDER}}" # Workaround for https://github.com/npm/cli/issues/3210 |
| 176 | + npx ajv-cli@{{.SCHEMA_DRAFT_4_AJV_CLI_VERSION}} validate \ |
| 177 | + --all-errors \ |
| 178 | + -s "{{.SCHEMA_PATH}}" \ |
| 179 | + -r "{{.AVA_SCHEMA_PATH}}" \ |
| 180 | + -r "{{.ESLINTRC_SCHEMA_PATH}}" \ |
| 181 | + -r "{{.JSCPD_SCHEMA_PATH}}" \ |
| 182 | + -r "{{.NPM_BADGES_SCHEMA_PATH}}" \ |
| 183 | + -r "{{.PRETTIERRC_SCHEMA_PATH}}" \ |
| 184 | + -r "{{.SEMANTIC_RELEASE_SCHEMA_PATH}}" \ |
| 185 | + -r "{{.STYLELINTRC_SCHEMA_PATH}}" \ |
| 186 | + -d "{{.PROJECT_FOLDER}}/{{.INSTANCE_PATH}}" |
| 187 | +
|
| 188 | + # Make a temporary file named according to the passed TEMPLATE variable and print the path passed to stdout |
| 189 | + # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/windows-task/Taskfile.yml |
| 190 | + utility:mktemp-file: |
| 191 | + vars: |
| 192 | + RAW_PATH: |
| 193 | + sh: mktemp --tmpdir "{{.TEMPLATE}}" |
| 194 | + cmds: |
| 195 | + - task: utility:normalize-path |
| 196 | + vars: |
| 197 | + RAW_PATH: "{{.RAW_PATH}}" |
| 198 | + |
| 199 | + # Make a temporary folder named according to the passed TEMPLATE variable and print the path passed to stdout |
| 200 | + # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/windows-task/Taskfile.yml |
| 201 | + utility:mktemp-folder: |
| 202 | + vars: |
| 203 | + RAW_PATH: |
| 204 | + sh: mktemp --directory --tmpdir "{{.TEMPLATE}}" |
| 205 | + cmds: |
| 206 | + - task: utility:normalize-path |
| 207 | + vars: |
| 208 | + RAW_PATH: "{{.RAW_PATH}}" |
| 209 | + |
| 210 | + # Print a normalized version of the path passed via the RAW_PATH variable to stdout |
| 211 | + # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/windows-task/Taskfile.yml |
| 212 | + utility:normalize-path: |
| 213 | + cmds: |
| 214 | + - | |
| 215 | + if [[ "{{.OS}}" == "Windows_NT" ]] && which cygpath &>/dev/null; then |
| 216 | + # Even though the shell handles POSIX format absolute paths as expected, external applications do not. |
| 217 | + # So paths passed to such applications must first be converted to Windows format. |
| 218 | + cygpath -w "{{.RAW_PATH}}" |
| 219 | + else |
| 220 | + echo "{{.RAW_PATH}}" |
| 221 | + fi |
0 commit comments