makea-cli 0.2.31__tar.gz → 0.2.33__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.
- {makea_cli-0.2.31 → makea_cli-0.2.33}/CHANGELOG.md +20 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/PKG-INFO +6 -2
- {makea_cli-0.2.31 → makea_cli-0.2.33}/README.md +5 -1
- makea_cli-0.2.33/makea_cli/__init__.py +1 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/api_client.py +40 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/__init__.py +2 -0
- makea_cli-0.2.33/makea_cli/commands/shiplog/cmd.py +243 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/supplier/cmd.py +6 -0
- makea_cli-0.2.33/makea_cli/commands/tasks/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/pyproject.toml +1 -1
- {makea_cli-0.2.31 → makea_cli-0.2.33}/tests/golden_manifest.json +343 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/uv.lock +1 -1
- makea_cli-0.2.31/makea_cli/__init__.py +0 -1
- {makea_cli-0.2.31 → makea_cli-0.2.33}/.claude/skills/create-supplier-profile/SKILL.md +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/.claude/skills/lark-cli-setup/SKILL.md +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/.claude/skills/link-supplier-user/SKILL.md +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/.claude/skills/makea-cli-setup/SKILL.md +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/.claude/skills/payment-revenue-report/SKILL.md +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/.claude/skills/supplier-user-id-migration/SKILL.md +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/.gitignore +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea-collection-upload/SKILL.md +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea-collection-upload/scripts/create_products.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/__main__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/auth_pkce.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/broker.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/_util.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/about/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/about/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/analytics/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/analytics/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/auth/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/auth/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/brand/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/brand/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/designer/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/designer/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/directory/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/directory/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/document/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/document/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/email/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/email/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/factory/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/factory/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/files/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/files/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/flags/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/flags/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/library/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/library/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/metrics/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/metrics/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/orders/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/orders/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/playbook/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/playbook/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/product/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/product/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/production/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/production/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/production/pricing_spec.py +0 -0
- {makea_cli-0.2.31/makea_cli/commands/shipping → makea_cli-0.2.33/makea_cli/commands/shiplog}/__init__.py +0 -0
- {makea_cli-0.2.31/makea_cli/commands/tasks → makea_cli-0.2.33/makea_cli/commands/shipping}/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/shipping/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/supplier/__init__.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/commands/tasks/cmd.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/companion.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/config.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/errors.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/file_reader.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/identity.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/main.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/output.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/posthog_client.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/makea_cli/registry.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/npm/makea-cli/README.md +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/npm/makea-cli/makea-cli.mjs +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/npm/makea-cli/package.json +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/tests/test_broker.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/tests/test_companion.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/tests/test_currency_conversion.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/tests/test_file_reader.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/tests/test_output_contract.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/tests/test_persona_commands.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/tests/test_pm_reads.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/tests/test_registry.py +0 -0
- {makea_cli-0.2.31 → makea_cli-0.2.33}/tests/test_supplier_scorecard.py +0 -0
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.33
|
|
4
|
+
|
|
5
|
+
The admin Ship log (app.makea.co/admin/ship-log): what went live, for the team.
|
|
6
|
+
|
|
7
|
+
- `admin create ship-log` records a ticket going live after a deploy, with a
|
|
8
|
+
plain title and summary, its commits, the Amplify job or EB version, an
|
|
9
|
+
optional `--watch` note and `--media` recordings or screenshots. The same
|
|
10
|
+
ticket with the same commits on the same day returns the existing entry.
|
|
11
|
+
- `admin list ship-log`, `admin update ship-log` (also attaches more media)
|
|
12
|
+
and `admin delete ship-log`.
|
|
13
|
+
|
|
14
|
+
## 0.2.32
|
|
15
|
+
|
|
16
|
+
Quote requests wait while the brand's files disagree (TECH-181).
|
|
17
|
+
|
|
18
|
+
- `admin create quote-request` gets `--release-anyway`. The server now holds
|
|
19
|
+
a request (409 FILES_DISAGREE, naming what disagrees) while a conflict
|
|
20
|
+
between the brand's files is open; settle it on the order's "Ready for
|
|
21
|
+
factories" tab, or pass the flag to send regardless.
|
|
22
|
+
|
|
3
23
|
## 0.2.31
|
|
4
24
|
|
|
5
25
|
Beeboo files what a brand hands it in the chat (TECH-150).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: makea-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.33
|
|
4
4
|
Summary: Makea admin CLI (browser login + Makea admin HTTP API)
|
|
5
5
|
Requires-Python: >=3.10
|
|
6
6
|
Requires-Dist: click<9,>=8.1
|
|
@@ -97,8 +97,9 @@ exit code:`0` 成功 · `2` 用法错 · `3` 未登录或身份与 persona 不
|
|
|
97
97
|
| `makea-cli admin create feature-flag` | write(ask) | `POST /admin/feature-flags` | add a flag (off unless --enabled). An existing key is refused. | — |
|
|
98
98
|
| `makea-cli admin create library-element` | write(auto) | `POST /admin/designer/{user_id}/library_components` | save a reusable component under a designer. Provide --section and --values (see admin get library-schema). | `library-create` |
|
|
99
99
|
| `makea-cli admin create product-note` | write(ask) | `POST /admin/products/{product_id}/notes` | write a note on a product. Without --internal it goes to the brand. | — |
|
|
100
|
-
| `makea-cli admin create quote-request` | write(ask) | `POST /admin/supplier/create_quote_request` | create/send a quote request to a supplier for a product (admin). | `create-quote-request` |
|
|
100
|
+
| `makea-cli admin create quote-request` | write(ask) | `POST /admin/supplier/create_quote_request` | create/send a quote request to a supplier for a product (admin). Held (409 FILES_DISAGREE) while the brand's files disagree; --release-anyway sends regardless. | `create-quote-request` |
|
|
101
101
|
| `makea-cli admin create quote-request-note` | write(ask) | `POST /admin/quote_requests/{quote_request_id}/reply_status_note` | write to the factory on a quote request (e.g. answer its clarification). --requirements-updated words the email as a change to the product's requirements. | — |
|
|
102
|
+
| `makea-cli admin create ship-log` | write(ask) | `POST /admin/ship-log/deploys` | record a ticket going live on the admin Ship log, after the deploy succeeded: plain title and summary for the team, commits, Amplify job or EB version, optional `--watch` note and `--media` recordings or screenshots. | — |
|
|
102
103
|
| `makea-cli admin create rule` | write(ask) | `POST /admin/playbook/{target}/rules` | add a rule to a person's (`--user`, user_id or email), a factory's (`--supplier`) or the platform-wide (`--global`, max 30 live) AI playbook; admin-authored, active unless --status. Refuses a repeat or a conflict unless --force. --reason required; --why / --proof are what the brand reads under it, --title its card name. | — |
|
|
103
104
|
| `makea-cli admin create shipping-fee` | write(ask) | `POST /admin/shipping_orders/{shipping_order_id}/fees/add` | add a fee (fixed amount or percentage) on top of the freight. | — |
|
|
104
105
|
| `makea-cli admin create shipping-option` | write(ask) | `POST /admin/shipping_orders/{shipping_order_id}/shipping-options` | add one freight quote (provider, speed, price, currency). | — |
|
|
@@ -107,6 +108,7 @@ exit code:`0` 成功 · `2` 用法错 · `3` 未登录或身份与 persona 不
|
|
|
107
108
|
| `makea-cli admin create supplier-link` | write(ask) | `POST /admin/product/link_supplier` | assign a factory to a product, with no price. A bare assignment is not a quote: no quote email goes out and nothing is priced. To quote, use admin submit quote on the quote request. | — |
|
|
108
109
|
| `makea-cli admin create user` | write(never) | `POST /admin/users/create` | register a user and confirm the Cognito account in one step (no verification email). Allowed --user-type values: "Fas… | `create-user` |
|
|
109
110
|
| `makea-cli admin delete about` | write(ask) | `DELETE /admin/about/{target}/{key}` | remove one About you line (`--user` / `--supplier`); it is not guessed again. --reason required. | — |
|
|
111
|
+
| `makea-cli admin delete ship-log` | write(ask) | `DELETE /admin/ship-log/deploys/{deploy_id}` | remove a Ship log entry recorded by mistake, with its recordings. | — |
|
|
110
112
|
| `makea-cli admin delete feature-flag` | write(ask) | `DELETE /admin/feature-flags/{key}` | remove a flag. Every check of it then reads false, so delete it only once the code that reads it is gone. | — |
|
|
111
113
|
| `makea-cli admin delete library-element` | write(never) | `DELETE /admin/designer/{user_id}/library_components/{component_id}` | remove a component from the designer's org library. | `library-delete` |
|
|
112
114
|
| `makea-cli admin delete rule` | write(ask) | `DELETE /admin/playbook/{target}/rules/{rule_id}` | remove a rule (`--user` / `--supplier` / `--global`): archived, with who and why kept on it (`update rule --status active` restores it). --reason required. | — |
|
|
@@ -158,6 +160,7 @@ exit code:`0` 成功 · `2` 用法错 · `3` 未登录或身份与 persona 不
|
|
|
158
160
|
| `makea-cli admin list supplier` | read | `GET /admin/supplier/get_all_suppliers` | list all suppliers (admin). | `list-suppliers` |
|
|
159
161
|
| `makea-cli admin list supplier-link` | read | `GET /admin/product/linked_suppliers/by_supplier/{supplier_id}` | direct backend query. | `get-supplier-links-by-supplier-id` |
|
|
160
162
|
| `makea-cli admin list task` | read | `GET /admin/tasks` | the Makea team's open tasks (Beeboo's notes, held lessons, sample price flags, PP samples, brand asks) by kind, with notes; `--user` adds that account's own `account.*` cards; `--wrong` lists the tasks marked wrong instead. | — |
|
|
163
|
+
| `makea-cli admin list ship-log` | read | `GET /admin/ship-log/deploys` | deploys recorded on the Ship log between two days (`--since`, `--until`), newest first. | — |
|
|
161
164
|
| `makea-cli admin list user` | read | `GET /admin/users` | list registered users (admin, optional pagination). | `list-users` |
|
|
162
165
|
| `makea-cli admin send email` | write(ask) | `POST /admin/email/send` | queue an HTML email (To required, Cc optional). From must be @makea.co; HTML from --html-file or stdin ('-'). Require… | `send-email` |
|
|
163
166
|
| `makea-cli admin set pricing-groups` | write(ask) | `POST /admin/production_orders/{id}/details/update` | Set a production order's pricing groups from a JSON file, copy them from the order's quote, or clear them (--clear) t… | `production-groups-set` |
|
|
@@ -181,6 +184,7 @@ exit code:`0` 成功 · `2` 用法错 · `3` 未登录或身份与 persona 不
|
|
|
181
184
|
| `makea-cli admin update shipping-order` | write(ask) | `PUT /admin/shipping_orders/{shipping_order_id}/status` | Change a shipment: --status (PUT .../status), tracking flags (POST .../tracking), --address (PUT .../shipping-address… | — |
|
|
182
185
|
| `makea-cli admin update supplier` | write(ask) | `PUT /admin/supplier/update_supplier` | update an existing supplier from a JSON file (admin). Run `makea-cli get-supplier-profile-schema` FIRST to get the fi… | `update-supplier` |
|
|
183
186
|
| `makea-cli admin update task` | write(ask) | `POST /admin/tasks/{task_id}/{done\|dismiss\|note}` | close a Makea task with a note: `--done` once handled (a held lesson's `--reason` goes to Beeboo's next reading), `--dismiss`, or `--dismiss --wrong` when it should never have been raised; `--note` alone adds a note and leaves it open. | — |
|
|
187
|
+
| `makea-cli admin update ship-log` | write(ask) | `PATCH /admin/ship-log/deploys/{deploy_id}` | fix a Ship log entry's title, summary or watch note; `--media` attaches more recordings. | — |
|
|
184
188
|
| `makea-cli admin update tech-spec` | write(ask) | `POST /admin/products/{id}/technical-specifications` | persist specs from a JSON file. | `save-product-tech-spec` |
|
|
185
189
|
| `makea-cli admin update tracking-status` | write(ask) | `POST /admin/tracking/carrier_status` | apply a carrier status looked up by hand (tracking-sweep skill) to one order: status, fan-out, delivered emails (--silent: state only). | — |
|
|
186
190
|
| `makea-cli admin update user` | write(ask) | `PUT /admin/user-profiles/{user_id}/update` | admin updates DynamoDB user profile fields and/or Cognito custom:userType. Allowed --user-type values: "Fashion brand… | `update-user-profile` |
|
|
@@ -81,8 +81,9 @@ exit code:`0` 成功 · `2` 用法错 · `3` 未登录或身份与 persona 不
|
|
|
81
81
|
| `makea-cli admin create feature-flag` | write(ask) | `POST /admin/feature-flags` | add a flag (off unless --enabled). An existing key is refused. | — |
|
|
82
82
|
| `makea-cli admin create library-element` | write(auto) | `POST /admin/designer/{user_id}/library_components` | save a reusable component under a designer. Provide --section and --values (see admin get library-schema). | `library-create` |
|
|
83
83
|
| `makea-cli admin create product-note` | write(ask) | `POST /admin/products/{product_id}/notes` | write a note on a product. Without --internal it goes to the brand. | — |
|
|
84
|
-
| `makea-cli admin create quote-request` | write(ask) | `POST /admin/supplier/create_quote_request` | create/send a quote request to a supplier for a product (admin). | `create-quote-request` |
|
|
84
|
+
| `makea-cli admin create quote-request` | write(ask) | `POST /admin/supplier/create_quote_request` | create/send a quote request to a supplier for a product (admin). Held (409 FILES_DISAGREE) while the brand's files disagree; --release-anyway sends regardless. | `create-quote-request` |
|
|
85
85
|
| `makea-cli admin create quote-request-note` | write(ask) | `POST /admin/quote_requests/{quote_request_id}/reply_status_note` | write to the factory on a quote request (e.g. answer its clarification). --requirements-updated words the email as a change to the product's requirements. | — |
|
|
86
|
+
| `makea-cli admin create ship-log` | write(ask) | `POST /admin/ship-log/deploys` | record a ticket going live on the admin Ship log, after the deploy succeeded: plain title and summary for the team, commits, Amplify job or EB version, optional `--watch` note and `--media` recordings or screenshots. | — |
|
|
86
87
|
| `makea-cli admin create rule` | write(ask) | `POST /admin/playbook/{target}/rules` | add a rule to a person's (`--user`, user_id or email), a factory's (`--supplier`) or the platform-wide (`--global`, max 30 live) AI playbook; admin-authored, active unless --status. Refuses a repeat or a conflict unless --force. --reason required; --why / --proof are what the brand reads under it, --title its card name. | — |
|
|
87
88
|
| `makea-cli admin create shipping-fee` | write(ask) | `POST /admin/shipping_orders/{shipping_order_id}/fees/add` | add a fee (fixed amount or percentage) on top of the freight. | — |
|
|
88
89
|
| `makea-cli admin create shipping-option` | write(ask) | `POST /admin/shipping_orders/{shipping_order_id}/shipping-options` | add one freight quote (provider, speed, price, currency). | — |
|
|
@@ -91,6 +92,7 @@ exit code:`0` 成功 · `2` 用法错 · `3` 未登录或身份与 persona 不
|
|
|
91
92
|
| `makea-cli admin create supplier-link` | write(ask) | `POST /admin/product/link_supplier` | assign a factory to a product, with no price. A bare assignment is not a quote: no quote email goes out and nothing is priced. To quote, use admin submit quote on the quote request. | — |
|
|
92
93
|
| `makea-cli admin create user` | write(never) | `POST /admin/users/create` | register a user and confirm the Cognito account in one step (no verification email). Allowed --user-type values: "Fas… | `create-user` |
|
|
93
94
|
| `makea-cli admin delete about` | write(ask) | `DELETE /admin/about/{target}/{key}` | remove one About you line (`--user` / `--supplier`); it is not guessed again. --reason required. | — |
|
|
95
|
+
| `makea-cli admin delete ship-log` | write(ask) | `DELETE /admin/ship-log/deploys/{deploy_id}` | remove a Ship log entry recorded by mistake, with its recordings. | — |
|
|
94
96
|
| `makea-cli admin delete feature-flag` | write(ask) | `DELETE /admin/feature-flags/{key}` | remove a flag. Every check of it then reads false, so delete it only once the code that reads it is gone. | — |
|
|
95
97
|
| `makea-cli admin delete library-element` | write(never) | `DELETE /admin/designer/{user_id}/library_components/{component_id}` | remove a component from the designer's org library. | `library-delete` |
|
|
96
98
|
| `makea-cli admin delete rule` | write(ask) | `DELETE /admin/playbook/{target}/rules/{rule_id}` | remove a rule (`--user` / `--supplier` / `--global`): archived, with who and why kept on it (`update rule --status active` restores it). --reason required. | — |
|
|
@@ -142,6 +144,7 @@ exit code:`0` 成功 · `2` 用法错 · `3` 未登录或身份与 persona 不
|
|
|
142
144
|
| `makea-cli admin list supplier` | read | `GET /admin/supplier/get_all_suppliers` | list all suppliers (admin). | `list-suppliers` |
|
|
143
145
|
| `makea-cli admin list supplier-link` | read | `GET /admin/product/linked_suppliers/by_supplier/{supplier_id}` | direct backend query. | `get-supplier-links-by-supplier-id` |
|
|
144
146
|
| `makea-cli admin list task` | read | `GET /admin/tasks` | the Makea team's open tasks (Beeboo's notes, held lessons, sample price flags, PP samples, brand asks) by kind, with notes; `--user` adds that account's own `account.*` cards; `--wrong` lists the tasks marked wrong instead. | — |
|
|
147
|
+
| `makea-cli admin list ship-log` | read | `GET /admin/ship-log/deploys` | deploys recorded on the Ship log between two days (`--since`, `--until`), newest first. | — |
|
|
145
148
|
| `makea-cli admin list user` | read | `GET /admin/users` | list registered users (admin, optional pagination). | `list-users` |
|
|
146
149
|
| `makea-cli admin send email` | write(ask) | `POST /admin/email/send` | queue an HTML email (To required, Cc optional). From must be @makea.co; HTML from --html-file or stdin ('-'). Require… | `send-email` |
|
|
147
150
|
| `makea-cli admin set pricing-groups` | write(ask) | `POST /admin/production_orders/{id}/details/update` | Set a production order's pricing groups from a JSON file, copy them from the order's quote, or clear them (--clear) t… | `production-groups-set` |
|
|
@@ -165,6 +168,7 @@ exit code:`0` 成功 · `2` 用法错 · `3` 未登录或身份与 persona 不
|
|
|
165
168
|
| `makea-cli admin update shipping-order` | write(ask) | `PUT /admin/shipping_orders/{shipping_order_id}/status` | Change a shipment: --status (PUT .../status), tracking flags (POST .../tracking), --address (PUT .../shipping-address… | — |
|
|
166
169
|
| `makea-cli admin update supplier` | write(ask) | `PUT /admin/supplier/update_supplier` | update an existing supplier from a JSON file (admin). Run `makea-cli get-supplier-profile-schema` FIRST to get the fi… | `update-supplier` |
|
|
167
170
|
| `makea-cli admin update task` | write(ask) | `POST /admin/tasks/{task_id}/{done\|dismiss\|note}` | close a Makea task with a note: `--done` once handled (a held lesson's `--reason` goes to Beeboo's next reading), `--dismiss`, or `--dismiss --wrong` when it should never have been raised; `--note` alone adds a note and leaves it open. | — |
|
|
171
|
+
| `makea-cli admin update ship-log` | write(ask) | `PATCH /admin/ship-log/deploys/{deploy_id}` | fix a Ship log entry's title, summary or watch note; `--media` attaches more recordings. | — |
|
|
168
172
|
| `makea-cli admin update tech-spec` | write(ask) | `POST /admin/products/{id}/technical-specifications` | persist specs from a JSON file. | `save-product-tech-spec` |
|
|
169
173
|
| `makea-cli admin update tracking-status` | write(ask) | `POST /admin/tracking/carrier_status` | apply a carrier status looked up by hand (tracking-sweep skill) to one order: status, fan-out, delivered emails (--silent: state only). | — |
|
|
170
174
|
| `makea-cli admin update user` | write(ask) | `PUT /admin/user-profiles/{user_id}/update` | admin updates DynamoDB user profile fields and/or Cognito custom:userType. Allowed --user-type values: "Fashion brand… | `update-user-profile` |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.33"
|
|
@@ -418,9 +418,13 @@ def create_quote_request(
|
|
|
418
418
|
message: str | None = None,
|
|
419
419
|
quote_type: str = "SAMPLING",
|
|
420
420
|
due_date: str | None = None,
|
|
421
|
+
release_anyway: bool = False,
|
|
421
422
|
) -> Any:
|
|
422
423
|
"""
|
|
423
424
|
POST /admin/supplier/create_quote_request — admin creates a quote request for a supplier.
|
|
425
|
+
|
|
426
|
+
The server holds the request (409 FILES_DISAGREE) while the brand's files
|
|
427
|
+
disagree (TECH-181); ``release_anyway`` sends it regardless.
|
|
424
428
|
"""
|
|
425
429
|
body: dict[str, Any] = {
|
|
426
430
|
"supplier_id": supplier_id,
|
|
@@ -431,6 +435,8 @@ def create_quote_request(
|
|
|
431
435
|
body["message"] = message
|
|
432
436
|
if due_date is not None:
|
|
433
437
|
body["due_date"] = due_date
|
|
438
|
+
if release_anyway:
|
|
439
|
+
body["release_anyway"] = True
|
|
434
440
|
return post_json("/admin/supplier/create_quote_request", body)
|
|
435
441
|
|
|
436
442
|
|
|
@@ -1220,6 +1226,40 @@ def admin_close_task(task_id: str, verb: str, body: dict[str, Any]) -> Any:
|
|
|
1220
1226
|
return post_json(f"/admin/tasks/{quote(task_id, safe='')}/{verb}", body)
|
|
1221
1227
|
|
|
1222
1228
|
|
|
1229
|
+
# --- admin: ship log (what went live, for /admin/ship-log) -------------------------
|
|
1230
|
+
|
|
1231
|
+
|
|
1232
|
+
def admin_create_ship_log(body: dict[str, Any]) -> Any:
|
|
1233
|
+
"""POST /admin/ship-log/deploys — {ticket, title, summary?, commits{backend,frontend,
|
|
1234
|
+
cli,miniprogram}, amplify_job?, eb_version?, watch?, deployed_at?}."""
|
|
1235
|
+
return post_json("/admin/ship-log/deploys", body)
|
|
1236
|
+
|
|
1237
|
+
|
|
1238
|
+
def admin_list_ship_log(start: str, end: str) -> Any:
|
|
1239
|
+
"""GET /admin/ship-log/deploys?start=&end= — naive-UTC ISO bounds, newest first."""
|
|
1240
|
+
return get_json("/admin/ship-log/deploys", params={"start": start, "end": end})
|
|
1241
|
+
|
|
1242
|
+
|
|
1243
|
+
def admin_update_ship_log(deploy_id: str, body: dict[str, Any]) -> Any:
|
|
1244
|
+
"""PATCH /admin/ship-log/deploys/{deploy_id} — {title?, summary?, watch?}."""
|
|
1245
|
+
return patch_json(f"/admin/ship-log/deploys/{quote(deploy_id, safe='')}", body)
|
|
1246
|
+
|
|
1247
|
+
|
|
1248
|
+
def admin_delete_ship_log(deploy_id: str) -> Any:
|
|
1249
|
+
"""DELETE /admin/ship-log/deploys/{deploy_id} — the entry and its recordings."""
|
|
1250
|
+
return delete_json(f"/admin/ship-log/deploys/{quote(deploy_id, safe='')}")
|
|
1251
|
+
|
|
1252
|
+
|
|
1253
|
+
def admin_add_ship_log_media(deploy_id: str, file_path: Path, title: str = "") -> Any:
|
|
1254
|
+
"""POST /admin/ship-log/deploys/{deploy_id}/media — one recording or screenshot."""
|
|
1255
|
+
return post_multipart_with_file(
|
|
1256
|
+
f"/admin/ship-log/deploys/{quote(deploy_id, safe='')}/media",
|
|
1257
|
+
file_path=file_path,
|
|
1258
|
+
form_fields={"title": title} if title else None,
|
|
1259
|
+
timeout=600.0,
|
|
1260
|
+
)
|
|
1261
|
+
|
|
1262
|
+
|
|
1223
1263
|
# --- admin: one account's Knowledge > About you -----------------------------------
|
|
1224
1264
|
# A person (user_id or email; a supplier account's person is their factory's page)
|
|
1225
1265
|
# or one factory by supplier id. Every write but refresh carries a reason.
|
|
@@ -19,6 +19,7 @@ from makea_cli.commands.orders.cmd import register as register_orders
|
|
|
19
19
|
from makea_cli.commands.playbook.cmd import register as register_playbook
|
|
20
20
|
from makea_cli.commands.product.cmd import register as register_product
|
|
21
21
|
from makea_cli.commands.production.cmd import register as register_production
|
|
22
|
+
from makea_cli.commands.shiplog.cmd import register as register_shiplog
|
|
22
23
|
from makea_cli.commands.shipping.cmd import register as register_shipping
|
|
23
24
|
from makea_cli.commands.supplier.cmd import register as register_supplier
|
|
24
25
|
from makea_cli.commands.tasks.cmd import register as register_tasks
|
|
@@ -45,3 +46,4 @@ def register_all(app: typer.Typer) -> None:
|
|
|
45
46
|
register_about(app)
|
|
46
47
|
register_tasks(app)
|
|
47
48
|
register_flags(app)
|
|
49
|
+
register_shiplog(app)
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"""Admin commands for the ship log (app.makea.co/admin/ship-log).
|
|
2
|
+
|
|
3
|
+
A ship log entry is one ticket going live: the ticket, a plain title and
|
|
4
|
+
one-line summary written for the team (not for engineers), the commits behind
|
|
5
|
+
it, the Amplify job or EB version, an optional watch note (something to do
|
|
6
|
+
after it is live), and recordings that show it working. Record one at the end
|
|
7
|
+
of every deploy; the page writes the team's standup from these entries.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from datetime import date, timedelta
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
import typer
|
|
17
|
+
from rich.console import Console
|
|
18
|
+
|
|
19
|
+
from makea_cli import api_client
|
|
20
|
+
from makea_cli.commands._util import print_json_or_exit
|
|
21
|
+
from makea_cli.registry import command
|
|
22
|
+
|
|
23
|
+
console = Console()
|
|
24
|
+
|
|
25
|
+
_EPILOG = """
|
|
26
|
+
Examples
|
|
27
|
+
makea-cli admin create ship-log --ticket TECH-218 \\
|
|
28
|
+
--title "Notifications open the thing they are about" \\
|
|
29
|
+
--summary "658 of 1,413 notifications used to land on Styles." \\
|
|
30
|
+
--backend 86905496 --frontend bb550dd1 --amplify-job 1714 \\
|
|
31
|
+
--watch "Run the prod backfill" \\
|
|
32
|
+
--media ~/Desktop/tech218.mp4::"Quote notification lands on the quote"
|
|
33
|
+
makea-cli admin list ship-log --since 2026-11-09
|
|
34
|
+
makea-cli admin update ship-log 20261111T134000-ab12cd --media shot.png
|
|
35
|
+
makea-cli admin delete ship-log 20261111T134000-ab12cd
|
|
36
|
+
""".strip()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _media_option() -> Any:
|
|
40
|
+
return typer.Option(
|
|
41
|
+
None,
|
|
42
|
+
"--media",
|
|
43
|
+
"-m",
|
|
44
|
+
help="Recording or screenshot to attach, PATH or PATH::Title. Repeatable.",
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _shas(values: list[str] | None) -> list[str]:
|
|
49
|
+
return [s.strip() for v in values or [] for s in v.split(",") if s.strip()]
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _parse_media(values: list[str] | None) -> list[tuple[Path, str]]:
|
|
53
|
+
out = []
|
|
54
|
+
for raw in values or []:
|
|
55
|
+
path_s, _, title = raw.partition("::")
|
|
56
|
+
path = Path(path_s).expanduser()
|
|
57
|
+
if not path.is_file():
|
|
58
|
+
raise typer.BadParameter(f"--media: no file at {path}")
|
|
59
|
+
out.append((path, title.strip()))
|
|
60
|
+
return out
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _upload(deploy_id: str, media: list[tuple[Path, str]]) -> list[Any]:
|
|
64
|
+
return [api_client.admin_add_ship_log_media(deploy_id, path, title) for path, title in media]
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def register(app: typer.Typer) -> None:
|
|
68
|
+
@command(
|
|
69
|
+
app,
|
|
70
|
+
"admin",
|
|
71
|
+
"create",
|
|
72
|
+
"ship-log",
|
|
73
|
+
api="POST /admin/ship-log/deploys",
|
|
74
|
+
side_effects=[
|
|
75
|
+
"the deploy appears on the admin Ship log for the whole Makea team",
|
|
76
|
+
"the next person to open that day's standup gets it rewritten to include it",
|
|
77
|
+
"with --media, each file is uploaded to S3 and shown on the entry",
|
|
78
|
+
],
|
|
79
|
+
approval="ask",
|
|
80
|
+
reversible=True,
|
|
81
|
+
idempotent=True,
|
|
82
|
+
help=(
|
|
83
|
+
"POST /admin/ship-log/deploys — record one ticket going live, after the deploy "
|
|
84
|
+
"succeeded. Title and summary are for the team: what changed for brands, "
|
|
85
|
+
"factories or Makea, not how. The same ticket with the same commits on the "
|
|
86
|
+
"same day returns the existing entry. --media uploads recordings (mp4, webm, "
|
|
87
|
+
"mov) or screenshots (png, jpeg, webp, gif), up to 150 MB each."
|
|
88
|
+
),
|
|
89
|
+
epilog=_EPILOG,
|
|
90
|
+
)
|
|
91
|
+
def create_ship_log(
|
|
92
|
+
ticket: str = typer.Option(..., "--ticket", "-t", help="Jira key, e.g. TECH-218."),
|
|
93
|
+
title: str = typer.Option(..., "--title", help="What changed, in plain words."),
|
|
94
|
+
summary: str = typer.Option("", "--summary", "-s", help="One or two sentences more."),
|
|
95
|
+
backend: list[str] = typer.Option(None, "--backend", help="garmentby-service commit(s)."),
|
|
96
|
+
frontend: list[str] = typer.Option(None, "--frontend", help="Frontend commit(s)."),
|
|
97
|
+
cli: list[str] = typer.Option(None, "--cli", help="makea-cli commit(s)."),
|
|
98
|
+
miniprogram: list[str] = typer.Option(
|
|
99
|
+
None, "--miniprogram", help="Mini program commit(s)."
|
|
100
|
+
),
|
|
101
|
+
amplify_job: str = typer.Option("", "--amplify-job", help="Amplify job number."),
|
|
102
|
+
eb_version: str = typer.Option("", "--eb-version", help="Elastic Beanstalk version label."),
|
|
103
|
+
watch: str = typer.Option("", "--watch", help="Something to do after it is live."),
|
|
104
|
+
deployed_at: str | None = typer.Option(
|
|
105
|
+
None, "--deployed-at", help="When it went live, ISO UTC. Default: now."
|
|
106
|
+
),
|
|
107
|
+
media: list[str] = _media_option(),
|
|
108
|
+
) -> None:
|
|
109
|
+
"""Record a deploy on the admin Ship log."""
|
|
110
|
+
commits = {
|
|
111
|
+
side: shas
|
|
112
|
+
for side, shas in (
|
|
113
|
+
("backend", _shas(backend)),
|
|
114
|
+
("frontend", _shas(frontend)),
|
|
115
|
+
("cli", _shas(cli)),
|
|
116
|
+
("miniprogram", _shas(miniprogram)),
|
|
117
|
+
)
|
|
118
|
+
if shas
|
|
119
|
+
}
|
|
120
|
+
if not commits:
|
|
121
|
+
raise typer.BadParameter(
|
|
122
|
+
"pass at least one of --backend, --frontend, --cli, --miniprogram"
|
|
123
|
+
)
|
|
124
|
+
files = _parse_media(media)
|
|
125
|
+
body: dict[str, Any] = {
|
|
126
|
+
"ticket": ticket,
|
|
127
|
+
"title": title,
|
|
128
|
+
"summary": summary,
|
|
129
|
+
"commits": commits,
|
|
130
|
+
"amplify_job": amplify_job,
|
|
131
|
+
"eb_version": eb_version,
|
|
132
|
+
"watch": watch,
|
|
133
|
+
}
|
|
134
|
+
if deployed_at:
|
|
135
|
+
body["deployed_at"] = deployed_at
|
|
136
|
+
|
|
137
|
+
def run() -> Any:
|
|
138
|
+
result = api_client.admin_create_ship_log(body)
|
|
139
|
+
deploy = (result or {}).get("deploy") if isinstance(result, dict) else None
|
|
140
|
+
if files and deploy and deploy.get("deploy_id"):
|
|
141
|
+
result["media"] = _upload(deploy["deploy_id"], files)
|
|
142
|
+
return result
|
|
143
|
+
|
|
144
|
+
print_json_or_exit(console, run)
|
|
145
|
+
|
|
146
|
+
@command(
|
|
147
|
+
app,
|
|
148
|
+
"admin",
|
|
149
|
+
"list",
|
|
150
|
+
"ship-log",
|
|
151
|
+
api="GET /admin/ship-log/deploys",
|
|
152
|
+
help=(
|
|
153
|
+
"GET /admin/ship-log/deploys — deploys between two UTC days, newest first: "
|
|
154
|
+
"deploy_id, ticket, title, summary, watch, commits, amplify_job, deployed_at, media."
|
|
155
|
+
),
|
|
156
|
+
epilog=_EPILOG,
|
|
157
|
+
)
|
|
158
|
+
def list_ship_log(
|
|
159
|
+
since: str | None = typer.Option(
|
|
160
|
+
None, "--since", help="First day, YYYY-MM-DD. Default: 6 days ago."
|
|
161
|
+
),
|
|
162
|
+
until: str | None = typer.Option(
|
|
163
|
+
None, "--until", help="Last day, YYYY-MM-DD. Default: today."
|
|
164
|
+
),
|
|
165
|
+
) -> None:
|
|
166
|
+
"""List recorded deploys."""
|
|
167
|
+
try:
|
|
168
|
+
end = date.fromisoformat(until) if until else date.today()
|
|
169
|
+
start = date.fromisoformat(since) if since else end - timedelta(days=6)
|
|
170
|
+
except ValueError as exc:
|
|
171
|
+
raise typer.BadParameter("dates are YYYY-MM-DD") from exc
|
|
172
|
+
print_json_or_exit(
|
|
173
|
+
console,
|
|
174
|
+
lambda: api_client.admin_list_ship_log(f"{start}T00:00:00", f"{end}T23:59:59"),
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
@command(
|
|
178
|
+
app,
|
|
179
|
+
"admin",
|
|
180
|
+
"update",
|
|
181
|
+
"ship-log",
|
|
182
|
+
api="PATCH /admin/ship-log/deploys/{deploy_id}",
|
|
183
|
+
side_effects=[
|
|
184
|
+
"the entry changes on the admin Ship log",
|
|
185
|
+
"a changed title or summary gets that day's standup rewritten on its next view",
|
|
186
|
+
"with --media, each file is uploaded to S3 and shown on the entry",
|
|
187
|
+
],
|
|
188
|
+
approval="ask",
|
|
189
|
+
reversible=True,
|
|
190
|
+
idempotent=False,
|
|
191
|
+
help=(
|
|
192
|
+
"PATCH /admin/ship-log/deploys/{deploy_id} — fix an entry's title, summary or "
|
|
193
|
+
"watch note (pass --watch '' to clear it); --media attaches more recordings."
|
|
194
|
+
),
|
|
195
|
+
epilog=_EPILOG,
|
|
196
|
+
)
|
|
197
|
+
def update_ship_log(
|
|
198
|
+
deploy_id: str = typer.Argument(..., help="deploy_id (from list ship-log)."),
|
|
199
|
+
title: str | None = typer.Option(None, "--title"),
|
|
200
|
+
summary: str | None = typer.Option(None, "--summary", "-s"),
|
|
201
|
+
watch: str | None = typer.Option(None, "--watch"),
|
|
202
|
+
media: list[str] = _media_option(),
|
|
203
|
+
) -> None:
|
|
204
|
+
"""Fix a ship log entry or attach recordings."""
|
|
205
|
+
body = {
|
|
206
|
+
k: v
|
|
207
|
+
for k, v in (("title", title), ("summary", summary), ("watch", watch))
|
|
208
|
+
if v is not None
|
|
209
|
+
}
|
|
210
|
+
files = _parse_media(media)
|
|
211
|
+
if not body and not files:
|
|
212
|
+
raise typer.BadParameter(
|
|
213
|
+
"nothing to change: pass --title, --summary, --watch or --media"
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
def run() -> Any:
|
|
217
|
+
result: dict[str, Any] = {}
|
|
218
|
+
if body:
|
|
219
|
+
result = api_client.admin_update_ship_log(deploy_id, body)
|
|
220
|
+
if files:
|
|
221
|
+
result["media"] = _upload(deploy_id, files)
|
|
222
|
+
return result
|
|
223
|
+
|
|
224
|
+
print_json_or_exit(console, run)
|
|
225
|
+
|
|
226
|
+
@command(
|
|
227
|
+
app,
|
|
228
|
+
"admin",
|
|
229
|
+
"delete",
|
|
230
|
+
"ship-log",
|
|
231
|
+
api="DELETE /admin/ship-log/deploys/{deploy_id}",
|
|
232
|
+
side_effects=["the entry and its recordings are removed for the whole team"],
|
|
233
|
+
approval="ask",
|
|
234
|
+
reversible=False,
|
|
235
|
+
idempotent=True,
|
|
236
|
+
help="DELETE /admin/ship-log/deploys/{deploy_id} — remove an entry recorded by mistake.",
|
|
237
|
+
epilog=_EPILOG,
|
|
238
|
+
)
|
|
239
|
+
def delete_ship_log(
|
|
240
|
+
deploy_id: str = typer.Argument(..., help="deploy_id (from list ship-log)."),
|
|
241
|
+
) -> None:
|
|
242
|
+
"""Remove a ship log entry and its recordings."""
|
|
243
|
+
print_json_or_exit(console, lambda: api_client.admin_delete_ship_log(deploy_id))
|
|
@@ -367,6 +367,11 @@ def register(app: typer.Typer) -> None:
|
|
|
367
367
|
"--due-date",
|
|
368
368
|
help="due_date: optional due date in YYYY-MM-DD format.",
|
|
369
369
|
),
|
|
370
|
+
release_anyway: bool = typer.Option(
|
|
371
|
+
False,
|
|
372
|
+
"--release-anyway",
|
|
373
|
+
help="Send even though the brand's files disagree (the server holds the request otherwise, FILES_DISAGREE).",
|
|
374
|
+
),
|
|
370
375
|
) -> None:
|
|
371
376
|
"""
|
|
372
377
|
Create/send a quote request as admin.
|
|
@@ -383,6 +388,7 @@ def register(app: typer.Typer) -> None:
|
|
|
383
388
|
message=message,
|
|
384
389
|
quote_type=qt,
|
|
385
390
|
due_date=due_date,
|
|
391
|
+
release_anyway=release_anyway,
|
|
386
392
|
),
|
|
387
393
|
)
|
|
388
394
|
|
|
File without changes
|
|
@@ -457,6 +457,18 @@
|
|
|
457
457
|
"multiple": false,
|
|
458
458
|
"default": null,
|
|
459
459
|
"help": "due_date: optional due date in YYYY-MM-DD format."
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
"name": "release_anyway",
|
|
463
|
+
"kind": "option",
|
|
464
|
+
"opts": [
|
|
465
|
+
"--release-anyway"
|
|
466
|
+
],
|
|
467
|
+
"type": "flag",
|
|
468
|
+
"required": false,
|
|
469
|
+
"multiple": false,
|
|
470
|
+
"default": false,
|
|
471
|
+
"help": "Send even though the brand's files disagree (the server holds the request otherwise, FILES_DISAGREE)."
|
|
460
472
|
}
|
|
461
473
|
]
|
|
462
474
|
},
|
|
@@ -746,6 +758,176 @@
|
|
|
746
758
|
}
|
|
747
759
|
]
|
|
748
760
|
},
|
|
761
|
+
{
|
|
762
|
+
"name": "admin create ship-log",
|
|
763
|
+
"persona": "admin",
|
|
764
|
+
"verb": "create",
|
|
765
|
+
"noun": "ship-log",
|
|
766
|
+
"access": "write",
|
|
767
|
+
"api": "POST /admin/ship-log/deploys",
|
|
768
|
+
"external": null,
|
|
769
|
+
"side_effects": [
|
|
770
|
+
"the deploy appears on the admin Ship log for the whole Makea team",
|
|
771
|
+
"the next person to open that day's standup gets it rewritten to include it",
|
|
772
|
+
"with --media, each file is uploaded to S3 and shown on the entry"
|
|
773
|
+
],
|
|
774
|
+
"approval": "ask",
|
|
775
|
+
"reversible": true,
|
|
776
|
+
"idempotent": true,
|
|
777
|
+
"limit": null,
|
|
778
|
+
"legacy": [],
|
|
779
|
+
"help": "POST /admin/ship-log/deploys — record one ticket going live, after the deploy succeeded. Title and summary are for the team: what changed for brands, factories or Makea, not how. The same ticket with the same commits on the same day returns the existing entry. --media uploads recordings (mp4, webm, mov) or screenshots (png, jpeg, webp, gif), up to 150 MB each.",
|
|
780
|
+
"function": "makea_cli.commands.shiplog.cmd.register.<locals>.create_ship_log",
|
|
781
|
+
"flags": [
|
|
782
|
+
{
|
|
783
|
+
"name": "ticket",
|
|
784
|
+
"kind": "option",
|
|
785
|
+
"opts": [
|
|
786
|
+
"--ticket",
|
|
787
|
+
"-t"
|
|
788
|
+
],
|
|
789
|
+
"type": "text",
|
|
790
|
+
"required": true,
|
|
791
|
+
"multiple": false,
|
|
792
|
+
"default": null,
|
|
793
|
+
"help": "Jira key, e.g. TECH-218."
|
|
794
|
+
},
|
|
795
|
+
{
|
|
796
|
+
"name": "title",
|
|
797
|
+
"kind": "option",
|
|
798
|
+
"opts": [
|
|
799
|
+
"--title"
|
|
800
|
+
],
|
|
801
|
+
"type": "text",
|
|
802
|
+
"required": true,
|
|
803
|
+
"multiple": false,
|
|
804
|
+
"default": null,
|
|
805
|
+
"help": "What changed, in plain words."
|
|
806
|
+
},
|
|
807
|
+
{
|
|
808
|
+
"name": "summary",
|
|
809
|
+
"kind": "option",
|
|
810
|
+
"opts": [
|
|
811
|
+
"--summary",
|
|
812
|
+
"-s"
|
|
813
|
+
],
|
|
814
|
+
"type": "text",
|
|
815
|
+
"required": false,
|
|
816
|
+
"multiple": false,
|
|
817
|
+
"default": "",
|
|
818
|
+
"help": "One or two sentences more."
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
"name": "backend",
|
|
822
|
+
"kind": "option",
|
|
823
|
+
"opts": [
|
|
824
|
+
"--backend"
|
|
825
|
+
],
|
|
826
|
+
"type": "text",
|
|
827
|
+
"required": false,
|
|
828
|
+
"multiple": true,
|
|
829
|
+
"default": null,
|
|
830
|
+
"help": "garmentby-service commit(s)."
|
|
831
|
+
},
|
|
832
|
+
{
|
|
833
|
+
"name": "frontend",
|
|
834
|
+
"kind": "option",
|
|
835
|
+
"opts": [
|
|
836
|
+
"--frontend"
|
|
837
|
+
],
|
|
838
|
+
"type": "text",
|
|
839
|
+
"required": false,
|
|
840
|
+
"multiple": true,
|
|
841
|
+
"default": null,
|
|
842
|
+
"help": "Frontend commit(s)."
|
|
843
|
+
},
|
|
844
|
+
{
|
|
845
|
+
"name": "cli",
|
|
846
|
+
"kind": "option",
|
|
847
|
+
"opts": [
|
|
848
|
+
"--cli"
|
|
849
|
+
],
|
|
850
|
+
"type": "text",
|
|
851
|
+
"required": false,
|
|
852
|
+
"multiple": true,
|
|
853
|
+
"default": null,
|
|
854
|
+
"help": "makea-cli commit(s)."
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
"name": "miniprogram",
|
|
858
|
+
"kind": "option",
|
|
859
|
+
"opts": [
|
|
860
|
+
"--miniprogram"
|
|
861
|
+
],
|
|
862
|
+
"type": "text",
|
|
863
|
+
"required": false,
|
|
864
|
+
"multiple": true,
|
|
865
|
+
"default": null,
|
|
866
|
+
"help": "Mini program commit(s)."
|
|
867
|
+
},
|
|
868
|
+
{
|
|
869
|
+
"name": "amplify_job",
|
|
870
|
+
"kind": "option",
|
|
871
|
+
"opts": [
|
|
872
|
+
"--amplify-job"
|
|
873
|
+
],
|
|
874
|
+
"type": "text",
|
|
875
|
+
"required": false,
|
|
876
|
+
"multiple": false,
|
|
877
|
+
"default": "",
|
|
878
|
+
"help": "Amplify job number."
|
|
879
|
+
},
|
|
880
|
+
{
|
|
881
|
+
"name": "eb_version",
|
|
882
|
+
"kind": "option",
|
|
883
|
+
"opts": [
|
|
884
|
+
"--eb-version"
|
|
885
|
+
],
|
|
886
|
+
"type": "text",
|
|
887
|
+
"required": false,
|
|
888
|
+
"multiple": false,
|
|
889
|
+
"default": "",
|
|
890
|
+
"help": "Elastic Beanstalk version label."
|
|
891
|
+
},
|
|
892
|
+
{
|
|
893
|
+
"name": "watch",
|
|
894
|
+
"kind": "option",
|
|
895
|
+
"opts": [
|
|
896
|
+
"--watch"
|
|
897
|
+
],
|
|
898
|
+
"type": "text",
|
|
899
|
+
"required": false,
|
|
900
|
+
"multiple": false,
|
|
901
|
+
"default": "",
|
|
902
|
+
"help": "Something to do after it is live."
|
|
903
|
+
},
|
|
904
|
+
{
|
|
905
|
+
"name": "deployed_at",
|
|
906
|
+
"kind": "option",
|
|
907
|
+
"opts": [
|
|
908
|
+
"--deployed-at"
|
|
909
|
+
],
|
|
910
|
+
"type": "text",
|
|
911
|
+
"required": false,
|
|
912
|
+
"multiple": false,
|
|
913
|
+
"default": null,
|
|
914
|
+
"help": "When it went live, ISO UTC. Default: now."
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
"name": "media",
|
|
918
|
+
"kind": "option",
|
|
919
|
+
"opts": [
|
|
920
|
+
"--media",
|
|
921
|
+
"-m"
|
|
922
|
+
],
|
|
923
|
+
"type": "text",
|
|
924
|
+
"required": false,
|
|
925
|
+
"multiple": true,
|
|
926
|
+
"default": null,
|
|
927
|
+
"help": "Recording or screenshot to attach, PATH or PATH::Title. Repeatable."
|
|
928
|
+
}
|
|
929
|
+
]
|
|
930
|
+
},
|
|
749
931
|
{
|
|
750
932
|
"name": "admin create shipping-fee",
|
|
751
933
|
"persona": "admin",
|
|
@@ -1564,6 +1746,39 @@
|
|
|
1564
1746
|
}
|
|
1565
1747
|
]
|
|
1566
1748
|
},
|
|
1749
|
+
{
|
|
1750
|
+
"name": "admin delete ship-log",
|
|
1751
|
+
"persona": "admin",
|
|
1752
|
+
"verb": "delete",
|
|
1753
|
+
"noun": "ship-log",
|
|
1754
|
+
"access": "write",
|
|
1755
|
+
"api": "DELETE /admin/ship-log/deploys/{deploy_id}",
|
|
1756
|
+
"external": null,
|
|
1757
|
+
"side_effects": [
|
|
1758
|
+
"the entry and its recordings are removed for the whole team"
|
|
1759
|
+
],
|
|
1760
|
+
"approval": "ask",
|
|
1761
|
+
"reversible": false,
|
|
1762
|
+
"idempotent": true,
|
|
1763
|
+
"limit": null,
|
|
1764
|
+
"legacy": [],
|
|
1765
|
+
"help": "DELETE /admin/ship-log/deploys/{deploy_id} — remove an entry recorded by mistake.",
|
|
1766
|
+
"function": "makea_cli.commands.shiplog.cmd.register.<locals>.delete_ship_log",
|
|
1767
|
+
"flags": [
|
|
1768
|
+
{
|
|
1769
|
+
"name": "deploy_id",
|
|
1770
|
+
"kind": "argument",
|
|
1771
|
+
"opts": [
|
|
1772
|
+
"deploy_id"
|
|
1773
|
+
],
|
|
1774
|
+
"type": "text",
|
|
1775
|
+
"required": true,
|
|
1776
|
+
"multiple": false,
|
|
1777
|
+
"default": null,
|
|
1778
|
+
"help": "deploy_id (from list ship-log)."
|
|
1779
|
+
}
|
|
1780
|
+
]
|
|
1781
|
+
},
|
|
1567
1782
|
{
|
|
1568
1783
|
"name": "admin delete shipping-fee",
|
|
1569
1784
|
"persona": "admin",
|
|
@@ -3792,6 +4007,49 @@
|
|
|
3792
4007
|
}
|
|
3793
4008
|
]
|
|
3794
4009
|
},
|
|
4010
|
+
{
|
|
4011
|
+
"name": "admin list ship-log",
|
|
4012
|
+
"persona": "admin",
|
|
4013
|
+
"verb": "list",
|
|
4014
|
+
"noun": "ship-log",
|
|
4015
|
+
"access": "read",
|
|
4016
|
+
"api": "GET /admin/ship-log/deploys",
|
|
4017
|
+
"external": null,
|
|
4018
|
+
"side_effects": [],
|
|
4019
|
+
"approval": "auto",
|
|
4020
|
+
"reversible": null,
|
|
4021
|
+
"idempotent": null,
|
|
4022
|
+
"limit": "client",
|
|
4023
|
+
"legacy": [],
|
|
4024
|
+
"help": "GET /admin/ship-log/deploys — deploys between two UTC days, newest first: deploy_id, ticket, title, summary, watch, commits, amplify_job, deployed_at, media.",
|
|
4025
|
+
"function": "makea_cli.commands.shiplog.cmd.register.<locals>.list_ship_log",
|
|
4026
|
+
"flags": [
|
|
4027
|
+
{
|
|
4028
|
+
"name": "since",
|
|
4029
|
+
"kind": "option",
|
|
4030
|
+
"opts": [
|
|
4031
|
+
"--since"
|
|
4032
|
+
],
|
|
4033
|
+
"type": "text",
|
|
4034
|
+
"required": false,
|
|
4035
|
+
"multiple": false,
|
|
4036
|
+
"default": null,
|
|
4037
|
+
"help": "First day, YYYY-MM-DD. Default: 6 days ago."
|
|
4038
|
+
},
|
|
4039
|
+
{
|
|
4040
|
+
"name": "until",
|
|
4041
|
+
"kind": "option",
|
|
4042
|
+
"opts": [
|
|
4043
|
+
"--until"
|
|
4044
|
+
],
|
|
4045
|
+
"type": "text",
|
|
4046
|
+
"required": false,
|
|
4047
|
+
"multiple": false,
|
|
4048
|
+
"default": null,
|
|
4049
|
+
"help": "Last day, YYYY-MM-DD. Default: today."
|
|
4050
|
+
}
|
|
4051
|
+
]
|
|
4052
|
+
},
|
|
3795
4053
|
{
|
|
3796
4054
|
"name": "admin list shipping-order",
|
|
3797
4055
|
"persona": "admin",
|
|
@@ -6552,6 +6810,91 @@
|
|
|
6552
6810
|
}
|
|
6553
6811
|
]
|
|
6554
6812
|
},
|
|
6813
|
+
{
|
|
6814
|
+
"name": "admin update ship-log",
|
|
6815
|
+
"persona": "admin",
|
|
6816
|
+
"verb": "update",
|
|
6817
|
+
"noun": "ship-log",
|
|
6818
|
+
"access": "write",
|
|
6819
|
+
"api": "PATCH /admin/ship-log/deploys/{deploy_id}",
|
|
6820
|
+
"external": null,
|
|
6821
|
+
"side_effects": [
|
|
6822
|
+
"the entry changes on the admin Ship log",
|
|
6823
|
+
"a changed title or summary gets that day's standup rewritten on its next view",
|
|
6824
|
+
"with --media, each file is uploaded to S3 and shown on the entry"
|
|
6825
|
+
],
|
|
6826
|
+
"approval": "ask",
|
|
6827
|
+
"reversible": true,
|
|
6828
|
+
"idempotent": false,
|
|
6829
|
+
"limit": null,
|
|
6830
|
+
"legacy": [],
|
|
6831
|
+
"help": "PATCH /admin/ship-log/deploys/{deploy_id} — fix an entry's title, summary or watch note (pass --watch '' to clear it); --media attaches more recordings.",
|
|
6832
|
+
"function": "makea_cli.commands.shiplog.cmd.register.<locals>.update_ship_log",
|
|
6833
|
+
"flags": [
|
|
6834
|
+
{
|
|
6835
|
+
"name": "deploy_id",
|
|
6836
|
+
"kind": "argument",
|
|
6837
|
+
"opts": [
|
|
6838
|
+
"deploy_id"
|
|
6839
|
+
],
|
|
6840
|
+
"type": "text",
|
|
6841
|
+
"required": true,
|
|
6842
|
+
"multiple": false,
|
|
6843
|
+
"default": null,
|
|
6844
|
+
"help": "deploy_id (from list ship-log)."
|
|
6845
|
+
},
|
|
6846
|
+
{
|
|
6847
|
+
"name": "title",
|
|
6848
|
+
"kind": "option",
|
|
6849
|
+
"opts": [
|
|
6850
|
+
"--title"
|
|
6851
|
+
],
|
|
6852
|
+
"type": "text",
|
|
6853
|
+
"required": false,
|
|
6854
|
+
"multiple": false,
|
|
6855
|
+
"default": null,
|
|
6856
|
+
"help": null
|
|
6857
|
+
},
|
|
6858
|
+
{
|
|
6859
|
+
"name": "summary",
|
|
6860
|
+
"kind": "option",
|
|
6861
|
+
"opts": [
|
|
6862
|
+
"--summary",
|
|
6863
|
+
"-s"
|
|
6864
|
+
],
|
|
6865
|
+
"type": "text",
|
|
6866
|
+
"required": false,
|
|
6867
|
+
"multiple": false,
|
|
6868
|
+
"default": null,
|
|
6869
|
+
"help": null
|
|
6870
|
+
},
|
|
6871
|
+
{
|
|
6872
|
+
"name": "watch",
|
|
6873
|
+
"kind": "option",
|
|
6874
|
+
"opts": [
|
|
6875
|
+
"--watch"
|
|
6876
|
+
],
|
|
6877
|
+
"type": "text",
|
|
6878
|
+
"required": false,
|
|
6879
|
+
"multiple": false,
|
|
6880
|
+
"default": null,
|
|
6881
|
+
"help": null
|
|
6882
|
+
},
|
|
6883
|
+
{
|
|
6884
|
+
"name": "media",
|
|
6885
|
+
"kind": "option",
|
|
6886
|
+
"opts": [
|
|
6887
|
+
"--media",
|
|
6888
|
+
"-m"
|
|
6889
|
+
],
|
|
6890
|
+
"type": "text",
|
|
6891
|
+
"required": false,
|
|
6892
|
+
"multiple": true,
|
|
6893
|
+
"default": null,
|
|
6894
|
+
"help": "Recording or screenshot to attach, PATH or PATH::Title. Repeatable."
|
|
6895
|
+
}
|
|
6896
|
+
]
|
|
6897
|
+
},
|
|
6555
6898
|
{
|
|
6556
6899
|
"name": "admin update shipping-order",
|
|
6557
6900
|
"persona": "admin",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.2.31"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|