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.
Files changed (72) hide show
  1. taskrepo-0.10.1/.gitignore +89 -0
  2. taskrepo-0.10.1/LICENSE +21 -0
  3. taskrepo-0.10.1/PKG-INFO +501 -0
  4. taskrepo-0.10.1/README.md +461 -0
  5. taskrepo-0.10.1/pyproject.toml +141 -0
  6. taskrepo-0.10.1/src/taskrepo/__init__.py +5 -0
  7. taskrepo-0.10.1/src/taskrepo/__version__.py +1 -0
  8. taskrepo-0.10.1/src/taskrepo/cli/__init__.py +1 -0
  9. taskrepo-0.10.1/src/taskrepo/cli/commands/__init__.py +1 -0
  10. taskrepo-0.10.1/src/taskrepo/cli/commands/add.py +235 -0
  11. taskrepo-0.10.1/src/taskrepo/cli/commands/archive.py +156 -0
  12. taskrepo-0.10.1/src/taskrepo/cli/commands/cancelled.py +62 -0
  13. taskrepo-0.10.1/src/taskrepo/cli/commands/config.py +363 -0
  14. taskrepo-0.10.1/src/taskrepo/cli/commands/delete.py +123 -0
  15. taskrepo-0.10.1/src/taskrepo/cli/commands/done.py +134 -0
  16. taskrepo-0.10.1/src/taskrepo/cli/commands/edit.py +554 -0
  17. taskrepo-0.10.1/src/taskrepo/cli/commands/extend.py +165 -0
  18. taskrepo-0.10.1/src/taskrepo/cli/commands/history.py +275 -0
  19. taskrepo-0.10.1/src/taskrepo/cli/commands/in_progress.py +62 -0
  20. taskrepo-0.10.1/src/taskrepo/cli/commands/info.py +142 -0
  21. taskrepo-0.10.1/src/taskrepo/cli/commands/list.py +95 -0
  22. taskrepo-0.10.1/src/taskrepo/cli/commands/move.py +308 -0
  23. taskrepo-0.10.1/src/taskrepo/cli/commands/repos_search.py +219 -0
  24. taskrepo-0.10.1/src/taskrepo/cli/commands/search.py +98 -0
  25. taskrepo-0.10.1/src/taskrepo/cli/commands/sync.py +761 -0
  26. taskrepo-0.10.1/src/taskrepo/cli/commands/tui.py +1007 -0
  27. taskrepo-0.10.1/src/taskrepo/cli/commands/unarchive.py +149 -0
  28. taskrepo-0.10.1/src/taskrepo/cli/commands/upgrade.py +185 -0
  29. taskrepo-0.10.1/src/taskrepo/cli/main.py +668 -0
  30. taskrepo-0.10.1/src/taskrepo/core/__init__.py +1 -0
  31. taskrepo-0.10.1/src/taskrepo/core/config.py +422 -0
  32. taskrepo-0.10.1/src/taskrepo/core/repository.py +1074 -0
  33. taskrepo-0.10.1/src/taskrepo/core/task.py +305 -0
  34. taskrepo-0.10.1/src/taskrepo/logo/logo-taskrepo.png +0 -0
  35. taskrepo-0.10.1/src/taskrepo/tui/__init__.py +1 -0
  36. taskrepo-0.10.1/src/taskrepo/tui/conflict_resolver.py +400 -0
  37. taskrepo-0.10.1/src/taskrepo/tui/display.py +419 -0
  38. taskrepo-0.10.1/src/taskrepo/tui/prompts.py +851 -0
  39. taskrepo-0.10.1/src/taskrepo/tui/task_tui.py +1342 -0
  40. taskrepo-0.10.1/src/taskrepo/utils/__init__.py +1 -0
  41. taskrepo-0.10.1/src/taskrepo/utils/async_sync.py +314 -0
  42. taskrepo-0.10.1/src/taskrepo/utils/banner.py +41 -0
  43. taskrepo-0.10.1/src/taskrepo/utils/conflict_detection.py +123 -0
  44. taskrepo-0.10.1/src/taskrepo/utils/date_parser.py +265 -0
  45. taskrepo-0.10.1/src/taskrepo/utils/display_constants.py +29 -0
  46. taskrepo-0.10.1/src/taskrepo/utils/duration.py +96 -0
  47. taskrepo-0.10.1/src/taskrepo/utils/file_validation.py +239 -0
  48. taskrepo-0.10.1/src/taskrepo/utils/github.py +260 -0
  49. taskrepo-0.10.1/src/taskrepo/utils/helpers.py +477 -0
  50. taskrepo-0.10.1/src/taskrepo/utils/history.py +520 -0
  51. taskrepo-0.10.1/src/taskrepo/utils/homebrew_checker.py +122 -0
  52. taskrepo-0.10.1/src/taskrepo/utils/id_mapping.py +165 -0
  53. taskrepo-0.10.1/src/taskrepo/utils/install_detector.py +121 -0
  54. taskrepo-0.10.1/src/taskrepo/utils/merge.py +453 -0
  55. taskrepo-0.10.1/src/taskrepo/utils/paths.py +96 -0
  56. taskrepo-0.10.1/src/taskrepo/utils/sorting.py +311 -0
  57. taskrepo-0.10.1/src/taskrepo/utils/time_format.py +91 -0
  58. taskrepo-0.10.1/src/taskrepo/utils/update_checker.py +164 -0
  59. taskrepo-0.10.1/tests/__init__.py +1 -0
  60. taskrepo-0.10.1/tests/integration/__init__.py +1 -0
  61. taskrepo-0.10.1/tests/unit/__init__.py +1 -0
  62. taskrepo-0.10.1/tests/unit/test_extend.py +381 -0
  63. taskrepo-0.10.1/tests/unit/test_github.py +125 -0
  64. taskrepo-0.10.1/tests/unit/test_homebrew_checker.py +119 -0
  65. taskrepo-0.10.1/tests/unit/test_install_detector.py +82 -0
  66. taskrepo-0.10.1/tests/unit/test_merge.py +568 -0
  67. taskrepo-0.10.1/tests/unit/test_prompts.py +135 -0
  68. taskrepo-0.10.1/tests/unit/test_repository.py +462 -0
  69. taskrepo-0.10.1/tests/unit/test_search.py +237 -0
  70. taskrepo-0.10.1/tests/unit/test_sorting.py +690 -0
  71. taskrepo-0.10.1/tests/unit/test_task.py +255 -0
  72. 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/
@@ -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.
@@ -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
+ [![CI](https://github.com/HenriquesLab/TaskRepo/actions/workflows/ci.yml/badge.svg)](https://github.com/HenriquesLab/TaskRepo/actions/workflows/ci.yml)
46
+ [![PyPI version](https://badge.fury.io/py/taskrepo.svg)](https://badge.fury.io/py/taskrepo)
47
+ [![Python versions](https://img.shields.io/pypi/pyversions/taskrepo.svg)](https://pypi.org/project/taskrepo/)
48
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
49
+ [![Documentation](https://img.shields.io/badge/docs-taskrepo.henriqueslab.org-blue)](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