#
# 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
