@specific.dev/cli 0.1.94 → 0.1.95

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 (68) 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/databases/__next.!KGRlZmF1bHQp.databases.__PAGE__.txt +1 -1
  18. package/dist/admin/databases/__next.!KGRlZmF1bHQp.databases.txt +1 -1
  19. package/dist/admin/databases/__next.!KGRlZmF1bHQp.txt +1 -1
  20. package/dist/admin/databases/__next._full.txt +1 -1
  21. package/dist/admin/databases/__next._head.txt +1 -1
  22. package/dist/admin/databases/__next._index.txt +1 -1
  23. package/dist/admin/databases/__next._tree.txt +1 -1
  24. package/dist/admin/databases/index.html +1 -1
  25. package/dist/admin/databases/index.txt +1 -1
  26. package/dist/admin/fullscreen/__next._full.txt +1 -1
  27. package/dist/admin/fullscreen/__next._head.txt +1 -1
  28. package/dist/admin/fullscreen/__next._index.txt +1 -1
  29. package/dist/admin/fullscreen/__next._tree.txt +1 -1
  30. package/dist/admin/fullscreen/__next.fullscreen.__PAGE__.txt +1 -1
  31. package/dist/admin/fullscreen/__next.fullscreen.txt +1 -1
  32. package/dist/admin/fullscreen/databases/__next._full.txt +1 -1
  33. package/dist/admin/fullscreen/databases/__next._head.txt +1 -1
  34. package/dist/admin/fullscreen/databases/__next._index.txt +1 -1
  35. package/dist/admin/fullscreen/databases/__next._tree.txt +1 -1
  36. package/dist/admin/fullscreen/databases/__next.fullscreen.databases.__PAGE__.txt +1 -1
  37. package/dist/admin/fullscreen/databases/__next.fullscreen.databases.txt +1 -1
  38. package/dist/admin/fullscreen/databases/__next.fullscreen.txt +1 -1
  39. package/dist/admin/fullscreen/databases/index.html +1 -1
  40. package/dist/admin/fullscreen/databases/index.txt +1 -1
  41. package/dist/admin/fullscreen/index.html +1 -1
  42. package/dist/admin/fullscreen/index.txt +1 -1
  43. package/dist/admin/index.html +1 -1
  44. package/dist/admin/index.txt +1 -1
  45. package/dist/admin/mail/__next.!KGRlZmF1bHQp.mail.__PAGE__.txt +1 -1
  46. package/dist/admin/mail/__next.!KGRlZmF1bHQp.mail.txt +1 -1
  47. package/dist/admin/mail/__next.!KGRlZmF1bHQp.txt +1 -1
  48. package/dist/admin/mail/__next._full.txt +1 -1
  49. package/dist/admin/mail/__next._head.txt +1 -1
  50. package/dist/admin/mail/__next._index.txt +1 -1
  51. package/dist/admin/mail/__next._tree.txt +1 -1
  52. package/dist/admin/mail/index.html +1 -1
  53. package/dist/admin/mail/index.txt +1 -1
  54. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.txt +1 -1
  55. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.workflows.__PAGE__.txt +1 -1
  56. package/dist/admin/workflows/__next.!KGRlZmF1bHQp.workflows.txt +1 -1
  57. package/dist/admin/workflows/__next._full.txt +1 -1
  58. package/dist/admin/workflows/__next._head.txt +1 -1
  59. package/dist/admin/workflows/__next._index.txt +1 -1
  60. package/dist/admin/workflows/__next._tree.txt +1 -1
  61. package/dist/admin/workflows/index.html +1 -1
  62. package/dist/admin/workflows/index.txt +1 -1
  63. package/dist/cli.js +3 -3
  64. package/dist/docs/builds.md +29 -1
  65. package/package.json +1 -1
  66. /package/dist/admin/_next/static/{m1SKtyx-k_4TOHEfyAAVu → Qx0zmC7AsnwjcaN5TARyf}/_buildManifest.js +0 -0
  67. /package/dist/admin/_next/static/{m1SKtyx-k_4TOHEfyAAVu → Qx0zmC7AsnwjcaN5TARyf}/_clientMiddlewareManifest.json +0 -0
  68. /package/dist/admin/_next/static/{m1SKtyx-k_4TOHEfyAAVu → Qx0zmC7AsnwjcaN5TARyf}/_ssgManifest.js +0 -0
package/dist/cli.js CHANGED
@@ -373032,7 +373032,7 @@ function trackEvent(event, properties) {
373032
373032
  event,
373033
373033
  properties: {
373034
373034
  ...properties,
373035
- cli_version: "0.1.94",
373035
+ cli_version: "0.1.95",
373036
373036
  platform: process.platform,
373037
373037
  node_version: process.version,
373038
373038
  project_id: getProjectId()
@@ -376510,7 +376510,7 @@ function compareVersions(a, b) {
376510
376510
  return 0;
376511
376511
  }
376512
376512
  async function checkForUpdate() {
376513
- const currentVersion = "0.1.94";
376513
+ const currentVersion = "0.1.95";
376514
376514
  const response = await fetch(`${BINARIES_BASE_URL}/latest?t=${Date.now()}`);
376515
376515
  if (!response.ok) {
376516
376516
  throw new Error(`Failed to check for updates: HTTP ${response.status}`);
@@ -376709,7 +376709,7 @@ function updateCommand() {
376709
376709
  var program = new Command();
376710
376710
  var env = "production";
376711
376711
  var envLabel = env !== "production" ? `[${env.toUpperCase()}] ` : "";
376712
- program.name("specific").description(`${envLabel}Infrastructure-as-code for coding agents`).version("0.1.94").enablePositionalOptions();
376712
+ program.name("specific").description(`${envLabel}Infrastructure-as-code for coding agents`).version("0.1.95").enablePositionalOptions();
376713
376713
  program.command("init").description("Initialize project for use with a coding agent").option("--agent <name...>", "Agents to configure (cursor, claude, codex, other)").action((options2) => initCommand(options2));
376714
376714
  program.command("docs [topic]").description("Fetch LLM-optimized documentation").action(docsCommand);
376715
376715
  program.command("check").description("Validate specific.hcl configuration").action(checkCommand);
@@ -21,7 +21,7 @@ One of the following is required (mutually exclusive):
21
21
  - `command` - Build command to run after dependencies are installed (e.g., `npm run build`, `go build -o api`). Only valid with `base`, not with `dockerfile`.
22
22
  - `root` - Working directory for build commands, relative to `specific.hcl`. Defaults to `"."`. Sets the `WORKDIR` in the generated Dockerfile. Services that reference this build inherit its root. Dependency detection (e.g., `package.json`) also looks in this directory.
23
23
  - `context` - Docker build context scope, relative to `specific.hcl`. Defaults to `"."`. Controls what files are available to `COPY` in the Dockerfile and what's included in the deployment tarball. Use this when you need to include files outside of `root` (e.g., shared libraries in a monorepo).
24
- - `env` - Environment variables available during the build. Supports string literals and `service.<name>.public_url` references. These are passed as Docker build args.
24
+ - `env` - Environment variables available during the build. Supports string literals, `service.<name>.public_url` references, and string interpolation with `${service.<name>.public_url}`. These are passed as Docker build args.
25
25
 
26
26
  ## Automatic dependency installation
27
27
 
@@ -77,6 +77,21 @@ Supported reference types:
77
77
 
78
78
  - String literals (e.g., `"production"`)
79
79
  - `service.<name>.public_url` - The public domain of another service
80
+ - String interpolation with `${service.<name>.public_url}` (e.g., `"https://${service.api.public_url}/v1"`)
81
+
82
+ Since `public_url` does not include a scheme, use interpolation to compose full URLs:
83
+
84
+ ```hcl
85
+ build "web" {
86
+ base = "node"
87
+ command = "npm run build"
88
+
89
+ env = {
90
+ NEXT_PUBLIC_API_URL = "https://${service.api.public_url}/v1"
91
+ NODE_ENV = "production"
92
+ }
93
+ }
94
+ ```
80
95
 
81
96
  ## Monorepo support
82
97
 
@@ -176,6 +191,19 @@ build "spa" {
176
191
  }
177
192
  ```
178
193
 
194
+ For compiled languages (Go, Rust, Java), a `dev` block is almost always needed — without it, the build is skipped in development and no binary is produced. Use a tool that rebuilds on file changes:
195
+
196
+ ```hcl
197
+ build "api" {
198
+ base = "go"
199
+ command = "go build -o api ./cmd/api"
200
+
201
+ dev {
202
+ command = "go run ./cmd/api"
203
+ }
204
+ }
205
+ ```
206
+
179
207
  ---
180
208
 
181
209
  Run `specific docs services` for service configuration.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@specific.dev/cli",
3
- "version": "0.1.94",
3
+ "version": "0.1.95",
4
4
  "description": "CLI for Specific infrastructure-as-code",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",