ruff-sync 0.1.0.dev0__tar.gz → 0.1.0.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ruff_sync-0.1.0.dev1/.agents/skills/mkdocs-generation/SKILL.md +125 -0
- ruff_sync-0.1.0.dev1/.agents/skills/mkdocs-generation/examples.md +223 -0
- ruff_sync-0.1.0.dev1/.agents/skills/mkdocs-generation/templates/api-reference.md +33 -0
- ruff_sync-0.1.0.dev1/.agents/skills/mkdocs-generation/templates/getting-started.md +46 -0
- ruff_sync-0.1.0.dev1/.agents/skills/mkdocs-generation/templates/index.md +32 -0
- ruff_sync-0.1.0.dev1/.agents/skills/mkdocs-generation/templates/mkdocs.yml +59 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/.pre-commit-config.yaml +2 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/PKG-INFO +3 -3
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/README.md +1 -1
- ruff_sync-0.1.0.dev1/docs/ci-integration.md +106 -0
- ruff_sync-0.1.0.dev1/docs/index.md +55 -0
- ruff_sync-0.1.0.dev1/docs/installation.md +64 -0
- ruff_sync-0.1.0.dev1/docs/troubleshooting.md +46 -0
- ruff_sync-0.1.0.dev1/docs/usage.md +98 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/mkdocs.yml +16 -4
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/pyproject.toml +2 -2
- ruff_sync-0.1.0.dev1/skills-lock.json +10 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/src/ruff_sync/__init__.py +7 -3
- ruff_sync-0.1.0.dev1/src/ruff_sync/cli.py +397 -0
- ruff_sync-0.1.0.dev0/src/ruff_sync/cli.py → ruff_sync-0.1.0.dev1/src/ruff_sync/core.py +141 -376
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_basic.py +37 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_deprecation.py +1 -1
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/uv.lock +1 -1
- ruff_sync-0.1.0.dev0/docs/ci-integration.md +0 -59
- ruff_sync-0.1.0.dev0/docs/index.md +0 -40
- ruff_sync-0.1.0.dev0/docs/installation.md +0 -47
- ruff_sync-0.1.0.dev0/docs/usage.md +0 -75
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/.agents/TESTING.md +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/.agents/workflows/add-test-case.md +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/.git-blame-ignore-revs +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/.github/dependabot.yml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/.github/workflows/ci.yaml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/.github/workflows/complexity.yaml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/.github/workflows/docs.yaml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/.gitignore +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/AGENTS.md +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/LICENSE.md +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/codecov.yml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/configs/fastapi/ruff.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/configs/kitchen-sink/ruff.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1/docs/assets}/ruff_sync_banner.png +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/docs/configuration.md +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/docs/gen_ref_pages.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/scripts/check_dogfood.sh +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/scripts/gitclone_dogfood.sh +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/scripts/pull_dogfood.sh +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/src/ruff_sync/__main__.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tasks.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/__init__.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/conftest.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/no_changes_final.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/no_changes_initial.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/no_changes_upstream.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/no_dotted_keys_final.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/no_dotted_keys_initial.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/no_dotted_keys_upstream.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/no_ruff_cfg_final.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/no_ruff_cfg_initial.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/no_ruff_cfg_upstream.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/readme_excludes_final.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/readme_excludes_initial.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/readme_excludes_upstream.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/standard_final.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/standard_initial.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/lifecycle_tomls/standard_upstream.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/ruff.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_check.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_config_validation.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_corner_cases.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_e2e.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_git_fetch.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_project.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_scaffold.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_toml_operations.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_url_handling.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/test_whitespace.py +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/w_ruff_sync_cfg/pyproject.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/wo_ruff_cfg/pyproject.toml +0 -0
- {ruff_sync-0.1.0.dev0 → ruff_sync-0.1.0.dev1}/tests/wo_ruff_sync_cfg/pyproject.toml +0 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mkdocs-generation
|
|
3
|
+
description: Generate MkDocs documentation sites with Material theme, mkdocstrings for API docs, and versioning. Use when setting up or extending project documentation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MkDocs Documentation Generation
|
|
7
|
+
|
|
8
|
+
Generate professional documentation sites using MkDocs Material theme with automatic API reference generation.
|
|
9
|
+
|
|
10
|
+
## Stack
|
|
11
|
+
|
|
12
|
+
- **MkDocs**: Static site generator for project documentation
|
|
13
|
+
- **Material Theme**: Modern, responsive theme with navigation features
|
|
14
|
+
- **mkdocstrings**: Auto-generate API docs from Python docstrings
|
|
15
|
+
- **mike**: Version management for documentation
|
|
16
|
+
|
|
17
|
+
## Dependencies
|
|
18
|
+
|
|
19
|
+
Add to `pyproject.toml` (optional extras group):
|
|
20
|
+
|
|
21
|
+
```toml
|
|
22
|
+
[project.optional-dependencies]
|
|
23
|
+
docs = [
|
|
24
|
+
"mkdocs>=1.5",
|
|
25
|
+
"mkdocs-material>=9.4",
|
|
26
|
+
"mkdocstrings[python]>=0.24",
|
|
27
|
+
"mike>=2.0",
|
|
28
|
+
]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Or `requirements.txt`:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
mkdocs>=1.5
|
|
35
|
+
mkdocs-material>=9.4
|
|
36
|
+
mkdocstrings[python]>=0.24
|
|
37
|
+
mike>=2.0
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Directory Structure
|
|
41
|
+
|
|
42
|
+
**Simple (flat)**:
|
|
43
|
+
```
|
|
44
|
+
docs/
|
|
45
|
+
├── index.md # Home/overview
|
|
46
|
+
├── getting-started.md # Installation and quickstart
|
|
47
|
+
├── configuration.md # Config options
|
|
48
|
+
└── tools.md # Feature reference
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Complex (nested)**:
|
|
52
|
+
```
|
|
53
|
+
docs/
|
|
54
|
+
├── index.md
|
|
55
|
+
├── compatibility.md
|
|
56
|
+
├── guide/
|
|
57
|
+
│ ├── getting-started.md
|
|
58
|
+
│ ├── cli.md
|
|
59
|
+
│ └── advanced.md
|
|
60
|
+
└── api/
|
|
61
|
+
├── panel.md # ::: module.Class
|
|
62
|
+
└── entities/
|
|
63
|
+
├── area.md
|
|
64
|
+
└── zone.md
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## mkdocs.yml Configuration
|
|
68
|
+
|
|
69
|
+
See `templates/mkdocs.yml` for the full configuration template.
|
|
70
|
+
|
|
71
|
+
Key sections:
|
|
72
|
+
1. **Site metadata**: name, description, URLs
|
|
73
|
+
2. **Versioning**: mike provider for multi-version docs
|
|
74
|
+
3. **Theme**: Material with navigation features
|
|
75
|
+
4. **Plugins**: search + mkdocstrings for API docs
|
|
76
|
+
5. **Navigation**: Explicit nav structure
|
|
77
|
+
|
|
78
|
+
## API Reference with mkdocstrings
|
|
79
|
+
|
|
80
|
+
Create minimal markdown files that reference Python modules:
|
|
81
|
+
|
|
82
|
+
```markdown
|
|
83
|
+
# Panel API
|
|
84
|
+
|
|
85
|
+
::: mypackage.panel.Panel
|
|
86
|
+
|
|
87
|
+
::: mypackage.panel.PanelSync
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
mkdocstrings auto-generates documentation from docstrings. Configure in `mkdocs.yml`:
|
|
91
|
+
- `docstring_style: google` - Use Google-style docstrings
|
|
92
|
+
- `show_source: false` - Hide source code
|
|
93
|
+
- `merge_init_into_class: true` - Combine `__init__` with class docs
|
|
94
|
+
- `filters: ["!^_"]` - Exclude private members
|
|
95
|
+
|
|
96
|
+
## Commands
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Serve locally with hot-reload
|
|
100
|
+
mkdocs serve
|
|
101
|
+
|
|
102
|
+
# Build static site
|
|
103
|
+
mkdocs build
|
|
104
|
+
|
|
105
|
+
# Deploy to GitHub Pages
|
|
106
|
+
mkdocs gh-deploy
|
|
107
|
+
|
|
108
|
+
# Version management (mike)
|
|
109
|
+
mike deploy --push --update-aliases 0.1.0 latest
|
|
110
|
+
mike set-default --push latest
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Writing Guidelines
|
|
114
|
+
|
|
115
|
+
1. **index.md**: Brief overview, key features as bullet list, installation snippet, "Where to Next" links
|
|
116
|
+
2. **getting-started.md**: Prerequisites, step-by-step setup, minimal working example
|
|
117
|
+
3. **API docs**: Let mkdocstrings generate from docstrings; add brief intro if needed
|
|
118
|
+
4. **Guides**: Task-oriented, include code examples, link to related API docs
|
|
119
|
+
|
|
120
|
+
## Templates
|
|
121
|
+
|
|
122
|
+
- `templates/mkdocs.yml` - Configuration file
|
|
123
|
+
- `templates/index.md` - Home page
|
|
124
|
+
- `templates/getting-started.md` - Quickstart guide
|
|
125
|
+
- `templates/api-reference.md` - API doc page using mkdocstrings
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# MkDocs Generation Examples
|
|
2
|
+
|
|
3
|
+
Real-world patterns from todoist-mcp and pydmp repositories.
|
|
4
|
+
|
|
5
|
+
## Simple Documentation (todoist-mcp)
|
|
6
|
+
|
|
7
|
+
Flat structure for smaller projects:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
docs/
|
|
11
|
+
├── index.md
|
|
12
|
+
├── getting-started.md
|
|
13
|
+
├── configuration.md
|
|
14
|
+
└── tools.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**mkdocs.yml nav:**
|
|
18
|
+
```yaml
|
|
19
|
+
nav:
|
|
20
|
+
- Home: index.md
|
|
21
|
+
- Getting Started: getting-started.md
|
|
22
|
+
- Configuration: configuration.md
|
|
23
|
+
- MCP Tools: tools.md
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**index.md:**
|
|
27
|
+
```markdown
|
|
28
|
+
# Todoist MCP Server
|
|
29
|
+
|
|
30
|
+
The Todoist MCP server is a Model Context Protocol (MCP) server for managing Todoist tasks from MCP clients like Claude Desktop.
|
|
31
|
+
|
|
32
|
+
Use this documentation to:
|
|
33
|
+
|
|
34
|
+
- Learn what the server can do
|
|
35
|
+
- Set up Docker-based or local development environments
|
|
36
|
+
- Configure environment variables and Redis caching
|
|
37
|
+
- Explore the available MCP tools for task and project management
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Complex Documentation (pydmp)
|
|
41
|
+
|
|
42
|
+
Nested structure for larger projects with API reference:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
docs/
|
|
46
|
+
├── index.md
|
|
47
|
+
├── compatibility.md
|
|
48
|
+
├── guide/
|
|
49
|
+
│ ├── getting-started.md
|
|
50
|
+
│ ├── cli.md
|
|
51
|
+
│ ├── realtime-status.md
|
|
52
|
+
│ ├── encryption.md
|
|
53
|
+
│ └── migration.md
|
|
54
|
+
└── api/
|
|
55
|
+
├── panel.md
|
|
56
|
+
├── protocol.md
|
|
57
|
+
├── status.md
|
|
58
|
+
├── entities/
|
|
59
|
+
│ ├── area.md
|
|
60
|
+
│ ├── zone.md
|
|
61
|
+
│ ├── output.md
|
|
62
|
+
│ ├── user.md
|
|
63
|
+
│ └── profile.md
|
|
64
|
+
└── protocol/
|
|
65
|
+
└── encryption.md
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**mkdocs.yml nav:**
|
|
69
|
+
```yaml
|
|
70
|
+
nav:
|
|
71
|
+
- Home: index.md
|
|
72
|
+
- Panel Compatibility: compatibility.md
|
|
73
|
+
- Guide:
|
|
74
|
+
- Getting Started: guide/getting-started.md
|
|
75
|
+
- CLI: guide/cli.md
|
|
76
|
+
- Realtime Status (S3): guide/realtime-status.md
|
|
77
|
+
- Encryption & User Data: guide/encryption.md
|
|
78
|
+
- Migration: guide/migration.md
|
|
79
|
+
- API Reference:
|
|
80
|
+
- Panel: api/panel.md
|
|
81
|
+
- Entities:
|
|
82
|
+
- Area: api/entities/area.md
|
|
83
|
+
- Zone: api/entities/zone.md
|
|
84
|
+
- Output: api/entities/output.md
|
|
85
|
+
- User Code: api/entities/user.md
|
|
86
|
+
- User Profile: api/entities/profile.md
|
|
87
|
+
- Protocol:
|
|
88
|
+
- Protocol: api/protocol.md
|
|
89
|
+
- Encryption: api/protocol/encryption.md
|
|
90
|
+
- Realtime Server: api/status.md
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Index Page with Code Examples
|
|
94
|
+
|
|
95
|
+
```markdown
|
|
96
|
+
# PyDMP
|
|
97
|
+
|
|
98
|
+
PyDMP is a platform-agnostic Python library for controlling DMP alarm panels.
|
|
99
|
+
|
|
100
|
+
**Key Features:**
|
|
101
|
+
|
|
102
|
+
- **Dual APIs**: Choose async for modern applications or sync for simple scripts
|
|
103
|
+
- **High-level abstractions**: Work with panels, areas, zones, and outputs
|
|
104
|
+
- **Built-in rate limiting**: Automatic command throttling
|
|
105
|
+
|
|
106
|
+
## Installation
|
|
107
|
+
|
|
108
|
+
\`\`\`bash
|
|
109
|
+
pip install pydmp
|
|
110
|
+
\`\`\`
|
|
111
|
+
|
|
112
|
+
## Quick Start (Async)
|
|
113
|
+
|
|
114
|
+
\`\`\`python
|
|
115
|
+
import asyncio
|
|
116
|
+
from pydmp import DMPPanel
|
|
117
|
+
|
|
118
|
+
async def main():
|
|
119
|
+
panel = DMPPanel()
|
|
120
|
+
await panel.connect("192.168.1.100", "00001", "YOURKEY")
|
|
121
|
+
await panel.update_status()
|
|
122
|
+
areas = await panel.get_areas()
|
|
123
|
+
await panel.disconnect()
|
|
124
|
+
|
|
125
|
+
asyncio.run(main())
|
|
126
|
+
\`\`\`
|
|
127
|
+
|
|
128
|
+
## Where to Next
|
|
129
|
+
|
|
130
|
+
- [Getting Started](guide/getting-started.md) - Installation and connection
|
|
131
|
+
- [CLI Guide](guide/cli.md) - Command-line interface
|
|
132
|
+
- [API Reference](api/panel.md) - Complete API documentation
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## API Reference Page (mkdocstrings)
|
|
136
|
+
|
|
137
|
+
Minimal markdown that generates full API docs:
|
|
138
|
+
|
|
139
|
+
```markdown
|
|
140
|
+
# Panel API
|
|
141
|
+
|
|
142
|
+
::: pydmp.panel.DMPPanel
|
|
143
|
+
|
|
144
|
+
::: pydmp.panel_sync.DMPPanelSync
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
For entity docs:
|
|
148
|
+
|
|
149
|
+
```markdown
|
|
150
|
+
# Area
|
|
151
|
+
|
|
152
|
+
::: pydmp.area.Area
|
|
153
|
+
|
|
154
|
+
::: pydmp.area.AreaSync
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## CLI Documentation Pattern
|
|
158
|
+
|
|
159
|
+
```markdown
|
|
160
|
+
# Command-Line Interface (CLI)
|
|
161
|
+
|
|
162
|
+
PyDMP ships with a CLI for common operations.
|
|
163
|
+
|
|
164
|
+
## Installation
|
|
165
|
+
|
|
166
|
+
\`\`\`bash
|
|
167
|
+
pip install pydmp[cli]
|
|
168
|
+
\`\`\`
|
|
169
|
+
|
|
170
|
+
## Configuration
|
|
171
|
+
|
|
172
|
+
The CLI expects a YAML config file:
|
|
173
|
+
|
|
174
|
+
\`\`\`yaml
|
|
175
|
+
panel:
|
|
176
|
+
host: 192.168.1.100
|
|
177
|
+
account: "00001"
|
|
178
|
+
remote_key: "YOURKEY"
|
|
179
|
+
\`\`\`
|
|
180
|
+
|
|
181
|
+
## Commands
|
|
182
|
+
|
|
183
|
+
### Areas & Zones
|
|
184
|
+
\`\`\`bash
|
|
185
|
+
pydmp get-areas [--json|-j]
|
|
186
|
+
pydmp get-zones [--json|-j]
|
|
187
|
+
\`\`\`
|
|
188
|
+
|
|
189
|
+
### Arm/Disarm
|
|
190
|
+
\`\`\`bash
|
|
191
|
+
pydmp arm "1,2,3" [--bypass-faulted|-b] [--force-arm|-f]
|
|
192
|
+
pydmp disarm <AREA> [--json|-j]
|
|
193
|
+
\`\`\`
|
|
194
|
+
|
|
195
|
+
## Examples
|
|
196
|
+
|
|
197
|
+
\`\`\`bash
|
|
198
|
+
# View areas with debug logs
|
|
199
|
+
pydmp --debug get-areas
|
|
200
|
+
|
|
201
|
+
# Arm area 1
|
|
202
|
+
pydmp arm "1" --bypass-faulted
|
|
203
|
+
\`\`\`
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## pyproject.toml Integration
|
|
207
|
+
|
|
208
|
+
```toml
|
|
209
|
+
[project.optional-dependencies]
|
|
210
|
+
docs = [
|
|
211
|
+
"mkdocs>=1.5",
|
|
212
|
+
"mkdocs-material>=9.4",
|
|
213
|
+
"mkdocstrings[python]>=0.24",
|
|
214
|
+
"mike>=2.0",
|
|
215
|
+
]
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Install and build:
|
|
219
|
+
```bash
|
|
220
|
+
pip install -e ".[docs]"
|
|
221
|
+
mkdocs serve
|
|
222
|
+
mkdocs build
|
|
223
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
mkdocstrings generates API documentation from Python docstrings.
|
|
5
|
+
Use the ::: directive to include a module, class, or function.
|
|
6
|
+
|
|
7
|
+
Syntax:
|
|
8
|
+
::: package.module.ClassName
|
|
9
|
+
::: package.module.function_name
|
|
10
|
+
|
|
11
|
+
The plugin reads docstrings and type hints to generate documentation.
|
|
12
|
+
Use Google-style docstrings for best results.
|
|
13
|
+
-->
|
|
14
|
+
|
|
15
|
+
## [MainClass]
|
|
16
|
+
|
|
17
|
+
::: [package].[module].[MainClass]
|
|
18
|
+
|
|
19
|
+
## [SecondaryClass]
|
|
20
|
+
|
|
21
|
+
::: [package].[module].[SecondaryClass]
|
|
22
|
+
|
|
23
|
+
<!--
|
|
24
|
+
For nested API structure, create subdirectories:
|
|
25
|
+
|
|
26
|
+
docs/api/
|
|
27
|
+
├── index.md - API overview
|
|
28
|
+
├── client.md - ::: package.client.Client
|
|
29
|
+
├── models.md - ::: package.models
|
|
30
|
+
└── entities/
|
|
31
|
+
├── user.md - ::: package.entities.User
|
|
32
|
+
└── item.md - ::: package.entities.Item
|
|
33
|
+
-->
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Getting Started
|
|
2
|
+
|
|
3
|
+
This guide walks through [what the guide covers].
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Python 3.9+
|
|
8
|
+
- [Other prerequisites]
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pip install [package-name]
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Configuration
|
|
17
|
+
|
|
18
|
+
[Explain any required configuration, environment variables, or config files.]
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Example: copy and edit config
|
|
22
|
+
cp config.example.yaml config.yaml
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Basic Usage
|
|
26
|
+
|
|
27
|
+
### [First Concept/Task]
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
from [package] import [Class]
|
|
31
|
+
|
|
32
|
+
# Example code
|
|
33
|
+
obj = [Class]()
|
|
34
|
+
result = obj.method()
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### [Second Concept/Task]
|
|
38
|
+
|
|
39
|
+
```python
|
|
40
|
+
# Example code for second task
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Next Steps
|
|
44
|
+
|
|
45
|
+
- [Configuration](configuration.md) - Advanced configuration options
|
|
46
|
+
- [API Reference](api.md) - Full API documentation
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# [PROJECT_NAME]
|
|
2
|
+
|
|
3
|
+
[One-sentence description of what this project does and who it's for.]
|
|
4
|
+
|
|
5
|
+
**Key Features:**
|
|
6
|
+
|
|
7
|
+
- **[Feature 1]**: [Brief description]
|
|
8
|
+
- **[Feature 2]**: [Brief description]
|
|
9
|
+
- **[Feature 3]**: [Brief description]
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pip install [package-name]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
from [package] import [MainClass]
|
|
21
|
+
|
|
22
|
+
# Minimal working example
|
|
23
|
+
client = [MainClass]()
|
|
24
|
+
result = client.do_something()
|
|
25
|
+
print(result)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Where to Next
|
|
29
|
+
|
|
30
|
+
- [Getting Started](getting-started.md) - Installation and setup walkthrough
|
|
31
|
+
- [Configuration](configuration.md) - Configuration options
|
|
32
|
+
- [API Reference](api.md) - Complete API documentation
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# MkDocs Configuration Template
|
|
2
|
+
# Replace placeholders: [SITE_NAME], [DESCRIPTION], [GITHUB_USER], [REPO_NAME], [PACKAGE_NAME]
|
|
3
|
+
|
|
4
|
+
site_name: [SITE_NAME]
|
|
5
|
+
site_description: [DESCRIPTION]
|
|
6
|
+
site_url: https://[GITHUB_USER].github.io/[REPO_NAME]/
|
|
7
|
+
repo_url: https://github.com/[GITHUB_USER]/[REPO_NAME]
|
|
8
|
+
repo_name: [GITHUB_USER]/[REPO_NAME]
|
|
9
|
+
|
|
10
|
+
extra:
|
|
11
|
+
version:
|
|
12
|
+
provider: mike
|
|
13
|
+
default: latest
|
|
14
|
+
|
|
15
|
+
theme:
|
|
16
|
+
name: material
|
|
17
|
+
features:
|
|
18
|
+
- navigation.sections
|
|
19
|
+
- navigation.top
|
|
20
|
+
- content.code.copy
|
|
21
|
+
|
|
22
|
+
plugins:
|
|
23
|
+
- search
|
|
24
|
+
- mkdocstrings:
|
|
25
|
+
default_handler: python
|
|
26
|
+
handlers:
|
|
27
|
+
python:
|
|
28
|
+
options:
|
|
29
|
+
docstring_style: google
|
|
30
|
+
show_source: false
|
|
31
|
+
members_order: source
|
|
32
|
+
show_if_no_docstring: true
|
|
33
|
+
show_signature_annotations: true
|
|
34
|
+
separate_signature: true
|
|
35
|
+
merge_init_into_class: true
|
|
36
|
+
show_root_heading: true
|
|
37
|
+
show_root_full_path: false
|
|
38
|
+
filters:
|
|
39
|
+
- "!^_" # Exclude private members
|
|
40
|
+
|
|
41
|
+
# Simple navigation (flat structure)
|
|
42
|
+
nav:
|
|
43
|
+
- Home: index.md
|
|
44
|
+
- Getting Started: getting-started.md
|
|
45
|
+
- Configuration: configuration.md
|
|
46
|
+
- API Reference: api.md
|
|
47
|
+
|
|
48
|
+
# Complex navigation example (nested structure)
|
|
49
|
+
# nav:
|
|
50
|
+
# - Home: index.md
|
|
51
|
+
# - Guide:
|
|
52
|
+
# - Getting Started: guide/getting-started.md
|
|
53
|
+
# - CLI: guide/cli.md
|
|
54
|
+
# - Advanced: guide/advanced.md
|
|
55
|
+
# - API Reference:
|
|
56
|
+
# - Overview: api/index.md
|
|
57
|
+
# - Core:
|
|
58
|
+
# - Client: api/client.md
|
|
59
|
+
# - Models: api/models.md
|
|
@@ -6,6 +6,7 @@ repos:
|
|
|
6
6
|
- id: check-json
|
|
7
7
|
- id: check-yaml
|
|
8
8
|
args: ["--unsafe"]
|
|
9
|
+
exclude: .agents/skills/mkdocs-generation/templates/mkdocs.yml
|
|
9
10
|
- id: end-of-file-fixer
|
|
10
11
|
- id: trailing-whitespace
|
|
11
12
|
- id: no-commit-to-branch
|
|
@@ -21,6 +22,7 @@ repos:
|
|
|
21
22
|
hooks:
|
|
22
23
|
- id: prettier
|
|
23
24
|
types_or: [yaml, json]
|
|
25
|
+
exclude: .agents/skills/mkdocs-generation/templates/mkdocs.yml
|
|
24
26
|
- repo: https://github.com/rhysd/actionlint
|
|
25
27
|
rev: v1.7.11
|
|
26
28
|
hooks:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ruff-sync
|
|
3
|
-
Version: 0.1.0.
|
|
3
|
+
Version: 0.1.0.dev1
|
|
4
4
|
Summary: Synchronize Ruff linter configuration across projects
|
|
5
5
|
Project-URL: Homepage, https://github.com/Kilo59/ruff-sync
|
|
6
|
-
Project-URL: Documentation, https://github.
|
|
6
|
+
Project-URL: Documentation, https://kilo59.github.io/ruff-sync/
|
|
7
7
|
Project-URL: Repository, https://github.com/Kilo59/ruff-sync
|
|
8
8
|
Project-URL: Issues, https://github.com/Kilo59/ruff-sync/issues
|
|
9
9
|
Project-URL: Changelog, https://github.com/Kilo59/ruff-sync/releases
|
|
@@ -30,7 +30,7 @@ Requires-Dist: typing-extensions>=4.5.0
|
|
|
30
30
|
Description-Content-Type: text/markdown
|
|
31
31
|
|
|
32
32
|
<p align="center">
|
|
33
|
-
<img src="https://raw.githubusercontent.com/Kilo59/ruff-sync/main/ruff_sync_banner.png" alt="ruff-sync banner" style="max-width: 600px; width: 100%; height: auto; margin-bottom: 1rem;">
|
|
33
|
+
<img src="https://raw.githubusercontent.com/Kilo59/ruff-sync/main/docs/assets/ruff_sync_banner.png" alt="ruff-sync banner" style="max-width: 600px; width: 100%; height: auto; margin-bottom: 1rem;">
|
|
34
34
|
<br>
|
|
35
35
|
<a href="https://pypi.org/project/ruff-sync/"><img src="https://img.shields.io/pypi/v/ruff-sync" alt="PyPI version"></a>
|
|
36
36
|
<a href="https://codecov.io/gh/Kilo59/ruff-sync"><img src="https://codecov.io/gh/Kilo59/ruff-sync/graph/badge.svg?token=kMZw0XtoFW" alt="codecov"></a>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://raw.githubusercontent.com/Kilo59/ruff-sync/main/ruff_sync_banner.png" alt="ruff-sync banner" style="max-width: 600px; width: 100%; height: auto; margin-bottom: 1rem;">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/Kilo59/ruff-sync/main/docs/assets/ruff_sync_banner.png" alt="ruff-sync banner" style="max-width: 600px; width: 100%; height: auto; margin-bottom: 1rem;">
|
|
3
3
|
<br>
|
|
4
4
|
<a href="https://pypi.org/project/ruff-sync/"><img src="https://img.shields.io/pypi/v/ruff-sync" alt="PyPI version"></a>
|
|
5
5
|
<a href="https://codecov.io/gh/Kilo59/ruff-sync"><img src="https://codecov.io/gh/Kilo59/ruff-sync/graph/badge.svg?token=kMZw0XtoFW" alt="codecov"></a>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# CI Integration
|
|
2
|
+
|
|
3
|
+
`ruff-sync` is designed to be run in CI pipelines to ensure that all repositories in an organization stay in sync with the central standards.
|
|
4
|
+
|
|
5
|
+
## Usage in CI
|
|
6
|
+
|
|
7
|
+
The best way to use `ruff-sync` in CI is with the `check` command. If the configuration has drifted, `ruff-sync check` will exit with a non-zero code, failing the build.
|
|
8
|
+
|
|
9
|
+
### GitHub Actions
|
|
10
|
+
|
|
11
|
+
We recommend using `uv` to run `ruff-sync` in GitHub Actions.
|
|
12
|
+
|
|
13
|
+
#### Basic Check
|
|
14
|
+
|
|
15
|
+
```yaml
|
|
16
|
+
name: "Standards Check"
|
|
17
|
+
|
|
18
|
+
on:
|
|
19
|
+
pull_request:
|
|
20
|
+
branches: [main]
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
ruff-sync:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
- uses: astral-sh/setup-uv@v5
|
|
28
|
+
- run: uvx ruff-sync check --semantic
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
#### Automated Sync PRs
|
|
32
|
+
|
|
33
|
+
Instead of just checking, you can have a bot automatically open a PR when the upstream configuration changes.
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
name: "Upstream Sync"
|
|
37
|
+
|
|
38
|
+
on:
|
|
39
|
+
schedule:
|
|
40
|
+
- cron: '0 0 * * 1' # Every Monday at midnight
|
|
41
|
+
workflow_dispatch:
|
|
42
|
+
|
|
43
|
+
jobs:
|
|
44
|
+
sync:
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v4
|
|
48
|
+
- uses: astral-sh/setup-uv@v5
|
|
49
|
+
- name: Pull upstream
|
|
50
|
+
run: uvx ruff-sync pull
|
|
51
|
+
- name: Create Pull Request
|
|
52
|
+
uses: peter-evans/create-pull-request@v6
|
|
53
|
+
with:
|
|
54
|
+
commit-message: "chore: sync ruff configuration from upstream"
|
|
55
|
+
title: "chore: sync ruff configuration"
|
|
56
|
+
body: "This PR synchronizes the Ruff configuration with the upstream source."
|
|
57
|
+
branch: "ruff-sync-update"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### GitLab CI
|
|
61
|
+
|
|
62
|
+
```yaml
|
|
63
|
+
ruff-sync-check:
|
|
64
|
+
image: python:3.12
|
|
65
|
+
script:
|
|
66
|
+
- pip install ruff-sync
|
|
67
|
+
- ruff-sync check --semantic
|
|
68
|
+
only:
|
|
69
|
+
- merge_requests
|
|
70
|
+
- main
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 🛠️ Pre-commit Integration
|
|
76
|
+
|
|
77
|
+
You can use `ruff-sync` with `pre-commit` to ensure your configuration is always in sync before pushing.
|
|
78
|
+
|
|
79
|
+
Add this to your `.pre-commit-config.yaml`:
|
|
80
|
+
|
|
81
|
+
```yaml
|
|
82
|
+
repos:
|
|
83
|
+
- repo: local
|
|
84
|
+
hooks:
|
|
85
|
+
- id: ruff-sync-check
|
|
86
|
+
name: ruff-sync-check
|
|
87
|
+
entry: uvx ruff-sync check --semantic
|
|
88
|
+
language: system
|
|
89
|
+
files: ^pyproject\.toml$
|
|
90
|
+
pass_filenames: false
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
!!! note
|
|
94
|
+
Running `ruff-sync check` in pre-commit is fast because it only performs a network request if the local `pyproject.toml` is older than the upstream or if no cache exists.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 💡 Best Practices
|
|
99
|
+
|
|
100
|
+
### Use `--semantic`
|
|
101
|
+
|
|
102
|
+
In CI, you usually only care about the functional configuration. Using `--semantic` ensures that minor formatting changes don't break your builds, while still guaranteeing that the actual rules are identical.
|
|
103
|
+
|
|
104
|
+
### Use a Dedicated Workflow
|
|
105
|
+
|
|
106
|
+
Running `ruff-sync` as a separate job in your linting workflow makes it easy to identify when a failure is due to configuration drift rather than a code quality issue.
|