taskrepo 0.10.1__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.
- taskrepo-0.10.1/.gitignore +89 -0
- taskrepo-0.10.1/LICENSE +21 -0
- taskrepo-0.10.1/PKG-INFO +501 -0
- taskrepo-0.10.1/README.md +461 -0
- taskrepo-0.10.1/pyproject.toml +141 -0
- taskrepo-0.10.1/src/taskrepo/__init__.py +5 -0
- taskrepo-0.10.1/src/taskrepo/__version__.py +1 -0
- taskrepo-0.10.1/src/taskrepo/cli/__init__.py +1 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/__init__.py +1 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/add.py +235 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/archive.py +156 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/cancelled.py +62 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/config.py +363 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/delete.py +123 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/done.py +134 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/edit.py +554 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/extend.py +165 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/history.py +275 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/in_progress.py +62 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/info.py +142 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/list.py +95 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/move.py +308 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/repos_search.py +219 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/search.py +98 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/sync.py +761 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/tui.py +1007 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/unarchive.py +149 -0
- taskrepo-0.10.1/src/taskrepo/cli/commands/upgrade.py +185 -0
- taskrepo-0.10.1/src/taskrepo/cli/main.py +668 -0
- taskrepo-0.10.1/src/taskrepo/core/__init__.py +1 -0
- taskrepo-0.10.1/src/taskrepo/core/config.py +422 -0
- taskrepo-0.10.1/src/taskrepo/core/repository.py +1074 -0
- taskrepo-0.10.1/src/taskrepo/core/task.py +305 -0
- taskrepo-0.10.1/src/taskrepo/logo/logo-taskrepo.png +0 -0
- taskrepo-0.10.1/src/taskrepo/tui/__init__.py +1 -0
- taskrepo-0.10.1/src/taskrepo/tui/conflict_resolver.py +400 -0
- taskrepo-0.10.1/src/taskrepo/tui/display.py +419 -0
- taskrepo-0.10.1/src/taskrepo/tui/prompts.py +851 -0
- taskrepo-0.10.1/src/taskrepo/tui/task_tui.py +1342 -0
- taskrepo-0.10.1/src/taskrepo/utils/__init__.py +1 -0
- taskrepo-0.10.1/src/taskrepo/utils/async_sync.py +314 -0
- taskrepo-0.10.1/src/taskrepo/utils/banner.py +41 -0
- taskrepo-0.10.1/src/taskrepo/utils/conflict_detection.py +123 -0
- taskrepo-0.10.1/src/taskrepo/utils/date_parser.py +265 -0
- taskrepo-0.10.1/src/taskrepo/utils/display_constants.py +29 -0
- taskrepo-0.10.1/src/taskrepo/utils/duration.py +96 -0
- taskrepo-0.10.1/src/taskrepo/utils/file_validation.py +239 -0
- taskrepo-0.10.1/src/taskrepo/utils/github.py +260 -0
- taskrepo-0.10.1/src/taskrepo/utils/helpers.py +477 -0
- taskrepo-0.10.1/src/taskrepo/utils/history.py +520 -0
- taskrepo-0.10.1/src/taskrepo/utils/homebrew_checker.py +122 -0
- taskrepo-0.10.1/src/taskrepo/utils/id_mapping.py +165 -0
- taskrepo-0.10.1/src/taskrepo/utils/install_detector.py +121 -0
- taskrepo-0.10.1/src/taskrepo/utils/merge.py +453 -0
- taskrepo-0.10.1/src/taskrepo/utils/paths.py +96 -0
- taskrepo-0.10.1/src/taskrepo/utils/sorting.py +311 -0
- taskrepo-0.10.1/src/taskrepo/utils/time_format.py +91 -0
- taskrepo-0.10.1/src/taskrepo/utils/update_checker.py +164 -0
- taskrepo-0.10.1/tests/__init__.py +1 -0
- taskrepo-0.10.1/tests/integration/__init__.py +1 -0
- taskrepo-0.10.1/tests/unit/__init__.py +1 -0
- taskrepo-0.10.1/tests/unit/test_extend.py +381 -0
- taskrepo-0.10.1/tests/unit/test_github.py +125 -0
- taskrepo-0.10.1/tests/unit/test_homebrew_checker.py +119 -0
- taskrepo-0.10.1/tests/unit/test_install_detector.py +82 -0
- taskrepo-0.10.1/tests/unit/test_merge.py +568 -0
- taskrepo-0.10.1/tests/unit/test_prompts.py +135 -0
- taskrepo-0.10.1/tests/unit/test_repository.py +462 -0
- taskrepo-0.10.1/tests/unit/test_search.py +237 -0
- taskrepo-0.10.1/tests/unit/test_sorting.py +690 -0
- taskrepo-0.10.1/tests/unit/test_task.py +255 -0
- taskrepo-0.10.1/tests/unit/test_update_checker.py +132 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
.venv/
|
|
25
|
+
venv/
|
|
26
|
+
ENV/
|
|
27
|
+
env/
|
|
28
|
+
|
|
29
|
+
# Testing
|
|
30
|
+
.pytest_cache/
|
|
31
|
+
.coverage
|
|
32
|
+
htmlcov/
|
|
33
|
+
.tox/
|
|
34
|
+
.nox/
|
|
35
|
+
|
|
36
|
+
# IDEs
|
|
37
|
+
.vscode/
|
|
38
|
+
.idea/
|
|
39
|
+
*.swp
|
|
40
|
+
*.swo
|
|
41
|
+
*~
|
|
42
|
+
|
|
43
|
+
# OS
|
|
44
|
+
.DS_Store
|
|
45
|
+
Thumbs.db
|
|
46
|
+
|
|
47
|
+
# MyPy
|
|
48
|
+
.mypy_cache/
|
|
49
|
+
.dmypy.json
|
|
50
|
+
dmypy.json
|
|
51
|
+
|
|
52
|
+
# Ruff
|
|
53
|
+
.ruff_cache/
|
|
54
|
+
|
|
55
|
+
# Local config (user-specific)
|
|
56
|
+
.taskreporc
|
|
57
|
+
|
|
58
|
+
# Markdown files (ignore by default, allow specific ones)
|
|
59
|
+
*.md
|
|
60
|
+
!README.md
|
|
61
|
+
!CHANGELOG.md
|
|
62
|
+
!CONTRIBUTING.md
|
|
63
|
+
|
|
64
|
+
# Sensitive data patterns
|
|
65
|
+
*.pem
|
|
66
|
+
*.key
|
|
67
|
+
*.p12
|
|
68
|
+
*.pfx
|
|
69
|
+
*.cer
|
|
70
|
+
*.crt
|
|
71
|
+
.env
|
|
72
|
+
.env.*
|
|
73
|
+
!.env.example
|
|
74
|
+
*.secret
|
|
75
|
+
*.secrets
|
|
76
|
+
credentials.json
|
|
77
|
+
secrets.yaml
|
|
78
|
+
config.local.yaml
|
|
79
|
+
*.backup
|
|
80
|
+
*.bak
|
|
81
|
+
|
|
82
|
+
# Task repositories (user data - should not be in source repo)
|
|
83
|
+
tasks-*/
|
|
84
|
+
|
|
85
|
+
# PyPI/Twine
|
|
86
|
+
.pypirc
|
|
87
|
+
|
|
88
|
+
# Claude Code
|
|
89
|
+
.claude/
|
taskrepo-0.10.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Ricardo Henriques
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
taskrepo-0.10.1/PKG-INFO
ADDED
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: taskrepo
|
|
3
|
+
Version: 0.10.1
|
|
4
|
+
Summary: TaskWarrior-inspired CLI for managing tasks as markdown files in git repositories
|
|
5
|
+
Project-URL: Homepage, https://github.com/henriqueslab/TaskRepo
|
|
6
|
+
Project-URL: Repository, https://github.com/henriqueslab/TaskRepo
|
|
7
|
+
Project-URL: Issues, https://github.com/henriqueslab/TaskRepo/issues
|
|
8
|
+
Author-email: Ricardo Henriques <paxcalpt@gmail.com>
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: cli,git,markdown,productivity,task-management,taskwarrior
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Office/Business :: Scheduling
|
|
20
|
+
Classifier: Topic :: Software Development
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Requires-Dist: click>=8.0.0
|
|
23
|
+
Requires-Dist: dateparser>=1.0.0
|
|
24
|
+
Requires-Dist: gitpython>=3.1.0
|
|
25
|
+
Requires-Dist: packaging>=20.0
|
|
26
|
+
Requires-Dist: prompt-toolkit>=3.0.0
|
|
27
|
+
Requires-Dist: python-dateutil>=2.8.0
|
|
28
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
29
|
+
Requires-Dist: rich>=13.0.0
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: mypy>=1.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: pre-commit>=4.2.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: pytest<9.0,>=7.4; extra == 'dev'
|
|
35
|
+
Requires-Dist: ruff>=0.12.2; extra == 'dev'
|
|
36
|
+
Requires-Dist: types-dateparser>=1.0.0; extra == 'dev'
|
|
37
|
+
Requires-Dist: types-python-dateutil>=2.8.0; extra == 'dev'
|
|
38
|
+
Requires-Dist: types-pyyaml>=6.0.0; extra == 'dev'
|
|
39
|
+
Description-Content-Type: text/markdown
|
|
40
|
+
|
|
41
|
+
# TaskRepo
|
|
42
|
+
|
|
43
|
+
<img src="src/taskrepo/logo/logo-taskrepo.png" align="right" width="200" style="margin-left: 20px;"/>
|
|
44
|
+
|
|
45
|
+
[](https://github.com/HenriquesLab/TaskRepo/actions/workflows/ci.yml)
|
|
46
|
+
[](https://badge.fury.io/py/taskrepo)
|
|
47
|
+
[](https://pypi.org/project/taskrepo/)
|
|
48
|
+
[](https://opensource.org/licenses/MIT)
|
|
49
|
+
[](https://taskrepo.henriqueslab.org)
|
|
50
|
+
|
|
51
|
+
> TaskWarrior-inspired CLI for managing tasks as markdown files in git repositories
|
|
52
|
+
|
|
53
|
+
TaskRepo is a powerful command-line task management tool that combines the best of TaskWarrior's workflow with the simplicity of markdown and the collaboration features of git.
|
|
54
|
+
|
|
55
|
+
## Features
|
|
56
|
+
|
|
57
|
+
- **Git-backed storage**: All tasks are stored as markdown files in git repositories
|
|
58
|
+
- **TaskWarrior-inspired**: Familiar workflow with priorities, tags, dependencies, and due dates
|
|
59
|
+
- **Rich metadata**: YAML frontmatter for structured task data
|
|
60
|
+
- **Link associations**: Attach URLs to tasks (GitHub issues, PRs, emails, documentation, etc.)
|
|
61
|
+
- **Interactive TUI**: User-friendly prompts with autocomplete and validation
|
|
62
|
+
- **Multiple repositories**: Organize tasks across different projects or contexts
|
|
63
|
+
- **GitHub integration**: Associate tasks with GitHub user handles
|
|
64
|
+
- **Beautiful output**: Rich terminal formatting with tables and colors
|
|
65
|
+
- **Version control**: Full git history and collaboration capabilities
|
|
66
|
+
|
|
67
|
+
### Interactive TUI
|
|
68
|
+
|
|
69
|
+
<p align="center">
|
|
70
|
+
<img src="docs/screenshots/tui-interface.png" alt="TaskRepo TUI Interface" width="100%"/>
|
|
71
|
+
</p>
|
|
72
|
+
|
|
73
|
+
Browse and manage tasks with the interactive Terminal User Interface featuring color-coded statuses, task details panel, and keyboard shortcuts.
|
|
74
|
+
|
|
75
|
+
## Installation
|
|
76
|
+
|
|
77
|
+
### macOS (Homebrew) - Recommended for Mac users
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Tap the HenriquesLab formulas repository
|
|
81
|
+
brew tap henriqueslab/formulas
|
|
82
|
+
|
|
83
|
+
# Install TaskRepo
|
|
84
|
+
brew install taskrepo
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Updating:**
|
|
88
|
+
```bash
|
|
89
|
+
brew update
|
|
90
|
+
brew upgrade taskrepo
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Benefits: Simple installation, automatic dependency management (Python 3.12, git, gh), easy updates
|
|
94
|
+
|
|
95
|
+
### Using pipx (recommended for Linux/Windows)
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Install pipx if you haven't already
|
|
99
|
+
python3 -m pip install --user pipx
|
|
100
|
+
python3 -m pipx ensurepath
|
|
101
|
+
|
|
102
|
+
# Install TaskRepo
|
|
103
|
+
pipx install taskrepo
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Benefits: Isolated environment, global CLI access, easy updates with `pipx upgrade taskrepo`
|
|
107
|
+
|
|
108
|
+
### Using uv (fast alternative)
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Install uv if you haven't already
|
|
112
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
113
|
+
|
|
114
|
+
# Install TaskRepo
|
|
115
|
+
uv tool install taskrepo
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Benefits: Very fast installation, modern Python tooling, automatic environment management
|
|
119
|
+
|
|
120
|
+
### Using pip (alternative)
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
pip install taskrepo
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Note: May conflict with other packages. Consider using pipx or uv instead.
|
|
127
|
+
|
|
128
|
+
## Quick Start
|
|
129
|
+
|
|
130
|
+
> **Note**: You can use either `tsk` (short alias) or `taskrepo` (full command). Examples below use `tsk` for brevity.
|
|
131
|
+
|
|
132
|
+
### 1. Initialize TaskRepo
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
tsk init
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
This creates a configuration file at `~/.taskreporc` and sets up the parent directory for task repositories (default: `~/tasks`).
|
|
139
|
+
|
|
140
|
+
### 2. Create a repository
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
tsk create-repo work
|
|
144
|
+
tsk create-repo personal
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Repositories are stored as `tasks-{name}` directories with git initialization.
|
|
148
|
+
|
|
149
|
+
### 3. Add a task
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Interactive mode (default)
|
|
153
|
+
tsk add
|
|
154
|
+
|
|
155
|
+
# Non-interactive mode
|
|
156
|
+
tsk add -r work -t "Fix authentication bug" -p backend --priority H --assignees @alice,@bob --tags bug,security
|
|
157
|
+
|
|
158
|
+
# With associated links (GitHub issues, emails, docs, etc.)
|
|
159
|
+
tsk add -r work -t "Fix authentication bug" -p backend --links https://github.com/org/repo/issues/123,https://mail.google.com/mail/u/0/#inbox/abc
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 4. List tasks
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# List all tasks
|
|
166
|
+
tsk list
|
|
167
|
+
|
|
168
|
+
# Filter by repository
|
|
169
|
+
tsk list --repo work
|
|
170
|
+
|
|
171
|
+
# Filter by status, priority, or project
|
|
172
|
+
tsk list --status pending --priority H
|
|
173
|
+
tsk list --project backend
|
|
174
|
+
|
|
175
|
+
# Show completed tasks
|
|
176
|
+
tsk list --all
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### 5. Manage tasks
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
# Mark task as done
|
|
183
|
+
tsk done 001
|
|
184
|
+
|
|
185
|
+
# Edit a task
|
|
186
|
+
tsk edit 001
|
|
187
|
+
|
|
188
|
+
# Sync with git remote
|
|
189
|
+
tsk sync
|
|
190
|
+
tsk sync --repo work # Sync specific repository
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Commands Reference
|
|
194
|
+
|
|
195
|
+
### Configuration
|
|
196
|
+
|
|
197
|
+
- `tsk init` - Initialize TaskRepo configuration
|
|
198
|
+
- `tsk config` - Show current configuration
|
|
199
|
+
- `tsk create-repo <name>` - Create a new task repository
|
|
200
|
+
- `tsk repos` - List all task repositories
|
|
201
|
+
|
|
202
|
+
### Task Management
|
|
203
|
+
|
|
204
|
+
- `tsk add` - Add a new task (interactive)
|
|
205
|
+
- `tsk list` - List tasks with filters
|
|
206
|
+
- `tsk edit <id>` - Edit a task
|
|
207
|
+
- `tsk done <id>` - Mark task as completed
|
|
208
|
+
- `tsk delete <id>` - Delete a task
|
|
209
|
+
|
|
210
|
+
### Git Operations
|
|
211
|
+
|
|
212
|
+
- `tsk sync` - Pull and push all repositories
|
|
213
|
+
- `tsk sync --repo <name>` - Sync specific repository
|
|
214
|
+
- `tsk sync --no-push` - Pull only, don't push
|
|
215
|
+
|
|
216
|
+
## Configuration
|
|
217
|
+
|
|
218
|
+
Configuration is stored in `~/.taskreporc`:
|
|
219
|
+
|
|
220
|
+
```yaml
|
|
221
|
+
parent_dir: ~/tasks
|
|
222
|
+
default_priority: M
|
|
223
|
+
default_status: pending
|
|
224
|
+
default_assignee: null # Optional: GitHub handle (e.g., @username)
|
|
225
|
+
default_editor: null # Optional: Text editor (e.g., vim, nano, code)
|
|
226
|
+
sort_by:
|
|
227
|
+
- priority
|
|
228
|
+
- due
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Editor Selection Priority
|
|
232
|
+
|
|
233
|
+
When editing tasks with `tsk edit`, the editor is selected in this order:
|
|
234
|
+
1. CLI flag: `tsk edit 123 --editor nano`
|
|
235
|
+
2. Environment variable: `$EDITOR`
|
|
236
|
+
3. Config file: `default_editor` in `~/.taskreporc`
|
|
237
|
+
4. Fallback: `vim`
|
|
238
|
+
|
|
239
|
+
## Directory Structure
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
~/tasks/
|
|
243
|
+
tasks-work/
|
|
244
|
+
.git/
|
|
245
|
+
tasks/
|
|
246
|
+
task-001.md
|
|
247
|
+
task-002.md
|
|
248
|
+
task-003.md
|
|
249
|
+
tasks-personal/
|
|
250
|
+
.git/
|
|
251
|
+
tasks/
|
|
252
|
+
task-001.md
|
|
253
|
+
tasks-opensource/
|
|
254
|
+
.git/
|
|
255
|
+
tasks/
|
|
256
|
+
task-001.md
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Documentation
|
|
260
|
+
|
|
261
|
+
For comprehensive documentation, including:
|
|
262
|
+
- **Complete CLI reference** with all commands and options
|
|
263
|
+
- **Task file format** and field specifications
|
|
264
|
+
- **Advanced features** like conflict resolution, dependencies, and GitHub integration
|
|
265
|
+
- **Configuration guides** and examples
|
|
266
|
+
- **Troubleshooting** and community support
|
|
267
|
+
|
|
268
|
+
Visit the official documentation at **[taskrepo.henriqueslab.org](https://taskrepo.henriqueslab.org)**
|
|
269
|
+
|
|
270
|
+
## Examples
|
|
271
|
+
|
|
272
|
+
### Create a high-priority bug task
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
tsk add \
|
|
276
|
+
--repo work \
|
|
277
|
+
--title "Fix memory leak in worker process" \
|
|
278
|
+
--priority H \
|
|
279
|
+
--project backend \
|
|
280
|
+
--assignees @alice,@bob \
|
|
281
|
+
--tags bug,performance \
|
|
282
|
+
--due "2025-11-01" \
|
|
283
|
+
--description "Memory usage grows unbounded in background worker"
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### List urgent tasks
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
tsk list --priority H --status pending
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### List tasks assigned to a specific user
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
tsk list --assignee @alice
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Edit a task in your editor
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
EDITOR=vim tsk edit 001
|
|
302
|
+
# Or with custom editor
|
|
303
|
+
tsk edit 001 --editor code
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Development
|
|
307
|
+
|
|
308
|
+
### Setup
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
# Clone repository
|
|
312
|
+
git clone https://github.com/henriqueslab/TaskRepo.git
|
|
313
|
+
cd TaskRepo
|
|
314
|
+
|
|
315
|
+
# Install with dev dependencies
|
|
316
|
+
uv sync --extra dev
|
|
317
|
+
|
|
318
|
+
# Install pre-commit hooks (optional but recommended)
|
|
319
|
+
uv run pre-commit install
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Run tests
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
# Run all tests
|
|
326
|
+
uv run pytest tests/ -v
|
|
327
|
+
|
|
328
|
+
# Run with coverage
|
|
329
|
+
uv run pytest tests/ -v --cov=taskrepo --cov-report=term-missing
|
|
330
|
+
|
|
331
|
+
# Run specific test types
|
|
332
|
+
uv run pytest tests/unit -v # Unit tests only
|
|
333
|
+
uv run pytest tests/integration -v # Integration tests only
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Code quality
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
# Format code
|
|
340
|
+
uv run ruff format .
|
|
341
|
+
|
|
342
|
+
# Lint code
|
|
343
|
+
uv run ruff check .
|
|
344
|
+
|
|
345
|
+
# Type checking
|
|
346
|
+
uv run mypy src/taskrepo
|
|
347
|
+
|
|
348
|
+
# Run all quality checks (what CI runs)
|
|
349
|
+
uv run ruff format --check .
|
|
350
|
+
uv run ruff check .
|
|
351
|
+
uv run mypy src/taskrepo
|
|
352
|
+
uv run pytest tests/ -v
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Pre-commit hooks
|
|
356
|
+
|
|
357
|
+
We use pre-commit to ensure code quality before commits:
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
# Install hooks
|
|
361
|
+
uv run pre-commit install
|
|
362
|
+
|
|
363
|
+
# Run manually on all files
|
|
364
|
+
uv run pre-commit run --all-files
|
|
365
|
+
|
|
366
|
+
# Skip hooks for a specific commit (use sparingly)
|
|
367
|
+
git commit --no-verify
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
The following checks run automatically on commit:
|
|
371
|
+
- **ruff format**: Code formatting
|
|
372
|
+
- **ruff**: Linting and import sorting
|
|
373
|
+
- **mypy**: Static type checking
|
|
374
|
+
- **trailing-whitespace**: Remove trailing spaces
|
|
375
|
+
- **end-of-file-fixer**: Ensure files end with newline
|
|
376
|
+
- **check-yaml/toml**: Validate config files
|
|
377
|
+
|
|
378
|
+
### CI/CD Pipeline
|
|
379
|
+
|
|
380
|
+
TaskRepo uses GitHub Actions for continuous integration and deployment:
|
|
381
|
+
|
|
382
|
+
#### CI Workflow (`.github/workflows/ci.yml`)
|
|
383
|
+
|
|
384
|
+
Runs on every push and pull request to `main`:
|
|
385
|
+
|
|
386
|
+
1. **Lint & Type Check** (Python 3.11)
|
|
387
|
+
- Code formatting check with ruff
|
|
388
|
+
- Linting with ruff
|
|
389
|
+
- Type checking with mypy
|
|
390
|
+
|
|
391
|
+
2. **Tests** (Python 3.10, 3.11, 3.12)
|
|
392
|
+
- Unit tests
|
|
393
|
+
- Integration tests
|
|
394
|
+
- Matrix testing across Python versions
|
|
395
|
+
|
|
396
|
+
3. **Coverage Report** (Python 3.11)
|
|
397
|
+
- Full test suite with coverage measurement
|
|
398
|
+
- Coverage report uploaded as artifact
|
|
399
|
+
|
|
400
|
+
4. **Build Verification** (Python 3.11)
|
|
401
|
+
- Package build (wheel + sdist)
|
|
402
|
+
- Metadata verification
|
|
403
|
+
- Build artifacts uploaded for inspection
|
|
404
|
+
|
|
405
|
+
#### Release Workflow (`.github/workflows/release.yml`)
|
|
406
|
+
|
|
407
|
+
Automatically triggered when you push a version tag (e.g., `v0.2.0`):
|
|
408
|
+
|
|
409
|
+
1. **Validation**
|
|
410
|
+
- Verify tag version matches `__version__.py`
|
|
411
|
+
- Check CHANGELOG.md has entry for this version
|
|
412
|
+
- Run full test suite
|
|
413
|
+
|
|
414
|
+
2. **PyPI Publishing**
|
|
415
|
+
- Build package (wheel + sdist)
|
|
416
|
+
- Publish to PyPI using OIDC trusted publishing (secure, no API tokens needed)
|
|
417
|
+
|
|
418
|
+
3. **GitHub Release**
|
|
419
|
+
- Extract release notes from CHANGELOG.md
|
|
420
|
+
- Create GitHub release with auto-generated notes
|
|
421
|
+
- Attach wheel and sdist as release assets
|
|
422
|
+
|
|
423
|
+
### Creating a Release
|
|
424
|
+
|
|
425
|
+
To create a new release:
|
|
426
|
+
|
|
427
|
+
1. **Update version** in `src/taskrepo/__version__.py`:
|
|
428
|
+
```python
|
|
429
|
+
__version__ = "0.2.0"
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
2. **Update CHANGELOG.md** with release notes:
|
|
433
|
+
```markdown
|
|
434
|
+
## [0.2.0] - 2025-10-25
|
|
435
|
+
|
|
436
|
+
### Added
|
|
437
|
+
- New feature X
|
|
438
|
+
- New feature Y
|
|
439
|
+
|
|
440
|
+
### Fixed
|
|
441
|
+
- Bug fix Z
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
3. **Commit changes**:
|
|
445
|
+
```bash
|
|
446
|
+
git add src/taskrepo/__version__.py CHANGELOG.md
|
|
447
|
+
git commit -m "chore: bump version to 0.2.0"
|
|
448
|
+
git push
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
4. **Create and push tag**:
|
|
452
|
+
```bash
|
|
453
|
+
git tag v0.2.0
|
|
454
|
+
git push origin v0.2.0
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
5. **Monitor release**:
|
|
458
|
+
- GitHub Actions will automatically run the release workflow
|
|
459
|
+
- Check [Actions tab](https://github.com/HenriquesLab/TaskRepo/actions) for progress
|
|
460
|
+
- Package will be published to [PyPI](https://pypi.org/project/taskrepo/)
|
|
461
|
+
- GitHub release will be created with artifacts
|
|
462
|
+
|
|
463
|
+
### Dependency Management
|
|
464
|
+
|
|
465
|
+
Dependencies are automatically monitored by Dependabot:
|
|
466
|
+
- Python dependencies updated weekly
|
|
467
|
+
- GitHub Actions updated weekly
|
|
468
|
+
- PRs are auto-labeled and grouped for easier review
|
|
469
|
+
|
|
470
|
+
## Contributing
|
|
471
|
+
|
|
472
|
+
Contributions are welcome! Please:
|
|
473
|
+
|
|
474
|
+
1. Fork the repository
|
|
475
|
+
2. Create a feature branch
|
|
476
|
+
3. Make your changes with tests
|
|
477
|
+
4. Run the test suite
|
|
478
|
+
5. Submit a pull request
|
|
479
|
+
|
|
480
|
+
## License
|
|
481
|
+
|
|
482
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
483
|
+
|
|
484
|
+
## Acknowledgments
|
|
485
|
+
|
|
486
|
+
- Inspired by [TaskWarrior](https://taskwarrior.org/)
|
|
487
|
+
- Built with [Click](https://click.palletsprojects.com/), [prompt_toolkit](https://python-prompt-toolkit.readthedocs.io/), and [Rich](https://rich.readthedocs.io/)
|
|
488
|
+
- Package management by [UV](https://docs.astral.sh/uv/)
|
|
489
|
+
|
|
490
|
+
## Roadmap
|
|
491
|
+
|
|
492
|
+
- [ ] Dependency validation and visualization
|
|
493
|
+
- [ ] Task templates
|
|
494
|
+
- [ ] Recurrence support
|
|
495
|
+
- [ ] Time tracking
|
|
496
|
+
- [ ] Export to other formats (JSON, CSV, HTML)
|
|
497
|
+
- [ ] GitHub integration (create issues from tasks)
|
|
498
|
+
- [ ] Task search with advanced queries
|
|
499
|
+
- [ ] Statistics and reporting
|
|
500
|
+
- [ ] Shell completion (bash, zsh, fish)
|
|
501
|
+
- [ ] Web UI for task visualization
|