| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| name: Linting and MyPy (Pelican) |
| |
| on: |
| push: |
| # Branches only: release tags (pelican/v1.0.0, ...) touch these paths and |
| # re-running the linters on a tag adds nothing over the branch run. |
| branches: |
| - '**' |
| paths: |
| - 'pelican/**.py' |
| - 'pelican/pyproject.toml' |
| - 'pelican/pylintrc' |
| - '.github/workflows/linting.yml' |
| workflow_dispatch: |
| |
| permissions: |
| contents: read |
| |
| jobs: |
| lint-pelican: |
| runs-on: ubuntu-latest |
| # GitHub Actions log output is not a TTY, so tools that autodetect |
| # colors turn them off in CI. Force colorized output via the common |
| # `FORCE_COLOR` convention (honored by pylint, rich, uv, etc.) plus |
| # `PY_COLORS=1` which mypy's `rich`-based pretty printer picks up. |
| # The per-tool flags below (`--output-format=colorized`, |
| # `--color-output`) make the intent explicit and work even for |
| # tools that don't read the env vars. |
| env: |
| FORCE_COLOR: "1" |
| PY_COLORS: "1" |
| defaults: |
| run: |
| # Applies to every `run:` step in this job; `uses:` steps are |
| # unaffected, so setup-uv's `cache-dependency-glob` below still |
| # resolves from the repository root. |
| working-directory: pelican |
| steps: |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 |
| with: |
| persist-credentials: false |
| |
| - name: Set up Python environment |
| uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 |
| with: |
| python-version: '3.11' |
| |
| - name: Set up uv |
| uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 |
| with: |
| enable-cache: true |
| cache-dependency-glob: "pelican/uv.lock" |
| |
| - name: Type testing with mypy |
| run: uv run mypy --color-output --pretty --ignore-missing-imports . |
| |
| - name: Code linting with pylint |
| run: uv run pylint --output-format=colorized **/*.py |