workforge 2.4.1__py3-none-any.whl
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.
- workforge/__init__.py +5 -0
- workforge/cli.py +733 -0
- workforge/config.py +47 -0
- workforge/core/__init__.py +1 -0
- workforge/core/parser.py +97 -0
- workforge/models.py +54 -0
- workforge/providers/__init__.py +1 -0
- workforge/providers/base.py +48 -0
- workforge/providers/github.py +606 -0
- workforge/providers/jira.py +509 -0
- workforge/providers/registry.py +17 -0
- workforge/providers/trello.py +469 -0
- workforge-2.4.1.dist-info/METADATA +515 -0
- workforge-2.4.1.dist-info/RECORD +17 -0
- workforge-2.4.1.dist-info/WHEEL +4 -0
- workforge-2.4.1.dist-info/entry_points.txt +2 -0
- workforge-2.4.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: workforge
|
|
3
|
+
Version: 2.4.1
|
|
4
|
+
Summary: Turn work inputs into provider-neutral requirements and planning items.
|
|
5
|
+
Project-URL: Homepage, https://github.com/Nanielito/workforge
|
|
6
|
+
Project-URL: Repository, https://github.com/Nanielito/workforge.git
|
|
7
|
+
Project-URL: Issues, https://github.com/Nanielito/workforge/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/Nanielito/workforge/blob/main/CHANGELOG.md
|
|
9
|
+
Author: Daniel Ramirez
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: cli,github-projects,jira,planning,trello
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Requires-Dist: httpx>=0.27.0
|
|
24
|
+
Requires-Dist: pydantic>=2.8.0
|
|
25
|
+
Requires-Dist: python-dotenv>=1.0.1
|
|
26
|
+
Requires-Dist: pyyaml>=6.0.2
|
|
27
|
+
Requires-Dist: typer>=0.12.3
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: build>=1.2.0; extra == 'dev'
|
|
30
|
+
Requires-Dist: pytest>=8.3.0; extra == 'dev'
|
|
31
|
+
Description-Content-Type: text/markdown
|
|
32
|
+
|
|
33
|
+
# WorkForge
|
|
34
|
+
|
|
35
|
+
WorkForge turns raw work inputs into structured planning items, then sends them
|
|
36
|
+
to planning providers such as Trello, GitHub Projects, and Jira Cloud.
|
|
37
|
+
|
|
38
|
+
The core model is provider-neutral so the same requirements can become Trello
|
|
39
|
+
cards, GitHub Issues attached to a Project v2, or Jira issues.
|
|
40
|
+
|
|
41
|
+
## Goals
|
|
42
|
+
|
|
43
|
+
- Keep planning automation outside product repositories.
|
|
44
|
+
- Support multiple workspaces with their own configuration and environment.
|
|
45
|
+
- Preview generated requirements before creating external items.
|
|
46
|
+
- Add providers through a small adapter interface.
|
|
47
|
+
|
|
48
|
+
## Versioning
|
|
49
|
+
|
|
50
|
+
WorkForge uses semantic versioning.
|
|
51
|
+
|
|
52
|
+
- Patch releases fix bugs without changing commands or output contracts.
|
|
53
|
+
- Minor releases add backward-compatible commands, providers, or output files.
|
|
54
|
+
- Major releases may change CLI behavior, provider contracts, or saved output
|
|
55
|
+
formats.
|
|
56
|
+
|
|
57
|
+
`v1.0.0` is the stable Trello workflow release. The provider-neutral item
|
|
58
|
+
terminology and GitHub Projects provider require a major release because they
|
|
59
|
+
change saved output and CLI command names.
|
|
60
|
+
|
|
61
|
+
Releases are created manually from the `Release` GitHub Actions workflow on
|
|
62
|
+
`main`. The workflow updates the version and changelog, runs the test suite,
|
|
63
|
+
builds and validates the wheel and source distribution, creates the Git tag,
|
|
64
|
+
and attaches both distributions to a GitHub Release.
|
|
65
|
+
|
|
66
|
+
See the [distribution and release guide](https://github.com/Nanielito/workforge/blob/main/docs/distribution.md)
|
|
67
|
+
for the release process, public PyPI workflow, and required one-time setup.
|
|
68
|
+
|
|
69
|
+
### Migrating from v1 to v2
|
|
70
|
+
|
|
71
|
+
Version 2 uses provider-neutral item terminology. Existing generated output is
|
|
72
|
+
not migrated automatically; rename `cards.json` to `items.json` and the
|
|
73
|
+
`cards/` context directory to `items/`, or run `workforge discover --save` to
|
|
74
|
+
rebuild them from the provider.
|
|
75
|
+
|
|
76
|
+
The corresponding CLI names changed:
|
|
77
|
+
|
|
78
|
+
| v1 | v2 |
|
|
79
|
+
| --- | --- |
|
|
80
|
+
| `card-context --card/-c` | `item-context --item/-i` |
|
|
81
|
+
| `comment-card --card/-c` | `comment-item --item/-i` |
|
|
82
|
+
| `move-card --card/-c --list/-l` | `move-item --item/-i --status/-s` |
|
|
83
|
+
|
|
84
|
+
Scripts using the v1 names must be updated before upgrading; v2 does not keep
|
|
85
|
+
deprecated aliases.
|
|
86
|
+
|
|
87
|
+
## CI
|
|
88
|
+
|
|
89
|
+
GitHub Actions runs on pull requests and pushes to `main`.
|
|
90
|
+
|
|
91
|
+
- Tests run on Python 3.11, 3.12, and 3.13.
|
|
92
|
+
- The package build is validated with `python -m build`.
|
|
93
|
+
|
|
94
|
+
## Provider design documentation
|
|
95
|
+
|
|
96
|
+
- [Trello provider design](https://github.com/Nanielito/workforge/blob/main/docs/trello-provider-design.md)
|
|
97
|
+
- [GitHub Projects provider design](https://github.com/Nanielito/workforge/blob/main/docs/github-provider-design.md)
|
|
98
|
+
- [Jira Cloud provider design](https://github.com/Nanielito/workforge/blob/main/docs/jira-provider-design.md)
|
|
99
|
+
|
|
100
|
+
## Quick Start
|
|
101
|
+
|
|
102
|
+
Install WorkForge as an isolated command-line tool:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
uv tool install workforge
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Contributors should continue to use `pip install -e ".[dev]"`.
|
|
109
|
+
|
|
110
|
+
Create a project-local workspace:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
workforge init .workforge --name linkealo --provider trello --namespace linkealo/shopify
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Then add the printed entries to the host project's `.gitignore`:
|
|
117
|
+
|
|
118
|
+
```gitignore
|
|
119
|
+
.workforge/.env
|
|
120
|
+
.workforge/output/
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Preview requirements from a workspace inbox file:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
workforge preview workspaces/trello-example/inbox/sample-requirements.md --workspace workspaces/trello-example
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Save preview output next to the workspace:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
workforge preview workspaces/trello-example/inbox/sample-requirements.md --workspace workspaces/trello-example --save
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Create provider items:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
workforge create workspaces/trello-example/inbox/sample-requirements.md --workspace workspaces/trello-example --provider trello --execute
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Save created provider items:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
workforge create workspaces/trello-example/inbox/sample-requirements.md --workspace workspaces/trello-example --provider trello --execute --save
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Preview task-list updates for items matched by requirement title, then apply them:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
workforge update workspaces/trello-example/inbox/sample-requirements.md --workspace workspaces/trello-example
|
|
151
|
+
workforge update workspaces/trello-example/inbox/sample-requirements.md --workspace workspaces/trello-example --execute
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Tasks that keep the same title retain their completion state. Other provider fields are left unchanged.
|
|
155
|
+
|
|
156
|
+
Discover existing provider items by label and rebuild `items.json`:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
workforge discover workspaces/trello-example/inbox/sample-requirements.md --workspace workspaces/trello-example --provider trello --label shopify --save
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
GitHub discovery can also filter by assignee and configured Project status:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
workforge discover --workspace workspaces/github-projects-example --provider github --assignee @me --status todo --save
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Trello uses the same options for board members and configured logical lists:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
workforge discover --workspace workspaces/trello-example --provider trello --assignee @me --status doing --save
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Jira uses JQL and accepts logical labels, account IDs or `@me`, and configured
|
|
175
|
+
workflow statuses:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
workforge discover --workspace workspaces/jira-example --provider jira --assignee @me --status doing --save
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
After choosing an existing item, assign it to the authenticated provider user:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
workforge claim-item requirements.md --workspace workspaces/my-project --item "Fix login"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Use `--assignee <provider-user>` to assign it to someone else. Assignment remains optional when items are created.
|
|
188
|
+
|
|
189
|
+
Check provider item status from saved `items.json`:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
workforge status workspaces/trello-example/inbox/sample-requirements.md --workspace workspaces/trello-example --save
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Generate implementation context for an agent:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
workforge agent-context workspaces/trello-example/inbox/sample-requirements.md --workspace workspaces/trello-example --save
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Generate implementation context for one item:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
workforge item-context workspaces/trello-example/inbox/sample-requirements.md \
|
|
205
|
+
--workspace workspaces/trello-example \
|
|
206
|
+
--item "Fix UI" \
|
|
207
|
+
--save
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Mark a provider checklist task as complete:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
workforge complete-task workspaces/trello-example/inbox/sample-requirements.md \
|
|
214
|
+
--workspace workspaces/trello-example \
|
|
215
|
+
--item "Fix UI" \
|
|
216
|
+
--task "Add explicit customer data disclosure"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
`--item` accepts an item ID, exact title, or unique title substring. `--task`
|
|
220
|
+
accepts a checklist item ID, exact title, or unique title substring. By default,
|
|
221
|
+
WorkForge refreshes `status.json` and `agent-context.md` after completing the
|
|
222
|
+
task.
|
|
223
|
+
|
|
224
|
+
Add an implementation comment to a provider item:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
workforge comment-item workspaces/trello-example/inbox/sample-requirements.md \
|
|
228
|
+
--workspace workspaces/trello-example \
|
|
229
|
+
--item "Fix UI" \
|
|
230
|
+
--text "Started implementation from WorkForge agent context."
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Move a provider item to another list or workflow column:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
workforge move-item workspaces/trello-example/inbox/sample-requirements.md \
|
|
237
|
+
--workspace workspaces/trello-example \
|
|
238
|
+
--item "Fix UI" \
|
|
239
|
+
--status doing
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
For Trello, `--status` accepts a Trello list ID or a configured logical list name.
|
|
243
|
+
By default, WorkForge refreshes `status.json` and `agent-context.md` after
|
|
244
|
+
commenting or moving an item.
|
|
245
|
+
|
|
246
|
+
Check provider credentials and workspace configuration:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
workforge providers test --workspace workspaces/trello-example --provider trello
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Workspace Layout
|
|
253
|
+
|
|
254
|
+
```txt
|
|
255
|
+
<workspace>/
|
|
256
|
+
workforge.yaml
|
|
257
|
+
.env.example
|
|
258
|
+
inbox/
|
|
259
|
+
output/
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Workspace `.env` files are intentionally local-only. Commit `.env.example`, not
|
|
263
|
+
`.env`.
|
|
264
|
+
|
|
265
|
+
Environment variables are scoped to the selected workspace at runtime. WorkForge
|
|
266
|
+
reads `workspaces/<name>/.env` into an in-memory runtime object and passes those
|
|
267
|
+
values to the selected provider. It does not load workspace credentials into the
|
|
268
|
+
global process environment, which keeps simultaneous workspace runs isolated.
|
|
269
|
+
|
|
270
|
+
## Workspace Modes
|
|
271
|
+
|
|
272
|
+
WorkForge supports two workspace styles.
|
|
273
|
+
|
|
274
|
+
Shared example workspaces live inside this repository:
|
|
275
|
+
|
|
276
|
+
```txt
|
|
277
|
+
workspaces/trello-example/
|
|
278
|
+
workspaces/github-projects-example/
|
|
279
|
+
workspaces/jira-example/
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Project-local workspaces live inside the repository that the agent will modify:
|
|
283
|
+
|
|
284
|
+
```txt
|
|
285
|
+
some-project/
|
|
286
|
+
.workforge/
|
|
287
|
+
workforge.yaml
|
|
288
|
+
.env.example
|
|
289
|
+
inbox/
|
|
290
|
+
output/
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Project-local workspaces are recommended when generating agent context for an
|
|
294
|
+
implementation task because `agent-context.md`, `status.json`, and `items.json`
|
|
295
|
+
stay close to the code being changed.
|
|
296
|
+
|
|
297
|
+
## Jira Cloud
|
|
298
|
+
|
|
299
|
+
Create an Atlassian API token and keep the credentials in the selected
|
|
300
|
+
workspace's `.env`:
|
|
301
|
+
|
|
302
|
+
```dotenv
|
|
303
|
+
JIRA_EMAIL=you@example.com
|
|
304
|
+
JIRA_API_TOKEN=
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Configure one Jira Cloud project:
|
|
308
|
+
|
|
309
|
+
```yaml
|
|
310
|
+
providers:
|
|
311
|
+
jira:
|
|
312
|
+
site_url: https://example.atlassian.net
|
|
313
|
+
project_key: WF
|
|
314
|
+
issue_type: Task
|
|
315
|
+
labels:
|
|
316
|
+
feature: enhancement
|
|
317
|
+
versions:
|
|
318
|
+
v1: "10000"
|
|
319
|
+
status:
|
|
320
|
+
values:
|
|
321
|
+
todo: To Do
|
|
322
|
+
doing: In Progress
|
|
323
|
+
review: In Review
|
|
324
|
+
done: Done
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
`labels`, `versions`, and status names reference resources that already exist
|
|
328
|
+
in Jira. WorkForge does not create or administer Jira projects, boards,
|
|
329
|
+
workflows, versions, or labels.
|
|
330
|
+
|
|
331
|
+
Validate access before creating issues:
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
workforge providers test --workspace workspaces/jira-example --provider jira
|
|
335
|
+
workforge preview workspaces/jira-example/inbox/sample-requirements.md --workspace workspaces/jira-example
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
Use the same provider-neutral `create`, `status`, `complete-task`,
|
|
339
|
+
`comment-item`, `move-item`, and `discover` commands shown above. Jira stores
|
|
340
|
+
descriptions, comments, and managed tasks as Atlassian Document Format and
|
|
341
|
+
changes statuses through transitions available from the issue's current state.
|
|
342
|
+
|
|
343
|
+
## Input Format
|
|
344
|
+
|
|
345
|
+
The initial parser accepts Markdown sections with optional tasks:
|
|
346
|
+
|
|
347
|
+
```md
|
|
348
|
+
## Clarify customer data collection
|
|
349
|
+
|
|
350
|
+
Source: shopify_review
|
|
351
|
+
Priority: high
|
|
352
|
+
Milestone: release-2
|
|
353
|
+
Labels: compliance, required
|
|
354
|
+
|
|
355
|
+
Shopify asked us to explain what customer data is collected and why.
|
|
356
|
+
|
|
357
|
+
- Review current privacy copy
|
|
358
|
+
- Add explicit customer data disclosure
|
|
359
|
+
- Validate wording against Shopify review requirements
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
Each `##` section becomes one provider-neutral requirement.
|
|
363
|
+
|
|
364
|
+
## Output Files
|
|
365
|
+
|
|
366
|
+
Saved output is grouped by input filename under the selected workspace:
|
|
367
|
+
|
|
368
|
+
```txt
|
|
369
|
+
workspaces/<name>/
|
|
370
|
+
inbox/
|
|
371
|
+
shopify-feedback-app-review.md
|
|
372
|
+
output/
|
|
373
|
+
shopify-feedback-app-review/
|
|
374
|
+
preview.json
|
|
375
|
+
items.json
|
|
376
|
+
status.json
|
|
377
|
+
agent-context.md
|
|
378
|
+
items/
|
|
379
|
+
fix-ui-operativa-post-instalacion.md
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
`preview.json` contains the provider-neutral requirements parsed from the input.
|
|
383
|
+
`items.json` contains the items created by the selected provider, including IDs
|
|
384
|
+
and URLs when the provider returns them.
|
|
385
|
+
`status.json` contains the live provider status for saved items and tasks.
|
|
386
|
+
`agent-context.md` turns that status into implementation-ready context with
|
|
387
|
+
pending and completed tasks.
|
|
388
|
+
`items/*.md` contains focused implementation context for a single provider item.
|
|
389
|
+
|
|
390
|
+
## Discovering Existing Items
|
|
391
|
+
|
|
392
|
+
Project-local workspaces can stay ignored by Git. To rebuild local tracking
|
|
393
|
+
files after cloning a project, discover items from the planning provider:
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
workforge discover .workforge/inbox/shopify-feedback-app-review.md \
|
|
397
|
+
--workspace .workforge \
|
|
398
|
+
--provider trello \
|
|
399
|
+
--label shopify \
|
|
400
|
+
--save
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
This writes:
|
|
404
|
+
|
|
405
|
+
```txt
|
|
406
|
+
.workforge/output/shopify-feedback-app-review/items.json
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
Then refresh status and agent context:
|
|
410
|
+
|
|
411
|
+
```bash
|
|
412
|
+
workforge status .workforge/inbox/shopify-feedback-app-review.md --workspace .workforge --save
|
|
413
|
+
workforge agent-context .workforge/inbox/shopify-feedback-app-review.md --workspace .workforge --save
|
|
414
|
+
workforge item-context .workforge/inbox/shopify-feedback-app-review.md --workspace .workforge --item "Fix UI" --save
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
For Trello, `--label` accepts a configured logical label name, a Trello label
|
|
418
|
+
ID, or a Trello label name. Logical labels are read from `workforge.yaml`:
|
|
419
|
+
|
|
420
|
+
```yaml
|
|
421
|
+
providers:
|
|
422
|
+
trello:
|
|
423
|
+
list_id: "trello-list-id"
|
|
424
|
+
lists:
|
|
425
|
+
todo: "trello-todo-list-id"
|
|
426
|
+
doing: "trello-doing-list-id"
|
|
427
|
+
done: "trello-done-list-id"
|
|
428
|
+
labels:
|
|
429
|
+
shopify: "trello-label-id"
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
## GitHub Projects
|
|
433
|
+
|
|
434
|
+
The GitHub provider supports Projects v2 owned by a personal account. It creates
|
|
435
|
+
repository Issues, renders requirement tasks as GitHub checkboxes, and adds each
|
|
436
|
+
Issue to the configured Project.
|
|
437
|
+
|
|
438
|
+
```yaml
|
|
439
|
+
providers:
|
|
440
|
+
github:
|
|
441
|
+
owner: github-user
|
|
442
|
+
repository: repository-name
|
|
443
|
+
project_number: 1
|
|
444
|
+
labels:
|
|
445
|
+
feature: enhancement
|
|
446
|
+
milestones:
|
|
447
|
+
v2: 1
|
|
448
|
+
status:
|
|
449
|
+
field: Status
|
|
450
|
+
values:
|
|
451
|
+
todo: Todo
|
|
452
|
+
doing: In Progress
|
|
453
|
+
done: Done
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
Store a token with Issues and Projects read/write access in the workspace `.env`:
|
|
457
|
+
|
|
458
|
+
```dotenv
|
|
459
|
+
GITHUB_TOKEN=
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
Verify access without modifying GitHub:
|
|
463
|
+
|
|
464
|
+
```bash
|
|
465
|
+
workforge providers test --workspace .workforge --provider github
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
GitHub labels, milestones, and Status options must already exist. Logical labels,
|
|
469
|
+
milestones, and status aliases map through `workforge.yaml`; unmapped requirement
|
|
470
|
+
labels are ignored, while an unmapped milestone is rejected. Project workflows
|
|
471
|
+
may independently close an Issue when its Status moves to `Done`.
|
|
472
|
+
|
|
473
|
+
## Trello Labels
|
|
474
|
+
|
|
475
|
+
Labels in Markdown are logical names. To attach real Trello labels to cards,
|
|
476
|
+
map those logical names to Trello label IDs in the workspace config:
|
|
477
|
+
|
|
478
|
+
```yaml
|
|
479
|
+
providers:
|
|
480
|
+
trello:
|
|
481
|
+
list_id: "trello-list-id"
|
|
482
|
+
labels:
|
|
483
|
+
shopify-review: "trello-label-id"
|
|
484
|
+
compliance: "trello-label-id"
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
WorkForge sends mapped labels as `idLabels` when creating Trello cards. Unmapped
|
|
488
|
+
labels are ignored by the Trello provider.
|
|
489
|
+
|
|
490
|
+
WorkForge does not create Trello labels yet. Create or rename labels in Trello
|
|
491
|
+
first, then paste their IDs into `workforge.yaml`.
|
|
492
|
+
|
|
493
|
+
To create a label through the Trello API:
|
|
494
|
+
|
|
495
|
+
```bash
|
|
496
|
+
curl --request POST \
|
|
497
|
+
--url "https://api.trello.com/1/labels?name=shopify-review&color=blue&idBoard=TRELLO_BOARD_ID&key=$TRELLO_API_KEY&token=$TRELLO_API_TOKEN"
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
To rename an existing label:
|
|
501
|
+
|
|
502
|
+
```bash
|
|
503
|
+
curl --request PUT \
|
|
504
|
+
--url "https://api.trello.com/1/labels/TRELLO_LABEL_ID?name=shopify-review&key=$TRELLO_API_KEY&token=$TRELLO_API_TOKEN"
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
To list labels for a board:
|
|
508
|
+
|
|
509
|
+
```bash
|
|
510
|
+
curl "https://api.trello.com/1/boards/TRELLO_BOARD_ID/labels?fields=id,name,color&key=$TRELLO_API_KEY&token=$TRELLO_API_TOKEN"
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
## License
|
|
514
|
+
|
|
515
|
+
WorkForge is available under the [MIT License](https://github.com/Nanielito/workforge/blob/main/LICENSE).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
workforge/__init__.py,sha256=tGGaO9hyqtgHuzeTJjq8SaEXbfK7osEDvkTLm8Y80Ho,75
|
|
2
|
+
workforge/cli.py,sha256=Gww4v20B8G44j2aeOgkPfWz0J6dkbDBMr65WnCK9ngM,27337
|
|
3
|
+
workforge/config.py,sha256=NFTx38MFd4GsVI63byJnLDYBgQwIM9CeFzT_zQWEjIE,1363
|
|
4
|
+
workforge/models.py,sha256=x4CtwbvIncS_ziX1HYLadN-OhIR3t1PrgnBYaBPSIro,1073
|
|
5
|
+
workforge/core/__init__.py,sha256=z9gVNSsNJGLvqUErQDmDXLVPjMVMAMdod-NyEXPJtBc,31
|
|
6
|
+
workforge/core/parser.py,sha256=yJtGq_KXQw5eHnrvClyzGM-SPz5BNctUzE0PjTDUxcc,2856
|
|
7
|
+
workforge/providers/__init__.py,sha256=cxzR7JnFNBur4fYukhNRFRbIx7HnJLypk8I7ZGfkEMs,34
|
|
8
|
+
workforge/providers/base.py,sha256=ek-VLDlWsnPQIA11kroLk_VpQOlZp-pZ5jWgZqsSn4w,1482
|
|
9
|
+
workforge/providers/github.py,sha256=uG5QRkldKsuQKViUDm1R6UbepP7zka9dOz8bBHr5HIk,24252
|
|
10
|
+
workforge/providers/jira.py,sha256=Z-AtvNN1U16orn0nNnYxhHT_gHSLjRB8bWqCdKVkf6I,21580
|
|
11
|
+
workforge/providers/registry.py,sha256=E8cEcUNSKGvDNKV_VrR-GrfLSM2sUOxIQTGqL9lPXyQ,617
|
|
12
|
+
workforge/providers/trello.py,sha256=T8Jy3eukdB3IsQkGI4v9CnA2OITQKS-XDR91sw7ncrM,18047
|
|
13
|
+
workforge-2.4.1.dist-info/METADATA,sha256=ma4PsGZfJI-1-xWjxvqLzA7rvyZh7IcnxRCVWD8clFs,15752
|
|
14
|
+
workforge-2.4.1.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
15
|
+
workforge-2.4.1.dist-info/entry_points.txt,sha256=ZvVNYSG4Ho2jsYzxouUxsI5R_T-f-ZosxmnlwET1WXs,48
|
|
16
|
+
workforge-2.4.1.dist-info/licenses/LICENSE,sha256=0eBeIBG2hWATtWifYvMsg8JmmG9h5yLaDZkEtfXYnOk,1071
|
|
17
|
+
workforge-2.4.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Daniel Ramirez
|
|
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.
|