Skip to content

Commit 0a8bf64

Browse files
apartsinclaude
andcommitted
chore: implement round 2 of 20 developer experience improvements
Add community infrastructure, CI/CD automation, code quality tooling, testing infrastructure, and developer onboarding improvements: 1. GitHub Issue Templates (bug report + feature request YAML forms) 2. GitHub Pull Request Template with checklist 3. SECURITY.md vulnerability disclosure policy 4. VS Code Dev Container (.devcontainer/) 5. Dependabot config (Python, npm, Docker, Actions) 6. CodeQL security scanning workflow 7. Test coverage reporting (pytest-cov + Jest → Codecov) 8. Prettier + ESLint for TypeScript 9. mypy type checking for Python in CI 10. TypeDoc API documentation generation 11. Troubleshooting Guide (docs/guides/Troubleshooting.md) 12. npm publish lifecycle scripts (prepublishOnly) 13. PyPI publishing workflow (GitHub Actions) 14. GitHub Release workflow (auto from tags) 15. Docker multi-platform build (amd64 + arm64) 16. Integration test suite (tests/integration/) 17. Performance benchmark suite (tests/benchmarks/) 18. Pre-commit hooks (.pre-commit-config.yaml) 19. Project starter templates (tools/starter-template/) 20. License compliance check script All 1,893 tests pass (1,180 Python + 713 TypeScript). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent d8a9dcd commit 0a8bf64

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1684
-30
lines changed

.devcontainer/devcontainer.json

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{
2+
"name": "ModelMesh Dev",
3+
"image": "mcr.microsoft.com/devcontainers/python:3.12",
4+
"features": {
5+
"ghcr.io/devcontainers/features/node:1": {
6+
"version": "20"
7+
},
8+
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
9+
},
10+
"postCreateCommand": "pip install -e './src/python[yaml,dev]' && cd src/typescript && npm install && cd ../.. && npm install",
11+
"customizations": {
12+
"vscode": {
13+
"extensions": [
14+
"ms-python.python",
15+
"ms-python.vscode-pylance",
16+
"charliermarsh.ruff",
17+
"dbaeumer.vscode-eslint",
18+
"esbenp.prettier-vscode",
19+
"ms-azuretools.vscode-docker",
20+
"redhat.vscode-yaml",
21+
"EditorConfig.EditorConfig"
22+
],
23+
"settings": {
24+
"python.defaultInterpreterPath": "/usr/local/bin/python",
25+
"python.testing.pytestEnabled": true,
26+
"python.testing.pytestArgs": ["tests/", "-v"],
27+
"editor.formatOnSave": true,
28+
"editor.defaultFormatter": "esbenp.prettier-vscode",
29+
"[python]": {
30+
"editor.defaultFormatter": "charliermarsh.ruff"
31+
},
32+
"typescript.tsdk": "src/typescript/node_modules/typescript/lib"
33+
}
34+
}
35+
},
36+
"forwardPorts": [8080],
37+
"portsAttributes": {
38+
"8080": {
39+
"label": "ModelMesh Proxy",
40+
"onAutoForward": "notify"
41+
}
42+
},
43+
"remoteUser": "vscode"
44+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
name: Bug Report
2+
description: Report something that isn't working correctly
3+
title: "[Bug]: "
4+
labels: ["bug", "triage"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
Thanks for taking the time to report this bug! Please fill in as much detail as possible.
10+
11+
- type: dropdown
12+
id: language
13+
attributes:
14+
label: Language / Runtime
15+
description: Which SDK are you using?
16+
options:
17+
- Python
18+
- TypeScript / Node.js
19+
- Docker Proxy
20+
- Both Python and TypeScript
21+
validations:
22+
required: true
23+
24+
- type: input
25+
id: version
26+
attributes:
27+
label: ModelMesh Version
28+
description: "Run `pip show modelmesh-lite` or check package.json"
29+
placeholder: "0.2.0"
30+
validations:
31+
required: true
32+
33+
- type: textarea
34+
id: description
35+
attributes:
36+
label: Bug Description
37+
description: A clear and concise description of what the bug is.
38+
validations:
39+
required: true
40+
41+
- type: textarea
42+
id: reproduction
43+
attributes:
44+
label: Steps to Reproduce
45+
description: Minimal code or steps to reproduce the issue.
46+
placeholder: |
47+
1. Install modelmesh-lite
48+
2. Configure with this YAML...
49+
3. Call client.chat.completions.create(...)
50+
4. See error...
51+
validations:
52+
required: true
53+
54+
- type: textarea
55+
id: expected
56+
attributes:
57+
label: Expected Behavior
58+
description: What did you expect to happen?
59+
validations:
60+
required: true
61+
62+
- type: textarea
63+
id: actual
64+
attributes:
65+
label: Actual Behavior
66+
description: What actually happened? Include full error messages and tracebacks.
67+
validations:
68+
required: true
69+
70+
- type: textarea
71+
id: config
72+
attributes:
73+
label: Configuration
74+
description: "Your YAML config or programmatic setup (redact API keys!)"
75+
render: yaml
76+
77+
- type: textarea
78+
id: environment
79+
attributes:
80+
label: Environment
81+
description: |
82+
- OS: [e.g. Windows 11, macOS 14, Ubuntu 22.04]
83+
- Python version: [e.g. 3.12.0]
84+
- Node.js version: [e.g. 20.10.0]
85+
placeholder: |
86+
- OS: Windows 11
87+
- Python: 3.12.0
88+
- Node.js: 20.10.0

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
blank_issues_enabled: true
2+
contact_links:
3+
- name: Documentation
4+
url: https://apartsinprojects.github.io/ModelMesh/
5+
about: Check the docs before opening an issue
6+
- name: FAQ
7+
url: https://github.com/ApartsinProjects/ModelMesh/blob/master/docs/guides/FAQ.md
8+
about: Answers to the 21 most common questions
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: Feature Request
2+
description: Suggest a new feature or improvement
3+
title: "[Feature]: "
4+
labels: ["enhancement"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
Thanks for suggesting an improvement! Please describe your idea clearly.
10+
11+
- type: textarea
12+
id: problem
13+
attributes:
14+
label: Problem or Use Case
15+
description: What problem does this feature solve? What are you trying to do?
16+
placeholder: "I'm trying to ... but currently I have to ..."
17+
validations:
18+
required: true
19+
20+
- type: textarea
21+
id: solution
22+
attributes:
23+
label: Proposed Solution
24+
description: How would you like this to work? Include API examples if possible.
25+
placeholder: |
26+
```python
27+
# Ideal usage:
28+
client = modelmesh.create("chat-completion", feature=True)
29+
```
30+
validations:
31+
required: true
32+
33+
- type: textarea
34+
id: alternatives
35+
attributes:
36+
label: Alternatives Considered
37+
description: What workarounds have you tried? Are there other approaches?
38+
39+
- type: dropdown
40+
id: scope
41+
attributes:
42+
label: Scope
43+
description: What area does this affect?
44+
options:
45+
- Core library (routing, pools, models)
46+
- Connectors (providers, rotation, storage, etc.)
47+
- Configuration (YAML, programmatic)
48+
- Docker Proxy
49+
- Documentation
50+
- Testing / Developer Experience
51+
- CDK (Connector Development Kit)
52+
validations:
53+
required: true
54+
55+
- type: dropdown
56+
id: language
57+
attributes:
58+
label: Language
59+
description: Which SDK should this be implemented in?
60+
options:
61+
- Both Python and TypeScript
62+
- Python only
63+
- TypeScript only
64+
- Docker / Proxy
65+
- Documentation only
66+
validations:
67+
required: true

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
## Summary
2+
3+
<!-- What does this PR do? Keep it to 1-3 sentences. -->
4+
5+
## Changes
6+
7+
<!-- Bullet list of what changed and why. -->
8+
9+
-
10+
11+
## Checklist
12+
13+
- [ ] Tests added / updated for the change
14+
- [ ] Full test suite passes (`./scripts/test-all.sh` or `make test`)
15+
- [ ] Both Python and TypeScript updated (if applicable)
16+
- [ ] Documentation updated (if behavior changed)
17+
- [ ] CHANGELOG.md updated (for user-facing changes)
18+
- [ ] No secrets or API keys in the diff
19+
20+
## Breaking Changes
21+
22+
<!-- List any breaking changes, or write "None". -->
23+
24+
None
25+
26+
## Related Issues
27+
28+
<!-- Link to related issues: Fixes #123, Closes #456 -->

.github/dependabot.yml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
version: 2
2+
updates:
3+
# Python dependencies (pyproject.toml)
4+
- package-ecosystem: "pip"
5+
directory: "/src/python"
6+
schedule:
7+
interval: "weekly"
8+
day: "monday"
9+
labels: ["dependencies", "python"]
10+
commit-message:
11+
prefix: "chore(deps):"
12+
open-pull-requests-limit: 5
13+
14+
# TypeScript dependencies (package.json)
15+
- package-ecosystem: "npm"
16+
directory: "/src/typescript"
17+
schedule:
18+
interval: "weekly"
19+
day: "monday"
20+
labels: ["dependencies", "typescript"]
21+
commit-message:
22+
prefix: "chore(deps):"
23+
open-pull-requests-limit: 5
24+
25+
# GitHub Actions
26+
- package-ecosystem: "github-actions"
27+
directory: "/"
28+
schedule:
29+
interval: "weekly"
30+
day: "monday"
31+
labels: ["dependencies", "ci"]
32+
commit-message:
33+
prefix: "chore(ci):"
34+
open-pull-requests-limit: 3
35+
36+
# Docker base image
37+
- package-ecosystem: "docker"
38+
directory: "/"
39+
schedule:
40+
interval: "monthly"
41+
labels: ["dependencies", "docker"]
42+
commit-message:
43+
prefix: "chore(docker):"
44+
open-pull-requests-limit: 2

.github/workflows/codeql.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: CodeQL Security Analysis
2+
3+
on:
4+
push:
5+
branches: [master]
6+
pull_request:
7+
branches: [master]
8+
schedule:
9+
- cron: "0 6 * * 1" # Weekly Monday 6am UTC
10+
11+
jobs:
12+
analyze:
13+
name: Analyze (${{ matrix.language }})
14+
runs-on: ubuntu-latest
15+
permissions:
16+
security-events: write
17+
strategy:
18+
fail-fast: false
19+
matrix:
20+
language: [python, javascript-typescript]
21+
steps:
22+
- uses: actions/checkout@v4
23+
24+
- name: Initialize CodeQL
25+
uses: github/codeql-action/init@v3
26+
with:
27+
languages: ${{ matrix.language }}
28+
29+
- name: Autobuild
30+
uses: github/codeql-action/autobuild@v3
31+
32+
- name: Perform CodeQL Analysis
33+
uses: github/codeql-action/analyze@v3
34+
with:
35+
category: "/language:${{ matrix.language }}"

.github/workflows/coverage.yml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
name: Coverage
2+
3+
on:
4+
push:
5+
branches: [master]
6+
pull_request:
7+
branches: [master]
8+
9+
jobs:
10+
python-coverage:
11+
name: Python Coverage
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v4
15+
- uses: actions/setup-python@v5
16+
with:
17+
python-version: "3.12"
18+
- name: Install dependencies
19+
run: pip install pytest pytest-asyncio pytest-cov
20+
- name: Run tests with coverage
21+
run: |
22+
cd src/python && python -m pytest ../../tests/ \
23+
--cov=modelmesh \
24+
--cov-report=xml:../../coverage-python.xml \
25+
--cov-report=term-missing \
26+
-v
27+
- name: Upload Python coverage
28+
uses: codecov/codecov-action@v4
29+
with:
30+
files: coverage-python.xml
31+
flags: python
32+
fail_ci_if_error: false
33+
env:
34+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
35+
36+
typescript-coverage:
37+
name: TypeScript Coverage
38+
runs-on: ubuntu-latest
39+
steps:
40+
- uses: actions/checkout@v4
41+
- uses: actions/setup-node@v4
42+
with:
43+
node-version: "20"
44+
- name: Install dependencies
45+
run: cd src/typescript && npm ci
46+
- name: Run tests with coverage
47+
run: cd src/typescript && npx jest --coverage --coverageReporters=text --coverageReporters=cobertura
48+
- name: Upload TypeScript coverage
49+
uses: codecov/codecov-action@v4
50+
with:
51+
files: src/typescript/coverage/cobertura-coverage.xml
52+
flags: typescript
53+
fail_ci_if_error: false
54+
env:
55+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

0 commit comments

Comments
 (0)