diff --git a/.github/workflows/check-prettier-formatting-task.yml b/.github/workflows/check-prettier-formatting-task.yml new file mode 100644 index 00000000..d999002f --- /dev/null +++ b/.github/workflows/check-prettier-formatting-task.yml @@ -0,0 +1,257 @@ +# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/check-prettier-formatting-task.md +name: Check Prettier Formatting + +env: + # See: https://github.com/actions/setup-node/#readme + NODE_VERSION: 16.x + +# See: https://docs.github.com/actions/using-workflows/events-that-trigger-workflows +on: + create: + push: + paths: + - ".github/workflows/check-prettier-formatting-task.ya?ml" + - "Taskfile.ya?ml" + - "**/.prettierignore" + - "**/.prettierrc*" + # CSS + - "**.css" + - "**.wxss" + # PostCSS + - "**.pcss" + - "**.postcss" + # Less + - "**.less" + # SCSS + - "**.scss" + # GraphQL + - "**.graphqls?" + - "**.gql" + # handlebars + - "**.handlebars" + - "**.hbs" + # HTML + - "**.mjml" + - "**.html?" + - "**.html.hl" + - "**.st" + - "**.xht" + - "**.xhtml" + # Vue + - "**.vue" + # JavaScript + - "**.flow" + - "**._?jsb?" + - "**.bones" + - "**.cjs" + - "**.es6?" + - "**.frag" + - "**.gs" + - "**.jake" + - "**.jscad" + - "**.jsfl" + - "**.js[ms]" + - "**.[mn]js" + - "**.pac" + - "**.wxs" + - "**.[xs]s?js" + - "**.xsjslib" + # JSX + - "**.jsx" + # TypeScript + - "**.ts" + # TSX + - "**.tsx" + # JSON + - "**/.eslintrc" + - "**.json" + - "**.avsc" + - "**.geojson" + - "**.gltf" + - "**.har" + - "**.ice" + - "**.JSON-tmLanguage" + - "**.mcmeta" + - "**.tfstate" + - "**.topojson" + - "**.webapp" + - "**.webmanifest" + - "**.yyp?" + # JSONC + - "**/.babelrc" + - "**/.jscsrc" + - "**/.js[hl]intrc" + - "**.jsonc" + - "**.sublime-*" + # JSON5 + - "**.json5" + # Markdown + - "**.mdx?" + - "**.markdown" + - "**.mk?down" + - "**.mdwn" + - "**.mkdn?" + - "**.ronn" + - "**.workbook" + # YAML + - "**/.clang-format" + - "**/.clang-tidy" + - "**/.gemrc" + - "**/glide.lock" + - "**.ya?ml*" + - "**.mir" + - "**.reek" + - "**.rviz" + - "**.sublime-syntax" + - "**.syntax" + pull_request: + paths: + - ".github/workflows/check-prettier-formatting-task.ya?ml" + - "Taskfile.ya?ml" + - "**/.prettierignore" + - "**/.prettierrc*" + # CSS + - "**.css" + - "**.wxss" + # PostCSS + - "**.pcss" + - "**.postcss" + # Less + - "**.less" + # SCSS + - "**.scss" + # GraphQL + - "**.graphqls?" + - "**.gql" + # handlebars + - "**.handlebars" + - "**.hbs" + # HTML + - "**.mjml" + - "**.html?" + - "**.html.hl" + - "**.st" + - "**.xht" + - "**.xhtml" + # Vue + - "**.vue" + # JavaScript + - "**.flow" + - "**._?jsb?" + - "**.bones" + - "**.cjs" + - "**.es6?" + - "**.frag" + - "**.gs" + - "**.jake" + - "**.jscad" + - "**.jsfl" + - "**.js[ms]" + - "**.[mn]js" + - "**.pac" + - "**.wxs" + - "**.[xs]s?js" + - "**.xsjslib" + # JSX + - "**.jsx" + # TypeScript + - "**.ts" + # TSX + - "**.tsx" + # JSON + - "**/.eslintrc" + - "**.json" + - "**.avsc" + - "**.geojson" + - "**.gltf" + - "**.har" + - "**.ice" + - "**.JSON-tmLanguage" + - "**.mcmeta" + - "**.tfstate" + - "**.topojson" + - "**.webapp" + - "**.webmanifest" + - "**.yyp?" + # JSONC + - "**/.babelrc" + - "**/.jscsrc" + - "**/.js[hl]intrc" + - "**.jsonc" + - "**.sublime-*" + # JSON5 + - "**.json5" + # Markdown + - "**.mdx?" + - "**.markdown" + - "**.mk?down" + - "**.mdwn" + - "**.mkdn?" + - "**.ronn" + - "**.workbook" + # YAML + - "**/.clang-format" + - "**/.clang-tidy" + - "**/.gemrc" + - "**/glide.lock" + - "**.ya?ml*" + - "**.mir" + - "**.reek" + - "**.rviz" + - "**.sublime-syntax" + - "**.syntax" + schedule: + # Run periodically to catch breakage caused by external changes. + - cron: "0 4 * * WED" + workflow_dispatch: + repository_dispatch: + +jobs: + run-determination: + runs-on: ubuntu-latest + outputs: + result: ${{ steps.determination.outputs.result }} + steps: + - name: Determine if the rest of the workflow should run + id: determination + run: | + RELEASE_BRANCH_REGEX="refs/heads/[0-9]+.[0-9]+.x" + # The `create` event trigger doesn't support `branches` filters, so it's necessary to use Bash instead. + if [[ + "${{ github.event_name }}" != "create" || + "${{ github.ref }}" =~ $RELEASE_BRANCH_REGEX + ]]; then + # Run the other jobs. + RESULT="true" + else + # There is no need to run the other jobs. + RESULT="false" + fi + + echo "result=$RESULT" >> $GITHUB_OUTPUT + + check: + needs: run-determination + if: needs.run-determination.outputs.result == 'true' + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Install Task + uses: arduino/setup-task@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + version: 3.x + + - name: Format with Prettier + run: task general:format-prettier + + - name: Check formatting + run: git diff --color --exit-code diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index bd9fcfda..e7c0c8f1 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -3,29 +3,29 @@ name: Run integration tests on: pull_request: paths: - - '.github/workflows/test-integration.yml' - - '.github/workflows/testdata/**' - - '.python-version' - - 'poetry.lock' - - 'pyproject.toml' - - 'action.yml' - - 'compilesketches/**' + - ".github/workflows/test-integration.yml" + - ".github/workflows/testdata/**" + - ".python-version" + - "poetry.lock" + - "pyproject.toml" + - "action.yml" + - "compilesketches/**" push: paths: - - '.github/workflows/test-integration.yml' - - '.github/workflows/testdata/**' - - '.python-version' - - 'poetry.lock' - - 'pyproject.toml' - - 'action.yml' - - 'compilesketches/**' + - ".github/workflows/test-integration.yml" + - ".github/workflows/testdata/**" + - ".python-version" + - "poetry.lock" + - "pyproject.toml" + - "action.yml" + - "compilesketches/**" env: SKETCHES_REPORTS_PATH: sketches-reports TESTDATA_PLATFORMS_PATH: .github/workflows/testdata/platforms TESTDATA_SKETCHES_PATH: .github/workflows/testdata/sketches - TESTDATA_REPORTS_PATH: .github/workflows/testdata/reports + TESTDATA_REPORTS_PATH: .github/workflows/testdata/reports jobs: default-inputs: @@ -48,7 +48,6 @@ jobs: # Use action from local path uses: ./extras/compile-sketches - all-inputs: runs-on: ubuntu-latest @@ -119,7 +118,6 @@ jobs: outputs: report-artifact-name: ${{ steps.report-artifact-name.outputs.report-artifact-name }} - multiple-steps: name: multiple-steps (${{ matrix.board.source-type }}) runs-on: ubuntu-latest @@ -239,7 +237,6 @@ jobs: sketch-paths: | - ${{ env.TESTDATA_SKETCHES_PATH }}/BareMinimum - # Targeted testing for ESP32 boards platform support. pyserial-dependency: runs-on: ubuntu-latest @@ -269,7 +266,6 @@ jobs: sketch-paths: | - ${{ env.TESTDATA_SKETCHES_PATH }}/BareMinimum - check-sketches-reports: needs: all-inputs runs-on: ubuntu-latest @@ -333,7 +329,6 @@ jobs: exit $EXIT_STATUS - expected-failed-compilation: runs-on: ubuntu-latest diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..bbb5e440 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +.licenses/ +.pytest_cache/ +__pycache__/ +node_modules/ diff --git a/README.md b/README.md index 99caccd4..fcc6bc07 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ [![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 [![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) [![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) +[![Check Prettier Formatting status](https://github.com/arduino/compile-sketches/actions/workflows/check-prettier-formatting-task.yml/badge.svg)](https://github.com/arduino/compile-sketches/actions/workflows/check-prettier-formatting-task.yml) [![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) [![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) [![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) @@ -70,6 +71,7 @@ If the board is from one of the platforms provided by Arduino's [default package If a platform dependency from a non-Boards Manager source of the same name as another Boards Manager source platform dependency is defined, they will both be installed, with the non-Boards Manager dependency overwriting the Boards Manager platform installation. This permits testing against a non-release version of a platform while using Boards Manager to install the platform's tools dependencies. Example: + ```yaml platforms: | # Install the latest release of Arduino SAMD Boards and its toolchain via Boards Manager @@ -84,6 +86,7 @@ platforms: | ##### Boards Manager Keys: + - **`name`** - (**required**) platform name in the form of `VENDOR:ARCHITECTURE` (e.g., `arduino:avr`). - **`version`** - version of the platform to install. - **Default**: the latest version. @@ -93,14 +96,16 @@ Keys: ##### Local path Keys: + - **`source-path`** - (**required**) path to install as a platform. Relative paths are assumed to be relative to the root of the repository. - **`name`** - (**required**) platform name in the form of `VENDOR:ARCHITECTURE` (e.g., `arduino:avr`). ##### Repository Keys: + - **`source-url`** - (**required**) URL to clone the repository from. It must start with `git://` or end with `.git`. -- **`name`** - (**required**) platform name in the form of `VENDOR:ARCHITECTURE` (e.g., `arduino:avr`). +- **`name`** - (**required**) platform name in the form of `VENDOR:ARCHITECTURE` (e.g., `arduino:avr`). - **`version`** - [Git ref](https://git-scm.com/book/en/v2/Git-Internals-Git-References) of the repository to checkout. The special version name `latest` will cause the latest tag to be used. - **Default**: the repository is checked out to the tip of the default branch. - **`source-path`** - path to install as a platform. Paths are relative to the root of the repository. @@ -109,8 +114,9 @@ Keys: ##### Archive download Keys: -- **`source-url`** - (**required**) download URL for the archive (e.g., `https://github.com/arduino/ArduinoCore-avr/archive/master.zip`). -- **`name`** - (**required**) platform name in the form of `VENDOR:ARCHITECTURE` (e.g., `arduino:avr`). + +- **`source-url`** - (**required**) download URL for the archive (e.g., `https://github.com/arduino/ArduinoCore-avr/archive/master.zip`). +- **`name`** - (**required**) platform name in the form of `VENDOR:ARCHITECTURE` (e.g., `arduino:avr`). - **`source-path`** - path to install as a platform. Paths are relative to the root folder of the archive, or the root of the archive if it has no root folder. - **Default**: root folder of the archive. @@ -130,17 +136,20 @@ Libraries are installed under the Arduino user folder at `~/Arduino/libraries`. ##### Library Manager Keys: + - **`name`** - (**required**) name of the library, as defined in the `name` field of its [library.properties](https://arduino.github.io/arduino-cli/latest/library-specification/#libraryproperties-file-format) metadata file. - **`version`** - version of the library to install. - **Default**: the latest version. **Notes**: + - The library will be installed to a folder matching its name, but with any spaces replaced by `_`. - If the library's author defined dependencies, those libraries will be installed automatically. ##### Local path Keys: + - **`source-path`** - (**required**) path to install as a library. Relative paths are assumed to be relative to the root of the repository. - **`destination-name`** - folder name to install the library to. - **Default**: the folder will be named according to the source repository or subfolder name. @@ -148,6 +157,7 @@ Keys: ##### Repository Keys: + - **`source-url`** - (**required**) URL to clone the repository from. It must start with `git://` or end with `.git`. - **`version`** - [Git ref](https://git-scm.com/book/en/v2/Git-Internals-Git-References) of the repository to checkout. The special version name `latest` will cause the latest tag to be used. - **Default**: the tip of the default branch. @@ -159,6 +169,7 @@ Keys: ##### Archive download Keys: + - **`source-url`** - (**required**) download URL for the archive (e.g., `https://github.com/arduino-libraries/Servo/archive/master.zip`). - **`source-path`** - path to install as a library. Paths are relative to the root folder of the archive, or the root of the archive if it has no root folder. - **Default**: root folder of the archive. @@ -228,7 +239,7 @@ Set to `true` to cause the action to record the compiler warning count for each ```yaml - uses: arduino/compile-sketches@v1 with: - fqbn: 'arduino:avr:uno' + fqbn: "arduino:avr:uno" libraries: | - name: Servo - name: Stepper diff --git a/Taskfile.yml b/Taskfile.yml index 14ca415d..7d5c6d29 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -15,6 +15,7 @@ tasks: - task: general:check-spelling - task: markdown:check-links - task: markdown:lint + - task: npm:validate - task: python:lint - task: python:test @@ -22,6 +23,7 @@ tasks: desc: Make automated corrections to the project's files deps: - task: general:correct-spelling + - task: general:format-prettier - task: markdown:fix - task: python:format @@ -181,6 +183,14 @@ tasks: cmds: - poetry run codespell --write-changes + # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-prettier-formatting-task/Taskfile.yml + general:format-prettier: + desc: Format all supported files with Prettier + deps: + - task: npm:install-deps + cmds: + - npx prettier --write . + # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-markdown-task/Taskfile.yml markdown:check-links: desc: Check for broken links diff --git a/action.yml b/action.yml index 1ca43d27..735e0c8f 100644 --- a/action.yml +++ b/action.yml @@ -1,49 +1,49 @@ -name: 'Compile Arduino Sketches' -description: 'Checks whether Arduino sketches will compile and produces a report of data from the compilations' +name: "Compile Arduino Sketches" +description: "Checks whether Arduino sketches will compile and produces a report of data from the compilations" inputs: cli-version: - description: 'Version of Arduino CLI to use when building' - default: 'latest' + description: "Version of Arduino CLI to use when building" + default: "latest" required: true fqbn: - description: 'Full qualified board name, with Boards Manager URL if needed' - default: 'arduino:avr:uno' + description: "Full qualified board name, with Boards Manager URL if needed" + default: "arduino:avr:uno" required: true libraries: - description: 'YAML-format list of library dependencies to install' - default: '- source-path: ./' + description: "YAML-format list of library dependencies to install" + default: "- source-path: ./" required: true platforms: - description: 'YAML-format list of platform dependencies to install' - default: '' + description: "YAML-format list of platform dependencies to install" + default: "" required: true sketch-paths: - description: 'YAML-format list of paths containing sketches to compile.' - default: '- examples' + description: "YAML-format list of paths containing sketches to compile." + default: "- examples" required: true cli-compile-flags: - description: 'YAML-format list of flags to add to the Arduino CLI sketch compilation command.' - default: '' + description: "YAML-format list of flags to add to the Arduino CLI sketch compilation command." + default: "" required: false verbose: - description: 'Set to true to show verbose output in the log' - default: 'false' + description: "Set to true to show verbose output in the log" + default: "false" required: true sketches-report-path: - description: 'Path in which to save a JSON formatted file containing data from the sketch compilations' - default: 'sketches-reports' + description: "Path in which to save a JSON formatted file containing data from the sketch compilations" + default: "sketches-reports" required: true github-token: - description: 'GitHub access token used to get information from the GitHub API. Only needed if you are using the deltas report feature in a private repository.' - default: '' + description: "GitHub access token used to get information from the GitHub API. Only needed if you are using the deltas report feature in a private repository." + default: "" required: true enable-deltas-report: - description: 'Set to true to cause the action to determine the change in memory usage and compiler warnings of the compiled sketches between the head and base refs of a PR and the immediate parent commit of a push' - default: 'false' + description: "Set to true to cause the action to determine the change in memory usage and compiler warnings of the compiled sketches between the head and base refs of a PR and the immediate parent commit of a push" + default: "false" required: true enable-warnings-report: - description: 'Set to true to cause the action to record the compiler warning count for each sketch compilation in the sketches report' - default: 'false' + description: "Set to true to cause the action to record the compiler warning count for each sketch compilation in the sketches report" + default: "false" required: true runs: diff --git a/package-lock.json b/package-lock.json index 2563346a..84df16d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "ajv-formats": "2.1.1", "github-label-sync": "2.3.1", "markdown-link-check": "3.10.3", - "markdownlint-cli": "0.33.0" + "markdownlint-cli": "0.33.0", + "prettier": "2.8.6" } }, "node_modules/@financial-times/origami-service-makefile": { @@ -1488,6 +1489,21 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, + "node_modules/prettier": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.6.tgz", + "integrity": "sha512-mtuzdiBbHwPEgl7NxWlqOkithPyp4VN93V7VeHVWBF+ad3I5avc0RVDT4oImXQy9H/AqxA2NSQH8pSxHW6FYbQ==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -2925,6 +2941,12 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, + "prettier": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.6.tgz", + "integrity": "sha512-mtuzdiBbHwPEgl7NxWlqOkithPyp4VN93V7VeHVWBF+ad3I5avc0RVDT4oImXQy9H/AqxA2NSQH8pSxHW6FYbQ==", + "dev": true + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", diff --git a/package.json b/package.json index eaad6033..3bec71f8 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "ajv-formats": "2.1.1", "github-label-sync": "2.3.1", "markdown-link-check": "3.10.3", - "markdownlint-cli": "0.33.0" + "markdownlint-cli": "0.33.0", + "prettier": "2.8.6" } }