-
Notifications
You must be signed in to change notification settings - Fork 233
ci: add compliance script checks to example repo #101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| --emacs | ||
|
Check warning on line 1 in .checkpatch.conf
|
||
| --summary-file | ||
| --show-types | ||
| --max-line-length=100 | ||
| --min-conf-desc-length=1 | ||
| --typedefsfile=scripts/checkpatch/typedefsfile | ||
|
|
||
| --ignore PRINTK_WITHOUT_KERN_LEVEL | ||
| --ignore SPLIT_STRING | ||
| --ignore VOLATILE | ||
| --ignore CONFIG_EXPERIMENTAL | ||
| --ignore PREFER_KERNEL_TYPES | ||
| --ignore PREFER_SECTION | ||
| --ignore AVOID_EXTERNS | ||
| --ignore NETWORKING_BLOCK_COMMENT_STYLE | ||
| --ignore DATE_TIME | ||
| --ignore MINMAX | ||
| --ignore CONST_STRUCT | ||
| --ignore FILE_PATH_CHANGES | ||
| --ignore SPDX_LICENSE_TAG | ||
| --ignore C99_COMMENT_TOLERANCE | ||
| --ignore REPEATED_WORD | ||
| --ignore UNDOCUMENTED_DT_STRING | ||
| --ignore DT_SPLIT_BINDING_PATCH | ||
| --ignore DT_SCHEMA_BINDING_PATCH | ||
| --ignore TRAILING_SEMICOLON | ||
| --ignore COMPLEX_MACRO | ||
| --ignore MULTISTATEMENT_MACRO_USE_DO_WHILE | ||
| --ignore ENOSYS | ||
| --ignore IS_ENABLED_CONFIG | ||
| --ignore EXPORT_SYMBOL | ||
| --ignore COMPARISON_TO_NULL | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,119 @@ | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
|
Check warning on line 1 in .clang-format
|
||
| # | ||
| # Note: The list of ForEachMacros can be obtained using: | ||
| # | ||
| # git grep -h '^#define [^[:space:]]*FOR_EACH[^[:space:]]*(' include/ \ | ||
| # | sed "s,^#define \([^[:space:]]*FOR_EACH[^[:space:]]*\)(.*$, - '\1'," \ | ||
| # | sort | uniq | ||
| # | ||
| # References: | ||
| # - https://clang.llvm.org/docs/ClangFormatStyleOptions.html | ||
|
|
||
| --- | ||
| BasedOnStyle: LLVM | ||
| AlignConsecutiveMacros: AcrossComments | ||
| AllowShortBlocksOnASingleLine: Never | ||
| AllowShortCaseLabelsOnASingleLine: false | ||
| AllowShortEnumsOnASingleLine: false | ||
| AllowShortFunctionsOnASingleLine: None | ||
| AllowShortIfStatementsOnASingleLine: false | ||
| AllowShortLoopsOnASingleLine: false | ||
| AttributeMacros: | ||
| - __aligned | ||
| - __deprecated | ||
| - __packed | ||
| - __printf_like | ||
| - __syscall | ||
| - __syscall_always_inline | ||
| - __subsystem | ||
| BitFieldColonSpacing: After | ||
| BreakBeforeBraces: Linux | ||
| ColumnLimit: 100 | ||
| ConstructorInitializerIndentWidth: 8 | ||
| ContinuationIndentWidth: 8 | ||
| ForEachMacros: | ||
| - 'ARRAY_FOR_EACH' | ||
| - 'ARRAY_FOR_EACH_PTR' | ||
| - 'FOR_EACH' | ||
| - 'FOR_EACH_FIXED_ARG' | ||
| - 'FOR_EACH_IDX' | ||
| - 'FOR_EACH_IDX_FIXED_ARG' | ||
| - 'FOR_EACH_NONEMPTY_TERM' | ||
| - 'FOR_EACH_FIXED_ARG_NONEMPTY_TERM' | ||
| - 'RB_FOR_EACH' | ||
| - 'RB_FOR_EACH_CONTAINER' | ||
| - 'SYS_DLIST_FOR_EACH_CONTAINER' | ||
| - 'SYS_DLIST_FOR_EACH_CONTAINER_SAFE' | ||
| - 'SYS_DLIST_FOR_EACH_NODE' | ||
| - 'SYS_DLIST_FOR_EACH_NODE_SAFE' | ||
| - 'SYS_SEM_LOCK' | ||
| - 'SYS_SFLIST_FOR_EACH_CONTAINER' | ||
| - 'SYS_SFLIST_FOR_EACH_CONTAINER_SAFE' | ||
| - 'SYS_SFLIST_FOR_EACH_NODE' | ||
| - 'SYS_SFLIST_FOR_EACH_NODE_SAFE' | ||
| - 'SYS_SLIST_FOR_EACH_CONTAINER' | ||
| - 'SYS_SLIST_FOR_EACH_CONTAINER_SAFE' | ||
| - 'SYS_SLIST_FOR_EACH_NODE' | ||
| - 'SYS_SLIST_FOR_EACH_NODE_SAFE' | ||
| - '_WAIT_Q_FOR_EACH' | ||
| - '_WAIT_Q_FOR_EACH_SAFE' | ||
| - 'Z_FOR_EACH' | ||
| - 'Z_FOR_EACH_ENGINE' | ||
| - 'Z_FOR_EACH_EXEC' | ||
| - 'Z_FOR_EACH_FIXED_ARG' | ||
| - 'Z_FOR_EACH_FIXED_ARG_EXEC' | ||
| - 'Z_FOR_EACH_IDX' | ||
| - 'Z_FOR_EACH_IDX_EXEC' | ||
| - 'Z_FOR_EACH_IDX_FIXED_ARG' | ||
| - 'Z_FOR_EACH_IDX_FIXED_ARG_EXEC' | ||
| - 'Z_GENLIST_FOR_EACH_CONTAINER' | ||
| - 'Z_GENLIST_FOR_EACH_CONTAINER_SAFE' | ||
| - 'Z_GENLIST_FOR_EACH_NODE' | ||
| - 'Z_GENLIST_FOR_EACH_NODE_SAFE' | ||
| - 'STRUCT_SECTION_FOREACH' | ||
| - 'STRUCT_SECTION_FOREACH_ALTERNATE' | ||
| - 'TYPE_SECTION_FOREACH' | ||
| - 'K_SPINLOCK' | ||
| - 'COAP_RESOURCE_FOREACH' | ||
| - 'COAP_SERVICE_FOREACH' | ||
| - 'COAP_SERVICE_FOREACH_RESOURCE' | ||
| - 'HTTP_RESOURCE_FOREACH' | ||
| - 'HTTP_SERVER_CONTENT_TYPE_FOREACH' | ||
| - 'HTTP_SERVICE_FOREACH' | ||
| - 'HTTP_SERVICE_FOREACH_RESOURCE' | ||
| - 'I3C_BUS_FOR_EACH_I3CDEV' | ||
| - 'I3C_BUS_FOR_EACH_I3CDEV_SAFE' | ||
| - 'I3C_BUS_FOR_EACH_I2CDEV' | ||
| - 'I3C_BUS_FOR_EACH_I2CDEV_SAFE' | ||
| - 'MIN_HEAP_FOREACH' | ||
| IfMacros: | ||
| - 'CHECKIF' | ||
| # Disabled for now, see bug https://github.com/zephyrproject-rtos/zephyr/issues/48520 | ||
| #IncludeBlocks: Regroup | ||
| IncludeCategories: | ||
| - Regex: '^".*\.h"$' | ||
| Priority: 0 | ||
| - Regex: '^<(assert|complex|ctype|errno|fenv|float|inttypes|limits|locale|math|setjmp|signal|stdarg|stdbool|stddef|stdint|stdio|stdlib|string|tgmath|time|wchar|wctype)\.h>$' | ||
| Priority: 1 | ||
| - Regex: '^\<zephyr/.*\.h\>$' | ||
| Priority: 2 | ||
| - Regex: '.*' | ||
| Priority: 3 | ||
| IndentCaseLabels: false | ||
| IndentGotoLabels: false | ||
| IndentWidth: 8 | ||
| InsertBraces: true | ||
| InsertNewlineAtEOF: true | ||
| SpaceBeforeInheritanceColon: False | ||
| SpaceBeforeParens: ControlStatementsExceptControlMacros | ||
| SortIncludes: Never | ||
| UseTab: ForContinuationAndIndentation | ||
| WhitespaceSensitiveMacros: | ||
| - COND_CODE_0 | ||
| - COND_CODE_1 | ||
| - IF_DISABLED | ||
| - IF_ENABLED | ||
| - LISTIFY | ||
| - STRINGIFY | ||
| - Z_STRINGIFY | ||
| - DT_FOREACH_PROP_ELEM_SEP | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,119 @@ | ||
| name: Compliance Checks | ||
|
Check warning on line 1 in .github/workflows/compliance.yml
|
||
|
|
||
| on: pull_request | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| check_compliance: | ||
| runs-on: ubuntu-24.04 | ||
| name: Run compliance checks on patch series (PR) | ||
| steps: | ||
| - name: Set up Python | ||
| uses: actions/setup-python@v5 | ||
| with: | ||
| python-version: 3.12 | ||
|
|
||
| - name: Checkout the code | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| ref: ${{ github.event.pull_request.head.sha }} | ||
| path: example-application | ||
| fetch-depth: 0 | ||
|
|
||
| - name: Rebase onto the target branch | ||
| working-directory: example-application | ||
| env: | ||
| BASE_REF: ${{ github.base_ref }} | ||
| run: | | ||
| git config --global user.email "you@example.com" | ||
| git config --global user.name "Your Name" | ||
| git config --global --add safe.directory $PWD | ||
| git remote -v | ||
| # Ensure there's no merge commits in the PR | ||
| [[ "$(git rev-list --merges --count origin/${BASE_REF}..)" == "0" ]] || \ | ||
| (echo "::error ::Merge commits not allowed, rebase instead";false) | ||
| rm -fr ".git/rebase-apply" | ||
| rm -fr ".git/rebase-merge" | ||
| git rebase origin/${BASE_REF} | ||
| git clean -f -d | ||
| # debug | ||
| git log --pretty=oneline | head -n 10 | ||
|
|
||
| - name: Install west | ||
| shell: bash | ||
| run: | | ||
| if ! command -v west &> /dev/null; then | ||
| echo "west could not be found, installing..." | ||
| python -m pip install west==1.5.0 | ||
| fi | ||
|
|
||
| - name: Initialize west workspace | ||
| shell: bash | ||
| run: | | ||
| west init -l example-application | ||
|
|
||
| - name: Update west workspace | ||
| shell: bash | ||
| run: | | ||
| west update -o=--depth=1 -n | ||
|
|
||
| - name: Install Python dependencies | ||
| shell: bash | ||
| run: | | ||
| pip install -r zephyr/scripts/requirements-compliance.txt | ||
|
|
||
| - name: Run Compliance Tests | ||
| continue-on-error: true | ||
| id: compliance | ||
| working-directory: example-application | ||
| env: | ||
| BASE_REF: ${{ github.base_ref }} | ||
| UNDEF_KCONFIG_OUTSIDE_ALLOWLIST_FILE: | ||
| ${{ github.workspace }}/example-application/scripts/undef_kconfig_allowlist.txt | ||
| run: | | ||
| export ZEPHYR_BASE=$PWD/../zephyr | ||
| # debug | ||
| ls -la | ||
| git log --pretty=oneline | head -n 10 | ||
| ./scripts/repo_compliance.py --annotate -e SysbuildKconfig \ | ||
| -c origin/${BASE_REF}.. | ||
|
|
||
| - name: upload-results | ||
| uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 | ||
| continue-on-error: true | ||
| with: | ||
| name: compliance.xml | ||
| path: example-application/compliance.xml | ||
|
|
||
| - name: check-warns | ||
| shell: bash | ||
| working-directory: example-application | ||
| run: | | ||
| if [[ ! -s "compliance.xml" ]]; then | ||
| exit 1; | ||
| fi | ||
|
|
||
| warns=("ClangFormat" "LicenseAndCopyrightCheck") | ||
| files=($(./scripts/repo_compliance.py -l)) | ||
|
|
||
| for file in "${files[@]}"; do | ||
| f="${file}.txt" | ||
| if [[ -s $f ]]; then | ||
| results=$(cat $f) | ||
| results="${results//'%'/'%25'}" | ||
| results="${results//$'\n'/'%0A'}" | ||
| results="${results//$'\r'/'%0D'}" | ||
| if [[ "${warns[@]}" =~ "${file}" ]]; then | ||
| echo "::warning file=${f}::$results" | ||
| else | ||
| echo "::error file=${f}::$results" | ||
| exit=1 | ||
| fi | ||
| fi | ||
| done | ||
|
|
||
| if [ "${exit}" == "1" ]; then | ||
| exit 1; | ||
| fi | ||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: To give a good example, this better be fixed to a cryptographically secure hash.