Skip to content

Commit 4d21a3d

Browse files
authored
Merge pull request #85 from omics-datascience/feature/sonarqube
Feature/sonarqube
2 parents 0699059 + 3700456 commit 4d21a3d

5 files changed

Lines changed: 140 additions & 1 deletion

File tree

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
name: SonarQube Analysis on Pull Request
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
- develop
8+
- 'feature/**'
9+
- 'bugfix/**'
10+
- 'v*'
11+
types: [opened, synchronize, reopened]
12+
13+
jobs:
14+
sonarqube:
15+
name: SonarQube Analysis
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
- name: Checkout code
20+
uses: actions/checkout@v5
21+
with:
22+
fetch-depth: 0 # Shallow clones should be disabled for better analysis
23+
24+
- name: Set up Python
25+
uses: actions/setup-python@v5
26+
with:
27+
python-version: '3.12'
28+
cache: 'pip'
29+
30+
- name: Set up Node.js
31+
uses: actions/setup-node@v4
32+
with:
33+
node-version: '20'
34+
cache: 'npm'
35+
cache-dependency-path: src/frontend/static/frontend/package-lock.json
36+
37+
- name: Install Python dependencies
38+
run: |
39+
python -m pip install --upgrade pip
40+
pip install -r config/requirements.txt
41+
42+
- name: Install Node dependencies
43+
run: npm --prefix src/frontend/static/frontend ci
44+
45+
- name: SonarQube Scan
46+
uses: sonarsource/sonarqube-scan-action@v6
47+
env:
48+
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
49+
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
50+
with:
51+
args: >
52+
-Dsonar.projectKey=omics-datascience_multiomix
53+
-Dsonar.organization=omics-datascience
54+
-Dsonar.projectName=multiomix
55+
-Dsonar.sources=src
56+
-Dsonar.exclusions=**/node_modules/**,**/migrations/**,**/__pycache__/**,**/venv/**,**/.venv/**,**/htmlcov/**,**/staticfiles/**,**/*.pyc,**/email/**,**/dist/**
57+
-Dsonar.python.version=3.12
58+
-Dsonar.javascript.node.maxspace=4096
59+
-Dsonar.sourceEncoding=UTF-8
60+
-Dsonar.pullrequest.key=${{ github.event.pull_request.number }}
61+
-Dsonar.pullrequest.branch=${{ github.head_ref }}
62+
-Dsonar.pullrequest.base=${{ github.base_ref }}
63+
64+
- name: Wait for Quality Gate
65+
uses: sonarsource/sonarqube-quality-gate-action@master
66+
timeout-minutes: 5
67+
env:
68+
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
69+
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ src/api_service/experiments/venv
1212
docker-compose.yml
1313
src/secretkey.txt
1414
docker-compose.mauri_dev.yml
15-
venv
15+
venv
16+
.DS_Store

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
# Multiomix
44

55
[![Last Build & Push](https://github.com/omics-datascience/multiomix/actions/workflows/main-wf.yaml/badge.svg)](https://github.com/omics-datascience/multiomix/actions/workflows/main-wf.yaml)
6+
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=omics-datascience_multiomix&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=omics-datascience_multiomix)
7+
[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=omics-datascience_multiomix&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=omics-datascience_multiomix)
8+
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=omics-datascience_multiomix&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=omics-datascience_multiomix)
9+
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=omics-datascience_multiomix&metric=coverage)](https://sonarcloud.io/summary/new_code?id=omics-datascience_multiomix)
610

711
Cloud-based platform to infer cancer genomic and epigenomic events associated with gene expression modulation.
812

SECURITY.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Security & Code Quality
2+
3+
Multiomix uses [SonarQube](https://www.sonarsource.com/products/sonarqube/) (via SonarCloud) to ensure code quality and catch maintainability and security issues early in the development process.
4+
5+
SonarQube is a static analysis platform that scans source code for bugs, vulnerabilities, and code quality problems across multiple languages — in our case, Python (Django backend) and TypeScript/JavaScript (React frontend).
6+
7+
> **Heads up:** Since Multiomix is a public repository, its SonarCloud analysis results are [publicly visible](https://sonarcloud.io/project/overview?id=omics-datascience_multiomix) — no login required — including reported vulnerabilities. Keep this in mind: any unresolved security issue detected by SonarQube is effectively public information. We treat this as an additional incentive to address findings promptly.
8+
9+
---
10+
11+
## Pull Request Analysis
12+
13+
Every pull request targeting `main`, `develop`, `feature/**`, or `bugfix/**` branches is automatically scanned by SonarQube via GitHub Actions.
14+
15+
If your changes introduce issues, SonarQube will report warnings with varying severity levels and categories. This information will be visible directly on the PR. For minor issues, they serve as useful guidance to improve your contribution. For more significant problems, Multiomix maintainers will leave a review pointing out what needs to be addressed before the PR can be merged.
16+
17+
---
18+
19+
## Setting Up SonarQube Locally (for contributors and self-hosters)
20+
21+
If you want to run SonarQube analysis on your own fork or deployment, follow these steps:
22+
23+
1. **Create a SonarCloud account** at [sonarcloud.io](https://sonarcloud.io) and log in with your GitHub account.
24+
25+
2. **Create a new project** linked to your fork of the Multiomix repository.
26+
27+
3. **Generate a token**: go to *My Account → Security → Generate Token* and copy it.
28+
29+
4. **Configure the following GitHub Actions secrets** in your repository (*Settings → Secrets and variables → Actions*):
30+
31+
| Secret | Value |
32+
|--------|-------|
33+
| `SONAR_TOKEN` | The token generated in the previous step |
34+
| `SONAR_HOST_URL` | `https://sonarcloud.io` |
35+
36+
5. Once configured, the workflow defined in `.github/workflows/sonarqube-pr.yaml` will run automatically on every qualifying pull request.
37+
38+
> **Note:** The project key and organization in the workflow (`omics-datascience_multiomix` / `omics-datascience`) correspond to the official Multiomix project. If you're running your own instance, update those values to match your SonarCloud project.
39+
40+
---
41+
42+
## Contact
43+
44+
Found a security issue or have a question about the project?
45+
46+
- Email us at [multiomix@gmail.com](mailto:multiomix@gmail.com)
47+
- Open an issue on [GitHub](https://github.com/omics-datascience/multiomix/issues)
48+
- Submit a pull request directly on [GitHub](https://github.com/omics-datascience/multiomix)

sonar-project.properties

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
sonar.projectKey=omics-datascience_multiomix
2+
sonar.organization=omics-datascience
3+
sonar.projectName=multiomix
4+
sonar.projectVersion=1.0
5+
6+
# Sources - scan everything in src/
7+
sonar.sources=src
8+
9+
# Exclude only node_modules, migrations and build artifacts
10+
sonar.exclusions=**/node_modules/**,**/migrations/**,**/__pycache__/**,**/venv/**,**/.venv/**,**/htmlcov/**,**/staticfiles/**,**/*.pyc,**/email/**,**/dist/**
11+
12+
# Python settings
13+
sonar.python.version=3.12
14+
sonar.sourceEncoding=UTF-8
15+
16+
# JavaScript/TypeScript settings
17+
sonar.javascript.node.maxspace=4096

0 commit comments

Comments
 (0)