# 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'