This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [python](https://github.com/actions/python-versions) | uses-with | minor | `3.13` -> `3.14` | | python | final | minor | `3.13-slim` -> `3.14-slim` | --- ### Release Notes <details> <summary>actions/python-versions (python)</summary> ### [`v3.14.0`](https://github.com/actions/python-versions/releases/tag/3.14.0-18313368925): 3.14.0 [Compare Source](https://github.com/actions/python-versions/compare/3.13.8-18331000654...3.14.0-18313368925) Python 3.14.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMzguNSIsInVwZGF0ZWRJblZlciI6IjQxLjE0MC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==--> Reviewed-on: #382 Co-authored-by: renovate[bot] <renovate-bot@git.tainton.uk> Co-committed-by: renovate[bot] <renovate-bot@git.tainton.uk>
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
name: CI
 | 
						|
on:
 | 
						|
  pull_request:
 | 
						|
    types:
 | 
						|
      - opened
 | 
						|
      - edited
 | 
						|
      - synchronize
 | 
						|
      - reopened
 | 
						|
 | 
						|
jobs:
 | 
						|
  ci:
 | 
						|
    runs-on: ubuntu-latest
 | 
						|
    steps:
 | 
						|
      - name: Check out repository code
 | 
						|
        uses: actions/checkout@v5.0.0
 | 
						|
        with:
 | 
						|
          fetch-depth: 0
 | 
						|
 | 
						|
      - name: Run Hadolint
 | 
						|
        uses: hadolint/hadolint-action@v3.3.0
 | 
						|
        with:
 | 
						|
          dockerfile: Dockerfile
 | 
						|
          output-file: hadolint.out
 | 
						|
          format: sonarqube
 | 
						|
          no-fail: true
 | 
						|
 | 
						|
      - name: Setup Python
 | 
						|
        uses: actions/setup-python@v6
 | 
						|
        with:
 | 
						|
          python-version: "3.14"
 | 
						|
 | 
						|
      - name: uv cache
 | 
						|
        uses: actions/cache@v4
 | 
						|
        with:
 | 
						|
          path: /tmp/.uv-cache
 | 
						|
          key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
 | 
						|
          restore-keys: |
 | 
						|
            uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
 | 
						|
            uv-${{ runner.os }}
 | 
						|
 | 
						|
      - name: Install dependencies
 | 
						|
        run: uv sync
 | 
						|
      
 | 
						|
      - name: Check Import Sorting
 | 
						|
        run: uv run isort --check app/ tests/
 | 
						|
 | 
						|
      - name: Lint
 | 
						|
        run: |
 | 
						|
          uv run pylint --fail-under=8 --recursive=yes --output-format=parseable --output=lintreport.txt app/ tests/
 | 
						|
          cat lintreport.txt
 | 
						|
 | 
						|
      - name: Unit Test
 | 
						|
        run: |
 | 
						|
          uv run coverage run -m pytest -v --junitxml=testresults.xml
 | 
						|
          uv run coverage report
 | 
						|
        # sed -i 's@${{ gitea.workspace }}@/github/workspace@g' coverage.xml
 | 
						|
 | 
						|
      - name: Minimize uv cache
 | 
						|
        run: uv cache prune --ci
 | 
						|
 | 
						|
      # - name: SonarQube Scan
 | 
						|
      #   uses: SonarSource/sonarqube-scan-action@v5.2.0
 | 
						|
      #   env:
 | 
						|
      #     SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST_URL }}
 | 
						|
      #     SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }}
 | 
						|
 | 
						|
      - name: Set up environment for Snyk
 | 
						|
        run: |
 | 
						|
          uv pip freeze > requirements.txt
 | 
						|
          mv pyproject.toml pyproject.toml.bak
 | 
						|
          mv uv.lock uv.lock.bak
 | 
						|
 | 
						|
      - name: Snyk SAST Scan
 | 
						|
        uses: snyk/actions/python@master
 | 
						|
        env:
 | 
						|
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
 | 
						|
        with:
 | 
						|
          # command: snyk
 | 
						|
          args: snyk code test #--all-projects --exclude=.archive
 | 
						|
 | 
						|
      # - name: Snyk Vulnerability Scan
 | 
						|
      #   uses: snyk/actions/python@master
 | 
						|
      #   continue-on-error: true # Sometimes vulns aren't immediately fixable
 | 
						|
      #   env:
 | 
						|
      #     SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
 | 
						|
      #     DEBUG: "*snyk*"
 | 
						|
      #   with:
 | 
						|
      #     # command: snyk
 | 
						|
      #     args: snyk test #--all-projects --exclude=.archive
 | 
						|
      
 | 
						|
      - name: Reverse set up environment for Snyk
 | 
						|
        run: |
 | 
						|
          rm -f requirements.txt
 | 
						|
          mv pyproject.toml.bak pyproject.toml
 | 
						|
          mv uv.lock.bak uv.lock
 |