# SonarCloud 프로젝트 설정 — xzawed/SCAManager # SonarCloud project configuration — xzawed/SCAManager # # 필수: GitHub Secrets 에 SONAR_TOKEN 설정 필요 # Required: set SONAR_TOKEN in GitHub Secrets. # SonarCloud → My Account → Security → Generate Token # # 프로젝트 생성 시 organization / projectKey 는 SonarCloud 에서 # When creating the project, use the organization/projectKey suggested by SonarCloud # 자동 제안되는 값을 사용 (기본 포맷: _) # (default format: _). sonar.organization=xzawed sonar.projectKey=xzawed_SCAManager sonar.projectName=SCAManager sonar.projectVersion=1.0 # 소스 & 테스트 분리 # Separate source and test roots. sonar.sources=src sonar.tests=tests # 사이클 93 Step 2: src/scripts/** 추가 — production import X (사용자 로컬 1회 실행 도구, README.md 명시). # Cycle 93 Step 2: added src/scripts/** — NOT a production import (local one-shot tool, see README.md). sonar.exclusions=**/__pycache__/**,**/*.pyc,**/migrations/**,alembic/versions/**,docs/**,e2e/**,src/scripts/**,src/static/mockup-polar.html sonar.test.inclusions=tests/**/*.py # JavaScript 제외 — Jinja2 {{ }} 구문이 있는 HTML 템플릿은 JS 파서가 파싱 불가 # Exclude HTML templates from JS analysis — Jinja2 {{ }} syntax causes JS parser errors. # (src/templates/**/*.html 은 Web 룰셋 분석 대상에서는 제외하지 않음 — CDN SRI 체크 등 유지) # (src/templates/**/*.html is NOT excluded from Web analysis — CDN SRI checks etc. still apply.) sonar.javascript.exclusions=src/templates/**/*.html,src/static/mockup-polar.html # CPD 제외 — 테스트 파일(반복 패치 블록)과 Jinja2 HTML 템플릿(구조적 반복) 은 CPD 대상 제외 # CPD exclusions — test files (repeated mock patch blocks) and Jinja2 HTML templates # (structural repetition) are excluded from Copy-Paste Detection. sonar.cpd.exclusions=tests/**,src/templates/** # Python 버전 (SonarCloud 가 파일 파싱 시 사용) # Python version used by SonarCloud when parsing files. sonar.python.version=3.12 # pytest + coverage 연동 (CI 에서 coverage.xml / pytest-results.xml 생성) # pytest + coverage integration (coverage.xml / pytest-results.xml generated in CI). sonar.python.coverage.reportPaths=coverage.xml sonar.python.xunit.reportPath=pytest-results.xml # 외부 린터 결과도 흡수 (선택 — SonarCloud 자체 분석과 중복되나 기록 목적) # Also import external linter results (optional — overlaps with SonarCloud's own analysis, kept for record). # sonar.python.pylint.reportPaths=pylint-report.txt # sonar.python.bandit.reportPaths=bandit-report.json # 인코딩 & SCM # Encoding & SCM settings. sonar.sourceEncoding=UTF-8 sonar.scm.provider=git # False Positive 억제 규칙 (2026-04-23 Phase Q.1) # False positive suppression rules (2026-04-23 Phase Q.1). # - python:S6418 (하드코딩 시크릿 감지) — 테스트·E2E 픽스처의 "token"/"SECRET" 문자열은 실제 시크릿 아님 # python:S6418 (hardcoded secret detection) — "token"/"SECRET" strings in test/E2E fixtures are not real secrets. # - python:S930 (함수 인자 수 불일치) — mock 기반 keyword-only 호출을 정적 분석이 오인 # python:S930 (argument count mismatch) — static analysis misidentifies mock-based keyword-only calls. # - Web:S5725 (CDN SRI 해시 누락) — Hotspot 3건. Rating 영향 없음. DNS 제약 환경에서 해시 계산 불가. # Web:S5725 (CDN SRI hash missing) — 3 hotspots, no rating impact; hash cannot be computed in DNS-restricted envs. # 후속 Phase: Chart.js / Pretendard 를 src/static/ 에 로컬 번들로 전환해 CDN 의존 제거. # Follow-up: bundle Chart.js / Pretendard locally under src/static/ to eliminate CDN dependency. sonar.issue.ignore.multicriteria=fp_testsecret,fp_e2esecret,fp_testargs,fp_cdnsri sonar.issue.ignore.multicriteria.fp_testsecret.ruleKey=python:S6418 sonar.issue.ignore.multicriteria.fp_testsecret.resourceKey=tests/**/*.py sonar.issue.ignore.multicriteria.fp_e2esecret.ruleKey=python:S6418 sonar.issue.ignore.multicriteria.fp_e2esecret.resourceKey=e2e/**/*.py sonar.issue.ignore.multicriteria.fp_testargs.ruleKey=python:S930 sonar.issue.ignore.multicriteria.fp_testargs.resourceKey=tests/**/*.py sonar.issue.ignore.multicriteria.fp_cdnsri.ruleKey=Web:S5725 sonar.issue.ignore.multicriteria.fp_cdnsri.resourceKey=src/templates/**/*.html