@pushto/cli 0.2.0 → 0.4.6

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 (188) hide show
  1. package/dist/commands/__tests__/deploy-domain.test.d.ts +2 -0
  2. package/dist/commands/__tests__/deploy-domain.test.d.ts.map +1 -0
  3. package/dist/commands/__tests__/deploy-domain.test.js +41 -0
  4. package/dist/commands/__tests__/deploy-domain.test.js.map +1 -0
  5. package/dist/commands/__tests__/headless-smoke.test.d.ts +2 -0
  6. package/dist/commands/__tests__/headless-smoke.test.d.ts.map +1 -0
  7. package/dist/commands/__tests__/headless-smoke.test.js +110 -0
  8. package/dist/commands/__tests__/headless-smoke.test.js.map +1 -0
  9. package/dist/commands/auth.d.ts +2 -0
  10. package/dist/commands/auth.d.ts.map +1 -0
  11. package/dist/commands/auth.js +77 -0
  12. package/dist/commands/auth.js.map +1 -0
  13. package/dist/commands/cron.d.ts +2 -0
  14. package/dist/commands/cron.d.ts.map +1 -0
  15. package/dist/commands/cron.js +157 -0
  16. package/dist/commands/cron.js.map +1 -0
  17. package/dist/commands/db.d.ts +4 -0
  18. package/dist/commands/db.d.ts.map +1 -0
  19. package/dist/commands/db.js +63 -0
  20. package/dist/commands/db.js.map +1 -0
  21. package/dist/commands/deploy.d.ts +16 -1
  22. package/dist/commands/deploy.d.ts.map +1 -1
  23. package/dist/commands/deploy.js +344 -68
  24. package/dist/commands/deploy.js.map +1 -1
  25. package/dist/commands/doctor.d.ts.map +1 -1
  26. package/dist/commands/doctor.js +401 -69
  27. package/dist/commands/doctor.js.map +1 -1
  28. package/dist/commands/domain.d.ts.map +1 -1
  29. package/dist/commands/domain.js +70 -18
  30. package/dist/commands/domain.js.map +1 -1
  31. package/dist/commands/echo.d.ts +2 -0
  32. package/dist/commands/echo.d.ts.map +1 -0
  33. package/dist/commands/echo.js +227 -0
  34. package/dist/commands/echo.js.map +1 -0
  35. package/dist/commands/env.d.ts +3 -1
  36. package/dist/commands/env.d.ts.map +1 -1
  37. package/dist/commands/env.js +76 -50
  38. package/dist/commands/env.js.map +1 -1
  39. package/dist/commands/init.d.ts +3 -1
  40. package/dist/commands/init.d.ts.map +1 -1
  41. package/dist/commands/init.js +58 -11
  42. package/dist/commands/init.js.map +1 -1
  43. package/dist/commands/login.d.ts.map +1 -1
  44. package/dist/commands/login.js +80 -39
  45. package/dist/commands/login.js.map +1 -1
  46. package/dist/commands/logs.d.ts +3 -1
  47. package/dist/commands/logs.d.ts.map +1 -1
  48. package/dist/commands/logs.js +77 -21
  49. package/dist/commands/logs.js.map +1 -1
  50. package/dist/commands/mail.d.ts +2 -0
  51. package/dist/commands/mail.d.ts.map +1 -0
  52. package/dist/commands/mail.js +105 -0
  53. package/dist/commands/mail.js.map +1 -0
  54. package/dist/commands/open.d.ts.map +1 -1
  55. package/dist/commands/open.js +32 -8
  56. package/dist/commands/open.js.map +1 -1
  57. package/dist/commands/preview.d.ts +22 -0
  58. package/dist/commands/preview.d.ts.map +1 -0
  59. package/dist/commands/preview.js +223 -0
  60. package/dist/commands/preview.js.map +1 -0
  61. package/dist/commands/status.d.ts +3 -1
  62. package/dist/commands/status.d.ts.map +1 -1
  63. package/dist/commands/status.js +62 -12
  64. package/dist/commands/status.js.map +1 -1
  65. package/dist/commands/upgrade.d.ts.map +1 -1
  66. package/dist/commands/upgrade.js +73 -10
  67. package/dist/commands/upgrade.js.map +1 -1
  68. package/dist/commands/use.d.ts +2 -0
  69. package/dist/commands/use.d.ts.map +1 -0
  70. package/dist/commands/use.js +108 -0
  71. package/dist/commands/use.js.map +1 -0
  72. package/dist/commands/vault.d.ts +2 -0
  73. package/dist/commands/vault.d.ts.map +1 -0
  74. package/dist/commands/vault.js +119 -0
  75. package/dist/commands/vault.js.map +1 -0
  76. package/dist/commands/whoami.d.ts.map +1 -1
  77. package/dist/commands/whoami.js +12 -1
  78. package/dist/commands/whoami.js.map +1 -1
  79. package/dist/index.js +123 -13
  80. package/dist/index.js.map +1 -1
  81. package/dist/lib/__tests__/build-runner.test.d.ts +2 -0
  82. package/dist/lib/__tests__/build-runner.test.d.ts.map +1 -0
  83. package/dist/lib/__tests__/build-runner.test.js +119 -0
  84. package/dist/lib/__tests__/build-runner.test.js.map +1 -0
  85. package/dist/lib/__tests__/cron-tail.test.d.ts +2 -0
  86. package/dist/lib/__tests__/cron-tail.test.d.ts.map +1 -0
  87. package/dist/lib/__tests__/cron-tail.test.js +27 -0
  88. package/dist/lib/__tests__/cron-tail.test.js.map +1 -0
  89. package/dist/lib/__tests__/detect-static-framework.test.d.ts +2 -0
  90. package/dist/lib/__tests__/detect-static-framework.test.d.ts.map +1 -0
  91. package/dist/lib/__tests__/detect-static-framework.test.js +146 -0
  92. package/dist/lib/__tests__/detect-static-framework.test.js.map +1 -0
  93. package/dist/lib/__tests__/errors.test.d.ts +2 -0
  94. package/dist/lib/__tests__/errors.test.d.ts.map +1 -0
  95. package/dist/lib/__tests__/errors.test.js +56 -0
  96. package/dist/lib/__tests__/errors.test.js.map +1 -0
  97. package/dist/lib/__tests__/interactive.test.d.ts +2 -0
  98. package/dist/lib/__tests__/interactive.test.d.ts.map +1 -0
  99. package/dist/lib/__tests__/interactive.test.js +79 -0
  100. package/dist/lib/__tests__/interactive.test.js.map +1 -0
  101. package/dist/lib/__tests__/output.test.d.ts +2 -0
  102. package/dist/lib/__tests__/output.test.d.ts.map +1 -0
  103. package/dist/lib/__tests__/output.test.js +144 -0
  104. package/dist/lib/__tests__/output.test.js.map +1 -0
  105. package/dist/lib/__tests__/prepare-artifact.test.d.ts +2 -0
  106. package/dist/lib/__tests__/prepare-artifact.test.d.ts.map +1 -0
  107. package/dist/lib/__tests__/prepare-artifact.test.js +55 -0
  108. package/dist/lib/__tests__/prepare-artifact.test.js.map +1 -0
  109. package/dist/lib/__tests__/preview-args.test.d.ts +2 -0
  110. package/dist/lib/__tests__/preview-args.test.d.ts.map +1 -0
  111. package/dist/lib/__tests__/preview-args.test.js +37 -0
  112. package/dist/lib/__tests__/preview-args.test.js.map +1 -0
  113. package/dist/lib/api.d.ts +2 -0
  114. package/dist/lib/api.d.ts.map +1 -1
  115. package/dist/lib/api.js +38 -5
  116. package/dist/lib/api.js.map +1 -1
  117. package/dist/lib/ask.d.ts +15 -0
  118. package/dist/lib/ask.d.ts.map +1 -0
  119. package/dist/lib/ask.js +24 -0
  120. package/dist/lib/ask.js.map +1 -0
  121. package/dist/lib/build-runner.d.ts +25 -0
  122. package/dist/lib/build-runner.d.ts.map +1 -0
  123. package/dist/lib/build-runner.js +141 -0
  124. package/dist/lib/build-runner.js.map +1 -0
  125. package/dist/lib/config.d.ts +6 -0
  126. package/dist/lib/config.d.ts.map +1 -1
  127. package/dist/lib/config.js +13 -2
  128. package/dist/lib/config.js.map +1 -1
  129. package/dist/lib/cron-tail.d.ts +10 -0
  130. package/dist/lib/cron-tail.d.ts.map +1 -0
  131. package/dist/lib/cron-tail.js +5 -0
  132. package/dist/lib/cron-tail.js.map +1 -0
  133. package/dist/lib/detect-static-framework.d.ts +31 -0
  134. package/dist/lib/detect-static-framework.d.ts.map +1 -0
  135. package/dist/lib/detect-static-framework.js +96 -0
  136. package/dist/lib/detect-static-framework.js.map +1 -0
  137. package/dist/lib/env-parse.d.ts +48 -0
  138. package/dist/lib/env-parse.d.ts.map +1 -0
  139. package/dist/lib/env-parse.js +91 -0
  140. package/dist/lib/env-parse.js.map +1 -0
  141. package/dist/lib/errors.d.ts +111 -0
  142. package/dist/lib/errors.d.ts.map +1 -0
  143. package/dist/lib/errors.js +64 -0
  144. package/dist/lib/errors.js.map +1 -0
  145. package/dist/lib/file-walker.d.ts +23 -0
  146. package/dist/lib/file-walker.d.ts.map +1 -0
  147. package/dist/lib/file-walker.js +114 -0
  148. package/dist/lib/file-walker.js.map +1 -0
  149. package/dist/lib/interactive.d.ts +13 -0
  150. package/dist/lib/interactive.d.ts.map +1 -0
  151. package/dist/lib/interactive.js +24 -0
  152. package/dist/lib/interactive.js.map +1 -0
  153. package/dist/lib/output.d.ts +24 -0
  154. package/dist/lib/output.d.ts.map +1 -0
  155. package/dist/lib/output.js +71 -0
  156. package/dist/lib/output.js.map +1 -0
  157. package/dist/lib/prepare-artifact.d.ts +22 -0
  158. package/dist/lib/prepare-artifact.d.ts.map +1 -0
  159. package/dist/lib/prepare-artifact.js +26 -0
  160. package/dist/lib/prepare-artifact.js.map +1 -0
  161. package/dist/lib/preview-args.d.ts +20 -0
  162. package/dist/lib/preview-args.d.ts.map +1 -0
  163. package/dist/lib/preview-args.js +19 -0
  164. package/dist/lib/preview-args.js.map +1 -0
  165. package/dist/lib/resolve-slug.d.ts.map +1 -1
  166. package/dist/lib/resolve-slug.js +9 -2
  167. package/dist/lib/resolve-slug.js.map +1 -1
  168. package/dist/lib/safe-json.d.ts +7 -2
  169. package/dist/lib/safe-json.d.ts.map +1 -1
  170. package/dist/lib/safe-json.js +23 -4
  171. package/dist/lib/safe-json.js.map +1 -1
  172. package/dist/lib/update-check.d.ts +17 -0
  173. package/dist/lib/update-check.d.ts.map +1 -0
  174. package/dist/lib/update-check.js +81 -0
  175. package/dist/lib/update-check.js.map +1 -0
  176. package/dist/lib/upload-limits.d.ts +17 -0
  177. package/dist/lib/upload-limits.d.ts.map +1 -0
  178. package/dist/lib/upload-limits.js +17 -0
  179. package/dist/lib/upload-limits.js.map +1 -0
  180. package/dist/lib/zip-project.d.ts +19 -0
  181. package/dist/lib/zip-project.d.ts.map +1 -0
  182. package/dist/lib/zip-project.js +39 -0
  183. package/dist/lib/zip-project.js.map +1 -0
  184. package/dist/version.d.ts +2 -0
  185. package/dist/version.d.ts.map +1 -0
  186. package/dist/version.js +16 -0
  187. package/dist/version.js.map +1 -0
  188. package/package.json +5 -8
@@ -1,83 +1,412 @@
1
1
  import chalk from 'chalk';
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
+ import { execSync } from 'node:child_process';
4
5
  import { getToken } from '../lib/config.js';
5
6
  import { resolveSlug } from '../lib/resolve-slug.js';
6
7
  import { api } from '../lib/api.js';
8
+ import { safeJson } from '../lib/safe-json.js';
9
+ import { checkForUpdate, getCurrentVersion } from '../lib/update-check.js';
10
+ import { walkProject } from '../lib/file-walker.js';
11
+ import { SERVER_UPLOAD_CAP_BYTES, fmtMB } from '../lib/upload-limits.js';
12
+ import { detectStaticFramework } from '../lib/detect-static-framework.js';
7
13
  export const doctor = async () => {
8
14
  console.log(chalk.green('> pushto doctor\n'));
9
15
  const checks = [];
10
16
  const cwd = process.cwd();
11
- // 1. Auth check
17
+ // ── 0. CLI health ──
18
+ // Detect the most common CLI-side support tickets up front: stale brew
19
+ // binaries, outdated installs, and version mismatches between what brew
20
+ // thinks is installed and what the binary actually reports. (We hit all
21
+ // three of these ourselves while shipping 0.4.x — the user sees a
22
+ // mysterious "0.0.0-dev" and can't tell if their fix worked.)
23
+ const installedVersion = getCurrentVersion();
24
+ if (installedVersion === '0.0.0-dev') {
25
+ checks.push({
26
+ name: 'cli version',
27
+ status: 'fail',
28
+ message: 'binary reports 0.0.0-dev — version not embedded. reinstall: brew uninstall pushto && brew install mydude-industries/tap/pushto',
29
+ });
30
+ }
31
+ else {
32
+ checks.push({ name: 'cli version', status: 'pass', message: installedVersion });
33
+ }
34
+ // Brew/binary mismatch: if you installed via brew, what brew thinks the
35
+ // version is should match what the binary reports. Mismatch usually means
36
+ // a stale shell hash, multiple pushto installs, or a partial brew upgrade.
37
+ if (process.execPath.includes('/Cellar/') || process.execPath.startsWith('/opt/homebrew/') || process.execPath.includes('linuxbrew')) {
38
+ try {
39
+ const brewVersion = execSync('brew list --versions pushto 2>/dev/null', { encoding: 'utf-8' })
40
+ .trim().split(/\s+/)[1] ?? '';
41
+ if (brewVersion && brewVersion !== installedVersion && installedVersion !== '0.0.0-dev') {
42
+ checks.push({
43
+ name: 'brew sync',
44
+ status: 'warn',
45
+ message: `brew has ${brewVersion} but binary reports ${installedVersion}. try: hash -r && pushto --version`,
46
+ });
47
+ }
48
+ }
49
+ catch { /* brew not on PATH or pushto not installed via brew — skip */ }
50
+ }
51
+ // Update available?
52
+ try {
53
+ const updateInfo = await checkForUpdate(false);
54
+ if (updateInfo?.needsUpdate) {
55
+ checks.push({
56
+ name: 'update',
57
+ status: 'warn',
58
+ message: `${updateInfo.current} → ${updateInfo.latest} available. run: pushto upgrade`,
59
+ });
60
+ }
61
+ }
62
+ catch { /* offline or registry down — skip */ }
63
+ // ── 1. Auth ──
12
64
  const token = getToken();
13
65
  checks.push(token
14
66
  ? { name: 'auth', status: 'pass', message: 'logged in' }
15
67
  : { name: 'auth', status: 'fail', message: 'not logged in. run pushto login' });
16
- // 2. Project linked
68
+ // ── 2. Project linked ──
17
69
  const slug = resolveSlug();
18
70
  checks.push(slug
19
71
  ? { name: 'project', status: 'pass', message: `linked to ${slug}` }
20
72
  : { name: 'project', status: 'fail', message: 'no .pushto file. run pushto init <name>' });
21
- // 3. Package.json exists
22
- const pkgPath = path.join(cwd, 'package.json');
23
- const hasPkg = fs.existsSync(pkgPath);
24
- checks.push(hasPkg
25
- ? { name: 'package.json', status: 'pass', message: 'found' }
26
- : { name: 'package.json', status: 'warn', message: 'not found. static site? that works too.' });
27
- // 4. Framework detection
73
+ // ── 3. Framework detection (Node + Python + Go + Rust + Ruby) ──
74
+ // The Python branch checks all three install-target files, matching what
75
+ // detect.ts handles in production (pip / pipenv / poetry / PEP 621). Pre-fix
76
+ // doctor only checked requirements.txt — Pipfile-only or pyproject-only
77
+ // projects got "no known project files found" and the user thought their
78
+ // project wasn't supported, even though deploy would work fine.
79
+ const hasPkg = fs.existsSync(path.join(cwd, 'package.json'));
80
+ const hasRequirements = fs.existsSync(path.join(cwd, 'requirements.txt'));
81
+ const hasPipfile = fs.existsSync(path.join(cwd, 'Pipfile'));
82
+ const hasPyproject = fs.existsSync(path.join(cwd, 'pyproject.toml'));
83
+ const hasPython = hasRequirements || hasPipfile || hasPyproject;
84
+ const hasGoMod = fs.existsSync(path.join(cwd, 'go.mod'));
85
+ const hasCargo = fs.existsSync(path.join(cwd, 'Cargo.toml'));
86
+ const hasGemfile = fs.existsSync(path.join(cwd, 'Gemfile'));
87
+ const hasHtml = fs.existsSync(path.join(cwd, 'index.html'));
88
+ let detectedFramework = null;
89
+ let detectedRuntime = null;
28
90
  if (hasPkg) {
29
91
  try {
30
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
92
+ const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf-8'));
31
93
  const deps = { ...pkg.dependencies, ...pkg.devDependencies };
32
- const framework = deps['next'] ? 'Next.js' :
33
- deps['react'] ? 'React' :
34
- deps['vue'] ? 'Vue' :
35
- deps['svelte'] ? 'Svelte' :
36
- deps['@sveltejs/kit'] ? 'SvelteKit' :
37
- deps['astro'] ? 'Astro' :
38
- deps['nuxt'] ? 'Nuxt' :
39
- deps['express'] ? 'Express' :
40
- deps['fastify'] ? 'Fastify' :
41
- deps['hono'] ? 'Hono' :
42
- null;
43
- checks.push(framework
44
- ? { name: 'framework', status: 'pass', message: `detected ${framework}` }
45
- : { name: 'framework', status: 'warn', message: 'no known framework detected. nixpacks will figure it out.' });
46
- // 5. Build script
47
- const hasBuild = pkg.scripts?.build;
48
- checks.push(hasBuild
49
- ? { name: 'build script', status: 'pass', message: `"${hasBuild}"` }
50
- : { name: 'build script', status: 'warn', message: 'no build script. might be fine for static sites.' });
51
- // 6. Node version
52
- const nodeVersion = pkg.engines?.node;
53
- if (nodeVersion) {
54
- checks.push({ name: 'node version', status: 'pass', message: nodeVersion });
94
+ detectedRuntime = 'node';
95
+ // Static-output frameworks (vite, astro, gatsby, angular, cra, eleventy)
96
+ // build HERE, on this machine, and ship their output dir — they never
97
+ // need `scripts.start`, so the missing-start-script check below would
98
+ // be a false "fail" for a project that deploys just fine. Check this
99
+ // FIRST and skip the container-shaped checks entirely when it hits.
100
+ const staticFw = detectStaticFramework(cwd);
101
+ if (staticFw) {
102
+ detectedFramework = staticFw.framework;
103
+ checks.push({
104
+ name: 'framework',
105
+ status: 'pass',
106
+ message: `detected ${staticFw.framework}. pushto builds it on this machine and ships ${staticFw.outputDirs[0]}/ as a static site.`,
107
+ });
108
+ }
109
+ else {
110
+ detectedFramework =
111
+ deps['next'] ? 'Next.js' :
112
+ deps['vue'] ? 'Vue' :
113
+ deps['svelte'] ? 'Svelte' :
114
+ deps['express'] ? 'Express' :
115
+ deps['fastify'] ? 'Fastify' :
116
+ deps['hono'] ? 'Hono' :
117
+ 'Node.js';
118
+ checks.push({ name: 'framework', status: 'pass', message: `detected ${detectedFramework}` });
119
+ if (pkg.scripts?.build) {
120
+ checks.push({ name: 'build script', status: 'pass', message: `"${pkg.scripts.build}"` });
121
+ }
122
+ // The generated Dockerfile's CMD runs `npm start` for every Node
123
+ // framework. If `scripts.start` is missing, the container fails on
124
+ // first run with `npm ERR! Missing script: "start"` — the deploy
125
+ // shows LIVE briefly, then container alive verification flips it
126
+ // to FAILED. doctor catches this up front so the user fixes
127
+ // package.json before they hit the loop.
128
+ if (!pkg.scripts?.start) {
129
+ checks.push({
130
+ name: 'start script',
131
+ status: 'fail',
132
+ message: 'no `scripts.start` in package.json. add `"start": "node <your-entry-file>"` or the container will crash on boot.',
133
+ });
134
+ }
135
+ else {
136
+ checks.push({ name: 'start script', status: 'pass', message: `"${pkg.scripts.start}"` });
137
+ }
138
+ // Node workspace recognition (mirrors detect.ts:detectNodeWorkspace).
139
+ // Without surfacing this, a user with a pnpm/yarn/npm workspace can't
140
+ // tell if pushto's install step will pick up workspace deps — they
141
+ // sometimes pre-emptively flatten the repo for fear of broken builds.
142
+ if (fs.existsSync(path.join(cwd, 'pnpm-workspace.yaml'))) {
143
+ checks.push({
144
+ name: 'workspace',
145
+ status: 'pass',
146
+ message: 'pnpm-workspace.yaml detected. workspace member packages will be installed.',
147
+ });
148
+ }
149
+ else if (Array.isArray(pkg.workspaces) || (pkg.workspaces && typeof pkg.workspaces === 'object')) {
150
+ checks.push({
151
+ name: 'workspace',
152
+ status: 'pass',
153
+ message: 'npm/yarn workspaces detected. member packages will be installed.',
154
+ });
155
+ }
55
156
  }
56
157
  }
57
158
  catch {
58
- checks.push({ name: 'package.json', status: 'warn', message: 'could not parse package.json' });
159
+ checks.push({ name: 'package.json', status: 'warn', message: 'could not parse' });
160
+ }
161
+ }
162
+ else if (hasPython) {
163
+ detectedRuntime = 'python';
164
+ // Read whichever target file exists — the framework hint comes from
165
+ // any of pip/pipenv/poetry's dep listings. Pipfile + pyproject.toml
166
+ // both look enough like requirements.txt for the substring sniff to
167
+ // work for the common cases (flask/django/fastapi).
168
+ let depHints = '';
169
+ const installer = hasRequirements ? 'pip'
170
+ : hasPipfile ? 'pipenv'
171
+ : 'poetry/pyproject';
172
+ try {
173
+ if (hasRequirements) {
174
+ depHints = fs.readFileSync(path.join(cwd, 'requirements.txt'), 'utf-8');
175
+ }
176
+ else if (hasPipfile) {
177
+ depHints = fs.readFileSync(path.join(cwd, 'Pipfile'), 'utf-8');
178
+ }
179
+ else if (hasPyproject) {
180
+ depHints = fs.readFileSync(path.join(cwd, 'pyproject.toml'), 'utf-8');
181
+ }
182
+ }
183
+ catch { /* unreadable — leave depHints empty, fall through to generic */ }
184
+ const lower = depHints.toLowerCase();
185
+ detectedFramework =
186
+ lower.includes('flask') ? 'Flask' :
187
+ lower.includes('django') ? 'Django' :
188
+ lower.includes('fastapi') ? 'FastAPI' :
189
+ 'Python';
190
+ checks.push({ name: 'framework', status: 'pass', message: `detected ${detectedFramework} (${installer})` });
191
+ // Frontend builder recognition (mirrors detect.ts:detectFrontendBuild).
192
+ // Python projects with a sibling JS frontend at frontend/ get a Node
193
+ // builder stage prepended to the Dockerfile that runs install + build,
194
+ // then COPYs the resulting frontend/dist into the Python runtime image.
195
+ // Surface this so users with a Flask+Vite or Django+Vite project know
196
+ // their frontend will actually be built — pre-fix doctor was silent
197
+ // and users would skip pushto thinking JS frontends weren't supported.
198
+ if (fs.existsSync(path.join(cwd, 'frontend/package.json'))) {
199
+ try {
200
+ const fePkg = JSON.parse(fs.readFileSync(path.join(cwd, 'frontend/package.json'), 'utf-8'));
201
+ if (fePkg.scripts?.build) {
202
+ checks.push({
203
+ name: 'frontend',
204
+ status: 'pass',
205
+ message: `frontend/package.json detected with build script — JS frontend will build before backend starts.`,
206
+ });
207
+ }
208
+ else {
209
+ checks.push({
210
+ name: 'frontend',
211
+ status: 'warn',
212
+ message: 'frontend/package.json found but no `scripts.build` — frontend stage will be skipped.',
213
+ });
214
+ }
215
+ }
216
+ catch {
217
+ checks.push({ name: 'frontend', status: 'warn', message: 'frontend/package.json found but could not parse.' });
218
+ }
219
+ }
220
+ }
221
+ else if (hasGoMod) {
222
+ detectedRuntime = 'go';
223
+ detectedFramework = 'Go';
224
+ checks.push({ name: 'framework', status: 'pass', message: 'detected Go' });
225
+ }
226
+ else if (hasCargo) {
227
+ detectedRuntime = 'rust';
228
+ detectedFramework = 'Rust';
229
+ checks.push({ name: 'framework', status: 'pass', message: 'detected Rust' });
230
+ }
231
+ else if (hasGemfile) {
232
+ detectedRuntime = 'ruby';
233
+ // Mirror the i89/i91 production detection: sniff Gemfile content
234
+ // for Rails so the doctor confirms what production will pick. Pre-
235
+ // fix doctor said "Ruby" for Rails apps which made users wonder if
236
+ // their Rails-specific concerns (assets pipeline, secret_key_base,
237
+ // rails server) would be handled. Now: explicit Rails recognition.
238
+ let isRails = false;
239
+ try {
240
+ const gemfile = fs.readFileSync(path.join(cwd, 'Gemfile'), 'utf-8');
241
+ isRails = /^\s*gem\s+['"]rails['"]\s*[,)]?/m.test(gemfile);
59
242
  }
243
+ catch { /* unreadable — fall through to generic Ruby */ }
244
+ detectedFramework = isRails ? 'Rails' : 'Ruby';
245
+ checks.push({
246
+ name: 'framework',
247
+ status: 'pass',
248
+ message: isRails
249
+ ? 'detected Rails — pushto auto-injects SECRET_KEY_BASE and runs assets:precompile'
250
+ : 'detected Ruby',
251
+ });
252
+ }
253
+ else if (hasHtml) {
254
+ detectedRuntime = 'static';
255
+ detectedFramework = 'static';
256
+ checks.push({ name: 'framework', status: 'pass', message: 'static site (index.html)' });
257
+ }
258
+ else {
259
+ checks.push({ name: 'framework', status: 'warn', message: 'no known project files found.' });
260
+ }
261
+ // ── 4. Env file detection ──
262
+ const envFiles = ['.env.production', '.env'];
263
+ const foundEnv = envFiles.find((f) => fs.existsSync(path.join(cwd, f)));
264
+ if (foundEnv) {
265
+ const content = fs.readFileSync(path.join(cwd, foundEnv), 'utf-8');
266
+ const varCount = content.split('\n').filter((l) => l.trim() && !l.trim().startsWith('#') && l.includes('=')).length;
267
+ checks.push({ name: 'env file', status: 'pass', message: `${foundEnv} found (${varCount} vars). will auto-import on deploy.` });
268
+ }
269
+ else {
270
+ checks.push({ name: 'env file', status: 'warn', message: 'no .env file. if your app needs env vars, create one.' });
60
271
  }
61
- // 7. .gitignore check
272
+ // ── 5. Gitignore checks ──
273
+ // Pre-fix: every check below was nested inside `if (gitignorePath exists)`,
274
+ // so a project with no .gitignore at all triggered ZERO warnings — the
275
+ // worst case (Python user with .venv + no gitignore = 200MB zip that
276
+ // 413s the upload) was completely silent. Now the absence-of-file
277
+ // case is its own warning, with runtime-aware suggestions for what
278
+ // belongs in the file.
62
279
  const gitignorePath = path.join(cwd, '.gitignore');
63
- if (fs.existsSync(gitignorePath)) {
280
+ if (!fs.existsSync(gitignorePath)) {
281
+ const suggested = ['.env', '.pushto'];
282
+ if (detectedRuntime === 'node')
283
+ suggested.push('node_modules');
284
+ if (detectedRuntime === 'python')
285
+ suggested.push('.venv', '__pycache__', '*.pyc');
286
+ if (detectedRuntime === 'rust')
287
+ suggested.push('target');
288
+ if (detectedRuntime === 'go')
289
+ suggested.push('vendor');
290
+ checks.push({
291
+ name: '.gitignore',
292
+ status: 'warn',
293
+ message: `no .gitignore. your deploy will include EVERYTHING in this folder — likely huge and may leak secrets. add a .gitignore with: ${suggested.join(', ')}`,
294
+ });
295
+ }
296
+ else {
64
297
  const gitignore = fs.readFileSync(gitignorePath, 'utf-8');
65
- if (!gitignore.includes('node_modules')) {
66
- checks.push({ name: '.gitignore', status: 'warn', message: 'node_modules not in .gitignore. deploy will be slow.' });
67
- }
68
298
  if (!gitignore.includes('.env')) {
69
- checks.push({ name: '.gitignore', status: 'warn', message: '.env not in .gitignore. secrets might leak.' });
299
+ checks.push({ name: '.gitignore', status: 'warn', message: '.env not gitignored. secrets might leak.' });
70
300
  }
71
301
  if (!gitignore.includes('.pushto')) {
72
- checks.push({ name: '.gitignore', status: 'warn', message: '.pushto not in .gitignore. add it.' });
302
+ checks.push({ name: '.gitignore', status: 'warn', message: '.pushto not gitignored. add it.' });
303
+ }
304
+ if (detectedRuntime === 'node' && !gitignore.includes('node_modules')) {
305
+ checks.push({ name: '.gitignore', status: 'warn', message: 'node_modules not gitignored. deploy will be slow.' });
306
+ }
307
+ // Python venv check moved out of section 8 so it fires here next to the
308
+ // other gitignore checks AND only when .gitignore exists (the no-gitignore
309
+ // branch above already covers the "no protection at all" case).
310
+ if (detectedRuntime === 'python') {
311
+ const hasVenv = fs.existsSync(path.join(cwd, '.venv')) || fs.existsSync(path.join(cwd, 'venv'));
312
+ if (hasVenv && !gitignore.includes('venv')) {
313
+ checks.push({ name: '.gitignore', status: 'warn', message: 'venv not gitignored. deploy will be huge.' });
314
+ }
315
+ }
316
+ }
317
+ // ── 6. Deploy preview ──
318
+ // Run the EXACT same gitignore + walk logic that `pushto` uses to build
319
+ // the deploy zip, then report total size, file count, and the biggest
320
+ // files. This is the "would your deploy work?" sanity check — we'd
321
+ // rather tell you here than have the server 413 mid-upload.
322
+ try {
323
+ const files = walkProject(cwd);
324
+ const totalBytes = files.reduce((sum, f) => sum + f.sizeBytes, 0);
325
+ const biggest = [...files].sort((a, b) => b.sizeBytes - a.sizeBytes).slice(0, 3);
326
+ if (totalBytes > SERVER_UPLOAD_CAP_BYTES) {
327
+ const top = biggest.map((f) => `${f.archivePath} (${fmtMB(f.sizeBytes)})`).join(', ');
328
+ checks.push({
329
+ name: 'deploy size',
330
+ status: 'fail',
331
+ message: `${files.length} files, ${fmtMB(totalBytes)} — exceeds ${fmtMB(SERVER_UPLOAD_CAP_BYTES)} server cap. biggest: ${top}. add to .pushtoignore or .gitignore`,
332
+ });
333
+ }
334
+ else if (totalBytes > SERVER_UPLOAD_CAP_BYTES * 0.8) {
335
+ const top = biggest.map((f) => `${f.archivePath} (${fmtMB(f.sizeBytes)})`).join(', ');
336
+ checks.push({
337
+ name: 'deploy size',
338
+ status: 'warn',
339
+ message: `${files.length} files, ${fmtMB(totalBytes)} — close to ${fmtMB(SERVER_UPLOAD_CAP_BYTES)} cap. biggest: ${top}`,
340
+ });
73
341
  }
342
+ else {
343
+ checks.push({
344
+ name: 'deploy size',
345
+ status: 'pass',
346
+ message: `${files.length} files, ${fmtMB(totalBytes)}`,
347
+ });
348
+ }
349
+ }
350
+ catch (err) {
351
+ checks.push({
352
+ name: 'deploy size',
353
+ status: 'warn',
354
+ message: `couldn't estimate: ${err instanceof Error ? err.message : 'unknown'}`,
355
+ });
74
356
  }
75
- // 8. Env vars check (if project linked and authed)
357
+ // ── 7. Remote checks (project exists, env var completeness) ──
76
358
  if (token && slug) {
77
359
  try {
78
360
  const res = await api(`/cli/projects/${slug}`);
79
361
  if (res.ok) {
80
362
  checks.push({ name: 'api', status: 'pass', message: 'pushto.host reachable' });
363
+ // Check deployment status
364
+ const project = await safeJson(res.clone());
365
+ if (project.status) {
366
+ const s = project.status;
367
+ const isLive = s === 'LIVE' || s === 'SLEEPING';
368
+ const url = project.customDomain ?? (project.subdomain ? `${project.subdomain}.pushto.host` : slug);
369
+ checks.push({
370
+ name: 'deployed',
371
+ status: isLive ? 'pass' : s === 'FAILED' ? 'fail' : 'warn',
372
+ message: isLive
373
+ ? `${s.toLowerCase()} at ${url}`
374
+ : s === 'CREATED'
375
+ ? 'project created but not deployed yet. run pushto to deploy.'
376
+ : s === 'FAILED'
377
+ ? 'last deploy failed. check logs in the dashboard.'
378
+ : `${s.toLowerCase()}...`,
379
+ });
380
+ }
381
+ // Check env vars on server vs what's in local .env
382
+ const envRes = await api(`/cli/projects/${slug}/env`);
383
+ if (envRes.ok) {
384
+ const serverVars = await safeJson(envRes);
385
+ const serverKeys = new Set(Array.isArray(serverVars) ? serverVars.map((v) => v.key) : []);
386
+ const remoteCount = serverKeys.size;
387
+ if (foundEnv) {
388
+ const localContent = fs.readFileSync(path.join(cwd, foundEnv), 'utf-8');
389
+ const localKeys = [];
390
+ for (const line of localContent.split('\n')) {
391
+ const trimmed = line.trim();
392
+ if (!trimmed || trimmed.startsWith('#'))
393
+ continue;
394
+ const eqIdx = trimmed.indexOf('=');
395
+ if (eqIdx > 0)
396
+ localKeys.push(trimmed.slice(0, eqIdx).trim());
397
+ }
398
+ const missing = localKeys.filter((k) => !serverKeys.has(k));
399
+ if (missing.length > 0) {
400
+ checks.push({ name: 'env sync', status: 'warn', message: `${missing.length} local vars not on pushto yet: ${missing.slice(0, 5).join(', ')}${missing.length > 5 ? '...' : ''}. deploy will auto-import.` });
401
+ }
402
+ else if (remoteCount > 0) {
403
+ checks.push({ name: 'env sync', status: 'pass', message: `${remoteCount} env vars synced` });
404
+ }
405
+ }
406
+ else if (remoteCount > 0) {
407
+ checks.push({ name: 'env vars', status: 'pass', message: `${remoteCount} env vars on pushto` });
408
+ }
409
+ }
81
410
  }
82
411
  else {
83
412
  checks.push({ name: 'api', status: 'fail', message: 'project not found on pushto.host' });
@@ -87,35 +416,38 @@ export const doctor = async () => {
87
416
  checks.push({ name: 'api', status: 'fail', message: 'cannot reach pushto.host' });
88
417
  }
89
418
  }
90
- // 9. Large files check
91
- const largeFiles = [];
92
- const checkDir = (dir, depth = 0) => {
93
- if (depth > 3)
94
- return;
95
- try {
96
- const entries = fs.readdirSync(dir, { withFileTypes: true });
97
- for (const entry of entries) {
98
- if (entry.name === 'node_modules' || entry.name === '.git' || entry.name === '.next')
99
- continue;
100
- const full = path.join(dir, entry.name);
101
- if (entry.isFile()) {
102
- const stat = fs.statSync(full);
103
- if (stat.size > 10 * 1024 * 1024) {
104
- largeFiles.push(`${entry.name} (${Math.round(stat.size / 1024 / 1024)}MB)`);
105
- }
106
- }
107
- else if (entry.isDirectory()) {
108
- checkDir(full, depth + 1);
109
- }
110
- }
419
+ // ── 7.5. Custom build-config files that pushto silently ignores ──
420
+ // pushto does NOT honor user-shipped nixpacks.toml or Dockerfile —
421
+ // the build engine in apps/web/lib/nixpacks/* is hand-rolled and
422
+ // generates its own Dockerfile from framework detection. Pre-fix
423
+ // a user with their own Dockerfile would deploy thinking pushto
424
+ // would use it, then debug for hours when their custom RUN steps
425
+ // never executed. Surface it loudly here so the user knows up
426
+ // front.
427
+ if (fs.existsSync(path.join(cwd, 'nixpacks.toml'))) {
428
+ checks.push({
429
+ name: 'nixpacks.toml',
430
+ status: 'warn',
431
+ message: 'pushto ignores nixpacks.toml — build commands come from auto-detection. delete it or open an issue if you need custom build steps.',
432
+ });
433
+ }
434
+ if (fs.existsSync(path.join(cwd, 'Dockerfile'))) {
435
+ checks.push({
436
+ name: 'Dockerfile',
437
+ status: 'warn',
438
+ message: 'pushto generates its own Dockerfile and overwrites yours at build time. your custom one is ignored.',
439
+ });
440
+ }
441
+ // ── 8. Python-specific checks ──
442
+ // venv-not-gitignored check moved up into section 5 (gitignore checks)
443
+ // so the no-gitignore-at-all warning includes venv as a suggested entry.
444
+ if (detectedRuntime === 'python') {
445
+ const hasProcfile = fs.existsSync(path.join(cwd, 'Procfile'));
446
+ if (hasProcfile) {
447
+ checks.push({ name: 'Procfile', status: 'pass', message: 'found (gunicorn/uvicorn start command)' });
111
448
  }
112
- catch { /* permission error, skip */ }
113
- };
114
- checkDir(cwd);
115
- if (largeFiles.length > 0) {
116
- checks.push({ name: 'large files', status: 'warn', message: `found: ${largeFiles.join(', ')}. will slow deploy.` });
117
449
  }
118
- // Print results
450
+ // ── Print ──
119
451
  console.log();
120
452
  for (const check of checks) {
121
453
  const icon = check.status === 'pass' ? chalk.green('✓')
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/commands/domain.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM,GAAU,QAAQ,MAAM,EAAE,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAiE9E,CAAC"}
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/commands/domain.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,MAAM,GAAU,QAAQ,MAAM,EAAE,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAkH9E,CAAC"}