| # SPDX-FileCopyrightText: 2020 Diego Elio Pettenò |
| # |
| # SPDX-License-Identifier: Unlicense |
| |
| repos: |
| - repo: https://github.com/pre-commit/pre-commit-hooks |
| rev: v4.4.0 |
| hooks: |
| - id: check-yaml |
| - id: trailing-whitespace |
| exclude: | |
| (?x)^( |
| hw/bsp/mcx/sdk/ |
| ) |
| - id: end-of-file-fixer |
| exclude: | |
| (?x)^( |
| .idea/| |
| hw/bsp/mcx/sdk/ |
| ) |
| - id: forbid-submodules |
| |
| - repo: https://github.com/codespell-project/codespell |
| rev: v2.2.4 |
| hooks: |
| - id: codespell |
| args: [-w] |
| exclude: | |
| (?x)^( |
| lib/| |
| hw/bsp/mcx/sdk/ |
| ) |
| |
| - repo: local |
| hooks: |
| - id: unique-example-pids |
| name: unique example USB PIDs |
| files: usb_descriptors\.c$ |
| entry: python3 tools/check_example_pids.py |
| pass_filenames: false |
| language: system |
| |
| - id: unit-test |
| name: unit-test |
| files: ^(src/|test/unit-test/) |
| entry: sh -c "cd test/unit-test && ceedling test:all" |
| pass_filenames: false |
| types_or: [c, header] |
| language: system |
| |
| # Two hooks, split by what each suite RUNS, not by what it reads: discovery is |
| # disjoint (test_hil*.py vs the two named suites) so nothing runs twice, but the |
| # file patterns overlap where both suites care. hil-test runs test_hil*.py only |
| # (~80s: deliberate hang and timeout simulations) and is scoped to the rig harness |
| # that owns them. The one part of it the selector depends on - the BottomLayer |
| # stdlib-closure AST guard over tools/ci_select.py and its imports - is named |
| # explicitly by ci-select-test instead, so a tools/ or workflow edit costs 4s |
| # rather than 80s of hang simulations that have nothing to say about it. |
| # ci-select-test runs the two selector-adjacent suites (~4s together) that read |
| # hw/bsp (board.cmake, FAMILY_MCUS), src (portable dirs + class include graph), |
| # examples (tusb_config.h, skip/only.txt), hw/mcu, the rig rosters under test/hil |
| # (a roster edit changes what the selector emits), .circleci (the sentinel contract |
| # config.yml rewrites config2.yml through) and .github/workflows (build.yml's own |
| # file hand-off and GITHUB_ENV guards) -- renaming a board, port dir or example |
| # breaks them without touching test/hil, and catching that here beats waiting for |
| # pre-commit CI. |
| # No types_or: the rig rosters (*.json) are inputs too. |
| # examples/device/mtp/src is in scope: test_hil_bounded parses README_TXT_CONTENT |
| # and md5-checks the logo header from there as its MTP fixtures. |
| - id: hil-test |
| name: hil-test |
| files: ^(test/hil/|examples/device/mtp/src/) |
| entry: python3 -m unittest discover -s test/hil/test -p 'test_hil*.py' |
| pass_filenames: false |
| language: system |
| # hil-validate.js decides which boards ship. Its result join has been wrong three times -- |
| # dropping variant-named rows, letting a PASS erase a FAIL, breaking the `board locked` |
| # anchor it had just fixed -- each time because the logic was reasoned about instead of run. |
| - id: hil-validate-logic |
| name: hil-validate-logic |
| files: ^\.claude/workflows/ |
| entry: node .claude/workflows/test-hil-validate.mjs |
| pass_filenames: false |
| language: system |
| - id: ci-select-test |
| name: ci-select-test |
| files: ^(hw/bsp/|hw/mcu/|src/|examples/|test/hil/|tools/(ci_select|build|build_utils|get_deps|metrics)\.py$|\.github/(scripts|workflows)/|\.circleci/) |
| entry: sh -c "python3 test/hil/test/test_ci_select.py && python3 test/hil/test/test_ci_metrics.py && cd test/hil/test && python3 -m unittest -q test_hil_util.BottomLayer" |
| pass_filenames: false |
| language: system |
| |
| # - id: build-fuzzer |
| # name: build-fuzzer |
| # files: ^(src/|test/fuzz/) |
| # language: system |
| # types_or: [c, header] |
| # entry: | |
| # bash -c 'export CC=clang |
| # export CXX=clang++ |
| # fuzz_harness=$(ls -d test/fuzz/device/*/) |
| # for h in $fuzz_harness |
| # do |
| # make -C $h get-deps |
| # make -C $h all |
| # done' |