@mesh-tech/mesh-cli 0.26.0 → 0.28.0

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.
@@ -107,7 +107,11 @@ new mesh.auth.AppAuthzPointer("authz", {
107
107
  });
108
108
 
109
109
  export const app = env.register({
110
- description: "{{titleCase name}} — role-gating API (roles enforced in-process from the Zitadel JWT)",
110
+ displayName: "{{titleCase name}}",
111
+ // What a client operator reads on the Apps list. One sentence, their words.
112
+ description: "Serves the {{titleCase name}} API, with access decided by each caller's role.",
113
+ // Engineer to engineer; a Hub deployed for a client never serializes it.
114
+ operatorNote: "Role-gating mode — roles are enforced in-process from the Zitadel JWT, no SpiceDB.",
111
115
  });
112
116
 
113
117
  /** The app's own Zitadel project id (grant API keys against this). */
@@ -42,7 +42,11 @@ const vendorpay = new mesh.apps.ExternalService("vendorpay", {
42
42
  env,
43
43
  type: "payment",
44
44
  kind: "connection",
45
- description: "Example payments vendor (quotes API) — the external-service pattern",
45
+ // One sentence a client operator can act on, in their words. This renders on
46
+ // the Hub's Integrations row, which a credit union's own staff read.
47
+ description: "Gets price quotes from our payments vendor.",
48
+ // Engineer to engineer: never serialized by a Hub deployed for a client.
49
+ operatorNote: "Example vendor wired the external-service way — credentials in Secrets Manager, no runtime to probe.",
46
50
  credentials: {
47
51
  fields: {
48
52
  baseUrl: { name: "Base URL", description: "Vendor API endpoint" },
@@ -3,11 +3,27 @@
3
3
  - Invoke the CLI as `pnpm mesh <cmd>` or (cwd-independent) `pnpm exec mesh <cmd>` —
4
4
  a root `"mesh"` script + the `@mesh-tech/mesh-cli` devDependency make both work
5
5
  after `pnpm install`. For a bare `mesh` on PATH, run once: `pnpm exec mesh install-shim`.
6
- - Operations are `mesh` commands, never raw `aws`/`pulumi`/`kubectl`:
7
- `mesh login {{tenant}}.{{env}}`, `mesh deploy preview|up` (run inside
8
- `core/` or `platform/`), `mesh init app-tenant` (doctor).
6
+ - Operations are `mesh` commands, never raw `pulumi`/`kubectl`: `mesh deploy
7
+ preview|up` (run inside `core/` or `platform/`), `mesh init app-tenant`
8
+ (doctor). **One exception:** a platform stack carries no `mesh:deployerRole`
9
+ — only app stacks do — so `mesh deploy` reads credentials from the
10
+ environment, on the first deploy and on every day-2 run:
11
+ `aws sso login --profile {{profile}}`, then
12
+ `eval "$(aws configure export-credentials --profile {{profile}} --format env)"`.
13
+ - **`mesh login {{tenant}}.{{env}}` comes LAST, after the first deploy.** The
14
+ Zitadel it signs in to is what the `platform/` layer creates; run earlier it
15
+ fails with `No configuration found for "{{tenant}}.{{env}}"`. Package access
16
+ is a separate, global sign-in (`mesh registry login`) and is not needed in
17
+ this repo at all.
9
18
  - Deploy order matters: `core/` before `platform/` (platform imports core
10
- from the SSM registry).
19
+ from the SSM registry), and the NS delegation of the public zone is a manual
20
+ step **in the middle of the `core/` deploy** — that deploy blocks on its ACM
21
+ certificate until you delegate the new zone's NS records from the parent, so
22
+ a `core/` deploy that looks hung is waiting on you. README.md holds the full
23
+ first-deploy sequence, the one `mesh init` printed when it scaffolded this
24
+ repo. Do not invent a different one.
25
+ - `platform/` builds service images, so it needs Docker; `core/` does not.
26
+ That is why a Docker-less container can deploy `core/` and stop there.
11
27
  - Capabilities are config, not code: enable/disable platform services in
12
28
  `platform/Pulumi.{{tenant}}-{{env}}.yaml` (temporal/zitadel/hub/tenants/…);
13
29
  the `index.ts` layer programs should rarely change.
@@ -64,5 +64,9 @@ const worker = new mesh.apps.TemporalWorker("worker", {
64
64
  // --- Outputs ---
65
65
 
66
66
  export const app = env.register({
67
- description: "{{titleCase name}} — Temporal workflow app",
67
+ displayName: "{{titleCase name}}",
68
+ // What a client operator reads on the Apps list. One sentence, their words.
69
+ description: "Runs {{titleCase name}}'s scheduled and long-running jobs.",
70
+ // Engineer to engineer; a Hub deployed for a client never serializes it.
71
+ operatorNote: "Temporal workflow app scaffolded by `mesh create-app --template workflow`.",
68
72
  });