From 2ac2b7ce43f60bb126937901b5bb857f9873c04f Mon Sep 17 00:00:00 2001 From: Lev Date: Fri, 10 Dec 2021 11:48:00 +0300 Subject: [PATCH] chore: Use pre-commit framework (#604) * Add pre-commit, prettier configs and editorconfig * Remove `check-toml` hook * Add isort config * Add codespell config * Update hooks * Remove prettierignore * Add shellcheck config * Add lint workflow * Add pre-commit autoupdate workflow * Remove path constraints from lint workflow * Fix CI * Add guide to CONTRIBUTING.md * Fix (probably) shfmt * Fix (probably) shfmt * Fix (probably) shfmt --- .editorconfig | 19 +++++++ .github/workflows/lint.yml | 33 +++++++++--- .github/workflows/pre-commit-autoupdate.yml | 26 ++++++++++ .pre-commit-config.yaml | 56 +++++++++++++++++++++ CONTRIBUTING.md | 25 ++++++++- 5 files changed, 151 insertions(+), 8 deletions(-) create mode 100644 .editorconfig create mode 100644 .github/workflows/pre-commit-autoupdate.yml create mode 100644 .pre-commit-config.yaml diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..4f050ea6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# http://editorconfig.org +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{py, pyi}] +indent_size = 4 + +[*Dockerfile*] +indent_size = 4 + +[*.md] +trim_trailing_whitespace = false diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 9c644a58..e8d08968 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -4,19 +4,38 @@ on: push: branches: - main - paths: - - "*.sh" pull_request: branches: - main - paths: - - "*.sh" jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: ludeeus/action-shellcheck@1.1.0 + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup Python + uses: actions/setup-python@v2 + + # For shfmt pre-commit hook + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: "^1.14" + + - name: Cache + uses: actions/cache@v2 + with: + path: | + ~/.cache/pre-commit + ~/.cache/pip + key: lint-${{ hashFiles('.pre-commit-config.yaml') }} + + - name: Install pre-commit + run: pip install -U pre-commit + + - name: Lint + run: pre-commit run --color=always --all-files env: - SHELLCHECK_OPTS: -x + GO111MODULE: on diff --git a/.github/workflows/pre-commit-autoupdate.yml b/.github/workflows/pre-commit-autoupdate.yml new file mode 100644 index 00000000..0317e051 --- /dev/null +++ b/.github/workflows/pre-commit-autoupdate.yml @@ -0,0 +1,26 @@ +name: Autoupdate pre-commit hooks + +on: + schedule: + # Every day at 7 am + - cron: 0 7 * * * + +jobs: + pre-commit-autoupdate: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Update pre-commit hooks + uses: vrslev/pre-commit-autoupdate@v1.0.0 + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v3 + with: + branch: pre-commit-autoupdate + title: "chore(deps): Update pre-commit hooks" + commit-message: "chore(deps): Update pre-commit hooks" + body: Update pre-commit hooks + labels: dependencies,development + delete-branch: True diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..7c769e86 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,56 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.0.1 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + + - repo: https://github.com/asottile/pyupgrade + rev: v2.29.1 + hooks: + - id: pyupgrade + args: [--py37-plus] + + - repo: https://github.com/psf/black + rev: 21.11b1 + hooks: + - id: black + + - repo: https://github.com/pycqa/isort + rev: 5.10.1 + hooks: + - id: isort + args: [ + -o, # KNOWN_THIRD_PARTY + frappe, + --profile, + black, + ] + + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v2.5.1 + hooks: + - id: prettier + exclude: installation/docker-compose-custom.yml + + - repo: https://github.com/codespell-project/codespell + rev: v2.1.0 + hooks: + - id: codespell + exclude: ".*Dockerfile.*" + + - repo: local + hooks: + - id: shfmt + name: shfmt + language: golang + additional_dependencies: [mvdan.cc/sh/v3/cmd/shfmt] + entry: shfmt + args: [-w] + types: [shell] + + - repo: https://github.com/shellcheck-py/shellcheck-py + rev: v0.8.0.1 + hooks: + - id: shellcheck + args: [-x] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 31bc9f8a..83715779 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,12 +10,35 @@ On each PR that contains changes relevant to Docker builds, images are being bui > :evergreen_tree: Please be considerate when pushing commits and opening PR for multiple branches, as the process of building images uses energy and contributes to global warming. > + ## Lint +We use `pre-commit` framework to lint the codebase before committing. +First, you need to install pre-commit with pip: + ```shell -shellcheck example.sh +pip install pre-commit ``` +Also you can use brew if you're on Mac: + +```shell +brew install pre-commit +``` + +To setup _pre-commit_ hook, run: + +```shell +pre-commit install +``` + +To run all the files in repository, run: + +```shell +pre-commit run --all-files +``` + + ## Build ```shell