void 0.10.4 → 0.10.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.
- package/dist/agents-Bmr5tFFb.mjs +1454 -0
- package/dist/{auth-cmd-CblKzAdD.mjs → auth-cmd-DlgNwByu.mjs} +10 -10
- package/dist/{better-auth-shared-D0Mbmx5V.mjs → better-auth-shared-BQooDxbw.mjs} +1 -1
- package/dist/{better-auth-shared-jkksALri.d.mts → better-auth-shared-BvnM9px6.d.mts} +2 -2
- package/dist/{build-cmd-CJQSRupz.mjs → build-cmd-Br8qL0rA.mjs} +15 -17
- package/dist/{cache-CMzjhxHh.mjs → cache-wH-mP8UE.mjs} +10 -12
- package/dist/{cancel-deploy-S2N8NSv6.mjs → cancel-deploy-BEBOEgtu.mjs} +16 -18
- package/dist/cli/cli.mjs +62 -51
- package/dist/{client-YIzxv2ZO.mjs → client-Cj96iiBH.mjs} +118 -8
- package/dist/{config-8dLIngKW.mjs → config-1twldYCW.mjs} +10 -10
- package/dist/{config--wXmVOoe.mjs → config-BdUctCZD.mjs} +6 -6
- package/dist/{create-project-pLQdzEPe.mjs → create-project-DD9n8Ho-.mjs} +28 -23
- package/dist/{db-hAmBumot.mjs → db-DjKE2-A-.mjs} +151 -150
- package/dist/{delete-CfSe3EJO.mjs → delete-D2kr3Kmk.mjs} +13 -15
- package/dist/{deploy-DpOdwtla.mjs → deploy-C4PbkFyE.mjs} +114 -119
- package/dist/{discover-C8N1I4tK.mjs → discover-BuVVSAum.mjs} +4 -4
- package/dist/{dist-5cGIJHQQ.mjs → dist-BuiRJkTd.mjs} +59 -27
- package/dist/{domain-CkowysQx.mjs → domain-_luIsM_B.mjs} +14 -16
- package/dist/{env-CIwG2y7G.mjs → env-CO5XAS9t.mjs} +23 -25
- package/dist/{env-helpers-B_ks681T.d.mts → env-helpers-z4stu8uc.d.mts} +1 -1
- package/dist/{env-types-CaJaIRXU.mjs → env-types-D51bnR-c.mjs} +4 -4
- package/dist/{env-validation-LH6eoyW-.mjs → env-validation-CeC2FL66.mjs} +4 -4
- package/dist/{fetch-error-C6qffTl2.mjs → fetch-error-Dj3crt0e.mjs} +3 -3
- package/dist/{gen-q6McxXgE.mjs → gen-Cf79J4aw.mjs} +42 -44
- package/dist/{github-cmd-BvEKQmcD.mjs → github-cmd-DnqxyOsb.mjs} +197 -91
- package/dist/{handler-B7rCOy21.d.mts → handler-imD0UVDT.d.mts} +4 -5
- package/dist/{headers-BNWymgnH.mjs → headers-BwvFGhkx.mjs} +3 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +102 -83
- package/dist/{init-CZP69LJu.mjs → init-KirOzVDs.mjs} +132 -134
- package/dist/link-CUmiosyb.mjs +45 -0
- package/dist/{list-B7qXBBjo.mjs → list-3GEw7b6m.mjs} +10 -12
- package/dist/{login-B3l_sDwT.mjs → login-DJReaT_Q.mjs} +14 -15
- package/dist/{logs-AXm660MB.mjs → logs-D-rQ56Lq.mjs} +9 -11
- package/dist/{magic-string.es-C1Fb0uxq.mjs → magic-string.es-ZQjdJFFn.mjs} +3 -3
- package/dist/{mcp-D2plINxM.mjs → mcp-D7yc0dXY.mjs} +2 -3
- package/dist/{node-B07cZs0d.mjs → node-yFFk626c.mjs} +6 -6
- package/dist/{package-json-Bg_GJdJB.mjs → package-json-B0NuUWGd.mjs} +1 -1
- package/dist/pages/client.d.mts +1 -1
- package/dist/pages/client.mjs +2 -1
- package/dist/pages/head-client.d.mts +1 -1
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/index.d.mts +2 -2
- package/dist/pages/index.mjs +5 -5
- package/dist/pages/islands-plugin.d.mts +1 -1
- package/dist/pages/islands-plugin.mjs +3 -3
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +5 -2
- package/dist/{plugin-inference-C3fLzFvP.mjs → plugin-inference-CJxi_fWI.mjs} +4 -4
- package/dist/{prepare-DRRboRqH.mjs → prepare-C_cVurhP.mjs} +15 -18
- package/dist/{preset-B7ZQZn0u.mjs → preset-CVvwCeIy.mjs} +4 -4
- package/dist/{project-cmd-InegJruy.mjs → project-cmd-DnU7u9QF.mjs} +13 -14
- package/dist/{project-paths-CCMrHYQm.mjs → project-paths-tpdR1mJR.mjs} +2 -2
- package/dist/{project-tsconfig-BTNuNoJ0.mjs → project-tsconfig-D9uSVVpA.mjs} +4 -4
- package/dist/{protocol-6UZCowS1.d.mts → protocol-6hTJ04T1.d.mts} +3 -3
- package/dist/{resolve-project-D4O1_fZz.mjs → resolve-project-D2HI3TrG.mjs} +2 -2
- package/dist/{rollback-CHVE-DeT.mjs → rollback-Yh7bCKob.mjs} +21 -23
- package/dist/{route-types-D03ryMXz.mjs → route-types-CfKfhbIg.mjs} +234 -3
- package/dist/{runner-BQyKUqAL.mjs → runner-h272wcPj.mjs} +4 -5
- package/dist/{runner-pg-EuhrFW3D.mjs → runner-pg-waxJOnBb.mjs} +1 -1
- package/dist/runtime/ai.mjs +2 -2
- package/dist/runtime/auth.d.mts +1 -1
- package/dist/runtime/better-auth-pg.d.mts +1 -1
- package/dist/runtime/better-auth-pg.mjs +3 -3
- package/dist/runtime/better-auth.d.mts +1 -1
- package/dist/runtime/better-auth.mjs +2 -2
- package/dist/runtime/client-react.d.mts +2 -2
- package/dist/runtime/client-react.mjs +1 -1
- package/dist/runtime/client-solid.d.mts +2 -2
- package/dist/runtime/client-solid.mjs +1 -1
- package/dist/runtime/client-svelte.d.mts +2 -2
- package/dist/runtime/client-svelte.mjs +1 -1
- package/dist/runtime/client-vue.d.mts +2 -2
- package/dist/runtime/client-vue.mjs +1 -1
- package/dist/runtime/client.d.mts +2 -2
- package/dist/runtime/client.mjs +1 -1
- package/dist/runtime/db-pg.d.mts +1 -1
- package/dist/runtime/env-helpers.d.mts +1 -1
- package/dist/runtime/env-public-client.d.mts +1 -1
- package/dist/runtime/env-public-client.mjs +2 -0
- package/dist/runtime/env-public.d.mts +3 -4
- package/dist/runtime/env-public.mjs +3 -1
- package/dist/runtime/env.mjs +1 -1
- package/dist/runtime/fetch-stream.d.mts +1 -1
- package/dist/runtime/fetch-stream.mjs +1 -1
- package/dist/runtime/fetch.d.mts +1 -1
- package/dist/runtime/fetch.mjs +1 -1
- package/dist/runtime/handler.d.mts +2 -2
- package/dist/runtime/handler.mjs +1 -1
- package/dist/runtime/isr.mjs +1 -1
- package/dist/runtime/live-server.mjs +2 -0
- package/dist/runtime/live.d.mts +2 -2
- package/dist/runtime/live.mjs +3 -1
- package/dist/runtime/migration-handler-pg.mjs +1 -1
- package/dist/runtime/migration-handler.mjs +1 -1
- package/dist/runtime/remote/index.mjs +11 -1
- package/dist/runtime/sandbox.d.mts +1 -4
- package/dist/runtime/sandbox.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +2 -2
- package/dist/runtime/ws-server.mjs +2 -0
- package/dist/runtime/ws.d.mts +3 -3
- package/dist/runtime/ws.mjs +2 -0
- package/dist/{scan-VCAM1oh3.mjs → scan-Dp_Gyzs3.mjs} +3 -3
- package/dist/{scan-DGEp1-1Q.mjs → scan-i7Yz54fv.mjs} +26 -8
- package/dist/{secret-CVKwIOm3.mjs → secret-u7FRvg8d.mjs} +22 -24
- package/dist/{skills-Dl3u05da.mjs → skills-DsdNDtX3.mjs} +6 -7
- package/dist/{subcommand-prompt-B8ng0FTS.mjs → subcommand-prompt-DtES-oP6.mjs} +34 -35
- package/dist/sveltekit.mjs +2 -2
- package/dist/validate-DT7nFMlf.mjs +504 -0
- package/dist/{yarn-pnp-WLW2IHUY.mjs → yarn-pnp-CW8LB6g_.mjs} +1 -1
- package/package.json +19 -19
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +94 -0
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +32 -11
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +45 -0
- package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +5 -5
- package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +4 -1
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +29 -12
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/AGENTS.md +1 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/README.md +18 -6
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/build.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/check.md +35 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/create.md +70 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/fmt.md +3 -1
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/index.md +11 -7
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/lint.md +3 -1
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/pack.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/run.md +141 -26
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/staged.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/test.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +145 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/cache.md +16 -28
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/check.md +16 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ci.md +15 -17
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/commit-hooks.md +9 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/create.md +255 -2
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/docker.md +175 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/env.md +70 -5
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/github-actions-cache.md +165 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ide-integration.md +2 -2
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/index.md +9 -3
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/install.md +63 -11
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate-rules.md +347 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate.md +27 -3
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/monorepo.md +176 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/pack.md +8 -0
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/run.md +36 -4
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/troubleshooting.md +11 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/upgrade.md +65 -13
- package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +403 -390
- package/skills/void/docs/node_modules/void/node_modules/pg/README.md +2 -1
- package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/AGENTS.md +1 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/README.md +18 -6
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/build.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/check.md +35 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/create.md +70 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/fmt.md +3 -1
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/index.md +11 -7
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/lint.md +3 -1
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/pack.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/run.md +141 -26
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/staged.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/test.md +1 -1
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +145 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/cache.md +16 -28
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/check.md +16 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ci.md +15 -17
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/commit-hooks.md +9 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/create.md +255 -2
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/docker.md +175 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/env.md +70 -5
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/github-actions-cache.md +165 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ide-integration.md +2 -2
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/index.md +9 -3
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/install.md +63 -11
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate-rules.md +347 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate.md +27 -3
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/monorepo.md +176 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/pack.md +8 -0
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/run.md +36 -4
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/troubleshooting.md +11 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/upgrade.md +65 -13
- package/skills/void/docs/reference/cli.md +19 -1
- package/dist/agents-MhSzNMiC.mjs +0 -151
- package/dist/collect-9rO3JFNM.mjs +0 -55
- package/dist/config-hhMYPVRT.mjs +0 -21
- package/dist/dist-abzUneor.mjs +0 -1287
- package/dist/drizzle-DqstQTGq.mjs +0 -232
- package/dist/link-BKLElphS.mjs +0 -47
- package/dist/output-DeiS4oEX.mjs +0 -139
- package/dist/plan-aD3wRDqF.mjs +0 -271
- package/dist/project-CH9pdo16.mjs +0 -72
- package/dist/project-slug-rX3kTOfY.mjs +0 -10
- package/dist/validate-CNWm-PsL.mjs +0 -186
- /package/dist/{auth-migrations-BP-hMzYl.mjs → auth-migrations-BTZ-ATvQ.mjs} +0 -0
- /package/dist/{auth-Dz2CCn4T.d.mts → auth-qgMlYp7Z.d.mts} +0 -0
- /package/dist/{canonical-json-CEyQaVDa.mjs → canonical-json-DuDiiUsQ.mjs} +0 -0
- /package/dist/{cf-access-DKDsgwOU.mjs → cf-access-Bqw81xAf.mjs} +0 -0
- /package/dist/{defer-C-bdSM_b.mjs → defer-YsYDUoii.mjs} +0 -0
- /package/dist/{dotenv-lS94ymhM.mjs → dotenv-D_UbC_vc.mjs} +0 -0
- /package/dist/{env-raw-Dtj1UAoK.mjs → env-raw-CoS20LHP.mjs} +0 -0
- /package/dist/{fetch-error-B6RaJ-eZ.d.mts → fetch-error-Sp1R4mZv.d.mts} +0 -0
- /package/dist/{git-metadata-Ce0AtSZL.mjs → git-metadata-CBKaL0v5.mjs} +0 -0
- /package/dist/{head-eOUCWUNy.d.mts → head-nmvOgFjd.d.mts} +0 -0
- /package/dist/{log-BdD_Fpms.mjs → log-ChfPKsVd.mjs} +0 -0
- /package/dist/{pathe.M-eThtNZ-BrPhGF_K.mjs → pathe.M-eThtNZ-CQzLbt4c.mjs} +0 -0
- /package/dist/{pg-CempqvEJ.mjs → pg-J2HbZIkX.mjs} +0 -0
- /package/dist/{providers-BJIoduK9.d.mts → providers-BNKRacMr.d.mts} +0 -0
- /package/dist/{providers-BwPbdHdi.mjs → providers-CJlNS3kT.mjs} +0 -0
- /package/dist/{proxy-M3pxItg2.mjs → proxy-D-3_D-Gl.mjs} +0 -0
- /package/dist/{chunk-DJd-R1mw.mjs → rolldown-runtime-DJK8HYOj.mjs} +0 -0
- /package/dist/{standard-schema-Cy0lfeWv.d.mts → standard-schema-DJ0HW7QP.d.mts} +0 -0
- /package/dist/{types-BodZGegX.d.mts → types-lLjNE9Qp.d.mts} +0 -0
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { c as createCodeChallenge, f as getToken, h as openBrowser, l as createCodeVerifier, n as PlatformClient, o as parsePlatformErrorBody, s as awaitBrowserCallback, t as PlatformApiError } from "./client-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-D4O1_fZz.mjs";
|
|
6
|
-
import { t as collectGitDeployMetadata } from "./git-metadata-Ce0AtSZL.mjs";
|
|
1
|
+
import { A as text, T as log, j as isCancel, k as select, u as import_picocolors, x as cancel } from "./agents-Bmr5tFFb.mjs";
|
|
2
|
+
import { b as readProjectConfig, c as createCodeChallenge, f as getToken, h as openBrowser, l as createCodeVerifier, n as PlatformClient, o as parsePlatformErrorBody, s as awaitBrowserCallback, t as PlatformApiError } from "./client-Cj96iiBH.mjs";
|
|
3
|
+
import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-D2HI3TrG.mjs";
|
|
4
|
+
import { t as collectGitDeployMetadata } from "./git-metadata-CBKaL0v5.mjs";
|
|
7
5
|
import { randomBytes } from "node:crypto";
|
|
8
6
|
//#region src/cli/github-cmd.ts
|
|
9
7
|
/**
|
|
@@ -95,7 +93,7 @@ function formatConnection(connection) {
|
|
|
95
93
|
async function runGithubCommand(root, args) {
|
|
96
94
|
const token = getToken(root);
|
|
97
95
|
if (!token) {
|
|
98
|
-
|
|
96
|
+
log.error("Not logged in. Run `void auth login` first.");
|
|
99
97
|
process.exit(1);
|
|
100
98
|
}
|
|
101
99
|
const client = new PlatformClient(token, { root });
|
|
@@ -106,6 +104,7 @@ async function runGithubCommand(root, args) {
|
|
|
106
104
|
case "update": return runGithubUpdate(root, client, args);
|
|
107
105
|
case "status": return runStatus(root, client, args);
|
|
108
106
|
case "link": return runGithubLink(root, client);
|
|
107
|
+
case "join": return runGithubJoin(root, client);
|
|
109
108
|
}
|
|
110
109
|
}
|
|
111
110
|
/**
|
|
@@ -125,23 +124,23 @@ async function runInstall(root, client, linkIdentity = runGithubLink) {
|
|
|
125
124
|
({url} = await client.getGithubInstallUrl());
|
|
126
125
|
} catch (err) {
|
|
127
126
|
if (err instanceof PlatformApiError && err.status === 403 && err.code === "github_identity_required") {
|
|
128
|
-
|
|
127
|
+
log.message("Your Void account needs a linked GitHub identity. Starting the GitHub link…");
|
|
129
128
|
await linkIdentity(root, client);
|
|
130
129
|
try {
|
|
131
130
|
({url} = await client.getGithubInstallUrl());
|
|
132
131
|
} catch (retryErr) {
|
|
133
132
|
if (retryErr instanceof PlatformApiError && retryErr.status === 403 && retryErr.code === "github_identity_required") {
|
|
134
|
-
|
|
133
|
+
log.error("Could not start the GitHub App install after linking. Try `void github link`, then `void github install` again.");
|
|
135
134
|
process.exit(1);
|
|
136
135
|
}
|
|
137
136
|
throw retryErr;
|
|
138
137
|
}
|
|
139
138
|
} else throw err;
|
|
140
139
|
}
|
|
141
|
-
|
|
140
|
+
log.message(`Open this URL to install the Void GitHub App:\n${import_picocolors.default.cyan(url)}`);
|
|
142
141
|
const { execFile } = await import("node:child_process");
|
|
143
142
|
openBrowser(url, execFile);
|
|
144
|
-
|
|
143
|
+
log.message("After installing, run `void github connect` to link a repository to your project.");
|
|
145
144
|
}
|
|
146
145
|
/**
|
|
147
146
|
* Link the current Void account (the logged-in CLI token holder) to a GitHub
|
|
@@ -166,7 +165,7 @@ async function runGithubLink(root, client) {
|
|
|
166
165
|
return url;
|
|
167
166
|
},
|
|
168
167
|
describeError: (p) => p.get("error") ? "GitHub authorization failed." : null,
|
|
169
|
-
onUrl: (url) =>
|
|
168
|
+
onUrl: (url) => log.message(`Open this URL to link your GitHub account:\n${import_picocolors.default.cyan(url)}`),
|
|
170
169
|
finalize: async (params) => {
|
|
171
170
|
const linkCode = params.get("link_code");
|
|
172
171
|
if (!linkCode) throw new Error("github: link callback did not return a link code.");
|
|
@@ -175,25 +174,112 @@ async function runGithubLink(root, client) {
|
|
|
175
174
|
}));
|
|
176
175
|
} catch (err) {
|
|
177
176
|
if (err instanceof PlatformApiError && err.code === "github_already_linked") {
|
|
178
|
-
|
|
177
|
+
log.error("Your Void account is already linked to a different GitHub account.");
|
|
179
178
|
process.exit(1);
|
|
180
179
|
}
|
|
181
180
|
if (err instanceof PlatformApiError && (err.status === 409 || err.code === "github_identity_conflict")) {
|
|
182
|
-
|
|
181
|
+
log.error("This GitHub account is already linked to another Void account.");
|
|
183
182
|
process.exit(1);
|
|
184
183
|
}
|
|
185
184
|
throw err;
|
|
186
185
|
}
|
|
187
|
-
if (status === "already_linked")
|
|
188
|
-
else
|
|
186
|
+
if (status === "already_linked") log.success("GitHub account already linked.");
|
|
187
|
+
else log.success("GitHub account linked.");
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Discover and join the shared GitHub App installations owned by the
|
|
191
|
+
* organizations the logged-in GitHub identity belongs to. Drives the same
|
|
192
|
+
* 3-endpoint localhost + PKCE handshake as {@link runGithubLink}, but against
|
|
193
|
+
* the platform's JOIN routes: membership upsert is idempotent, so unlike link
|
|
194
|
+
* there is no 409/already-linked conflict to map. The only special error is the
|
|
195
|
+
* fail-closed 503 raised when org-installation sharing is not configured on the
|
|
196
|
+
* instance.
|
|
197
|
+
*/
|
|
198
|
+
async function runGithubJoin(root, client) {
|
|
199
|
+
const verifier = createCodeVerifier();
|
|
200
|
+
const challenge = createCodeChallenge(verifier);
|
|
201
|
+
const state = randomBytes(32).toString("hex");
|
|
202
|
+
let count;
|
|
203
|
+
try {
|
|
204
|
+
({count} = await awaitBrowserCallback({
|
|
205
|
+
state,
|
|
206
|
+
buildAuthUrl: async (callback) => {
|
|
207
|
+
callback.searchParams.set("state", state);
|
|
208
|
+
const { url } = await client.getGithubJoinUrl(callback.href, challenge);
|
|
209
|
+
return url;
|
|
210
|
+
},
|
|
211
|
+
describeError: (p) => p.get("error") ? "GitHub authorization failed." : null,
|
|
212
|
+
onUrl: (url) => log.message(`Open this URL to join your organization's shared GitHub App installations:\n${import_picocolors.default.cyan(url)}`),
|
|
213
|
+
finalize: async (params) => {
|
|
214
|
+
const joinCode = params.get("join_code");
|
|
215
|
+
if (!joinCode) throw new Error("github: join callback did not return a join code.");
|
|
216
|
+
return client.completeGithubJoin(joinCode, verifier);
|
|
217
|
+
}
|
|
218
|
+
}));
|
|
219
|
+
} catch (err) {
|
|
220
|
+
if (err instanceof PlatformApiError && err.status === 503 && err.code === "github_oauth_not_configured") {
|
|
221
|
+
log.error("Organization installation sharing is not enabled on this Void instance.");
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
throw err;
|
|
225
|
+
}
|
|
226
|
+
if (count === 0) log.info("No new installations to join.");
|
|
227
|
+
else {
|
|
228
|
+
log.success(`Joined ${count} installation${count === 1 ? "" : "s"}.`);
|
|
229
|
+
log.message("Run `void github installations` to see them, then `void github connect`.");
|
|
230
|
+
}
|
|
189
231
|
}
|
|
190
232
|
async function runInstallations(client) {
|
|
191
233
|
const installations = await client.listGithubInstallations();
|
|
192
234
|
if (installations.length === 0) {
|
|
193
|
-
|
|
235
|
+
log.info("No GitHub App installations. Run `void github install` first.");
|
|
194
236
|
return;
|
|
195
237
|
}
|
|
196
|
-
|
|
238
|
+
log.message(formatInstallations(installations));
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Per-repo connect authorization round-trip for a non-owner org member.
|
|
242
|
+
*
|
|
243
|
+
* When the connect route returns 403 `connect_authorization_required` (Task 8),
|
|
244
|
+
* the member has no proof they can access the specific repo under the shared
|
|
245
|
+
* installation. This drives the same localhost + PKCE handshake as
|
|
246
|
+
* {@link runGithubLink}/{@link runGithubJoin}, but against the platform's
|
|
247
|
+
* connect-authorize route (Task 7): the callback mints and returns the grant IN
|
|
248
|
+
* the redirect URL (`?connect_grant=…`), so there is no separate `/complete`
|
|
249
|
+
* POST — `finalize` just reads the grant out of the callback query. A
|
|
250
|
+
* `?error=repo_not_accessible` callback is mapped to a friendly per-repo message
|
|
251
|
+
* by `describeError`, which rejects out of the handshake (no grant, no retry).
|
|
252
|
+
*
|
|
253
|
+
* Returns the grant plus the PKCE verifier the caller must echo to the connect
|
|
254
|
+
* route so the platform can bind the grant to this exchange.
|
|
255
|
+
*/
|
|
256
|
+
async function runGithubConnectAuthorize(client, installationId, repoFullName) {
|
|
257
|
+
const verifier = createCodeVerifier();
|
|
258
|
+
const challenge = createCodeChallenge(verifier);
|
|
259
|
+
const state = randomBytes(32).toString("hex");
|
|
260
|
+
const { connectGrant } = await awaitBrowserCallback({
|
|
261
|
+
state,
|
|
262
|
+
buildAuthUrl: async (callback) => {
|
|
263
|
+
callback.searchParams.set("state", state);
|
|
264
|
+
const { url } = await client.getGithubConnectAuthorizeUrl(callback.href, challenge, installationId, repoFullName);
|
|
265
|
+
return url;
|
|
266
|
+
},
|
|
267
|
+
describeError: (p) => {
|
|
268
|
+
const e = p.get("error");
|
|
269
|
+
if (e === "repo_not_accessible") return `You don't have access to ${repoFullName} under this installation on GitHub.`;
|
|
270
|
+
return e ? "GitHub authorization failed." : null;
|
|
271
|
+
},
|
|
272
|
+
onUrl: (url) => log.message(`Open this URL to authorize access to ${repoFullName}:\n${import_picocolors.default.cyan(url)}`),
|
|
273
|
+
finalize: async (params) => {
|
|
274
|
+
const grant = params.get("connect_grant");
|
|
275
|
+
if (!grant) throw new Error("github: connect authorization did not return a grant.");
|
|
276
|
+
return { connectGrant: grant };
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
return {
|
|
280
|
+
connectGrant,
|
|
281
|
+
codeVerifier: verifier
|
|
282
|
+
};
|
|
197
283
|
}
|
|
198
284
|
async function runConnect(root, client, args) {
|
|
199
285
|
const isTTY = process.stdin.isTTY === true;
|
|
@@ -202,7 +288,7 @@ async function runConnect(root, client, args) {
|
|
|
202
288
|
if (requestedSlug) {
|
|
203
289
|
const resolved = resolveProjectBySlug(await client.listProjects(), requestedSlug);
|
|
204
290
|
if (!resolved) {
|
|
205
|
-
|
|
291
|
+
log.error(`connect: No project found with slug '${requestedSlug}'.`);
|
|
206
292
|
process.exit(1);
|
|
207
293
|
}
|
|
208
294
|
projectId = resolved.projectId;
|
|
@@ -210,23 +296,23 @@ async function runConnect(root, client, args) {
|
|
|
210
296
|
const linked = readProjectConfig(root);
|
|
211
297
|
if (linked) projectId = linked.projectId;
|
|
212
298
|
else if (!isTTY) {
|
|
213
|
-
|
|
299
|
+
log.error("connect: No project specified. Pass a project name or --project <name>, set VOID_PROJECT, or link one with `void project link`.");
|
|
214
300
|
process.exit(1);
|
|
215
301
|
} else {
|
|
216
302
|
const projects = await client.listProjects();
|
|
217
303
|
if (projects.length === 0) {
|
|
218
|
-
|
|
304
|
+
log.error("No projects found. Create one first with `void deploy`.");
|
|
219
305
|
process.exit(1);
|
|
220
306
|
}
|
|
221
|
-
const picked = await
|
|
307
|
+
const picked = await select({
|
|
222
308
|
message: "Select a project:",
|
|
223
309
|
options: projects.map((p) => ({
|
|
224
310
|
value: p.id,
|
|
225
311
|
label: p.slug
|
|
226
312
|
}))
|
|
227
313
|
});
|
|
228
|
-
if (
|
|
229
|
-
|
|
314
|
+
if (isCancel(picked)) {
|
|
315
|
+
cancel("Cancelled.");
|
|
230
316
|
process.exit(0);
|
|
231
317
|
}
|
|
232
318
|
projectId = picked;
|
|
@@ -234,31 +320,31 @@ async function runConnect(root, client, args) {
|
|
|
234
320
|
}
|
|
235
321
|
const installations = (await client.listGithubInstallations()).filter((i) => i.status === "active");
|
|
236
322
|
if (installations.length === 0) {
|
|
237
|
-
|
|
323
|
+
log.error("No active GitHub App installation. Run `void github install` first.");
|
|
238
324
|
process.exit(1);
|
|
239
325
|
}
|
|
240
326
|
let installation;
|
|
241
327
|
if (args.installationId) {
|
|
242
328
|
const found = installations.find((i) => i.installation_id === args.installationId);
|
|
243
329
|
if (!found) {
|
|
244
|
-
|
|
330
|
+
log.error(`connect: No active installation found with id '${args.installationId}'.`);
|
|
245
331
|
process.exit(1);
|
|
246
332
|
}
|
|
247
333
|
installation = found;
|
|
248
334
|
} else if (installations.length === 1) installation = installations[0];
|
|
249
335
|
else if (!isTTY) {
|
|
250
|
-
|
|
336
|
+
log.error("connect: Multiple installations found. Pass --installation <id>.");
|
|
251
337
|
process.exit(1);
|
|
252
338
|
} else {
|
|
253
|
-
const picked = await
|
|
339
|
+
const picked = await select({
|
|
254
340
|
message: "Select a GitHub App installation:",
|
|
255
341
|
options: installations.map((i) => ({
|
|
256
342
|
value: i.installation_id,
|
|
257
343
|
label: `${i.account_login} (${i.account_type}) [id: ${i.installation_id}]`
|
|
258
344
|
}))
|
|
259
345
|
});
|
|
260
|
-
if (
|
|
261
|
-
|
|
346
|
+
if (isCancel(picked)) {
|
|
347
|
+
cancel("Cancelled.");
|
|
262
348
|
process.exit(0);
|
|
263
349
|
}
|
|
264
350
|
installation = installations.find((i) => i.installation_id === picked);
|
|
@@ -266,44 +352,44 @@ async function runConnect(root, client, args) {
|
|
|
266
352
|
let repoFullName;
|
|
267
353
|
if (args.repo) repoFullName = args.repo;
|
|
268
354
|
else if (installation.repository_selection === "selected") if (installation.repositories.length === 0) {
|
|
269
|
-
|
|
355
|
+
log.error("connect: The installation has no accessible repositories. Update the GitHub App install to grant access.");
|
|
270
356
|
process.exit(1);
|
|
271
357
|
} else if (installation.repositories.length === 1) repoFullName = installation.repositories[0].full_name;
|
|
272
358
|
else if (!isTTY) {
|
|
273
|
-
|
|
359
|
+
log.error("connect: Multiple repositories available. Pass --repo <owner/repo>.");
|
|
274
360
|
process.exit(1);
|
|
275
361
|
} else {
|
|
276
|
-
const picked = await
|
|
362
|
+
const picked = await select({
|
|
277
363
|
message: "Select a repository:",
|
|
278
364
|
options: installation.repositories.map((r) => ({
|
|
279
365
|
value: r.full_name,
|
|
280
366
|
label: r.full_name
|
|
281
367
|
}))
|
|
282
368
|
});
|
|
283
|
-
if (
|
|
284
|
-
|
|
369
|
+
if (isCancel(picked)) {
|
|
370
|
+
cancel("Cancelled.");
|
|
285
371
|
process.exit(0);
|
|
286
372
|
}
|
|
287
373
|
repoFullName = picked;
|
|
288
374
|
}
|
|
289
375
|
else {
|
|
290
376
|
if (!isTTY) {
|
|
291
|
-
|
|
377
|
+
log.error("connect: --repo <owner/repo> is required in non-interactive mode for an all-repositories installation.");
|
|
292
378
|
process.exit(1);
|
|
293
379
|
}
|
|
294
380
|
const gitDefault = parseGithubRepoFullName(collectGitDeployMetadata(root, null).repositoryUrl);
|
|
295
|
-
const input = await
|
|
381
|
+
const input = await text({
|
|
296
382
|
message: "Repository (owner/repo):",
|
|
297
383
|
placeholder: gitDefault ?? "owner/repo",
|
|
298
384
|
initialValue: gitDefault ?? ""
|
|
299
385
|
});
|
|
300
|
-
if (
|
|
301
|
-
|
|
386
|
+
if (isCancel(input)) {
|
|
387
|
+
cancel("Cancelled.");
|
|
302
388
|
process.exit(0);
|
|
303
389
|
}
|
|
304
390
|
repoFullName = input.trim();
|
|
305
391
|
if (!repoFullName) {
|
|
306
|
-
|
|
392
|
+
log.error("connect: Repository is required.");
|
|
307
393
|
process.exit(1);
|
|
308
394
|
}
|
|
309
395
|
}
|
|
@@ -311,16 +397,16 @@ async function runConnect(root, client, args) {
|
|
|
311
397
|
let branch;
|
|
312
398
|
if (args.branch) branch = args.branch;
|
|
313
399
|
else if (!isTTY) {
|
|
314
|
-
|
|
400
|
+
log.error("connect: --branch is required in non-interactive mode. Pass --branch <name>.");
|
|
315
401
|
process.exit(1);
|
|
316
402
|
} else {
|
|
317
|
-
const input = await
|
|
403
|
+
const input = await text({
|
|
318
404
|
message: "Branch to deploy from:",
|
|
319
405
|
placeholder: branchDefault,
|
|
320
406
|
initialValue: branchDefault
|
|
321
407
|
});
|
|
322
|
-
if (
|
|
323
|
-
|
|
408
|
+
if (isCancel(input)) {
|
|
409
|
+
cancel("Cancelled.");
|
|
324
410
|
process.exit(0);
|
|
325
411
|
}
|
|
326
412
|
branch = input.trim() || branchDefault;
|
|
@@ -329,7 +415,7 @@ async function runConnect(root, client, args) {
|
|
|
329
415
|
if (args.executor !== void 0) executor = args.executor;
|
|
330
416
|
else if (!isTTY) executor = "container";
|
|
331
417
|
else {
|
|
332
|
-
const picked = await
|
|
418
|
+
const picked = await select({
|
|
333
419
|
message: "Build executor:",
|
|
334
420
|
options: [{
|
|
335
421
|
value: "container",
|
|
@@ -342,15 +428,15 @@ async function runConnect(root, client, args) {
|
|
|
342
428
|
}],
|
|
343
429
|
initialValue: "container"
|
|
344
430
|
});
|
|
345
|
-
if (
|
|
346
|
-
|
|
431
|
+
if (isCancel(picked)) {
|
|
432
|
+
cancel("Cancelled.");
|
|
347
433
|
process.exit(0);
|
|
348
434
|
}
|
|
349
435
|
executor = picked;
|
|
350
436
|
}
|
|
351
437
|
let workflowPath = args.workflowPath;
|
|
352
438
|
if (executor === "github_actions" && args.workflowPath === void 0 && isTTY) {
|
|
353
|
-
const input = await
|
|
439
|
+
const input = await text({
|
|
354
440
|
message: "Deploy workflow file:",
|
|
355
441
|
placeholder: DEFAULT_WORKFLOW_PATH,
|
|
356
442
|
initialValue: DEFAULT_WORKFLOW_PATH,
|
|
@@ -360,45 +446,65 @@ async function runConnect(root, client, args) {
|
|
|
360
446
|
return "Must be under .github/workflows/, end in .yml/.yaml, and not contain \"..\".";
|
|
361
447
|
}
|
|
362
448
|
});
|
|
363
|
-
if (
|
|
364
|
-
|
|
449
|
+
if (isCancel(input)) {
|
|
450
|
+
cancel("Cancelled.");
|
|
365
451
|
process.exit(0);
|
|
366
452
|
}
|
|
367
453
|
const chosen = input.trim() || ".github/workflows/void-deploy.yml";
|
|
368
454
|
if (chosen !== ".github/workflows/void-deploy.yml") workflowPath = chosen;
|
|
369
455
|
}
|
|
456
|
+
const attemptConnect = (extra) => client.connectGithub(projectId, {
|
|
457
|
+
installationId: installation.installation_id,
|
|
458
|
+
repoFullName,
|
|
459
|
+
branch,
|
|
460
|
+
buildExecutor: executor,
|
|
461
|
+
workflowPath,
|
|
462
|
+
...extra
|
|
463
|
+
});
|
|
370
464
|
let connection;
|
|
371
465
|
try {
|
|
372
|
-
connection = await
|
|
373
|
-
installationId: installation.installation_id,
|
|
374
|
-
repoFullName,
|
|
375
|
-
branch,
|
|
376
|
-
buildExecutor: executor,
|
|
377
|
-
workflowPath
|
|
378
|
-
});
|
|
466
|
+
connection = await attemptConnect();
|
|
379
467
|
} catch (err) {
|
|
380
|
-
if (err instanceof PlatformApiError)
|
|
468
|
+
if (!(err instanceof PlatformApiError)) throw err;
|
|
469
|
+
if (err.status === 403 && err.code === "connect_authorization_required") {
|
|
470
|
+
if (!isTTY) {
|
|
471
|
+
log.error("connect: this installation requires per-repo authorization, which needs an interactive browser sign-in. Run `void github connect` locally to authorize, then retry.");
|
|
472
|
+
process.exit(1);
|
|
473
|
+
}
|
|
474
|
+
const grant = await runGithubConnectAuthorize(client, installation.installation_id, repoFullName);
|
|
475
|
+
try {
|
|
476
|
+
connection = await attemptConnect({
|
|
477
|
+
connectGrant: grant.connectGrant,
|
|
478
|
+
codeVerifier: grant.codeVerifier
|
|
479
|
+
});
|
|
480
|
+
} catch (retryErr) {
|
|
481
|
+
if (retryErr instanceof PlatformApiError && retryErr.status === 403) {
|
|
482
|
+
log.error("connect: GitHub authorization failed or expired. Run `void github connect` again.");
|
|
483
|
+
process.exit(1);
|
|
484
|
+
}
|
|
485
|
+
throw retryErr;
|
|
486
|
+
}
|
|
487
|
+
} else {
|
|
381
488
|
const body = parsePlatformErrorBody(err.body);
|
|
382
489
|
const code = body?.error ?? body?.message ?? "";
|
|
383
490
|
const message = describeConnectError(err.status, code);
|
|
384
491
|
if (message !== null) {
|
|
385
|
-
|
|
492
|
+
log.error(`connect: ${message}`);
|
|
386
493
|
process.exit(1);
|
|
387
494
|
}
|
|
388
495
|
throw err;
|
|
389
496
|
}
|
|
390
|
-
throw err;
|
|
391
497
|
}
|
|
392
498
|
if (workflowPath !== void 0 && connection.workflow_path !== workflowPath) {
|
|
393
|
-
|
|
499
|
+
log.error(`connect: server did not apply workflow path ${workflowPath} (got ${connection.workflow_path ?? "none"}). The platform may be too old to support a custom workflow path.`);
|
|
394
500
|
process.exit(1);
|
|
395
501
|
}
|
|
396
|
-
|
|
502
|
+
log.success(`Connected ${repoFullName} (${branch}) → project. Push to ${branch} to deploy.`);
|
|
397
503
|
}
|
|
398
504
|
async function runGithubUpdate(root, client, args) {
|
|
399
505
|
const isTTY = process.stdin.isTTY === true;
|
|
400
506
|
if (!isTTY && args.branch === void 0 && args.executor === void 0 && args.workflowPath === void 0) {
|
|
401
|
-
|
|
507
|
+
log.error("update: Nothing to update. Pass --branch <name>, --executor <container|github_actions>, and/or --workflow <.github/workflows/...>.");
|
|
402
508
|
process.exit(1);
|
|
403
509
|
}
|
|
404
510
|
let projectId;
|
|
@@ -406,7 +512,7 @@ async function runGithubUpdate(root, client, args) {
|
|
|
406
512
|
if (requestedSlug) {
|
|
407
513
|
const resolved = resolveProjectBySlug(await client.listProjects(), requestedSlug);
|
|
408
514
|
if (!resolved) {
|
|
409
|
-
|
|
515
|
+
log.error(`update: No project found with slug '${requestedSlug}'.`);
|
|
410
516
|
process.exit(1);
|
|
411
517
|
}
|
|
412
518
|
projectId = resolved.projectId;
|
|
@@ -414,23 +520,23 @@ async function runGithubUpdate(root, client, args) {
|
|
|
414
520
|
const linked = readProjectConfig(root);
|
|
415
521
|
if (linked) projectId = linked.projectId;
|
|
416
522
|
else if (!isTTY) {
|
|
417
|
-
|
|
523
|
+
log.error("update: No project specified. Pass a project name or --project <name>, set VOID_PROJECT, or link one with `void project link`.");
|
|
418
524
|
process.exit(1);
|
|
419
525
|
} else {
|
|
420
526
|
const projects = await client.listProjects();
|
|
421
527
|
if (projects.length === 0) {
|
|
422
|
-
|
|
528
|
+
log.error("No projects found. Create one first with `void deploy`.");
|
|
423
529
|
process.exit(1);
|
|
424
530
|
}
|
|
425
|
-
const picked = await
|
|
531
|
+
const picked = await select({
|
|
426
532
|
message: "Select a project:",
|
|
427
533
|
options: projects.map((p) => ({
|
|
428
534
|
value: p.id,
|
|
429
535
|
label: p.slug
|
|
430
536
|
}))
|
|
431
537
|
});
|
|
432
|
-
if (
|
|
433
|
-
|
|
538
|
+
if (isCancel(picked)) {
|
|
539
|
+
cancel("Cancelled.");
|
|
434
540
|
process.exit(0);
|
|
435
541
|
}
|
|
436
542
|
projectId = picked;
|
|
@@ -445,7 +551,7 @@ async function runGithubUpdate(root, client, args) {
|
|
|
445
551
|
const code = body?.error ?? body?.message ?? "";
|
|
446
552
|
const message = describeUpdateError(err.status, code);
|
|
447
553
|
if (message !== null) {
|
|
448
|
-
|
|
554
|
+
log.error(`update: ${message}`);
|
|
449
555
|
process.exit(1);
|
|
450
556
|
}
|
|
451
557
|
}
|
|
@@ -457,20 +563,20 @@ async function runGithubUpdate(root, client, args) {
|
|
|
457
563
|
if (isTTY) {
|
|
458
564
|
if (args.branch !== void 0) branch = args.branch;
|
|
459
565
|
else {
|
|
460
|
-
const input = await
|
|
566
|
+
const input = await text({
|
|
461
567
|
message: "Branch to deploy from:",
|
|
462
568
|
placeholder: current.branch,
|
|
463
569
|
initialValue: current.branch
|
|
464
570
|
});
|
|
465
|
-
if (
|
|
466
|
-
|
|
571
|
+
if (isCancel(input)) {
|
|
572
|
+
cancel("Cancelled.");
|
|
467
573
|
process.exit(0);
|
|
468
574
|
}
|
|
469
575
|
branch = input.trim() || current.branch;
|
|
470
576
|
}
|
|
471
577
|
if (args.executor !== void 0) executor = args.executor;
|
|
472
578
|
else {
|
|
473
|
-
const picked = await
|
|
579
|
+
const picked = await select({
|
|
474
580
|
message: "Build executor:",
|
|
475
581
|
options: [{
|
|
476
582
|
value: "container",
|
|
@@ -481,14 +587,14 @@ async function runGithubUpdate(root, client, args) {
|
|
|
481
587
|
}],
|
|
482
588
|
initialValue: current.build_executor
|
|
483
589
|
});
|
|
484
|
-
if (
|
|
485
|
-
|
|
590
|
+
if (isCancel(picked)) {
|
|
591
|
+
cancel("Cancelled.");
|
|
486
592
|
process.exit(0);
|
|
487
593
|
}
|
|
488
594
|
executor = picked;
|
|
489
595
|
}
|
|
490
596
|
if (executor === "github_actions" && args.workflowPath === void 0) {
|
|
491
|
-
const input = await
|
|
597
|
+
const input = await text({
|
|
492
598
|
message: "Deploy workflow file:",
|
|
493
599
|
placeholder: current.workflow_path,
|
|
494
600
|
initialValue: current.workflow_path,
|
|
@@ -498,8 +604,8 @@ async function runGithubUpdate(root, client, args) {
|
|
|
498
604
|
return "Must be under .github/workflows/, end in .yml/.yaml, and not contain \"..\".";
|
|
499
605
|
}
|
|
500
606
|
});
|
|
501
|
-
if (
|
|
502
|
-
|
|
607
|
+
if (isCancel(input)) {
|
|
608
|
+
cancel("Cancelled.");
|
|
503
609
|
process.exit(0);
|
|
504
610
|
}
|
|
505
611
|
workflowPath = input.trim() || current.workflow_path;
|
|
@@ -513,7 +619,7 @@ async function runGithubUpdate(root, client, args) {
|
|
|
513
619
|
if (executor !== current.build_executor) patch.buildExecutor = executor;
|
|
514
620
|
if (workflowPath !== current.workflow_path) patch.workflowPath = workflowPath;
|
|
515
621
|
if (patch.branch === void 0 && patch.buildExecutor === void 0 && patch.workflowPath === void 0) {
|
|
516
|
-
|
|
622
|
+
log.info(`No changes. ${current.repo_full_name} already deploys from ${current.branch} via ${current.build_executor}.`);
|
|
517
623
|
return;
|
|
518
624
|
}
|
|
519
625
|
let updated;
|
|
@@ -525,7 +631,7 @@ async function runGithubUpdate(root, client, args) {
|
|
|
525
631
|
const code = body?.error ?? body?.message ?? "";
|
|
526
632
|
const message = describeUpdateError(err.status, code);
|
|
527
633
|
if (message !== null) {
|
|
528
|
-
|
|
634
|
+
log.error(`update: ${message}`);
|
|
529
635
|
process.exit(1);
|
|
530
636
|
}
|
|
531
637
|
throw err;
|
|
@@ -533,10 +639,10 @@ async function runGithubUpdate(root, client, args) {
|
|
|
533
639
|
throw err;
|
|
534
640
|
}
|
|
535
641
|
if (patch.workflowPath !== void 0 && updated.workflow_path !== patch.workflowPath) {
|
|
536
|
-
|
|
642
|
+
log.error(`update: server did not apply workflow path ${patch.workflowPath} (got ${updated.workflow_path ?? "none"}). The platform may be too old to support a custom workflow path.`);
|
|
537
643
|
process.exit(1);
|
|
538
644
|
}
|
|
539
|
-
|
|
645
|
+
log.success(`Updated ${updated.repo_full_name} → branch ${updated.branch}, executor ${updated.build_executor}, workflow ${updated.workflow_path}.`);
|
|
540
646
|
}
|
|
541
647
|
/**
|
|
542
648
|
* `void github status [project]` — print the current GitHub connection (repo,
|
|
@@ -551,7 +657,7 @@ async function runStatus(root, client, args) {
|
|
|
551
657
|
if (requestedSlug) {
|
|
552
658
|
const resolved = resolveProjectBySlug(await client.listProjects(), requestedSlug);
|
|
553
659
|
if (!resolved) {
|
|
554
|
-
|
|
660
|
+
log.error(`status: No project found with slug '${requestedSlug}'.`);
|
|
555
661
|
process.exit(1);
|
|
556
662
|
}
|
|
557
663
|
projectId = resolved.projectId;
|
|
@@ -559,23 +665,23 @@ async function runStatus(root, client, args) {
|
|
|
559
665
|
const linked = readProjectConfig(root);
|
|
560
666
|
if (linked) projectId = linked.projectId;
|
|
561
667
|
else if (!isTTY) {
|
|
562
|
-
|
|
668
|
+
log.error("status: No project specified. Pass a project name or --project <name>, set VOID_PROJECT, or link one with `void project link`.");
|
|
563
669
|
process.exit(1);
|
|
564
670
|
} else {
|
|
565
671
|
const projects = await client.listProjects();
|
|
566
672
|
if (projects.length === 0) {
|
|
567
|
-
|
|
673
|
+
log.error("No projects found. Create one first with `void deploy`.");
|
|
568
674
|
process.exit(1);
|
|
569
675
|
}
|
|
570
|
-
const picked = await
|
|
676
|
+
const picked = await select({
|
|
571
677
|
message: "Select a project:",
|
|
572
678
|
options: projects.map((p) => ({
|
|
573
679
|
value: p.id,
|
|
574
680
|
label: p.slug
|
|
575
681
|
}))
|
|
576
682
|
});
|
|
577
|
-
if (
|
|
578
|
-
|
|
683
|
+
if (isCancel(picked)) {
|
|
684
|
+
cancel("Cancelled.");
|
|
579
685
|
process.exit(0);
|
|
580
686
|
}
|
|
581
687
|
projectId = picked;
|
|
@@ -590,13 +696,13 @@ async function runStatus(root, client, args) {
|
|
|
590
696
|
const code = body?.error ?? body?.message ?? "";
|
|
591
697
|
const message = describeUpdateError(err.status, code);
|
|
592
698
|
if (message !== null) {
|
|
593
|
-
|
|
699
|
+
log.error(`status: ${message}`);
|
|
594
700
|
process.exit(1);
|
|
595
701
|
}
|
|
596
702
|
}
|
|
597
703
|
throw err;
|
|
598
704
|
}
|
|
599
|
-
|
|
705
|
+
log.message(formatConnection(connection));
|
|
600
706
|
}
|
|
601
707
|
//#endregion
|
|
602
708
|
export { runGithubCommand };
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { n as HeadDescriptor } from "./head-
|
|
2
|
-
import { r as AuthUser, t as AuthSession } from "./auth-
|
|
3
|
-
import { t as StandardSchemaV1 } from "./standard-schema-
|
|
4
|
-
import * as _$_cloudflare_sandbox0 from "@cloudflare/sandbox";
|
|
1
|
+
import { n as HeadDescriptor } from "./head-nmvOgFjd.mjs";
|
|
2
|
+
import { r as AuthUser, t as AuthSession } from "./auth-qgMlYp7Z.mjs";
|
|
3
|
+
import { t as StandardSchemaV1 } from "./standard-schema-DJ0HW7QP.mjs";
|
|
5
4
|
import { Context, Env, MiddlewareHandler } from "hono";
|
|
6
5
|
import { RewriteDestination } from "void/routes";
|
|
7
6
|
|
|
@@ -95,7 +94,7 @@ interface CloudBindings {
|
|
|
95
94
|
KV: KVNamespace;
|
|
96
95
|
STORAGE: R2Bucket;
|
|
97
96
|
AI: Ai;
|
|
98
|
-
SANDBOX: DurableObjectNamespace<
|
|
97
|
+
SANDBOX: DurableObjectNamespace<import("@cloudflare/sandbox").Sandbox>;
|
|
99
98
|
[key: string]: unknown;
|
|
100
99
|
}
|
|
101
100
|
type CloudEnv = Env & {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as join } from "./pathe.M-eThtNZ-
|
|
2
|
-
import { a as convertRedirectsConfig, d as parseHostPrefixedSource, i as convertHeadersConfig, o as convertRewritesConfig, r as convertFallbacksConfig, s as countSplats, t as VALID_REDIRECT_STATUSES, u as isProtocolRelative } from "./config-
|
|
3
|
-
import { i as voidWarn } from "./log-
|
|
1
|
+
import { a as join } from "./pathe.M-eThtNZ-CQzLbt4c.mjs";
|
|
2
|
+
import { a as convertRedirectsConfig, d as parseHostPrefixedSource, i as convertHeadersConfig, o as convertRewritesConfig, r as convertFallbacksConfig, s as countSplats, t as VALID_REDIRECT_STATUSES, u as isProtocolRelative } from "./config-1twldYCW.mjs";
|
|
3
|
+
import { i as voidWarn } from "./log-ChfPKsVd.mjs";
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
//#region src/cli/headers.ts
|
|
6
6
|
/**
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as HeadDescriptor } from "./head-
|
|
2
|
-
import { r as AuthUser } from "./auth-
|
|
3
|
-
import { C as defer, E as ValidatorSlots, S as InferProps, T as HandlerInput, _ as defineQueue, a as CloudEnv, b as Deferred, c as QueueRetryOptions, d as TypedQueueHandler, f as VoidAssetRewriteError, g as defineMiddleware, h as defineHead, i as CloudContextVariables, l as RenderAssetTags, m as defineHandler, o as QueueBatch, p as basicAuth, r as CloudContext, s as QueueMessage, t as BasicAuthOptions, u as TypedHandler, v as defineRender, x as DeferredState, y as defineScheduled } from "./handler-
|
|
1
|
+
import { n as HeadDescriptor } from "./head-nmvOgFjd.mjs";
|
|
2
|
+
import { r as AuthUser } from "./auth-qgMlYp7Z.mjs";
|
|
3
|
+
import { C as defer, E as ValidatorSlots, S as InferProps, T as HandlerInput, _ as defineQueue, a as CloudEnv, b as Deferred, c as QueueRetryOptions, d as TypedQueueHandler, f as VoidAssetRewriteError, g as defineMiddleware, h as defineHead, i as CloudContextVariables, l as RenderAssetTags, m as defineHandler, o as QueueBatch, p as basicAuth, r as CloudContext, s as QueueMessage, t as BasicAuthOptions, u as TypedHandler, v as defineRender, x as DeferredState, y as defineScheduled } from "./handler-imD0UVDT.mjs";
|
|
4
4
|
import { QueueMap } from "./runtime/queues.mjs";
|
|
5
5
|
import { PluginConfig } from "@cloudflare/vite-plugin";
|
|
6
6
|
import { Plugin } from "vite";
|