diff --git a/.flake8 b/.flake8 new file mode 100644 index 000000000..9419e9369 --- /dev/null +++ b/.flake8 @@ -0,0 +1,10 @@ +[flake8] +# Ignore style and complexity +# E: style errors +# W: style warnings +# C: complexity +# E402: module level import not at top of file +# I100: Import statements are in the wrong order +# I101: Imported names are in the wrong order. Should be +# F841: local variable ... is assigned to but never used +ignore = E, C, W, I100, I101, D400, F841 diff --git a/.github/labeler.yml b/.github/labeler.yml index a74875c95..4fa33334b 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -16,6 +16,7 @@ configuration: - '**/apt.txt' - '**/infra-requirements.txt' - '**/requirements.in' + - '**/dev-requirements.txt' - '**/requirements.txt' - '**/runtime.txt' - '**/*.json' diff --git a/.github/workflows/yaml-lint.yaml b/.github/workflows/yaml-lint.yaml deleted file mode 100644 index 787d5e3fa..000000000 --- a/.github/workflows/yaml-lint.yaml +++ /dev/null @@ -1,15 +0,0 @@ -name: "Yaml lint" -on: - - pull_request # yamllint disable-line rule:truthy - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Install yamllint - run: pip install yamllint==1.35.1 - - - name: Lint YAML files - run: yamllint --no-warnings . diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..c0d63cb27 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,101 @@ +# pre-commit is a tool to perform a predefined set of tasks manually and/or +# automatically before git commits are made. +# +# Config reference: https://pre-commit.com/#pre-commit-configyaml---top-level +# +# Common tasks +# +# - Run on all files: pre-commit run --all-files +# - Register git hooks: pre-commit install --install-hooks +# +repos: + # yaml linter + - repo: https://github.com/adrienverge/yamllint.git + rev: v1.35.1 + hooks: + - id: yamllint + # TODO: remove --no-warnings eventually + args: [--no-warnings, -c=./.yamllint.yaml] + + # Autoformat: Python code + - repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.6.9 + hooks: + # Run the linter. + - id: ruff + types_or: [ python, pyi ] + args: [ --fix ] + # Run the formatter. + - id: ruff-format + types_or: [ python, pyi ] + + # Autoformat: Python code, syntax patterns are modernized + - repo: https://github.com/asottile/pyupgrade + rev: v3.17.0 + hooks: + - id: pyupgrade + args: + - --py36-plus + + # Autoformat: Python code + - repo: https://github.com/pycqa/isort + rev: "5.13.2" + hooks: + - id: isort + + # Autoformat: Python code + - repo: https://github.com/psf/black + rev: "24.10.0" + hooks: + - id: black + # This is a `.py` file but is encrypted with sops + + # Lint: Python code + - repo: https://github.com/pycqa/flake8 + rev: "7.1.1" + hooks: + - id: flake8 + # In case a `.py` file but is encrypted with sops + # exclude: + + # Prevent unencrypted files from being committed + - repo: https://github.com/yuvipanda/pre-commit-hook-ensure-sops + rev: v1.1 + hooks: + - id: sops-encryption + # Add files here if they contain the word 'secret' but should not be encrypted + # exclude: + + # Prevent known typos from being committed + - repo: https://github.com/codespell-project/codespell + rev: v2.3.0 + hooks: + - id: codespell + args: + # Autofix known typos + - --write-changes + additional_dependencies: + - tomli + + # pre-commit.com provided hooks + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + # ref: https://github.com/pre-commit/pre-commit-hooks#hooks-available + hooks: + # Autoformat: Makes sure files end in a newline and only a newline. + - id: end-of-file-fixer + + # Autoformat: Sorts entries in requirements.txt. + - id: requirements-txt-fixer + + # Lint: Check for files with names that would conflict on a + # case-insensitive filesystem like MacOS HFS+ or Windows FAT. + - id: check-case-conflict + + # Lint: Checks that non-binary executables have a proper shebang. + - id: check-executables-have-shebangs + +# pre-commit.ci config reference: https://pre-commit.ci/#configuration +#ci: +# autoupdate_schedule: monthly diff --git a/dev-requirements.txt b/dev-requirements.txt new file mode 100644 index 000000000..fe0997139 --- /dev/null +++ b/dev-requirements.txt @@ -0,0 +1,13 @@ +# allow for base image specification in hubploy.yaml +git+https://github.com/berkeley-dsep-infra/hubploy.git +pygithub +pyrsistent==0.19.3 +attrs==23.1.0 +chartpress +jupyter-repo2docker==2024.07.0 +myst-parser +chardet +niquests==3.7.2 +urllib3<2.0.0 +yamllint==1.35.1 +pre-commit==4.0.1 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..eea6392a3 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,10 @@ +[tool.black] +# target-version should be all supported versions +target-version = ['py37', 'py38', 'py39', 'py310', 'py311'] + +[tool.isort] +profile = "black" + +[tool.codespell] +skip = '.git,*.pdf,*.svg,vendor/grafana/dashboards/*,deployments/*/secrets/*' +ignore-words-list = 'demog,wasn' diff --git a/requirements.txt b/requirements.txt index 88193e5d1..cf410a6e9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,3 @@ chardet niquests==3.7.2 urllib3<2.0.0 yamllint==1.35.1 -pre-commit==4.0.1