devlift-cli 0.1.2__tar.gz → 0.1.3__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.
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/PKG-INFO +1 -1
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/__init__.py +1 -1
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/skill/SKILL.md +68 -13
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/skill/reference/workflows.md +35 -3
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli.egg-info/PKG-INFO +1 -1
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/README.md +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/MANUAL.md +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/__main__.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/__init__.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/approvals.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/catalog.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/client.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/context.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/deployments.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/infra.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/infra_list.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/kong.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/services.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/api/vpc.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/app.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/auth/__init__.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/auth/oauth.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/auth/session.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/auth/storage.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/__init__.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/approval.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/auth.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/catalog.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/clusters.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/deployment.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/dynamodb.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/eks.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/kong.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/languages.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/manual.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/repositories.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/request.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/s3.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/skill.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/commands/sqs.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/config.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/context.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/data/placement/vance.json +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/errors.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/ops/__init__.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/ops/approvals.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/ops/eks.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/ops/kong.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/ops/placement.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/ops/resources.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/ops/status.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/ops/wait.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/render/__init__.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/render/output.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/resolve/__init__.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/resolve/allowlist.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/resolve/names.py +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/skill/reference/commands.md +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli/skill/reference/exit-codes.md +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli.egg-info/SOURCES.txt +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli.egg-info/dependency_links.txt +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli.egg-info/entry_points.txt +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli.egg-info/requires.txt +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/devlift_cli.egg-info/top_level.txt +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/pyproject.toml +0 -0
- {devlift_cli-0.1.2 → devlift_cli-0.1.3}/setup.cfg +0 -0
|
@@ -160,19 +160,29 @@ are in `reference/workflows.md`.
|
|
|
160
160
|
and prints two tables on stderr: the service (placement, cluster it
|
|
161
161
|
picked, repository, branches, language) and the Configuration table with
|
|
162
162
|
a "From" column saying which values came from the language template.
|
|
163
|
-
3. **
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
with
|
|
163
|
+
3. **Reproduce both tables in your reply, then ask.** Paste them as the
|
|
164
|
+
command printed them, inside a code block, every row, in the same order,
|
|
165
|
+
with the "From" column intact. They are the summary. Do not replace them
|
|
166
|
+
with prose, do not show only the rows you think matter, and do not lead
|
|
167
|
+
with your own commentary: the user is about to approve these exact values
|
|
168
|
+
and cannot approve what they cannot see. Anything you want to point out
|
|
169
|
+
goes AFTER the tables, in a line or two.
|
|
170
|
+
|
|
171
|
+
Then ask: "These are the standard <language> values. Apply them, or tell
|
|
172
|
+
me what to change?" That reply is text and ends the turn — no dialog, no
|
|
173
|
+
tool call, because a dialog would hide the table they are deciding on. Do
|
|
174
|
+
not rerun with `-y` until they answer.
|
|
168
175
|
4. A change ("port 9000", "1 GiB memory limit", "turn on autoscaling 2 to 4")
|
|
169
176
|
becomes `--set` flags on the rerun: `--set port=9000`,
|
|
170
177
|
`--set memory_limit=1`, `--set hpa_enabled=true --set min_replicas=2
|
|
171
178
|
--set max_replicas=4`. Rerun without `-y` once more only if the change is
|
|
172
|
-
large; otherwise rerun with `-y
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
179
|
+
large; otherwise rerun with `-y`.
|
|
180
|
+
5. **Report what is now waiting to be reviewed, not the codes it returned.**
|
|
181
|
+
Run `devlift request show <service> --env <env> --no-input -o json` and
|
|
182
|
+
show what it lists: every row in the change set and the fields each one
|
|
183
|
+
changes. Say it is a **draft**, nothing is deployed, and name the next
|
|
184
|
+
step: `request submit`, then a reviewer's `approval approve`, then
|
|
185
|
+
`eks deploy`.
|
|
176
186
|
|
|
177
187
|
The same show-then-ask shape applies to every write: `eks edit` and the
|
|
178
188
|
update commands print Current | New, `kong route …` prints the route change,
|
|
@@ -181,12 +191,57 @@ the approved rows. The summary is printed on every dry run, in json mode too.
|
|
|
181
191
|
|
|
182
192
|
## Reporting back to the user
|
|
183
193
|
|
|
184
|
-
- After a dry run (exit 5)
|
|
185
|
-
the go-ahead.
|
|
186
|
-
|
|
187
|
-
|
|
194
|
+
- **After a dry run (exit 5), paste what the command printed, verbatim, in a
|
|
195
|
+
code block**, then ask for the go-ahead. Every row of every table, in order.
|
|
196
|
+
A summary you wrote yourself is not a substitute: the user is approving the
|
|
197
|
+
values in that output, so replacing it with "two differences worth your
|
|
198
|
+
call" hides the other twenty they are also agreeing to. Commentary is
|
|
199
|
+
welcome after it, never instead of it.
|
|
200
|
+
- **After a draft write, show what will go to review — not the codes.**
|
|
201
|
+
`eks create`, `eks edit` and `kong route …` all save a draft. The service
|
|
202
|
+
code, the configuration code and the queue code are plumbing: they belong in
|
|
203
|
+
your next tool call, not in a sentence a person reads. Run
|
|
204
|
+
`devlift request show <service> --env <env> --no-input -o json` and report
|
|
205
|
+
what it lists: every row in the change set, and for each one the fields it
|
|
206
|
+
changes. A service's settings and its Kong routes are **one change set**, so
|
|
207
|
+
a route added earlier will be submitted by this submit too, and the user has
|
|
208
|
+
to see that before they agree to it. Mention a code only if the user asks,
|
|
209
|
+
or when they need it to run a command themselves.
|
|
188
210
|
- A draft is not deployed. Say so, and name the next command
|
|
189
211
|
(`request submit`, then `approval approve`, then `eks deploy`).
|
|
212
|
+
- **After `request submit`, say three things.** That it is submitted and now
|
|
213
|
+
waiting for approval. How many rows moved and which kinds (settings,
|
|
214
|
+
gateway/Kong, variables) — the submit result's `requests[]` gives you both.
|
|
215
|
+
And who approves it next.
|
|
216
|
+
For that last one, do not guess and never write "if you have approval
|
|
217
|
+
rights": run `devlift request show <service> --env <env> --no-input -o json`
|
|
218
|
+
and read `you.can_approve`. If it is true, say plainly that they can approve
|
|
219
|
+
it themselves and offer `devlift approval approve <service> --env <env>`. If
|
|
220
|
+
it is false, say it needs a reviewer on that resource group. The user should
|
|
221
|
+
never have to work out their own permissions.
|
|
222
|
+
- **After `approval approve`, show the approved change in full.** This is the
|
|
223
|
+
last checkpoint before anything reaches a cluster, so a queue code and the
|
|
224
|
+
word "approved" are not enough. Run `devlift request show <service> --env
|
|
225
|
+
<env> --no-input -o json` and show its frozen diff — every row, Field, From,
|
|
226
|
+
To — so the user sees exactly what is now cleared to ship. Then read
|
|
227
|
+
`you.can_deploy` from that same output: if true, say they can deploy it and
|
|
228
|
+
offer `devlift eks deploy <service> --env <env>` (`--wait` follows it to the
|
|
229
|
+
end); if false, say a deployer has to run it. Check, never guess, exactly as
|
|
230
|
+
with approval.
|
|
231
|
+
- **After `eks deploy`, show what is shipping and where it has got to.** Run
|
|
232
|
+
`devlift deployment status <workflow-id> --no-input -o json` and show its
|
|
233
|
+
pipeline stages as the command gives them — each stage with its status and
|
|
234
|
+
timing — so the user can see which step is running rather than reading a
|
|
235
|
+
sentence about it. Say what is being deployed, which is the change that was
|
|
236
|
+
just approved, and keep the workflow id visible because every later check
|
|
237
|
+
needs it. Then name both follow-ups and the difference between them:
|
|
238
|
+
`deployment status <workflow-id> --wait` says when DevLift's own pipeline
|
|
239
|
+
finished, and `eks status <service> --env <env>` also asks ArgoCD whether the
|
|
240
|
+
pod is actually serving, which is the real "is it up" question. A finished
|
|
241
|
+
pipeline is not a running application.
|
|
242
|
+
- Resources behave differently. `s3`, `sqs` and `dynamodb` create and update
|
|
243
|
+
deploy straight away, so there report the resource name and the workflow id,
|
|
244
|
+
which is what `deployment status` needs.
|
|
190
245
|
- On exit 7 quote the message: it names the conflicting request or the rule
|
|
191
246
|
(one live request per service, one auth per Kong tag, a name that exists).
|
|
192
247
|
- On exit 2 stop and tell the user to sign in; on exit 4 say who to ask.
|
|
@@ -42,12 +42,18 @@ devlift repositories branches Regobs/orders --no-input -o json | jq -r '.[].name
|
|
|
42
42
|
devlift languages list --no-input -o json
|
|
43
43
|
devlift eks create --name orders --app core --env stage --region mumbai --type api \
|
|
44
44
|
--repo Regobs/orders --branch main --language go --version 1.24 --no-input -o json 2>&1 # exit 5: two tables (service, configuration with From column) on stderr
|
|
45
|
-
#
|
|
45
|
+
# PASTE BOTH TABLES VERBATIM into your reply, in a code block, every row, before anything else you write.
|
|
46
|
+
# They are the summary — a prose rewrite hides the values the user is about to approve. Commentary goes after them.
|
|
47
|
+
# Then ASK: "These are the standard Go values. Apply them, or tell me what to change?"
|
|
46
48
|
# a change becomes --set on the rerun, e.g. --set cpu_limit=0.5 --set hpa_enabled=true --set min_replicas=1 --set max_replicas=3
|
|
47
49
|
devlift eks create … --no-input -y -o json
|
|
48
50
|
# → {service_code, service_config_code, queue_code, queue_status: "draft", config}
|
|
51
|
+
devlift request show orders --env stage --no-input -o json # what now waits for review
|
|
49
52
|
```
|
|
50
|
-
|
|
53
|
+
Report what `request show` lists — the rows in the change set and the fields
|
|
54
|
+
each changes. Do NOT report service_code / service_config_code / queue_code:
|
|
55
|
+
they are plumbing for your next call, not something a person reads. Then tell
|
|
56
|
+
the user it is a draft, nothing is deployed, and continue with workflow 6.
|
|
51
57
|
`--type worker` drops health/service_path/ALB fields (no load balancer).
|
|
52
58
|
|
|
53
59
|
## 4. Change a running service's settings
|
|
@@ -74,22 +80,48 @@ the other auth → exit 7: pick another `--tag`.
|
|
|
74
80
|
## 6. Review lane (settings and routes move together)
|
|
75
81
|
|
|
76
82
|
```
|
|
83
|
+
devlift request show orders --env stage --no-input -o json # EVERYTHING that submit will send: settings AND Kong routes
|
|
77
84
|
devlift request list --service orders --env stage --no-input -o json # what exists, statuses, you.can_approve / can_deploy
|
|
78
85
|
devlift request submit orders --no-input -y -o json # → requests[] all "submit"; exit 7 if another author holds the lane
|
|
86
|
+
devlift request show orders --env stage --no-input -o json # after submit: you.can_approve says whether THIS user may approve it
|
|
79
87
|
devlift approval list --no-input -o json # reviewer inbox
|
|
80
88
|
devlift request show orders --no-input -o json # frozen diff for the reviewer
|
|
81
89
|
devlift approval approve orders --no-input -y -o json # → requests[] all "approved"
|
|
90
|
+
devlift request show orders --env stage --no-input -o json # after approve: the frozen diff to show, and you.can_deploy
|
|
82
91
|
# alternatives: approval request-changes orders --comment "…" -y ; approval reject orders --comment "…" -y ; approval revoke orders -y ; request withdraw orders -y
|
|
83
92
|
```
|
|
93
|
+
Before submitting, show the user what `request show` lists and get their
|
|
94
|
+
go-ahead. Submit moves the WHOLE change set, so a Kong route added earlier
|
|
95
|
+
ships with the settings change; someone who only remembers editing CPU must
|
|
96
|
+
not discover the route at approval time.
|
|
97
|
+
|
|
98
|
+
After submitting, report that it is waiting for approval, how many rows moved
|
|
99
|
+
and of which kinds, and who approves next. Read `you.can_approve` from
|
|
100
|
+
`request show` rather than writing "if you have approval rights" — the CLI
|
|
101
|
+
knows, so the user should not have to.
|
|
102
|
+
|
|
103
|
+
After approving, show the frozen diff in full (every row, Field | From | To):
|
|
104
|
+
approval is the last checkpoint before a cluster, and "approved" on its own
|
|
105
|
+
tells the user nothing about what they just cleared. Then read `you.can_deploy`
|
|
106
|
+
the same way to say whether they can ship it themselves.
|
|
107
|
+
|
|
84
108
|
Self-approval works only where the resource group's rule allows it (403 → exit 4 otherwise).
|
|
85
109
|
|
|
86
110
|
## 7. Deploy and verify
|
|
87
111
|
|
|
88
112
|
```
|
|
89
113
|
devlift eks deploy orders --env stage --no-input # lists approved rows, exit 5
|
|
90
|
-
devlift eks deploy orders --env stage --no-input -y
|
|
114
|
+
devlift eks deploy orders --env stage --no-input -y -o json # → {workflow_id, requests[]}
|
|
115
|
+
devlift deployment status <workflow_id> --no-input -o json # stages with status + timing, pr_url, resources
|
|
91
116
|
devlift eks status orders --env stage --no-input -o json # .deployment (stages, pr_url) and .application (ArgoCD state)
|
|
92
117
|
```
|
|
118
|
+
After deploying, show the pipeline stages as the command gives them, each with
|
|
119
|
+
its status and timing, plus what is shipping and the workflow id. Do not
|
|
120
|
+
replace the stage list with a sentence: the user wants to see which step is
|
|
121
|
+
running. Name both follow-ups and the difference — `deployment status --wait`
|
|
122
|
+
answers "did DevLift's pipeline finish", `eks status` also asks ArgoCD "is the
|
|
123
|
+
pod serving". A finished pipeline is not a running application.
|
|
124
|
+
|
|
93
125
|
Production: `--confirm-name orders` in place of relying on `-y`.
|
|
94
126
|
Read `.application.state`: `up` = healthy pod; `waiting_for_argocd` /
|
|
95
127
|
`starting` = keep polling (`--wait`); `not_configured` = no ArgoCD for that
|
|
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
|