forked from IBM/mcp-context-forge
-
Notifications
You must be signed in to change notification settings - Fork 0
153 lines (128 loc) · 4.9 KB
/
lint.yml
File metadata and controls
153 lines (128 loc) · 4.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# ===============================================================
# 🔍 Lint & Static Analysis - Code Quality Gate
# ===============================================================
#
# - runs each linter in its own matrix job for visibility
# - mirrors the actual CLI commands used locally (no `make`)
# - ensures fast-failure isolation: one failure doesn't hide others
# - each job installs the project in dev-editable mode
# - logs are grouped and plain-text for readability
# ---------------------------------------------------------------
name: Lint & Static Analysis
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
permissions:
contents: read
jobs:
lint:
strategy:
fail-fast: false
matrix:
include:
# -------------------------------------------------------
# 🧼 Syntax & Format Checkers
# -------------------------------------------------------
- id: yamllint
setup: pip install yamllint
cmd: yamllint -c .yamllint .
- id: jsonlint
setup: |
sudo apt-get update -qq
sudo apt-get install -y jq
cmd: |
find . -type f -name '*.json' -not -path './node_modules/*' -print0 |
xargs -0 -I{} jq empty "{}"
- id: tomllint
setup: pip install tomlcheck
cmd: |
find . -type f -name '*.toml' -print0 |
xargs -0 -I{} tomlcheck "{}"
# -------------------------------------------------------
# 🐍 Python Linters & Type Checkers
# -------------------------------------------------------
- id: flake8
setup: pip install flake8
cmd: flake8 mcpgateway
- id: ruff
setup: pip install ruff
cmd: |
ruff check mcpgateway
- id: unimport
setup: pip install unimport
cmd: |
unimport mcpgateway
- id: vulture
setup: pip install vulture
cmd: |
vulture mcpgateway --min-confidence 80
- id: pylint
setup: pip install pylint
cmd: pylint mcpgateway --errors-only --fail-under=10
- id: interrogate
setup: pip install interrogate
cmd: interrogate -vv mcpgateway --fail-under 100
# Advanced Python Analysis
- id: radon
setup: pip install radon
cmd: |
radon cc mcpgateway --min C --show-complexity
radon mi mcpgateway --min B
# - id: mypy
# setup: pip install mypy
# cmd: mypy mcpgateway
# - id: pycodestyle
# setup: pip install pycodestyle
# cmd: pycodestyle mcpgateway --max-line-length=200
# - id: pydocstyle
# setup: pip install pydocstyle
# cmd: pydocstyle mcpgateway
# - id: pyright
# setup: npm install -g pyright
# cmd: pyright mcpgateway tests
# -------------------------------------------------------
# 🔒 Security & Packaging Checks
# -------------------------------------------------------
# - id: bandit
# setup: pip install bandit
# cmd: bandit -r mcpgateway
# - id: check-manifest
# setup: pip install check-manifest
# cmd: check-manifest
name: ${{ matrix.id }}
runs-on: ubuntu-latest
steps:
# -----------------------------------------------------------
# 0️⃣ Checkout
# -----------------------------------------------------------
- name: ⬇️ Checkout source
uses: actions/checkout@v4
with:
fetch-depth: 1
# -----------------------------------------------------------
# 1️⃣ Python Setup
# -----------------------------------------------------------
- name: 🐍 Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
# -----------------------------------------------------------
# 2️⃣ Install Project + Dev Dependencies
# -----------------------------------------------------------
- name: 📦 Install project (editable mode)
run: |
python3 -m pip install --upgrade pip
pip install -e .[dev]
# -----------------------------------------------------------
# 3️⃣ Install Tool-Specific Requirements
# -----------------------------------------------------------
- name: 🔧 Install tool - ${{ matrix.id }}
run: ${{ matrix.setup }}
# -----------------------------------------------------------
# 4️⃣ Run Linter / Validator
# -----------------------------------------------------------
- name: 🔍 Run ${{ matrix.id }}
run: ${{ matrix.cmd }}