mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-04 03:27:12 -05:00 
			
		
		
		
	Chore: Enable SonarQube scanning (#10904)
--------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									c8850fa752
								
							
						
					
					
						commit
						8d1f23e9d6
					
				
							
								
								
									
										91
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										91
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							@ -151,6 +151,18 @@ jobs:
 | 
				
			|||||||
          token: ${{ secrets.CODECOV_TOKEN }}
 | 
					          token: ${{ secrets.CODECOV_TOKEN }}
 | 
				
			||||||
          flags: backend-python-${{ matrix.python-version }}
 | 
					          flags: backend-python-${{ matrix.python-version }}
 | 
				
			||||||
          files: coverage.xml
 | 
					          files: coverage.xml
 | 
				
			||||||
 | 
					      - name: Upload coverage artifacts
 | 
				
			||||||
 | 
					        uses: actions/upload-artifact@v4
 | 
				
			||||||
 | 
					        if: always()
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          name: backend-coverage-${{ matrix.python-version }}
 | 
				
			||||||
 | 
					          path: |
 | 
				
			||||||
 | 
					            .coverage
 | 
				
			||||||
 | 
					            coverage.xml
 | 
				
			||||||
 | 
					            junit.xml
 | 
				
			||||||
 | 
					          retention-days: 1
 | 
				
			||||||
 | 
					          include-hidden-files: true
 | 
				
			||||||
 | 
					          if-no-files-found: error
 | 
				
			||||||
      - name: Stop containers
 | 
					      - name: Stop containers
 | 
				
			||||||
        if: always()
 | 
					        if: always()
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
@ -233,6 +245,17 @@ jobs:
 | 
				
			|||||||
          token: ${{ secrets.CODECOV_TOKEN }}
 | 
					          token: ${{ secrets.CODECOV_TOKEN }}
 | 
				
			||||||
          flags: frontend-node-${{ matrix.node-version }}
 | 
					          flags: frontend-node-${{ matrix.node-version }}
 | 
				
			||||||
          directory: src-ui/coverage/
 | 
					          directory: src-ui/coverage/
 | 
				
			||||||
 | 
					      - name: Upload coverage artifacts
 | 
				
			||||||
 | 
					        uses: actions/upload-artifact@v4
 | 
				
			||||||
 | 
					        if: always()
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          name: frontend-coverage-${{ matrix.shard-index }}
 | 
				
			||||||
 | 
					          path: |
 | 
				
			||||||
 | 
					            src-ui/coverage/lcov.info
 | 
				
			||||||
 | 
					            src-ui/coverage/coverage-final.json
 | 
				
			||||||
 | 
					            src-ui/junit.xml
 | 
				
			||||||
 | 
					          retention-days: 1
 | 
				
			||||||
 | 
					          if-no-files-found: error
 | 
				
			||||||
  tests-frontend-e2e:
 | 
					  tests-frontend-e2e:
 | 
				
			||||||
    name: "Frontend E2E Tests (Node ${{ matrix.node-version }} - ${{ matrix.shard-index }}/${{ matrix.shard-count }})"
 | 
					    name: "Frontend E2E Tests (Node ${{ matrix.node-version }} - ${{ matrix.shard-index }}/${{ matrix.shard-count }})"
 | 
				
			||||||
    runs-on: ubuntu-24.04
 | 
					    runs-on: ubuntu-24.04
 | 
				
			||||||
@ -313,6 +336,74 @@ jobs:
 | 
				
			|||||||
        env:
 | 
					        env:
 | 
				
			||||||
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
 | 
					          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
 | 
				
			||||||
        run: cd src-ui && pnpm run build --configuration=production
 | 
					        run: cd src-ui && pnpm run build --configuration=production
 | 
				
			||||||
 | 
					  sonarqube-analysis:
 | 
				
			||||||
 | 
					    name: "SonarQube Analysis"
 | 
				
			||||||
 | 
					    runs-on: ubuntu-24.04
 | 
				
			||||||
 | 
					    needs:
 | 
				
			||||||
 | 
					      - tests-backend
 | 
				
			||||||
 | 
					      - tests-frontend
 | 
				
			||||||
 | 
					    if: github.repository_owner == 'paperless-ngx'
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: Checkout
 | 
				
			||||||
 | 
					        uses: actions/checkout@v5
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          fetch-depth: 0
 | 
				
			||||||
 | 
					      - name: Download all backend coverage
 | 
				
			||||||
 | 
					        uses: actions/download-artifact@v5.0.0
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          pattern: backend-coverage-*
 | 
				
			||||||
 | 
					          path: ./coverage/
 | 
				
			||||||
 | 
					      - name: Download all frontend coverage
 | 
				
			||||||
 | 
					        uses: actions/download-artifact@v5.0.0
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          pattern: frontend-coverage-*
 | 
				
			||||||
 | 
					          path: ./coverage/
 | 
				
			||||||
 | 
					      - name: Set up Python
 | 
				
			||||||
 | 
					        uses: actions/setup-python@v5
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
 | 
				
			||||||
 | 
					      - name: Install coverage tools
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          pip install coverage
 | 
				
			||||||
 | 
					          npm install -g nyc
 | 
				
			||||||
 | 
					      # Merge backend coverage from all Python versions
 | 
				
			||||||
 | 
					      - name: Merge backend coverage
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          coverage combine coverage/backend-coverage-*/.coverage
 | 
				
			||||||
 | 
					          coverage xml -o merged-backend-coverage.xml
 | 
				
			||||||
 | 
					      # Merge frontend coverage from all shards
 | 
				
			||||||
 | 
					      - name: Merge frontend coverage
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          # Find all coverage-final.json files from the shards, exit with error if none found
 | 
				
			||||||
 | 
					          shopt -s nullglob
 | 
				
			||||||
 | 
					          files=(coverage/frontend-coverage-*/coverage/coverage-final.json)
 | 
				
			||||||
 | 
					          if [ ${#files[@]} -eq 0 ]; then
 | 
				
			||||||
 | 
					            echo "No frontend coverage JSON found under coverage/" >&2
 | 
				
			||||||
 | 
					            exit 1
 | 
				
			||||||
 | 
					          fi
 | 
				
			||||||
 | 
					          # Create .nyc_output directory and copy each shard's coverage JSON into it with a unique name
 | 
				
			||||||
 | 
					          mkdir -p .nyc_output
 | 
				
			||||||
 | 
					          for coverage_json in "${files[@]}"; do
 | 
				
			||||||
 | 
					            shard=$(basename "$(dirname "$(dirname "$coverage_json")")")
 | 
				
			||||||
 | 
					            cp "$coverage_json" ".nyc_output/${shard}.json"
 | 
				
			||||||
 | 
					          done
 | 
				
			||||||
 | 
					          npx nyc merge .nyc_output .nyc_output/out.json
 | 
				
			||||||
 | 
					          npx nyc report --reporter=lcovonly --report-dir coverage
 | 
				
			||||||
 | 
					      - name: Upload coverage artifacts
 | 
				
			||||||
 | 
					        uses: actions/upload-artifact@v4.6.2
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          name: merged-coverage
 | 
				
			||||||
 | 
					          path: |
 | 
				
			||||||
 | 
					            merged-backend-coverage.xml
 | 
				
			||||||
 | 
					            .nyc_output/*
 | 
				
			||||||
 | 
					            coverage/lcov.info
 | 
				
			||||||
 | 
					          retention-days: 7
 | 
				
			||||||
 | 
					          if-no-files-found: error
 | 
				
			||||||
 | 
					          include-hidden-files: true
 | 
				
			||||||
 | 
					      - name: SonarQube Analysis
 | 
				
			||||||
 | 
					        uses: SonarSource/sonarqube-scan-action@v5
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
 | 
				
			||||||
  build-docker-image:
 | 
					  build-docker-image:
 | 
				
			||||||
    name: Build Docker image for ${{ github.ref_name }}
 | 
					    name: Build Docker image for ${{ github.ref_name }}
 | 
				
			||||||
    runs-on: ubuntu-24.04
 | 
					    runs-on: ubuntu-24.04
 | 
				
			||||||
 | 
				
			|||||||
@ -255,6 +255,7 @@ PAPERLESS_DISABLE_DBHANDLER = "true"
 | 
				
			|||||||
PAPERLESS_CACHE_BACKEND = "django.core.cache.backends.locmem.LocMemCache"
 | 
					PAPERLESS_CACHE_BACKEND = "django.core.cache.backends.locmem.LocMemCache"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[tool.coverage.run]
 | 
					[tool.coverage.run]
 | 
				
			||||||
 | 
					relative_files = true
 | 
				
			||||||
source = [
 | 
					source = [
 | 
				
			||||||
  "src/",
 | 
					  "src/",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										24
									
								
								sonar-project.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								sonar-project.properties
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					sonar.projectKey=paperless-ngx_paperless-ngx
 | 
				
			||||||
 | 
					sonar.organization=paperless-ngx
 | 
				
			||||||
 | 
					sonar.projectName=Paperless-ngx
 | 
				
			||||||
 | 
					sonar.projectVersion=1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Source and test directories
 | 
				
			||||||
 | 
					sonar.sources=src/,src-ui/
 | 
				
			||||||
 | 
					sonar.test.inclusions=**/test_*.py,**/tests.py,**/*.spec.ts,**/*.test.ts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Language specific settings
 | 
				
			||||||
 | 
					sonar.python.version=3.10,3.11,3.12,3.13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Coverage reports
 | 
				
			||||||
 | 
					sonar.python.coverage.reportPaths=merged-backend-coverage.xml
 | 
				
			||||||
 | 
					sonar.javascript.lcov.reportPaths=coverage/lcov.info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Test execution reports
 | 
				
			||||||
 | 
					sonar.junit.reportPaths=**/junit.xml,**/test-results.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Encoding
 | 
				
			||||||
 | 
					sonar.sourceEncoding=UTF-8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Exclusions
 | 
				
			||||||
 | 
					sonar.exclusions=**/migrations/**,**/node_modules/**,**/static/**,**/venv/**,**/.venv/**,**/dist/**
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user