@mdulghier/devtree 0.1.5
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.
- package/README.md +152 -0
- package/bin/devtree.mjs +21 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +425 -0
- package/dist/cli.js.map +1 -0
- package/dist/command-builder.d.ts +11 -0
- package/dist/command-builder.js +23 -0
- package/dist/command-builder.js.map +1 -0
- package/dist/config-command.d.ts +5 -0
- package/dist/config-command.js +181 -0
- package/dist/config-command.js.map +1 -0
- package/dist/config.d.ts +77 -0
- package/dist/config.js +43 -0
- package/dist/config.js.map +1 -0
- package/dist/env-file.d.ts +12 -0
- package/dist/env-file.js +114 -0
- package/dist/env-file.js.map +1 -0
- package/dist/gc.d.ts +23 -0
- package/dist/gc.js +243 -0
- package/dist/gc.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/instance.d.ts +18 -0
- package/dist/instance.js +98 -0
- package/dist/instance.js.map +1 -0
- package/dist/process.d.ts +13 -0
- package/dist/process.js +43 -0
- package/dist/process.js.map +1 -0
- package/dist/registry.d.ts +9 -0
- package/dist/registry.js +34 -0
- package/dist/registry.js.map +1 -0
- package/dist/tailscale.d.ts +10 -0
- package/dist/tailscale.js +65 -0
- package/dist/tailscale.js.map +1 -0
- package/dist/vite.d.ts +3 -0
- package/dist/vite.js +72 -0
- package/dist/vite.js.map +1 -0
- package/package.json +82 -0
- package/skills/devtree-run-and-operate-devtree/SKILL.md +179 -0
- package/skills/devtree-set-up-devtree/SKILL.md +355 -0
package/README.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Devtree
|
|
2
|
+
|
|
3
|
+
Run the same Vite+ app in multiple git worktrees without local-dev collisions.
|
|
4
|
+
|
|
5
|
+
Devtree gives each worktree its own public URL, managed env block, scoped dependency names, setup hooks, and garbage collection for orphaned local resources.
|
|
6
|
+
|
|
7
|
+
## Use
|
|
8
|
+
|
|
9
|
+
### 1. Install
|
|
10
|
+
|
|
11
|
+
Devtree assumes your app already uses `vite-plus`. It is a required peer dependency, but this README does not install it for you.
|
|
12
|
+
|
|
13
|
+
Install Devtree itself:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
vp add -D devtree
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Dependencies you may also need:
|
|
20
|
+
|
|
21
|
+
- `vite-plus` - required. Your app should already have it installed and be using it.
|
|
22
|
+
- `portless` - required unless you disable it with `portless.enabled: false` or `PORTLESS=0`. The `portless` command must be available on `PATH`.
|
|
23
|
+
- `tailscale` - optional, only needed when `tailscale.enabled` is `true`.
|
|
24
|
+
- `varlock` and `@varlock/vite-integration` - required only when `env.provider` is set to `"varlock"`.
|
|
25
|
+
|
|
26
|
+
Install `portless` in the repo so `vp devtree ...` can find it:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
vp add -D portless
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
If you want `portless` available outside pnpm-managed scripts too, install it globally:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
vp add -g portless
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
If you use `varlock`, install both pieces together:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
vp add -D varlock @varlock/vite-integration
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
That gives you the `varlock` CLI plus the Vite integration Devtree expects.
|
|
45
|
+
|
|
46
|
+
### What These Tools Do
|
|
47
|
+
|
|
48
|
+
- [`portless`](https://github.com/vercel-labs/portless) gives each local app a stable named URL instead of a random port. Devtree uses it to give every worktree its own predictable public URL and to run the dev server behind that URL.
|
|
49
|
+
- [`varlock`](https://github.com/dmno-dev/varlock) is an env/schema tool for loading, validating, and injecting environment variables. Devtree uses it when `env.provider` is set to `"varlock"` so hooks and dev commands run with resolved, validated env values.
|
|
50
|
+
|
|
51
|
+
### 2. Add `devtree.config.ts`
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
import { define_devtree_config } from "devtree";
|
|
55
|
+
|
|
56
|
+
export default define_devtree_config({
|
|
57
|
+
app_name: "my-app",
|
|
58
|
+
tailscale: {
|
|
59
|
+
enabled: true,
|
|
60
|
+
},
|
|
61
|
+
env: {
|
|
62
|
+
provider: "dotenv",
|
|
63
|
+
entries: ({ instance }) => [
|
|
64
|
+
{
|
|
65
|
+
kind: "value",
|
|
66
|
+
key: "APP_URL",
|
|
67
|
+
value: instance.public_url,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
kind: "value",
|
|
71
|
+
key: "DATABASE_PORT",
|
|
72
|
+
value: String(instance.allocate_port("postgres", 5400)),
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
By default Devtree manages a block inside `.env.local`. Set `env.file_path` if you want a different file.
|
|
80
|
+
|
|
81
|
+
If you enable `tailscale`, Devtree checks for the `tailscale` CLI, reads the machine's MagicDNS hostname, starts Vite on `0.0.0.0`, and adds that hostname to Vite's allowed hosts so the dev server can be reached over Tailscale.
|
|
82
|
+
|
|
83
|
+
### 3. Register the Vite plugin
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import { defineConfig } from "vite-plus";
|
|
87
|
+
import { devtree_vite_plugins } from "devtree/vite";
|
|
88
|
+
|
|
89
|
+
import devtree_config from "./devtree.config.ts";
|
|
90
|
+
|
|
91
|
+
export default defineConfig({
|
|
92
|
+
plugins: [...(await devtree_vite_plugins(devtree_config))],
|
|
93
|
+
});
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 4. Add a script
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"scripts": {
|
|
101
|
+
"devtree": "devtree"
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 5. Run it
|
|
107
|
+
|
|
108
|
+
Run these from the repo root, or any subdirectory inside a repo that has `devtree.config.ts`.
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
pnpm devtree doctor --fix
|
|
112
|
+
pnpm devtree setup
|
|
113
|
+
pnpm devtree dev
|
|
114
|
+
pnpm devtree info
|
|
115
|
+
pnpm devtree gc --dry-run
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- `doctor --fix` checks prerequisites, bootstraps `portless`, and validates Tailscale when `tailscale.enabled` is on
|
|
119
|
+
- `setup` writes env overrides, starts dependencies, runs hooks, and reports the detected Tailscale host
|
|
120
|
+
- `dev` starts the app through Devtree
|
|
121
|
+
- `info` prints the current instance URL and names
|
|
122
|
+
- `gc` removes orphaned dependency resources from deleted worktrees
|
|
123
|
+
|
|
124
|
+
Other commands:
|
|
125
|
+
|
|
126
|
+
- `devtree deps start|stop|logs`
|
|
127
|
+
- `devtree config tailscale.enabled true`
|
|
128
|
+
- `devtree env write|show`
|
|
129
|
+
|
|
130
|
+
`devtree config <key.path>` prints the current value from `devtree.config.ts`.
|
|
131
|
+
|
|
132
|
+
`devtree config <key.path> <value>` writes the new value back into `devtree.config.ts`.
|
|
133
|
+
|
|
134
|
+
Examples:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
pnpm devtree config tailscale.enabled true
|
|
138
|
+
pnpm devtree config portless.https "inherit"
|
|
139
|
+
pnpm devtree config namespace personal-dev
|
|
140
|
+
pnpm devtree config tailscale.enabled
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Add `dependencies` and `hooks` in `devtree.config.ts` when you want Compose services, custom setup steps, migrations, or pre-dev commands.
|
|
144
|
+
|
|
145
|
+
### Tailscale Notes
|
|
146
|
+
|
|
147
|
+
- Turn it on with `tailscale: { enabled: true }` in `devtree.config.ts`.
|
|
148
|
+
- Install the `tailscale` CLI and make sure you're logged in on the machine running `devtree dev`.
|
|
149
|
+
- `devtree doctor` fails when Tailscale is enabled but the CLI or MagicDNS hostname is unavailable.
|
|
150
|
+
- `devtree setup`, `devtree dev`, and `devtree info` surface the detected Tailscale host so you can verify the integration quickly.
|
|
151
|
+
|
|
152
|
+
If you use an AI agent, run `npx @tanstack/intent@latest install`.
|
package/bin/devtree.mjs
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
|
+
import { dirname, resolve } from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
|
|
8
|
+
const bin_dir = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const package_dir = dirname(bin_dir);
|
|
10
|
+
const dist_cli_path = resolve(package_dir, "dist", "cli.js");
|
|
11
|
+
const src_cli_path = resolve(package_dir, "src", "cli.ts");
|
|
12
|
+
const args = existsSync(dist_cli_path)
|
|
13
|
+
? [dist_cli_path, ...process.argv.slice(2)]
|
|
14
|
+
: ["--import", "tsx", src_cli_path, ...process.argv.slice(2)];
|
|
15
|
+
const result = spawnSync(process.execPath, args, { env: process.env, stdio: "inherit" });
|
|
16
|
+
|
|
17
|
+
if (result.error) {
|
|
18
|
+
throw result.error;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
process.exit(result.status ?? 1);
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { load_devtree_config } from "./config.js";
|
|
5
|
+
import { format_config_value, get_config_value, set_config_value } from "./config-command.js";
|
|
6
|
+
import { build_development_command } from "./command-builder.js";
|
|
7
|
+
import { ensure_env_file, get_env_file_status_message } from "./env-file.js";
|
|
8
|
+
import { run_gc } from "./gc.js";
|
|
9
|
+
import { create_devtree_instance } from "./instance.js";
|
|
10
|
+
import { command_exists, run_command_capture, run_command_inherit, } from "./process.js";
|
|
11
|
+
import { register_compose_project } from "./registry.js";
|
|
12
|
+
import { resolve_tailscale } from "./tailscale.js";
|
|
13
|
+
function print_help() {
|
|
14
|
+
console.log("Usage: devtree <command>");
|
|
15
|
+
console.log("");
|
|
16
|
+
console.log("Commands:");
|
|
17
|
+
console.log(" doctor [--fix] Check local prerequisites, portless, and tailscale");
|
|
18
|
+
console.log(" config <key> [value] Read or write a config value in devtree.config.ts");
|
|
19
|
+
console.log(" info Print the current instance URLs and resource names");
|
|
20
|
+
console.log(" setup Write env overrides, start dependencies, run hooks");
|
|
21
|
+
console.log(" dev [-- <vite args>] Start the app through devtree and portless");
|
|
22
|
+
console.log(" deps start|stop|logs Manage configured dependencies");
|
|
23
|
+
console.log(" gc [--dry-run] [-v] Remove orphaned dependency resources");
|
|
24
|
+
console.log(" env write|show Compatibility aliases for env sync and info");
|
|
25
|
+
}
|
|
26
|
+
function get_command_name(argv) {
|
|
27
|
+
return argv[0] ?? "help";
|
|
28
|
+
}
|
|
29
|
+
function get_portless_start_args(loaded_config) {
|
|
30
|
+
const args = ["proxy", "start"];
|
|
31
|
+
const https_preference = loaded_config.config.portless?.https ?? "inherit";
|
|
32
|
+
if (https_preference === true ||
|
|
33
|
+
(https_preference === "inherit" && process.env.PORTLESS_HTTPS === "1")) {
|
|
34
|
+
args.push("--https");
|
|
35
|
+
}
|
|
36
|
+
return args;
|
|
37
|
+
}
|
|
38
|
+
function create_runtime_env(instance, effective_env_values, tailscale, env_overrides) {
|
|
39
|
+
return {
|
|
40
|
+
...effective_env_values,
|
|
41
|
+
...env_overrides,
|
|
42
|
+
DEVTREE_ACTIVE: "1",
|
|
43
|
+
DEVTREE_APP_NAME: instance.app_name,
|
|
44
|
+
DEVTREE_INSTANCE_ID: instance.instance_id,
|
|
45
|
+
DEVTREE_NAMESPACE: instance.registry_namespace,
|
|
46
|
+
DEVTREE_PUBLIC_URL: instance.public_url,
|
|
47
|
+
DEVTREE_TAILSCALE_ENABLED: tailscale.enabled ? "1" : "0",
|
|
48
|
+
DEVTREE_TAILSCALE_HOST: tailscale.host ?? undefined,
|
|
49
|
+
DEVTREE_WORKTREE_PATH: instance.worktree_path,
|
|
50
|
+
DEVTREE_LABEL_PREFIX: instance.label_prefix,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function resolve_command_env(command_spec, context, env_overrides) {
|
|
54
|
+
const command_env = typeof command_spec.env === "function" ? command_spec.env(context) : command_spec.env;
|
|
55
|
+
return {
|
|
56
|
+
...context.effective_env_values,
|
|
57
|
+
...command_env,
|
|
58
|
+
...env_overrides,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function with_varlock(command_parts) {
|
|
62
|
+
return ["varlock", "run", "--", ...command_parts];
|
|
63
|
+
}
|
|
64
|
+
function run_process(command_parts, runtime_state, options) {
|
|
65
|
+
const should_use_varlock = options?.use_varlock !== false && runtime_state.loaded_config.config.env.provider === "varlock";
|
|
66
|
+
const wrapped_command = should_use_varlock ? with_varlock(command_parts) : command_parts;
|
|
67
|
+
const [command, ...args] = wrapped_command;
|
|
68
|
+
return run_command_inherit(command, args, {
|
|
69
|
+
cwd: options?.cwd,
|
|
70
|
+
allow_failure: options?.allow_failure,
|
|
71
|
+
env: create_runtime_env(runtime_state.instance, runtime_state.effective_env_values, runtime_state.tailscale, options?.env),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function get_runtime_state(loaded_config) {
|
|
75
|
+
const instance = create_devtree_instance(loaded_config);
|
|
76
|
+
const env_result = ensure_env_file(loaded_config, instance);
|
|
77
|
+
const tailscale = resolve_tailscale(loaded_config.config);
|
|
78
|
+
return {
|
|
79
|
+
loaded_config,
|
|
80
|
+
instance,
|
|
81
|
+
env_status_message: get_env_file_status_message(env_result),
|
|
82
|
+
managed_env_values: env_result.managed_env_values,
|
|
83
|
+
effective_env_values: env_result.effective_env_values,
|
|
84
|
+
tailscale,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function print_tailscale_status(tailscale) {
|
|
88
|
+
if (!tailscale.enabled) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (tailscale.host) {
|
|
92
|
+
console.log(`[devtree] Tailscale host ${tailscale.host}`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
console.warn(`[devtree] ${tailscale.error ?? "Tailscale is enabled, but no host was detected"}. Vite will stay localhost-only.`);
|
|
96
|
+
}
|
|
97
|
+
function get_command_context(runtime_state) {
|
|
98
|
+
return {
|
|
99
|
+
config: runtime_state.loaded_config.config,
|
|
100
|
+
instance: runtime_state.instance,
|
|
101
|
+
repo_root: runtime_state.loaded_config.repo_root,
|
|
102
|
+
managed_env_values: runtime_state.managed_env_values,
|
|
103
|
+
effective_env_values: runtime_state.effective_env_values,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function get_compose_dependencies(loaded_config) {
|
|
107
|
+
return (loaded_config.config.dependencies ?? []).filter((dependency) => dependency.kind === "compose");
|
|
108
|
+
}
|
|
109
|
+
function resolve_compose_project_name(dependency, context) {
|
|
110
|
+
if (!dependency.project_name) {
|
|
111
|
+
return context.instance.get_scoped_name(dependency.name);
|
|
112
|
+
}
|
|
113
|
+
return typeof dependency.project_name === "function"
|
|
114
|
+
? dependency.project_name(context)
|
|
115
|
+
: dependency.project_name;
|
|
116
|
+
}
|
|
117
|
+
function resolve_compose_env(dependency, context) {
|
|
118
|
+
const compose_env = typeof dependency.env === "function" ? dependency.env(context) : dependency.env;
|
|
119
|
+
const compose_project = resolve_compose_project_name(dependency, context);
|
|
120
|
+
return {
|
|
121
|
+
...context.effective_env_values,
|
|
122
|
+
...compose_env,
|
|
123
|
+
DOCKER_COMPOSE_PROJECT: compose_project,
|
|
124
|
+
WORKTREE_PATH: context.instance.worktree_path,
|
|
125
|
+
DEVTREE_NAMESPACE: context.instance.registry_namespace,
|
|
126
|
+
DEVTREE_LABEL_PREFIX: context.instance.label_prefix,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function run_compose_dependency(runtime_state, dependency, subcommand) {
|
|
130
|
+
const context = get_command_context(runtime_state);
|
|
131
|
+
const compose_file_path = resolve(runtime_state.loaded_config.repo_root, dependency.file_path || "docker-compose.yml");
|
|
132
|
+
const compose_project = resolve_compose_project_name(dependency, context);
|
|
133
|
+
const compose_env = resolve_compose_env(dependency, context);
|
|
134
|
+
const compose_args = ["compose", "-f", compose_file_path, "--project-name", compose_project];
|
|
135
|
+
register_compose_project({
|
|
136
|
+
registry_namespace: runtime_state.instance.registry_namespace,
|
|
137
|
+
compose_project,
|
|
138
|
+
worktree_path: runtime_state.instance.worktree_path,
|
|
139
|
+
dependency_name: dependency.name,
|
|
140
|
+
});
|
|
141
|
+
if (subcommand === "start") {
|
|
142
|
+
run_process([
|
|
143
|
+
"docker",
|
|
144
|
+
...compose_args,
|
|
145
|
+
"up",
|
|
146
|
+
"-d",
|
|
147
|
+
"--wait",
|
|
148
|
+
...(dependency.services?.length ? dependency.services : []),
|
|
149
|
+
], runtime_state, {
|
|
150
|
+
use_varlock: false,
|
|
151
|
+
env: compose_env,
|
|
152
|
+
});
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (subcommand === "stop") {
|
|
156
|
+
run_process(["docker", ...compose_args, "down"], runtime_state, {
|
|
157
|
+
use_varlock: false,
|
|
158
|
+
env: compose_env,
|
|
159
|
+
});
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
run_process([
|
|
163
|
+
"docker",
|
|
164
|
+
...compose_args,
|
|
165
|
+
"logs",
|
|
166
|
+
"-f",
|
|
167
|
+
...(dependency.services?.length ? dependency.services : []),
|
|
168
|
+
], runtime_state, {
|
|
169
|
+
use_varlock: false,
|
|
170
|
+
env: compose_env,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
function run_command_spec(runtime_state, command_spec) {
|
|
174
|
+
const context = get_command_context(runtime_state);
|
|
175
|
+
const command_env = resolve_command_env(command_spec, context);
|
|
176
|
+
run_process(command_spec.command, runtime_state, {
|
|
177
|
+
cwd: command_spec.cwd
|
|
178
|
+
? resolve(runtime_state.loaded_config.repo_root, command_spec.cwd)
|
|
179
|
+
: undefined,
|
|
180
|
+
env: command_env,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
function run_hook(runtime_state, hook_name) {
|
|
184
|
+
for (const command_spec of runtime_state.loaded_config.config.hooks?.[hook_name] ?? []) {
|
|
185
|
+
run_command_spec(runtime_state, command_spec);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function ensure_portless_ready(loaded_config, should_fix = true) {
|
|
189
|
+
if (loaded_config.config.portless?.enabled === false || process.env.PORTLESS === "0") {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (!command_exists("portless")) {
|
|
193
|
+
throw new Error("Devtree requires `portless`, but it was not found on PATH. Install it or run with PORTLESS=0.");
|
|
194
|
+
}
|
|
195
|
+
if (loaded_config.config.portless?.bootstrap === "manual") {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (!should_fix) {
|
|
199
|
+
const list_result = run_command_capture("portless", ["list"], { allow_failure: true });
|
|
200
|
+
if (list_result.status !== 0) {
|
|
201
|
+
throw new Error("Portless is installed, but the proxy is not reachable. Run `vp run devtree doctor --fix`.");
|
|
202
|
+
}
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
run_command_capture("portless", get_portless_start_args(loaded_config), { allow_failure: true });
|
|
206
|
+
}
|
|
207
|
+
function resolve_require_from_root(repo_root) {
|
|
208
|
+
return createRequire(resolve(repo_root, "package.json"));
|
|
209
|
+
}
|
|
210
|
+
function run_doctor(loaded_config, fix = false) {
|
|
211
|
+
const issues = [];
|
|
212
|
+
const compose_dependencies = get_compose_dependencies(loaded_config);
|
|
213
|
+
const tailscale = resolve_tailscale(loaded_config.config);
|
|
214
|
+
console.log(`[pass] config ${loaded_config.config_path}`);
|
|
215
|
+
if (command_exists("git")) {
|
|
216
|
+
console.log("[pass] git available");
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
issues.push("git is not available on PATH");
|
|
220
|
+
}
|
|
221
|
+
if (loaded_config.config.portless?.enabled === false || process.env.PORTLESS === "0") {
|
|
222
|
+
console.log("[skip] portless disabled");
|
|
223
|
+
}
|
|
224
|
+
else if (!command_exists("portless")) {
|
|
225
|
+
issues.push("portless is not available on PATH");
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
try {
|
|
229
|
+
ensure_portless_ready(loaded_config, fix);
|
|
230
|
+
console.log(fix ? "[pass] portless ready (bootstrapped)" : "[pass] portless reachable");
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
issues.push(error instanceof Error ? error.message : String(error));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (!tailscale.enabled) {
|
|
237
|
+
console.log("[skip] tailscale disabled");
|
|
238
|
+
}
|
|
239
|
+
else if (tailscale.host) {
|
|
240
|
+
console.log(`[pass] tailscale host ${tailscale.host}`);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
issues.push(tailscale.error ?? "tailscale is enabled, but no host was detected");
|
|
244
|
+
}
|
|
245
|
+
if (compose_dependencies.length > 0) {
|
|
246
|
+
const docker_result = run_command_capture("docker", ["info"], { allow_failure: true });
|
|
247
|
+
if (docker_result.status === 0) {
|
|
248
|
+
console.log("[pass] docker available");
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
issues.push("docker is not available or Docker Desktop is not running");
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (loaded_config.config.env.provider === "varlock") {
|
|
255
|
+
if (command_exists("varlock")) {
|
|
256
|
+
console.log("[pass] varlock CLI available");
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
issues.push("varlock is enabled, but the `varlock` command is not available");
|
|
260
|
+
}
|
|
261
|
+
const require_from_root = resolve_require_from_root(loaded_config.repo_root);
|
|
262
|
+
try {
|
|
263
|
+
require_from_root.resolve("@varlock/vite-integration");
|
|
264
|
+
console.log("[pass] @varlock/vite-integration installed");
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
issues.push("varlock is enabled, but @varlock/vite-integration is not installed");
|
|
268
|
+
}
|
|
269
|
+
const schema_path = resolve(loaded_config.repo_root, loaded_config.config.env.schema_path || ".env.schema");
|
|
270
|
+
if (existsSync(schema_path)) {
|
|
271
|
+
console.log(`[pass] varlock schema ${schema_path}`);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
issues.push(`varlock schema file is missing: ${schema_path}`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (issues.length === 0) {
|
|
278
|
+
console.log("");
|
|
279
|
+
console.log("Doctor looks clean.");
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
console.log("");
|
|
283
|
+
for (const issue of issues) {
|
|
284
|
+
console.log(`[fail] ${issue}`);
|
|
285
|
+
}
|
|
286
|
+
process.exit(1);
|
|
287
|
+
}
|
|
288
|
+
function print_info(runtime_state) {
|
|
289
|
+
console.log(`Public URL: ${runtime_state.instance.public_url}`);
|
|
290
|
+
console.log(`App name: ${runtime_state.instance.app_name}`);
|
|
291
|
+
console.log(`Instance ID: ${runtime_state.instance.instance_id}`);
|
|
292
|
+
console.log(`Scoped name: ${runtime_state.instance.scoped_name}`);
|
|
293
|
+
console.log(`Worktree path: ${runtime_state.instance.worktree_path}`);
|
|
294
|
+
console.log(`Env provider: ${runtime_state.loaded_config.config.env.provider}`);
|
|
295
|
+
console.log(`Env file: ${runtime_state.instance.env_file_path}`);
|
|
296
|
+
if (runtime_state.tailscale.enabled) {
|
|
297
|
+
console.log(`Tailscale host: ${runtime_state.tailscale.host ?? "unavailable"}`);
|
|
298
|
+
}
|
|
299
|
+
for (const dependency of get_compose_dependencies(runtime_state.loaded_config)) {
|
|
300
|
+
const compose_project = resolve_compose_project_name(dependency, get_command_context(runtime_state));
|
|
301
|
+
console.log(`Compose project (${dependency.name}): ${compose_project}`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
async function main() {
|
|
305
|
+
const argv = process.argv.slice(2);
|
|
306
|
+
const command_name = get_command_name(argv);
|
|
307
|
+
if (command_name === "help") {
|
|
308
|
+
print_help();
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
const loaded_config = await load_devtree_config();
|
|
312
|
+
if (command_name === "doctor") {
|
|
313
|
+
run_doctor(loaded_config, argv.includes("--fix"));
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (command_name === "config") {
|
|
317
|
+
const config_key = argv[1];
|
|
318
|
+
if (!config_key) {
|
|
319
|
+
throw new Error("Usage: devtree config <key.path> [value]");
|
|
320
|
+
}
|
|
321
|
+
if (argv.length === 2) {
|
|
322
|
+
console.log(format_config_value(get_config_value(loaded_config.config, config_key)));
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
set_config_value(loaded_config.config_path, config_key, argv.slice(2).join(" "));
|
|
326
|
+
const updated_config = await load_devtree_config();
|
|
327
|
+
console.log(`${config_key} = ${format_config_value(get_config_value(updated_config.config, config_key))}`);
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
const runtime_state = get_runtime_state(loaded_config);
|
|
331
|
+
if (command_name === "info") {
|
|
332
|
+
console.log(runtime_state.env_status_message);
|
|
333
|
+
print_info(runtime_state);
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
if (command_name === "env") {
|
|
337
|
+
const env_subcommand = argv[1];
|
|
338
|
+
if (env_subcommand === "write") {
|
|
339
|
+
console.log(runtime_state.env_status_message);
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
if (env_subcommand === "show") {
|
|
343
|
+
print_info(runtime_state);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
throw new Error("Usage: vp run devtree env <write|show>");
|
|
347
|
+
}
|
|
348
|
+
if (command_name === "gc") {
|
|
349
|
+
run_gc(loaded_config, runtime_state.instance, {
|
|
350
|
+
dry_run: argv.includes("--dry-run"),
|
|
351
|
+
verbose: argv.includes("--verbose") || argv.includes("-v"),
|
|
352
|
+
});
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
console.log(runtime_state.env_status_message);
|
|
356
|
+
if (command_name === "setup") {
|
|
357
|
+
ensure_portless_ready(loaded_config);
|
|
358
|
+
print_tailscale_status(runtime_state.tailscale);
|
|
359
|
+
for (const dependency of loaded_config.config.dependencies ?? []) {
|
|
360
|
+
if (dependency.kind === "compose") {
|
|
361
|
+
run_compose_dependency(runtime_state, dependency, "start");
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
run_command_spec(runtime_state, dependency.start);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
run_hook(runtime_state, "setup");
|
|
368
|
+
run_hook(runtime_state, "migrate");
|
|
369
|
+
run_hook(runtime_state, "post_setup");
|
|
370
|
+
console.log(`Open ${runtime_state.instance.public_url} after starting the app.`);
|
|
371
|
+
if (runtime_state.tailscale.host) {
|
|
372
|
+
console.log(`Tailscale hostname available to Vite: ${runtime_state.tailscale.host}`);
|
|
373
|
+
}
|
|
374
|
+
console.log("Run `vp run devtree dev` to launch the worktree-scoped dev server.");
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
if (command_name === "deps") {
|
|
378
|
+
const deps_subcommand = argv[1];
|
|
379
|
+
if (deps_subcommand !== "start" && deps_subcommand !== "stop" && deps_subcommand !== "logs") {
|
|
380
|
+
throw new Error("Usage: vp run devtree deps <start|stop|logs>");
|
|
381
|
+
}
|
|
382
|
+
for (const dependency of loaded_config.config.dependencies ?? []) {
|
|
383
|
+
if (dependency.kind === "compose") {
|
|
384
|
+
run_compose_dependency(runtime_state, dependency, deps_subcommand);
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
387
|
+
const command_spec = deps_subcommand === "start"
|
|
388
|
+
? dependency.start
|
|
389
|
+
: deps_subcommand === "stop"
|
|
390
|
+
? dependency.stop
|
|
391
|
+
: dependency.logs;
|
|
392
|
+
if (command_spec) {
|
|
393
|
+
run_command_spec(runtime_state, command_spec);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
if (command_name === "dev") {
|
|
399
|
+
const extra_args = argv.slice(1);
|
|
400
|
+
if (!runtime_state.instance.portless_enabled && !process.env.BETTER_AUTH_URL) {
|
|
401
|
+
console.warn("PORTLESS=0 disables the injected public URL. Set BETTER_AUTH_URL before signing in.");
|
|
402
|
+
}
|
|
403
|
+
ensure_portless_ready(loaded_config);
|
|
404
|
+
print_tailscale_status(runtime_state.tailscale);
|
|
405
|
+
run_hook(runtime_state, "pre_dev");
|
|
406
|
+
const development_command = build_development_command({
|
|
407
|
+
app_name: runtime_state.instance.app_name,
|
|
408
|
+
extra_args,
|
|
409
|
+
portless_enabled: runtime_state.instance.portless_enabled,
|
|
410
|
+
vite_host: runtime_state.tailscale.host ? "0.0.0.0" : undefined,
|
|
411
|
+
use_varlock: loaded_config.config.env.provider === "varlock",
|
|
412
|
+
});
|
|
413
|
+
const [command, ...args] = development_command;
|
|
414
|
+
run_command_inherit(command, args, {
|
|
415
|
+
env: create_runtime_env(runtime_state.instance, runtime_state.effective_env_values, runtime_state.tailscale),
|
|
416
|
+
});
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
throw new Error("Unknown command.");
|
|
420
|
+
}
|
|
421
|
+
main().catch((error) => {
|
|
422
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
423
|
+
process.exit(1);
|
|
424
|
+
});
|
|
425
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function strip_passthrough_delimiter(args: string[]): string[];
|
|
2
|
+
export declare function build_vite_dev_command(extra_args: string[], host?: string): string[];
|
|
3
|
+
export declare function build_portless_command(app_name: string, command_parts: string[]): string[];
|
|
4
|
+
export declare function build_varlock_command(command_parts: string[]): string[];
|
|
5
|
+
export declare function build_development_command(options: {
|
|
6
|
+
app_name: string;
|
|
7
|
+
extra_args: string[];
|
|
8
|
+
portless_enabled: boolean;
|
|
9
|
+
vite_host?: string;
|
|
10
|
+
use_varlock: boolean;
|
|
11
|
+
}): string[];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function strip_passthrough_delimiter(args) {
|
|
2
|
+
return args[0] === "--" ? args.slice(1) : args;
|
|
3
|
+
}
|
|
4
|
+
export function build_vite_dev_command(extra_args, host = "127.0.0.1") {
|
|
5
|
+
return ["vp", "dev", "--host", host, "--clearScreen", "false", ...extra_args];
|
|
6
|
+
}
|
|
7
|
+
export function build_portless_command(app_name, command_parts) {
|
|
8
|
+
return ["portless", "run", "--force", "--name", app_name, "--", ...command_parts];
|
|
9
|
+
}
|
|
10
|
+
export function build_varlock_command(command_parts) {
|
|
11
|
+
return ["varlock", "run", "--", ...command_parts];
|
|
12
|
+
}
|
|
13
|
+
export function build_development_command(options) {
|
|
14
|
+
let command_parts = build_vite_dev_command(strip_passthrough_delimiter(options.extra_args), options.vite_host);
|
|
15
|
+
if (options.portless_enabled) {
|
|
16
|
+
command_parts = build_portless_command(options.app_name, command_parts);
|
|
17
|
+
}
|
|
18
|
+
if (options.use_varlock) {
|
|
19
|
+
command_parts = build_varlock_command(command_parts);
|
|
20
|
+
}
|
|
21
|
+
return command_parts;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=command-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-builder.js","sourceRoot":"","sources":["../src/command-builder.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,2BAA2B,CAAC,IAAc;IACxD,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAAoB,EAAE,IAAI,GAAG,WAAW;IAC7E,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,aAAuB;IAC9E,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,aAAuB;IAC3D,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAMzC;IACC,IAAI,aAAa,GAAG,sBAAsB,CACxC,2BAA2B,CAAC,OAAO,CAAC,UAAU,CAAC,EAC/C,OAAO,CAAC,SAAS,CAClB,CAAC;IAEF,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
|