# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python

name: Python application

on:
  push:
    branches: [ "main", "dev-*", "*/issue*" ]
    paths-ignore:
    - '**.md' # Do no build on *.md changes
    - '**.yml' # Do no build on *.yml changes
    - '**.yaml' # Do no build on *.yaml changes
    - '**.yuml' # Do no build on *.yuml changes
    - '**.svg' # Do no build on *.svg changes
    - '**.json' # Do no build on *.json changes
    - '**.cfg' # Do no build on *.cfg changes
    - '**.gitignore' # Do no build on *.gitignore changes
    - '**.dockerfile' # Do no build on *.dockerfile changes
    - '**.sh' # Do no build on *.sh changes     
  pull_request:
    branches: [ "main", "dev-*" ]

permissions:
  contents: read
  pull-requests: read # allows SonarCloud to decorate PRs with analysis results

env:
  TZ: "Europe/Berlin"
  SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

jobs:
  build:

    runs-on: ubuntu-24.04

    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0  # Shallow clones should be disabled for a better relevancy of analysis
    - name: Set up Python 3.13
      uses: actions/setup-python@v5
      with:
        python-version: "3.13"
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        if [ -f requirements-test.txt ]; then pip install -r requirements-test.txt; fi
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
    - name: Lint with flake8
      run: |
        # stop the build if there are Python syntax errors or undefined names
        flake8 . --count --select=E9,F63,F7,F82 --ignore=F821 --show-source --statistics
        # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
        flake8 --exit-zero --ignore=C901,E121,E123,E126,E133,E226,E241,E242,E704,W503,W504,W505 --format=pylint --output-file=output_flake.txt --exclude=*.pyc app/src/
    - name: Test with pytest
      run: |
        python -m pytest app --cov=app/src --cov-config=.cover_ghaction_rc --cov-report=xml
        coverage report
    - name: Analyze with SonarCloud
      if: ${{ env.SONAR_TOKEN != 0 }}
      uses: SonarSource/sonarqube-scan-action@v5
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        projectBaseDir: .
        args:
          -Dsonar.projectKey=s-allius_tsun-gen3-proxy
          -Dsonar.python.coverage.reportPaths=coverage.xml
          -Dsonar.python.flake8.reportPaths=output_flake.txt
          # -Dsonar.docker.hadolint.reportPaths=
  