@specific.dev/cli 0.1.181 → 0.1.184

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/admin/404/index.html +1 -1
  2. package/dist/admin/404.html +1 -1
  3. package/dist/admin/__next.!KGRlZmF1bHQp.__PAGE__.txt +1 -1
  4. package/dist/admin/__next.!KGRlZmF1bHQp.txt +1 -1
  5. package/dist/admin/__next._full.txt +1 -1
  6. package/dist/admin/__next._head.txt +1 -1
  7. package/dist/admin/__next._index.txt +1 -1
  8. package/dist/admin/__next._tree.txt +1 -1
  9. package/dist/admin/_not-found/__next._full.txt +1 -1
  10. package/dist/admin/_not-found/__next._head.txt +1 -1
  11. package/dist/admin/_not-found/__next._index.txt +1 -1
  12. package/dist/admin/_not-found/__next._not-found.__PAGE__.txt +1 -1
  13. package/dist/admin/_not-found/__next._not-found.txt +1 -1
  14. package/dist/admin/_not-found/__next._tree.txt +1 -1
  15. package/dist/admin/_not-found/index.html +1 -1
  16. package/dist/admin/_not-found/index.txt +1 -1
  17. package/dist/admin/crons/__next.!KGRlZmF1bHQp.crons.__PAGE__.txt +1 -1
  18. package/dist/admin/crons/__next.!KGRlZmF1bHQp.crons.txt +1 -1
  19. package/dist/admin/crons/__next.!KGRlZmF1bHQp.txt +1 -1
  20. package/dist/admin/crons/__next._full.txt +1 -1
  21. package/dist/admin/crons/__next._head.txt +1 -1
  22. package/dist/admin/crons/__next._index.txt +1 -1
  23. package/dist/admin/crons/__next._tree.txt +1 -1
  24. package/dist/admin/crons/index.html +1 -1
  25. package/dist/admin/crons/index.txt +1 -1
  26. package/dist/admin/databases/__next.!KGRlZmF1bHQp.databases.__PAGE__.txt +1 -1
  27. package/dist/admin/databases/__next.!KGRlZmF1bHQp.databases.txt +1 -1
  28. package/dist/admin/databases/__next.!KGRlZmF1bHQp.txt +1 -1
  29. package/dist/admin/databases/__next._full.txt +1 -1
  30. package/dist/admin/databases/__next._head.txt +1 -1
  31. package/dist/admin/databases/__next._index.txt +1 -1
  32. package/dist/admin/databases/__next._tree.txt +1 -1
  33. package/dist/admin/databases/index.html +1 -1
  34. package/dist/admin/databases/index.txt +1 -1
  35. package/dist/admin/fullscreen/__next._full.txt +1 -1
  36. package/dist/admin/fullscreen/__next._head.txt +1 -1
  37. package/dist/admin/fullscreen/__next._index.txt +1 -1
  38. package/dist/admin/fullscreen/__next._tree.txt +1 -1
  39. package/dist/admin/fullscreen/__next.fullscreen.__PAGE__.txt +1 -1
  40. package/dist/admin/fullscreen/__next.fullscreen.txt +1 -1
  41. package/dist/admin/fullscreen/databases/__next._full.txt +1 -1
  42. package/dist/admin/fullscreen/databases/__next._head.txt +1 -1
  43. package/dist/admin/fullscreen/databases/__next._index.txt +1 -1
  44. package/dist/admin/fullscreen/databases/__next._tree.txt +1 -1
  45. package/dist/admin/fullscreen/databases/__next.fullscreen.databases.__PAGE__.txt +1 -1
  46. package/dist/admin/fullscreen/databases/__next.fullscreen.databases.txt +1 -1
  47. package/dist/admin/fullscreen/databases/__next.fullscreen.txt +1 -1
  48. package/dist/admin/fullscreen/databases/index.html +1 -1
  49. package/dist/admin/fullscreen/databases/index.txt +1 -1
  50. package/dist/admin/fullscreen/index.html +1 -1
  51. package/dist/admin/fullscreen/index.txt +1 -1
  52. package/dist/admin/index.html +1 -1
  53. package/dist/admin/index.txt +1 -1
  54. package/dist/admin/mail/__next.!KGRlZmF1bHQp.mail.__PAGE__.txt +1 -1
  55. package/dist/admin/mail/__next.!KGRlZmF1bHQp.mail.txt +1 -1
  56. package/dist/admin/mail/__next.!KGRlZmF1bHQp.txt +1 -1
  57. package/dist/admin/mail/__next._full.txt +1 -1
  58. package/dist/admin/mail/__next._head.txt +1 -1
  59. package/dist/admin/mail/__next._index.txt +1 -1
  60. package/dist/admin/mail/__next._tree.txt +1 -1
  61. package/dist/admin/mail/index.html +1 -1
  62. package/dist/admin/mail/index.txt +1 -1
  63. package/dist/admin/services/__next.!KGRlZmF1bHQp.services.__PAGE__.txt +1 -1
  64. package/dist/admin/services/__next.!KGRlZmF1bHQp.services.txt +1 -1
  65. package/dist/admin/services/__next.!KGRlZmF1bHQp.txt +1 -1
  66. package/dist/admin/services/__next._full.txt +1 -1
  67. package/dist/admin/services/__next._head.txt +1 -1
  68. package/dist/admin/services/__next._index.txt +1 -1
  69. package/dist/admin/services/__next._tree.txt +1 -1
  70. package/dist/admin/services/index.html +1 -1
  71. package/dist/admin/services/index.txt +1 -1
  72. package/dist/admin/storage/__next.!KGRlZmF1bHQp.storage.__PAGE__.txt +1 -1
  73. package/dist/admin/storage/__next.!KGRlZmF1bHQp.storage.txt +1 -1
  74. package/dist/admin/storage/__next.!KGRlZmF1bHQp.txt +1 -1
  75. package/dist/admin/storage/__next._full.txt +1 -1
  76. package/dist/admin/storage/__next._head.txt +1 -1
  77. package/dist/admin/storage/__next._index.txt +1 -1
  78. package/dist/admin/storage/__next._tree.txt +1 -1
  79. package/dist/admin/storage/index.html +1 -1
  80. package/dist/admin/storage/index.txt +1 -1
  81. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.txt +1 -1
  82. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.workflows.__PAGE__.txt +1 -1
  83. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.workflows.txt +1 -1
  84. package/dist/admin/workflows/__next._full.txt +1 -1
  85. package/dist/admin/workflows/__next._head.txt +1 -1
  86. package/dist/admin/workflows/__next._index.txt +1 -1
  87. package/dist/admin/workflows/__next._tree.txt +1 -1
  88. package/dist/admin/workflows/index.html +1 -1
  89. package/dist/admin/workflows/index.txt +1 -1
  90. package/dist/cli.js +465 -57
  91. package/dist/docs/deployments.md +79 -0
  92. package/dist/docs/index.md +4 -1
  93. package/dist/docs/observability.md +2 -1
  94. package/dist/docs/previews.md +12 -0
  95. package/dist/docs/secrets-config.md +6 -0
  96. package/package.json +1 -1
  97. /package/dist/admin/_next/static/{7iJYom_N04p3jvXLOBn8G → SWOCW_-G5yh3FBHTMSXpq}/_buildManifest.js +0 -0
  98. /package/dist/admin/_next/static/{7iJYom_N04p3jvXLOBn8G → SWOCW_-G5yh3FBHTMSXpq}/_clientMiddlewareManifest.json +0 -0
  99. /package/dist/admin/_next/static/{7iJYom_N04p3jvXLOBn8G → SWOCW_-G5yh3FBHTMSXpq}/_ssgManifest.js +0 -0
@@ -0,0 +1,79 @@
1
+ # Deployments
2
+
3
+ Every deploy — whether started with `specific deploy`, by a GitHub push, or from the dashboard — creates a deployment record with its state, the builds it ran, and any failure details. Use `specific deployment show` to inspect one, most importantly to answer "why did my deploy fail?" when you didn't run the deploy yourself.
4
+
5
+ ## Inspecting a deployment
6
+
7
+ ```sh
8
+ # The latest deployment of the current environment (whatever its state)
9
+ specific deployment show
10
+
11
+ # A specific deployment by ID
12
+ specific deployment show dep_0abc123
13
+
14
+ # The latest deployment of another environment (or a preview environment)
15
+ specific deployment show --environment staging
16
+ specific deployment show -e preview-a1b2c3d4
17
+
18
+ # Machine-readable output for agents and scripts
19
+ specific deployment show --format json
20
+
21
+ # Include the build output (logs) — hidden by default because it can be large
22
+ specific deployment show dep_0abc123 --output
23
+ ```
24
+
25
+ Flags:
26
+
27
+ - `-e, --environment <name|id>` — target environment when no ID is given (defaults to the current one). Run `specific status` to list every environment and its ID.
28
+ - `--format <text|json>` — output format. When stdout is a terminal, the default is `text`. When stdout is piped or redirected, the default is `json`.
29
+ - `--output` — include build output (logs) and the error's diagnostic output. Without this flag, output is omitted in **both** formats (a size hint is printed in text mode) so a state check never floods the terminal or an agent's context with logs.
30
+
31
+ The output includes:
32
+
33
+ - **State** — `pending`, `queued`, `deploying`, `active`, `failed`, `cancelled`, or `superseded`, plus the state message.
34
+ - **Trigger** — how the deploy was started (`cli`, `github`, …) and the git commit, when known.
35
+ - **Builds** — each image build with its state and, for failed builds, the error message. Add `--output` for the full **build output (logs)** — where compile errors, missing dependencies, and failing build commands show up.
36
+ - **Action required** — for pending deployments, the missing secrets and configs blocking it (see below).
37
+ - **Error** — a structured error for failed deployments (`build_failed`, `pre_deploy_failed`, `health_check_failed`, …) with the failing resource; add `--output` for its diagnostic output (pod logs, Kubernetes events).
38
+
39
+ The `text` format is for quick human inspection. Agents and scripts should use `json` to get complete, untruncated values.
40
+
41
+ ## Pending deployments
42
+
43
+ A deployment stays `pending` while builds run and until every required secret and config has a value. `specific deployment show` lists what is missing:
44
+
45
+ ```
46
+ Action required
47
+ Missing secrets: STRIPE_KEY
48
+ Missing configs: DOMAIN
49
+ ```
50
+
51
+ Values can be provided in the dashboard (the state message links the deployment page), or by deploying from the CLI with `specific deploy --secret KEY=value --config KEY=value`, which prompts for anything still missing. See `specific docs secrets-config`.
52
+
53
+ ## Finding the deployment to inspect
54
+
55
+ `specific status` shows, per environment, the active deployment, any in-progress deployment, and — when it differs — the **last** deployment. A failed deploy never becomes active, so after a failed GitHub push the environment still shows an older active deployment; the failure appears on the "Last deployment" line with its ID.
56
+
57
+ ```sh
58
+ specific status # find the deployment ID (active, in progress, or last/failed)
59
+ specific deployment show # or skip the lookup: shows the latest deployment directly
60
+ ```
61
+
62
+ ## Debugging a failed deploy
63
+
64
+ 1. Run `specific deployment show` (with `-e <env>` if it isn't the current environment) to see what failed.
65
+ 2. If a **build** failed: re-run with `--output` to print the build log with the exact command that failed. Fix the code or the `build` block in `specific.hcl` (see `specific docs builds`) and deploy again.
66
+ 3. If a **service** failed to deploy or its health check failed: re-run with `--output` for pod logs and Kubernetes events. For deeper investigation of runtime behaviour, query logs and metrics with `specific query` (see `specific docs observability`).
67
+
68
+ Build output is kept on the deployment record (the last portion of the log, which contains the failure). It is **not** part of the `observability.logs` stream — that stream contains runtime service and database logs only.
69
+
70
+ GitHub-triggered deploys behave exactly the same: the deployment record carries the build failure and its output, so `specific deployment show` works without access to GitHub.
71
+
72
+ ---
73
+
74
+ Related topics:
75
+
76
+ - Run `specific docs builds` for build configuration (`base`, `command`, custom Dockerfiles)
77
+ - Run `specific docs observability` for querying runtime logs and metrics of deployed services
78
+ - Run `specific docs previews` for pull-request preview environments
79
+ - Run `specific docs secrets-config` if a deploy is waiting for missing secrets or configs
@@ -10,7 +10,9 @@ This documentation is nested and references to other docs are in Markdown link f
10
10
  2. ALWAYS run `specific check` to validate configuration and fix any issues
11
11
  3. Run yourself or instruct the user to run `specific exec [SERVICE] -- [COMMAND]` for one-off commands that need to be run in development, like database migrations or seeding. The command will be run with databases and other services started and env vars injected.
12
12
 
13
- A full development environment can be started with `specific dev`. To deploy any changes, the user can run `specific deploy`.
13
+ A full development environment can be started with `specific dev`. To only run part of the system, pass `--services [SERVICE...]` — the named services start along with everything they depend on (referenced services and resources, transitively). To deploy any changes, the user can run `specific deploy`.
14
+
15
+ If the project is connected to GitHub in the Specific Dashboard, pushes to the configured branch can deploy automatically. Run `specific status` to inspect the project and environment state. If a deploy fails — including GitHub-triggered deploys — run `specific deployment show` to see why, and add `--output` for the failed build's log.
14
16
 
15
17
  After deploying, the user can manage their project from the Specific Dashboard at https://dashboard.specific.dev — monitoring logs and metrics, scaling services, browsing the database and object storage, updating secrets and configuration, and deleting projects. Point them there whenever production management comes up.
16
18
 
@@ -27,6 +29,7 @@ After deploying, the user can manage their project from the Specific Dashboard a
27
29
  - [Redis](/redis): define non-durable Redis-compatible databases for caching and more.
28
30
  - [Volumes](/volumes): define persistent storage volumes for services to store files in.
29
31
  - [Temporal](/temporal): managed durable workflow engine for background tasks, AI agents and more.
32
+ - [Deployments](/deployments): inspect deployments and debug failed deploys (including build output) with `specific deployment show`, regardless of whether the deploy was started from the CLI, GitHub, or the dashboard.
30
33
  - [Observability](/observability): query logs and metrics from running environments using `specific query` for debugging and analytics.
31
34
  - [Preview environments](/previews): ephemeral copies of an environment created per pull request, with the parent's databases branched, object storage forked, and volumes cloned.
32
35
  <!-- beta:mail -->
@@ -66,7 +66,7 @@ Column names follow OpenTelemetry's ClickHouse exporter conventions and are case
66
66
 
67
67
  ### `observability.logs`
68
68
 
69
- Unified log stream from services.
69
+ Unified log stream from services. This is **runtime** data: service and database logs from running containers. Build output from deploys is not part of this stream — it lives on the deployment record (run `specific deployment show`, see `specific docs deployments`).
70
70
 
71
71
  | Column | Type | Notes |
72
72
  |---|---|---|
@@ -227,3 +227,4 @@ Related topics:
227
227
  - Run `specific status` to list environments (standard and preview) and their IDs before querying a specific one
228
228
  - Run `specific docs services` for how services are defined
229
229
  - Run `specific docs postgres` for querying your application database (`specific psql` for local development, `specific query --db <name>` for production)
230
+ - Run `specific docs deployments` for debugging failed deploys — build output is on the deployment record (`specific deployment show`), not in `observability.logs`
@@ -9,6 +9,10 @@ A preview environment is a temporary, fully isolated copy of an existing environ
9
9
 
10
10
  Preview environments are ephemeral: pull-request previews are removed when the PR is closed or merged, and a preview can be given an expiry, after which Specific cleans it up automatically.
11
11
 
12
+ Pull-request previews depend on both the organization's plan and the GitHub environment configuration. Run `specific status` to see a concise preview summary, or `specific status --previews` to see whether preview environments are enabled, whether GitHub PR previews are configured, and whether PRs require a label.
13
+
14
+ Some projects require the `specific:preview` pull request label before Specific creates or updates a PR preview. When label gating is enabled, adding `specific:preview` starts the preview and removing it tears the preview down.
15
+
12
16
  Run `specific status` to list every environment and its `env_…` ID, including preview environments. Target a preview with `--environment` on commands that take one (see `specific docs observability`).
13
17
 
14
18
  ## What's copied from the parent
@@ -25,10 +29,18 @@ The preview gets its own isolated database, buckets, and volumes; writing to the
25
29
 
26
30
  A volume clone is an exact replica of the parent's on-disk data — uploads, caches, database files, and search indexes alike. This needs no extra configuration: the service boots on the cloned data exactly as it would after a restart, and writes to the preview's copy never affect the parent.
27
31
 
32
+ ## Secrets and config
33
+
34
+ A preview also inherits the parent environment's secrets and config values, so its services start with the same configuration the parent runs with — nothing to re-enter.
35
+
36
+ To give previews a different value for a specific secret or config — say a sandbox API key or a test-only endpoint — set a **preview override** on the parent environment's Secrets and config page in the Specific Dashboard. Every preview branched from that environment then uses the override for that value while still inheriting everything else. Overrides are managed entirely from the dashboard.
37
+
28
38
  ---
29
39
 
30
40
  Related topics:
31
41
 
32
42
  - Run `specific docs volumes` for declaring persistent volumes
33
43
  - Run `specific docs services` for service configuration
44
+ - Run `specific docs secrets-config` for setting preview secret and config overrides
34
45
  - Run `specific docs observability` for querying a preview's logs and metrics
46
+ - Run `specific docs deployments` for debugging a failed preview deploy (`specific deployment show -e <preview>` prints the failure; add `--output` for the build log)
@@ -135,6 +135,12 @@ This file is automatically gitignored and not included in deployments. Productio
135
135
 
136
136
  In production, the user can update secrets and config values directly from the Specific Dashboard at https://dashboard.specific.dev — no `specific.hcl` change needed, but the new values only take effect on the next deployment. Point them there when they want to rotate a secret or change a config value in a deployed environment.
137
137
 
138
+ ## Preview environments
139
+
140
+ Preview environments inherit their secrets and config values from the environment they branch from, so a preview starts with the parent's configuration without re-entering anything.
141
+
142
+ To give previews a different value for a specific secret or config, set a **preview override** on the parent environment's Secrets and config page in the Specific Dashboard. Every preview branched from that environment then uses the override for that value while still inheriting the rest — handy for pointing previews at a sandbox API key or a test-only endpoint. Run `specific docs previews` for more on preview environments.
143
+
138
144
  ## Example
139
145
 
140
146
  ```hcl
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@specific.dev/cli",
3
- "version": "0.1.181",
3
+ "version": "0.1.184",
4
4
  "description": "CLI for Specific infrastructure-as-code",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",