From c522b938d729120b560818d64e4270935a9f230c Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Mon, 18 Dec 2023 19:11:42 +0100 Subject: [PATCH] feat: create pre-commit config for new app --- frappe/utils/boilerplate.py | 85 +++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/frappe/utils/boilerplate.py b/frappe/utils/boilerplate.py index 7fcd4bfcb6..4f8943ca12 100644 --- a/frappe/utils/boilerplate.py +++ b/frappe/utils/boilerplate.py @@ -152,6 +152,9 @@ def _create_app_boilerplate(dest, hooks, no_git=False): with open(os.path.join(dest, hooks.app_name, "pyproject.toml"), "w") as f: f.write(frappe.as_unicode(pyproject_template.format(**hooks))) + with open(os.path.join(dest, hooks.app_name, ".pre-commit-config.yaml"), "w") as f: + f.write(frappe.as_unicode(precommit_template.format(**hooks))) + with open(os.path.join(dest, hooks.app_name, "README.md"), "w") as f: f.write( frappe.as_unicode( @@ -690,3 +693,85 @@ patches_template = """[pre_model_sync] [post_model_sync] # Patches added in this section will be executed after doctypes are migrated""" + + +precommit_template = """exclude: 'node_modules|.git' +default_stages: [commit] +fail_fast: false + + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.0 + hooks: + - id: trailing-whitespace + files: "{app_name}.*" + exclude: ".*json$|.*txt$|.*csv|.*md|.*svg" + - id: check-yaml + - id: check-merge-conflict + - id: check-ast + - id: check-json + - id: check-toml + - id: check-yaml + - id: debug-statements + + - repo: https://github.com/asottile/pyupgrade + rev: v3.9.0 + hooks: + - id: pyupgrade + args: ['--py310-plus'] + + - repo: https://github.com/frappe/black + rev: 951ccf4d5bb0d692b457a5ebc4215d755618eb68 + hooks: + - id: black + + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v2.7.1 + hooks: + - id: prettier + types_or: [javascript, vue, scss] + # Ignore any files that might contain jinja / bundles + exclude: | + (?x)^( + {app_name}/public/dist/.*| + .*node_modules.*| + .*boilerplate.*| + {app_name}/templates/includes/.*| + {app_name}/public/js/lib/.* + )$ + + + - repo: https://github.com/pre-commit/mirrors-eslint + rev: v8.44.0 + hooks: + - id: eslint + types_or: [javascript] + args: ['--quiet'] + # Ignore any files that might contain jinja / bundles + exclude: | + (?x)^( + {app_name}/public/dist/.*| + cypress/.*| + .*node_modules.*| + .*boilerplate.*| + {app_name}/templates/includes/.*| + {app_name}/public/js/lib/.* + )$ + + - repo: https://github.com/PyCQA/isort + rev: 5.12.0 + hooks: + - id: isort + + - repo: https://github.com/PyCQA/flake8 + rev: 6.0.0 + hooks: + - id: flake8 + additional_dependencies: ['flake8-bugbear',] + +ci: + autoupdate_schedule: weekly + skip: [] + submodules: false +"""