Skip to content

Commit 91c7ee8

Browse files
committed
ci: add security scanning baseline
1 parent 311e295 commit 91c7ee8

6 files changed

Lines changed: 168 additions & 0 deletions

File tree

.github/dependabot.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "uv"
4+
directory: "/"
5+
schedule:
6+
interval: "weekly"
7+
day: "monday"
8+
time: "06:00"
9+
timezone: "Etc/UTC"
10+
open-pull-requests-limit: 5
11+
12+
- package-ecosystem: "github-actions"
13+
directory: "/"
14+
schedule:
15+
interval: "weekly"
16+
day: "monday"
17+
time: "06:30"
18+
timezone: "Etc/UTC"
19+
open-pull-requests-limit: 5

.github/workflows/codeql.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: CodeQL
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
schedule:
9+
- cron: "20 6 * * 1"
10+
workflow_dispatch:
11+
12+
permissions:
13+
actions: read
14+
contents: read
15+
security-events: write
16+
17+
jobs:
18+
analyze:
19+
name: Analyze
20+
runs-on: ubuntu-latest
21+
timeout-minutes: 15
22+
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v6
26+
27+
- name: Initialize CodeQL
28+
uses: github/codeql-action/init@v4
29+
with:
30+
languages: python
31+
queries: security-extended,security-and-quality
32+
33+
- name: Perform CodeQL Analysis
34+
uses: github/codeql-action/analyze@v4

.github/workflows/scorecard.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: OpenSSF Scorecard
2+
3+
on:
4+
push:
5+
branches: [main]
6+
schedule:
7+
- cron: "40 6 * * 1"
8+
9+
permissions: read-all
10+
11+
jobs:
12+
analysis:
13+
name: Scorecard analysis
14+
runs-on: ubuntu-latest
15+
timeout-minutes: 15
16+
permissions:
17+
actions: read
18+
contents: read
19+
id-token: write
20+
security-events: write
21+
22+
steps:
23+
- name: Checkout repository
24+
uses: actions/checkout@v6
25+
with:
26+
persist-credentials: false
27+
28+
- name: Run OpenSSF Scorecard
29+
uses: ossf/scorecard-action@v2.4.3
30+
with:
31+
results_file: results.sarif
32+
results_format: sarif
33+
publish_results: true
34+
35+
- name: Upload SARIF results
36+
uses: github/codeql-action/upload-sarif@v4
37+
with:
38+
sarif_file: results.sarif

.github/workflows/security.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: Security Audit
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
schedule:
9+
- cron: "0 6 * * 1"
10+
workflow_dispatch:
11+
12+
permissions:
13+
contents: read
14+
15+
jobs:
16+
dependency-audit:
17+
name: Dependency audit
18+
runs-on: ubuntu-latest
19+
timeout-minutes: 10
20+
21+
steps:
22+
- name: Checkout repository
23+
uses: actions/checkout@v6
24+
25+
- name: Install uv
26+
uses: astral-sh/setup-uv@v8.1.0
27+
28+
- name: Export locked dependencies
29+
run: |
30+
uv export \
31+
--locked \
32+
--format requirements-txt \
33+
--all-groups \
34+
--all-extras \
35+
--no-emit-project \
36+
--no-hashes \
37+
--output-file requirements-audit.txt \
38+
>/dev/null
39+
40+
- name: Audit dependencies
41+
run: |
42+
uvx pip-audit \
43+
--requirement requirements-audit.txt \
44+
--no-deps \
45+
--disable-pip \
46+
--progress-spinner off

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
<!-- mcp-name: io.github.ayhammouda/python-docs-mcp-server -->
44

55
[![CI](https://github.com/ayhammouda/python-docs-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/ayhammouda/python-docs-mcp-server/actions/workflows/ci.yml)
6+
[![Security Audit](https://github.com/ayhammouda/python-docs-mcp-server/actions/workflows/security.yml/badge.svg)](https://github.com/ayhammouda/python-docs-mcp-server/actions/workflows/security.yml)
7+
[![CodeQL](https://github.com/ayhammouda/python-docs-mcp-server/actions/workflows/codeql.yml/badge.svg)](https://github.com/ayhammouda/python-docs-mcp-server/actions/workflows/codeql.yml)
8+
[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/ayhammouda/python-docs-mcp-server/badge)](https://scorecard.dev/viewer/?uri=github.com/ayhammouda/python-docs-mcp-server)
69
[![python-docs-mcp-server MCP server](https://glama.ai/mcp/servers/ayhammouda/python-docs-mcp-server/badges/score.svg)](https://glama.ai/mcp/servers/ayhammouda/python-docs-mcp-server)
710
[![MCP Registry](https://img.shields.io/badge/MCP%20Registry-v0.1.4-0f766e)](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.ayhammouda%2Fpython-docs-mcp-server)
811
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

SECURITY.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Security Policy
2+
3+
## Supported Versions
4+
5+
Security fixes are provided for the latest released version of
6+
`python-docs-mcp-server`.
7+
8+
## Reporting a Vulnerability
9+
10+
Please report suspected vulnerabilities privately. Use GitHub private
11+
vulnerability reporting if it is enabled for this repository, or email
12+
`hammouda.aymen@gmail.com` with:
13+
14+
- a description of the issue
15+
- reproduction steps or proof of concept, if available
16+
- affected versions or commits
17+
- any recommended mitigation
18+
19+
Please do not open a public issue for an unpatched vulnerability.
20+
21+
## Scope
22+
23+
This project is a read-only local MCP server. Security-sensitive areas include:
24+
25+
- dependency supply-chain vulnerabilities
26+
- unsafe parsing or handling of downloaded documentation artifacts
27+
- filesystem writes outside the configured cache/index locations
28+
- MCP tool behavior that could expose data beyond the Python documentation index

0 commit comments

Comments
 (0)