Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 143 additions & 0 deletions docs/schemas/codeql-metrics-schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://eclipse-score.github.io/codeql-metrics-schema.json",
"title": "CodeQL Metrics Schema",
"description": "Schema for code quality metrics extracted from CodeQL SARIF results",
"type": "object",
"required": [
"schema_version",
"generated_by",
"overall_metrics",
"metrics_by_severity",
"metrics_by_rule"
],
"additionalProperties": false,
"properties": {
"schema_version": {
"type": "string",
"const": "1",
"description": "Schema version for backward compatibility"
},
"generated_by": {
"type": "string",
"description": "Tool/script that generated this metrics file (e.g., 'extract_codeql_metrics.py')"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 timestamp when metrics were generated"
},
"overall_metrics": {
"type": "object",
"description": "Aggregate metrics across all findings",
"additionalProperties": false,
"required": [
"total_findings",
"errors",
"warnings",
"notes"
],
"properties": {
"total_findings": {
"type": "integer",
"minimum": 0,
"description": "Total count of all findings"
},
"errors": {
"type": "integer",
"minimum": 0,
"description": "Count of findings with severity 'error'"
},
"warnings": {
"type": "integer",
"minimum": 0,
"description": "Count of findings with severity 'warning'"
},
"notes": {
"type": "integer",
"minimum": 0,
"description": "Count of findings with severity 'note'"
}
}
},
"metrics_by_severity": {
"type": "object",
"description": "Detailed breakdown by severity level with percentages",
"additionalProperties": false,
"properties": {
"error": {
"$ref": "#/$defs/severityMetrics"
},
"warning": {
"$ref": "#/$defs/severityMetrics"
},
"note": {
"$ref": "#/$defs/severityMetrics"
}
}
},
"metrics_by_rule": {
"type": "object",
"description": "Findings grouped by rule ID, sorted by count (descending). Keys are rule IDs.",
"additionalProperties": {
"$ref": "#/$defs/ruleMetrics"
}
}
},
"$defs": {
"severityMetrics": {
"type": "object",
"additionalProperties": false,
"required": [
"count",
"percentage"
],
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"description": "Number of findings at this severity level"
},
"percentage": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Percentage of total findings"
}
}
},
"ruleMetrics": {
"type": "object",
"additionalProperties": false,
"required": [
"count",
"severity"
],
"properties": {
"count": {
"type": "integer",
"minimum": 1,
"description": "Number of findings for this rule"
},
"severity": {
"type": "string",
"enum": [
"error",
"warning",
"note"
],
"description": "Severity level of findings for this rule"
},
"rule_name": {
"type": "string",
"description": "Human-readable rule name/description"
},
"rule_url": {
"type": "string",
"format": "uri",
"description": "URL to rule documentation (if available)"
}
}
}
}
}
16 changes: 16 additions & 0 deletions scripts/tooling/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,22 @@ py_binary(
visibility = ["//visibility:public"],
)

py_binary(
name = "extract_codeql_metrics",
srcs = ["cli/workflow/extract_codeql_metrics.py"],
main = "cli/workflow/extract_codeql_metrics.py",
visibility = ["//visibility:public"],
deps = [":lib"] + all_requirements,
)

py_binary(
name = "generate_misra_report",
srcs = ["cli/workflow/generate_misra_report.py"],
main = "cli/workflow/generate_misra_report.py",
visibility = ["//visibility:public"],
deps = [":lib"] + all_requirements,
)

# Tests target
score_py_pytest(
name = "tooling_tests",
Expand Down
2 changes: 2 additions & 0 deletions scripts/tooling/cli/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@ def main() -> None:

from scripts.tooling.cli.misc import register as _register_misc
from scripts.tooling.cli.release import register as _register_release
from scripts.tooling.cli.workflow import register as _register_workflow

_register_misc(subparsers)
_register_release(subparsers)
_register_workflow(subparsers)

args = parser.parse_args()
sys.exit(args.func(args))
Expand Down
Loading
Loading