diff --git a/catalog-info.yaml b/catalog-info.yaml index 83bf988..aa512bc 100644 --- a/catalog-info.yaml +++ b/catalog-info.yaml @@ -9,4 +9,5 @@ spec: - https://github.com/radiorabe/backstage-software-templates/blob/main/scaffolder-templates/all-in-one/template.yaml - https://github.com/radiorabe/backstage-software-templates/blob/main/scaffolder-templates/ci_schedule/template.yaml - https://github.com/radiorabe/backstage-software-templates/blob/main/scaffolder-templates/dependabot/template.yaml + - https://github.com/radiorabe/backstage-software-templates/blob/main/scaffolder-templates/ruff/template.yaml - https://github.com/radiorabe/backstage-software-templates/blob/main/scaffolder-templates/semrel/template.yaml diff --git a/scaffolder-skeletons/ruff/ruff.toml b/scaffolder-skeletons/ruff/ruff.toml new file mode 100644 index 0000000..210a5d4 --- /dev/null +++ b/scaffolder-skeletons/ruff/ruff.toml @@ -0,0 +1,74 @@ +# [ruff](https://docs.astral.sh/ruff/) config +# +# templated with https://github.com/radiorabe/backstage-software-templates + +[lint] +select = [ + "F", # pyflakes + "E", # pycodestyle errors + "I", # isort + "C90", # mccabe + "N", # pep8-naming + "D", # pydocstyle + "UP", # pyupgrade + "ANN", # flake8-annotations + "ASYNC", # flake8-async + "S", # flake8-bandit + "BLE", # flake8-blind-exception + "FBT", # flake8-boolean-trap + "B", # flake8-bugbear + "A", # flake8-builtins + "COM", # flake8-commas + "C4", # flake8-comprehensions + "DTZ", # flake8-datetimez + "T10", # flake8-debugger + "EM", # flake8-errmsg + "EXE", # flake8-executable + "FA", # flake8-future-annotations + "ISC", # flake8-implicit-str-concat + "ICN", # flake8-import-conventions + "G", # flake8-logging-format + "INP", # flake8-no-pep420 + "PIE", # flake8-pie + "T20", # flake8-print + "PYI", # flake8-pyi + "PT", # flake8-pytest-style + "Q", # flake8-quotes + "RSE", # flake8-raise + "RET", # flake8-return + "SLF", # flake8-self + "SLOT", # flake8-slots + "SIM", # flake8-simplify + "TID", # flake8-tidy-imports + "TCH", # flake8-type-checking + "INT", # flake8-gettext + "ARG", # flake8-unused-arguments + "PTH", # flake8-use-pathlib + "TD", # flake8-todos + "ERA", # eradicate + "PGH", # pygrep-hooks + "PL", # Pylint + "TRY", # tryceratops + "PERF", # Perflint + "RUF", # ruff specific rules +] +ignore = [ + "D203", # we prefer blank-line-before-class (D211) for black compat + "D213", # we prefer multi-line-summary-first-line (D212) +] + +[lint.per-file-ignores] +"tests/**/*.py" = [ + "D", # pydocstyle is optional for tests + "ANN", # flake8-annotations are optional for tests + "S101", # assert is allow in tests + "S108" # /tmp is allowed in tests since it's expected to be mocked + "DTZ001", # tests often run in UTC + "INP001", # tests do not need a dunder init +] +"**/__init__.py" = [ + "D104", # dunder init does not need a docstring because it might be empty +] +"docs/gen_ref_pages.py" = [ + "INP001", # mkdocs does not need a dunder init +] diff --git a/scaffolder-templates/ruff/template.yaml b/scaffolder-templates/ruff/template.yaml new file mode 100644 index 0000000..940572f --- /dev/null +++ b/scaffolder-templates/ruff/template.yaml @@ -0,0 +1,61 @@ +apiVersion: scaffolder.backstage.io/v1beta3 +kind: Template +metadata: + name: ruff + title: Ruff + description: Configure Ruff on an existing project. + tags: + - python +spec: + owner: it-reaktion + type: ci + parameters: + - title: Choose a location + required: + - repoUrl + properties: + repoUrl: + title: Repository Location + type: string + ui:field: RepoUrlPicker + ui:options: + allowedHosts: + - github.com + allowedOwners: + - radiorabe + requestUserCredentials: + secretsKey: USER_GITHUB_OAUTH_TOKEN + additionalScopes: + github: + - workflow + steps: + - id: fetch-base + name: Fetch Base + action: fetch:template + input: + url: ../../scaffolder-skeletons/ruff/ + replace: true + values: + actions_version: ${{ steps.getversion.output.body.tag_name }} + - id: publish + name: Publish + action: publish:github:pull-request + input: + title: "chore(ci): configure ruff" + token: ${{ secrets.USER_GITHUB_OAUTH_TOKEN }} + repoUrl: ${{ parameters.repoUrl }} + branchName: chore/ci/ruff + update: true + description: | + # Configure [ruff](https://docs.astral.sh/ruff/) + + This configuration reflects the default RaBe Ruff config. + + Please check the following before you merge it: + + * [ ] pytest-ruff is installed and the `--ruff` arg is passed in `pyproject.toml` + * [ ] `pyproject.toml` does not contain any further ruff configuration + output: + links: + - url: ${{steps.publish.output.remoteUrl}} + title: "Go to PR"