From 16bfbebb09b330cacbeafb33e162fc7dfeb49b58 Mon Sep 17 00:00:00 2001 From: Pawel Langowski Date: Thu, 6 Jun 2024 11:58:05 +0200 Subject: [PATCH] Add pre-commit hooks Signed-off-by: Pawel Langowski --- .conform.yaml | 16 +++ .markdownlint.yaml | 196 +++++++++++++++++++++++++++++++ .oelint-ruleset.json | 248 ++++++++++++++++++++++++++++++++++++++++ .pre-commit-config.yaml | 72 ++++++++++++ .yamllint | 16 +++ 5 files changed, 548 insertions(+) create mode 100644 .conform.yaml create mode 100644 .markdownlint.yaml create mode 100644 .oelint-ruleset.json create mode 100644 .pre-commit-config.yaml create mode 100644 .yamllint diff --git a/.conform.yaml b/.conform.yaml new file mode 100644 index 0000000..f96e4e0 --- /dev/null +++ b/.conform.yaml @@ -0,0 +1,16 @@ +--- +policies: + - type: commit + spec: + header: + length: 80 + imperative: false + invalidLastCharacters: . + body: + required: false + dco: true + gpg: + required: true + spellcheck: + locale: US + maximumOfOneCommit: false diff --git a/.markdownlint.yaml b/.markdownlint.yaml new file mode 100644 index 0000000..a17a36b --- /dev/null +++ b/.markdownlint.yaml @@ -0,0 +1,196 @@ +--- +# Documentation: +# https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md + +# Default state for all rules +default: false + +# MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time +MD001: true + +# MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading +MD002: + # Heading level + level: 1 + +# MD003/heading-style/header-style - Heading style + +MD003: + # Heading style + # # ATX style H1 + style: "atx" + +# MD004/ul-style - Unordered list style +MD004: + # List style + style: "sublist" + +# MD005/list-indent - Inconsistent indentation for list items at the same level +MD005: true + +# MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line +MD006: true + +# MD007/ul-indent - Unordered list indentation +MD007: + # Spaces for indent + indent: 4 + # Whether to indent the first level of the list + start_indented: false + +# MD009/no-trailing-spaces - Trailing spaces +MD009: + # Spaces for line break + br_spaces: 2 + # Allow spaces for empty lines in list items + list_item_empty_lines: false + # Include unnecessary breaks + strict: false + +# MD010/no-hard-tabs - Hard tabs +MD010: + # Include code blocks + code_blocks: false + # Number of spaces for each hard tab + spaces_per_tab: 1 + +# MD011/no-reversed-links - Reversed link syntax +MD011: true + +# MD012/no-multiple-blanks - Multiple consecutive blank lines +MD012: + # Consecutive blank lines + maximum: 1 +# MD013/line-length - Line length +# +MD013: + # Number of characters + line_length: 80 + # Number of characters for headings + heading_line_length: 80 + # Number of characters for code blocks + code_block_line_length: 160 + # Include code blocks + code_blocks: false + # Include tables + tables: false + # Include headings + headings: true + # Strict length checking (e.g. allow for longer URLs) + strict: false + # Stern length checking + stern: false + +# MD014/commands-show-output - Dollar signs used before commands without showing output +# TODO: set false for now but we should consider enabling it +# https://cirosantilli.com/markdown-style-guide#dollar-signs-in-shell-code +MD014: false + +# MD018/no-missing-space-atx - No space after hash on atx style heading +MD018: true + +# MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading +MD019: true + +# MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines +MD022: + # Blank lines above heading + lines_above: 1 + # Blank lines below heading + lines_below: 1 + +# MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line +MD023: true + +# MD025/single-title/single-h1 - Multiple top-level headings in the same document +# TODO: consider enabling it + +# MD026/no-trailing-punctuation - Trailing punctuation in heading +MD026: + # Punctuation characters + punctuation: ".,;:!。,;:!" + +# MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol +MD027: true + +# MD028/no-blanks-blockquote - Blank line inside blockquote +MD028: true + +# MD029/ol-prefix - Ordered list item prefix +MD029: + # List style + style: "one_or_ordered" + +# MD030/list-marker-space - Spaces after list markers +MD030: + # Spaces for single-line unordered list items + ul_single: 1 + # Spaces for single-line ordered list items + ol_single: 1 + # Spaces for multi-line unordered list items + ul_multi: 1 + # Spaces for multi-line ordered list items + ol_multi: 1 + +# MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines +MD031: + # Include list items + list_items: true + +# MD033/no-inline-html - Inline HTML +MD033: + # Allowed elements + allowed_elements: ["br", "center", "img", "script", "form", "input"] + +# MD034/no-bare-urls - Bare URL used +MD034: true + +# MD035/hr-style - Horizontal rule style +MD035: + # Horizontal rule style + style: "---" + +# MD037/no-space-in-emphasis - Spaces inside emphasis markers +MD037: true + +# MD038/no-space-in-code - Spaces inside code span elements +MD038: true + +# MD039/no-space-in-links - Spaces inside link text +MD039: true + +# MD040/fenced-code-language - Fenced code blocks should have a language specified +MD040: true + +# MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading +MD041: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD042/no-empty-links - No empty links +MD042: true + +# MD046/code-block-style - Code block style +MD046: + # Block style + style: "fenced" + +# MD047/single-trailing-newline - Files should end with a single newline character +MD047: true + +# MD048/code-fence-style - Code fence style +MD048: + # Code fence style + style: "backtick" + +# MD049/emphasis-style - Emphasis style should be consistent +MD049: + # Emphasis style should be consistent + style: "underscore" + +# MD050/strong-style - Strong style should be consistent +MD050: + # Strong style should be consistent + style: "asterisk" diff --git a/.oelint-ruleset.json b/.oelint-ruleset.json new file mode 100644 index 0000000..1337cef --- /dev/null +++ b/.oelint-ruleset.json @@ -0,0 +1,248 @@ +{ + "oelint.append.protvars": "error", + "oelint.append.protvars.PV": "error", + "oelint.append.protvars.PR": "error", + "oelint.append.protvars.SRCREV": "error", + "oelint.append.protvars.LICENSE": "error", + "oelint.append.protvars.LIC_FILES_CHKSUM": "error", + "oelint.exportfunction.dash": "error", + "oelint.bbclass.underscores": "error", + "oelint.file.includenotfound": "warning", + "oelint.file.requireinclude": "warning", + "oelint.file.inlinesuppress_na": "info", + "oelint.file.nospaces": "error", + "oelint.file.inactiveupstreamdetails": "info", + "oelint.file.inappropriatemsg": "info", + "oelint.file.patchsignedoff": "info", + "oelint.file.upstreamstatus": "info", + "oelint.file.includerelpath": "warning", + "oelint.file.requirenotfound": "error", + "oelint.file.underscores": "error", + "oelint.func.specific": "error", + "oelint.newline.consecutive": "warning", + "oelint.newline.eof": "warning", + "oelint.spaces.linebeginning": "warning", + "oelint.spaces.linecont": "error", + "oelint.spaces.emptyline": "warning", + "oelint.spaces.lineend": "warning", + "oelint.tabs.notabs": "warning", + "oelint.task.addnotaskbody": "warning", + "oelint.task.noanonpython": "warning", + "oelint.task.customorder": "error", + "oelint.task.dash": "error", + "oelint.task.docstrings": "info", + "oelint.task.heredocs": "warning", + "oelint.task.multifragments": "info", + "oelint.task.nocopy": "error", + "oelint.task.nomkdir": "error", + "oelint.task.nopythonprefix": "warning", + "oelint.task.order": "warning", + "oelint.task.order.do_fetch": "warning", + "oelint.task.order.do_unpack": "warning", + "oelint.task.order.do_patch": "warning", + "oelint.task.order.do_configure": "warning", + "oelint.task.order.do_compile": "warning", + "oelint.task.order.do_install": "warning", + "oelint.task.order.do_populate_sysroot": "warning", + "oelint.task.order.do_build": "warning", + "oelint.task.order.do_package": "warning", + "oelint.task.pythonprefix": "warning", + "oelint.var.addpylib": "error", + "oelint.vars.appendop": "error", + "oelint.vars.autorev": "warning", + "oelint.vars.bbvars": "warning", + "oelint.vars.bbvars.BB_CONSOLELOG": "warning", + "oelint.vars.bbvars.BB_CURRENTTASK": "warning", + "oelint.vars.bbvars.BB_DANGLINGAPPENDS_WARNONLY": "warning", + "oelint.vars.bbvars.BB_DEFAULT_TASK": "warning", + "oelint.vars.bbvars.BB_DISKMON_DIRS": "warning", + "oelint.vars.bbvars.BB_DISKMON_WARNINTERVAL": "warning", + "oelint.vars.bbvars.BB_ENV_EXTRAWHITE": "warning", + "oelint.vars.bbvars.BB_ENV_WHITELIST": "warning", + "oelint.vars.bbvars.BB_FETCH_PREMIRRORONLY": "warning", + "oelint.vars.bbvars.BB_FILENAME": "warning", + "oelint.vars.bbvars.BB_GENERATE_MIRROR_TARBALLS": "warning", + "oelint.vars.bbvars.BB_HASHBASE_WHITELIST": "warning", + "oelint.vars.bbvars.BB_HASHCHECK_FUNCTION": "warning", + "oelint.vars.bbvars.BB_HASHCONFIG_WHITELIST": "warning", + "oelint.vars.bbvars.BB_INVALIDCONF": "warning", + "oelint.vars.bbvars.BB_LOGFMT": "warning", + "oelint.vars.bbvars.BB_NICE_LEVEL": "warning", + "oelint.vars.bbvars.BB_NO_NETWORK": "warning", + "oelint.vars.bbvars.BB_NUMBER_PARSE_THREADS": "warning", + "oelint.vars.bbvars.BB_NUMBER_THREADS": "warning", + "oelint.vars.bbvars.BB_ORIGENV": "warning", + "oelint.vars.bbvars.BB_PRESERVE_ENV": "warning", + "oelint.vars.bbvars.BB_RUNFMT": "warning", + "oelint.vars.bbvars.BB_RUNTASK": "warning", + "oelint.vars.bbvars.BB_SCHEDULER": "warning", + "oelint.vars.bbvars.BB_SCHEDULERS": "warning", + "oelint.vars.bbvars.BB_SETSCENE_DEPVALID": "warning", + "oelint.vars.bbvars.BB_SETSCENE_VERIFY_FUNCTION": "warning", + "oelint.vars.bbvars.BB_SIGNATURE_EXCLUDE_FLAGS": "warning", + "oelint.vars.bbvars.BB_SIGNATURE_HANDLER": "warning", + "oelint.vars.bbvars.BB_SRCREV_POLICY": "warning", + "oelint.vars.bbvars.BB_STAMP_POLICY": "warning", + "oelint.vars.bbvars.BB_STAMP_WHITELIST": "warning", + "oelint.vars.bbvars.BB_STRICT_CHECKSUM": "warning", + "oelint.vars.bbvars.BB_TASK_NICE_LEVEL": "warning", + "oelint.vars.bbvars.BB_TASKHASH": "warning", + "oelint.vars.bbvars.BB_VERBOSE_LOGS": "warning", + "oelint.vars.bbvars.BB_WORKERCONTEXT": "warning", + "oelint.vars.bbvars.BBDEBUG": "warning", + "oelint.vars.bbvars.BBFILE_COLLECTIONS": "warning", + "oelint.vars.bbvars.BBFILE_PATTERN": "warning", + "oelint.vars.bbvars.BBFILE_PRIORITY": "warning", + "oelint.vars.bbvars.BBFILES": "warning", + "oelint.vars.bbvars.BBINCLUDED": "warning", + "oelint.vars.bbvars.BBINCLUDELOGS": "warning", + "oelint.vars.bbvars.BBINCLUDELOGS_LINES": "warning", + "oelint.vars.bbvars.BBLAYERS": "warning", + "oelint.vars.bbvars.BBMASK": "warning", + "oelint.vars.bbvars.BBPATH": "warning", + "oelint.vars.bbvars.BBSERVER": "warning", + "oelint.vars.bbvars.BBVERSIONS": "warning", + "oelint.vars.bbvars.BITBAKE_UI": "warning", + "oelint.vars.bbvars.BUILDNAME": "warning", + "oelint.vars.bbvars.CACHE": "warning", + "oelint.vars.bbvars.DL_DIR": "warning", + "oelint.vars.bbvars.FILE": "warning", + "oelint.vars.bbvars.FILESDIR": "warning", + "oelint.vars.bbvars.FILESPATH": "warning", + "oelint.vars.bbvars.INHERIT": "warning", + "oelint.vars.bbvars.LAYERDEPENDS": "warning", + "oelint.vars.bbvars.LAYERDIR": "warning", + "oelint.vars.bbvars.LAYERVERSION": "warning", + "oelint.vars.bbvars.MIRRORS": "warning", + "oelint.vars.bbvars.MULTI_PROVIDER_WHITELIST": "warning", + "oelint.vars.bbvars.PERSISTENT_DIR": "warning", + "oelint.vars.bbvars.PREFERRED_PROVIDER": "warning", + "oelint.vars.bbvars.PREFERRED_PROVIDERS": "warning", + "oelint.vars.bbvars.PREFERRED_VERSION": "warning", + "oelint.vars.bbvars.PREMIRRORS": "warning", + "oelint.vars.bbvars.PRSERV_HOST": "warning", + "oelint.vars.bbvars.STAMP": "warning", + "oelint.vars.bbvars.TOPDIR": "warning", + "oelint.vars.bugtrackerisurl": "warning", + "oelint.vars.dependsappend": "error", + "oelint.vars.dependsclass": "error", + "oelint.vars.dependsordered": "info", + "oelint.vars.descriptiontoobrief": "info", + "oelint.vars.doublemodify": "error", + "oelint.vars.duplicate": "warning", + "oelint.vars.fileextrapaths": "info", + "oelint.vars.fileextrapathsop": "error", + "oelint.var.filesoverride": "warning", + "oelint.vars.homepageprefix": "warning", + "oelint.vars.homepageping": "warning", + "oelint.vars.insaneskip": "info", + "oelint.var.licenseremotefile": "info", + "oelint.vars.licensesdpx": "warning", + "oelint.vars.licfileprefix": "warning", + "oelint.vars.mispell": "warning", + "oelint.vars.multilineident": "warning", + "oelint.vars.overrideappend": "warning", + "oelint.vars.pbpusage": "error", + "oelint.vars.dusageinpkgfuncs": "error", + "oelint.vars.pkgspecific": "error", + "oelint.vars.pkgspecific.RDEPENDS": "error", + "oelint.vars.pkgspecific.RRECOMMENDS": "error", + "oelint.vars.pkgspecific.RSUGGESTS": "error", + "oelint.vars.pkgspecific.RCONFLICTS": "error", + "oelint.vars.pkgspecific.RPROVIDES": "error", + "oelint.vars.pkgspecific.RREPLACES": "error", + "oelint.vars.pkgspecific.FILES": "error", + "oelint.vars.pkgspecific.pkg_preinst": "error", + "oelint.vars.pkgspecific.pkg_postinst": "error", + "oelint.vars.pkgspecific.pkg_prerm": "error", + "oelint.vars.pkgspecific.pkg_postrm": "error", + "oelint.vars.pkgspecific.ALLOW_EMPTY": "error", + "oelint.vars.pnbpnusage": "error", + "oelint.vars.pnusagediscouraged": "warning", + "oelint.vars.pythonpnusage": "info", + "oelint.vars.valuequoted": "error", + "oelint.var.rootfspostcmd": "warning", + "oelint.vars.spacesassignment": "warning", + "oelint.vars.specific": "error", + "oelint.vars.srcurioptions": "warning", + "oelint.vars.srcuriappend": "error", + "oelint.vars.srcurichecksum": "error", + "oelint.vars.srcuridomains": "info", + "oelint.vars.srcurifile": "warning", + "oelint.vars.srcurigittag": "warning", + "oelint.vars.srcurisrcrevtag": "error", + "oelint.var.srcuriwildcard": "error", + "oelint.vars.summary80chars": "info", + "oelint.vars.summarylinebreaks": "warning", + "oelint.vars.notrailingslash": "error", + "oelint.vars.downloadfilename": "warning", + "oelint.vars.filessetting": "warning", + "oelint.vars.filessetting.hidden": "warning", + "oelint.vars.filessetting.double": "warning", + "oelint.var.improperinherit": "error", + "oelint.var.inherit": "warning", + "oelint.var.inherit.inherit": "warning", + "oelint.var.inherit.inherit_defer": "warning", + "oelint.var.inheritdevtool": "warning", + "oelint.var.inheritdevtool.native": "warning", + "oelint.var.inheritdevtool.nativesdk": "warning", + "oelint.var.inheritdevtool.cross": "warning", + "oelint.vars.listappend": "error", + "oelint.var.mandatoryvar": "error", + "oelint.var.mandatoryvar.SUMMARY": "error", + "oelint.var.mandatoryvar.DESCRIPTION": "info", + "oelint.var.mandatoryvar.HOMEPAGE": "error", + "oelint.var.mandatoryvar.LICENSE": "error", + "oelint.var.mandatoryvar.SRC_URI": "error", + "oelint.var.multiinclude": "warning", + "oelint.var.multiinherit": "warning", + "oelint.var.nativefilename": "warning", + "oelint.var.nativesdkfilename": "warning", + "oelint.var.order": "warning", + "oelint.var.order.SUMMARY": "warning", + "oelint.var.order.DESCRIPTION": "warning", + "oelint.var.order.AUTHOR": "warning", + "oelint.var.order.HOMEPAGE": "warning", + "oelint.var.order.BUGTRACKER": "warning", + "oelint.var.order.SECTION": "warning", + "oelint.var.order.LICENSE": "warning", + "oelint.var.order.LIC_FILES_CHKSUM": "warning", + "oelint.var.order.DEPENDS": "warning", + "oelint.var.order.PROVIDES": "warning", + "oelint.var.order.PV": "warning", + "oelint.var.order.SRC_URI": "warning", + "oelint.var.order.SRCREV": "warning", + "oelint.var.order.S": "warning", + "oelint.var.order.inherit": "warning", + "oelint.var.order.PACKAGECONFIG": "warning", + "oelint.var.order.EXTRA_QMAKEVARS_POST": "warning", + "oelint.var.order.EXTRA_OECONF": "warning", + "oelint.var.order.PACKAGE_ARCH": "warning", + "oelint.var.order.PACKAGES": "warning", + "oelint.var.order.FILES": "warning", + "oelint.var.order.RDEPENDS": "warning", + "oelint.var.order.RRECOMMENDS": "warning", + "oelint.var.order.RSUGGESTS": "warning", + "oelint.var.order.RPROVIDES": "warning", + "oelint.var.order.RCONFLICTS": "warning", + "oelint.var.order.BBCLASSEXTEND": "warning", + "oelint.vars.pathhardcode": "warning", + "oelint.vars.pathhardcode.systemd_user_unitdir": "warning", + "oelint.vars.pathhardcode.systemd_system_unitdir": "warning", + "oelint.vars.pathhardcode.docdir": "warning", + "oelint.vars.pathhardcode.infodir": "warning", + "oelint.vars.pathhardcode.mandir": "warning", + "oelint.vars.pathhardcode.libexecdir": "warning", + "oelint.vars.pathhardcode.systemd_unitdir": "warning", + "oelint.vars.pathhardcode.libdir": "warning", + "oelint.vars.pathhardcode.bindir": "warning", + "oelint.vars.pathhardcode.datadir": "warning", + "oelint.vars.pathhardcode.includedir": "warning", + "oelint.vars.pathhardcode.localstatedir": "warning", + "oelint.vars.pathhardcode.nonarch_base_libdir": "warning", + "oelint.vars.pathhardcode.sbindir": "warning", + "oelint.vars.pathhardcode.servicedir": "warning", + "oelint.vars.pathhardcode.sharedstatedir": "warning", + "oelint.vars.pathhardcode.sysconfdir": "warning", + "oelint.vars.virtual": "error" +} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..2fd0453 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,72 @@ +--- +default_stages: [pre-commit] + +default_install_hook_types: [pre-commit, commit-msg] +exclude: .*\.patch$ + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: check-added-large-files + - id: check-merge-conflict + - id: check-symlinks + - id: detect-private-key + - id: end-of-file-fixer + - id: trailing-whitespace + - id: mixed-line-ending + + - repo: https://github.com/adrienverge/yamllint + rev: v1.32.0 + hooks: + - id: yamllint + args: [-c=.yamllint] + + - repo: https://github.com/igorshubovych/markdownlint-cli + rev: v0.36.0 + hooks: + - id: markdownlint + - id: markdownlint-fix + + - repo: https://github.com/talos-systems/conform + rev: v0.1.0-alpha.27 + hooks: + - id: conform + stages: + - commit-msg + + - repo: https://github.com/koalaman/shellcheck-precommit + rev: v0.10.0 + hooks: + - id: shellcheck + args: ["--severity=warning"] + + - repo: https://github.com/zarhus/oelint-adv + rev: 949111ff4d256af759aa5d94db9d0fb444679b2c + hooks: + - id: oelint-adv + args: [--rulefile=.oelint-ruleset.json, --hide=info, --quiet, --fix] + name: Advanced oelint + description: Based on the OpenEmbedded Styleguide and work done by oe-stylize-tool this module offers a (nearly) complete linter for bitbake-recipes. + entry: oelint-adv + language: python + language_version: python3 + files: .*\.(bb)|(bbappend)|(bbclass)$ + + - repo: https://github.com/codespell-project/codespell + rev: v2.2.5 + hooks: + - id: codespell + + - repo: https://github.com/3mdeb/pre-commit-hook-branding + rev: 57bba1549352401e8a1c3617384a22458973fa7b + hooks: + - id: namespell + args: [--fix] + exclude: README.md + +ci: + autoupdate_commit_msg: 'pre-commit: autoupdate hooks' + autofix_prs: false + # docker is not supported on pre-commit.ci + skip: [shellcheck] diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..1a23bc1 --- /dev/null +++ b/.yamllint @@ -0,0 +1,16 @@ +--- +extends: default + +rules: + comments: + require-starting-space: true + ignore-shebangs: true + min-spaces-from-content: 2 + document-start: + present: true + level: error + indentation: + spaces: 2 + line-length: disable + truthy: + check-keys: false