openship 0.6.9 → 0.7.1

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 (62) hide show
  1. package/dist/bare-AB4SMTNJ.js +29 -0
  2. package/dist/{chunk-P7RCYELG.js → chunk-2BAKEGGF.js} +1 -1
  3. package/dist/{chunk-VAI5VOOI.js → chunk-2YAY5XHK.js} +1 -1
  4. package/dist/{chunk-X53JXRS4.js → chunk-37XZTLBJ.js} +3 -3
  5. package/dist/{chunk-R5DC5PEF.js → chunk-3K65MMYV.js} +39 -10
  6. package/dist/{chunk-D3OEMXYP.js → chunk-3WBKLDGC.js} +12 -7
  7. package/dist/{chunk-ENKJ7XIF.js → chunk-3YSSXSC2.js} +12 -12
  8. package/dist/{chunk-3MP6ACKM.js → chunk-7MCPDYKP.js} +799 -165
  9. package/dist/{chunk-D6HU4VUZ.js → chunk-7TQP6723.js} +2 -2
  10. package/dist/{chunk-SK4FFCFR.js → chunk-AMADTKC6.js} +1 -1
  11. package/dist/{chunk-NPSRGIHV.js → chunk-B2BQX6JX.js} +6 -5
  12. package/dist/{chunk-MUWVC5R4.js → chunk-BBPKAQ54.js} +12 -9
  13. package/dist/{chunk-WEZFTL4V.js → chunk-COI4VFRW.js} +217 -2
  14. package/dist/{chunk-5DJOB7IX.js → chunk-CQ2JOXEQ.js} +3 -3
  15. package/dist/{chunk-7PEXM2UI.js → chunk-DQR5TPFB.js} +6 -6
  16. package/dist/{chunk-IAMOUDHY.js → chunk-ETK6IBCH.js} +24 -15
  17. package/dist/{chunk-T46BQOLY.js → chunk-FNWNUYS3.js} +3 -3
  18. package/dist/{chunk-UAWY6X7V.js → chunk-GPTBEPUE.js} +485 -67
  19. package/dist/{chunk-634DDFT5.js → chunk-H36ASAYI.js} +8 -8
  20. package/dist/{chunk-AHJYP7DG.js → chunk-IVMPA6RC.js} +74 -17
  21. package/dist/{chunk-5UXHT6ED.js → chunk-IXBOV7BE.js} +113 -20
  22. package/dist/{chunk-GNOMEMNI.js → chunk-KATXZ5AB.js} +1 -1
  23. package/dist/{chunk-T6DVUX4F.js → chunk-KCMEWNP7.js} +14 -3
  24. package/dist/{chunk-N5YZMO33.js → chunk-L4DRH6ZA.js} +12 -1
  25. package/dist/{chunk-BO6CY4V2.js → chunk-NF7NQOAP.js} +47 -4
  26. package/dist/{chunk-FCGJN5Q5.js → chunk-NIOLZENU.js} +9 -9
  27. package/dist/{chunk-7YBWXEM6.js → chunk-OEYXXSAM.js} +4 -4
  28. package/dist/{chunk-6GU6JSK6.js → chunk-S5GU345P.js} +3 -3
  29. package/dist/{chunk-TAZZZKYO.js → chunk-TKK5NPDQ.js} +2 -2
  30. package/dist/{chunk-NUT6HKK6.js → chunk-WG5PDWZ3.js} +5 -5
  31. package/dist/{chunk-NIYD7MD2.js → chunk-XJSLJLNY.js} +90 -46
  32. package/dist/{cloud-REV3DPJH.js → cloud-T2JOFEQL.js} +20 -20
  33. package/dist/{detect-BBFT5GEU.js → detect-SWLZURYX.js} +5 -5
  34. package/dist/{docker-EG3QSE6I.js → docker-SQNZRZXN.js} +11 -11
  35. package/dist/{docker-edge-executor-E5TOTLMR.js → docker-edge-executor-BSSQQS76.js} +8 -8
  36. package/dist/{edge-import-YJVJUGYC.js → edge-import-LUDX77C2.js} +27 -27
  37. package/dist/{edge-preflight-QUW4BM7N.js → edge-preflight-JAEFWBRI.js} +14 -14
  38. package/dist/{ensure-container-edge-FOEFQ3PI.js → ensure-container-edge-U7FTLFVJ.js} +12 -12
  39. package/dist/{executor-NTWDJ3DB.js → executor-GYRZ7RIU.js} +7 -7
  40. package/dist/host-channel-preflight-U4IZCRXR.js +54 -0
  41. package/dist/index.js +72 -50
  42. package/dist/{local-executor-OQ2GRN7K.js → local-executor-JCR46VAP.js} +3 -3
  43. package/dist/{nginx-4U4C2XUS.js → nginx-YA6IRPJT.js} +10 -10
  44. package/dist/{openresty-lua-LLWT5XQW.js → openresty-lua-DUOB64TP.js} +8 -8
  45. package/dist/{privilege-MNDVMDST.js → privilege-4B2TMVW2.js} +6 -6
  46. package/dist/server/index.js +13286 -5381
  47. package/dist/server/lua/site_logger.lua +18 -1
  48. package/dist/server/migrations/0117_github_installation_workspace_scope.sql +24 -0
  49. package/dist/server/migrations/0118_git_sources.sql +66 -0
  50. package/dist/server/migrations/0119_backup_run_batch.sql +8 -0
  51. package/dist/server/migrations/0120_domain_primary_unique.sql +24 -0
  52. package/dist/server/migrations/0121_host_port_claim_overlap.sql +14 -0
  53. package/dist/server/migrations/0122_data_transfer_staging.sql +45 -0
  54. package/dist/server/migrations/meta/_journal.json +42 -0
  55. package/dist/setup-T3WN3HRS.js +25 -0
  56. package/dist/{ssh-client-2XWZCMGI.js → ssh-client-FZDWP5PQ.js} +3 -3
  57. package/dist/up-U73RUN5R.js +61 -0
  58. package/package.json +1 -1
  59. package/dist/bare-FA66N7GC.js +0 -29
  60. package/dist/host-channel-preflight-OI2TRHSG.js +0 -54
  61. package/dist/setup-IFIMPQZJ.js +0 -25
  62. package/dist/up-RC5ZQIAD.js +0 -61
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env sh
2
+ ":" //# ; exec "$(command -v node || command -v bun)" "$0" "$@"
3
+ import { createRequire as __ospCreateRequire } from "node:module";
4
+ const require = __ospCreateRequire(import.meta.url);
5
+ import {
6
+ checkHostChannel,
7
+ verifyHostChannel
8
+ } from "./chunk-H36ASAYI.js";
9
+ import "./chunk-IXBOV7BE.js";
10
+ import "./chunk-QWHBRY2K.js";
11
+ import "./chunk-ELGRMZOW.js";
12
+ import "./chunk-3K65MMYV.js";
13
+ import "./chunk-ONKEYSMY.js";
14
+ import "./chunk-XZYFZ6A5.js";
15
+ import "./chunk-PDW4L3NV.js";
16
+ import "./chunk-DOD2BXHQ.js";
17
+ import "./chunk-42WQABXM.js";
18
+ import "./chunk-DRK3MEDS.js";
19
+ import "./chunk-3NQQXMDR.js";
20
+ import "./chunk-ZWLDLTJP.js";
21
+ import "./chunk-3WBKLDGC.js";
22
+ import "./chunk-BBPKAQ54.js";
23
+ import "./chunk-XJSLJLNY.js";
24
+ import "./chunk-ETK6IBCH.js";
25
+ import "./chunk-DQR5TPFB.js";
26
+ import "./chunk-I3DPMTSF.js";
27
+ import "./chunk-WNWQBB7F.js";
28
+ import "./chunk-NRU2EBYZ.js";
29
+ import "./chunk-RHLNVZMS.js";
30
+ import "./chunk-7MCPDYKP.js";
31
+ import "./chunk-S5GU345P.js";
32
+ import "./chunk-3YSSXSC2.js";
33
+ import "./chunk-CQ2JOXEQ.js";
34
+ import "./chunk-AMADTKC6.js";
35
+ import "./chunk-IVMPA6RC.js";
36
+ import "./chunk-GPTBEPUE.js";
37
+ import "./chunk-R4VDPFLS.js";
38
+ import "./chunk-2YAY5XHK.js";
39
+ import "./chunk-TKK5NPDQ.js";
40
+ import "./chunk-KCMEWNP7.js";
41
+ import "./chunk-FNWNUYS3.js";
42
+ import "./chunk-KATXZ5AB.js";
43
+ import "./chunk-B2BQX6JX.js";
44
+ import "./chunk-2BAKEGGF.js";
45
+ import "./chunk-37XZTLBJ.js";
46
+ import "./chunk-NF7NQOAP.js";
47
+ import "./chunk-7TQP6723.js";
48
+ import "./chunk-L4DRH6ZA.js";
49
+ import "./chunk-COI4VFRW.js";
50
+ import "./chunk-PXKCZB2I.js";
51
+ export {
52
+ checkHostChannel,
53
+ verifyHostChannel
54
+ };
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ import {
26
26
  stop,
27
27
  upCommand,
28
28
  writeCliInstall
29
- } from "./chunk-FCGJN5Q5.js";
29
+ } from "./chunk-NIOLZENU.js";
30
30
  import {
31
31
  composeDown,
32
32
  composeInternalToken,
@@ -60,7 +60,7 @@ import {
60
60
  sourceBuildDir,
61
61
  storedApiPort,
62
62
  storedDashboardPort
63
- } from "./chunk-634DDFT5.js";
63
+ } from "./chunk-H36ASAYI.js";
64
64
  import {
65
65
  bootstrapAdmin,
66
66
  detectPublicIp,
@@ -71,10 +71,10 @@ import {
71
71
  internalTokenRejectedProblem,
72
72
  waitDashboard,
73
73
  waitHealthy
74
- } from "./chunk-7YBWXEM6.js";
74
+ } from "./chunk-OEYXXSAM.js";
75
75
  import {
76
76
  startUnitHint
77
- } from "./chunk-5UXHT6ED.js";
77
+ } from "./chunk-IXBOV7BE.js";
78
78
  import "./chunk-QWHBRY2K.js";
79
79
  import {
80
80
  completeHostEdge,
@@ -85,13 +85,13 @@ import {
85
85
  renderEdgeConflict,
86
86
  repairEdgeConflict,
87
87
  rollbackHostEdge
88
- } from "./chunk-NUT6HKK6.js";
88
+ } from "./chunk-WG5PDWZ3.js";
89
89
  import {
90
90
  DATA_DIR,
91
91
  LOG_DIR,
92
92
  OS_DIR
93
93
  } from "./chunk-ELGRMZOW.js";
94
- import "./chunk-R5DC5PEF.js";
94
+ import "./chunk-3K65MMYV.js";
95
95
  import "./chunk-ONKEYSMY.js";
96
96
  import "./chunk-XZYFZ6A5.js";
97
97
  import "./chunk-PDW4L3NV.js";
@@ -100,39 +100,39 @@ import "./chunk-42WQABXM.js";
100
100
  import "./chunk-DRK3MEDS.js";
101
101
  import "./chunk-3NQQXMDR.js";
102
102
  import "./chunk-ZWLDLTJP.js";
103
- import "./chunk-D3OEMXYP.js";
104
- import "./chunk-MUWVC5R4.js";
103
+ import "./chunk-3WBKLDGC.js";
104
+ import "./chunk-BBPKAQ54.js";
105
105
  import {
106
106
  detectInstalledProxy,
107
107
  scanImportableSites
108
- } from "./chunk-NIYD7MD2.js";
109
- import "./chunk-IAMOUDHY.js";
110
- import "./chunk-7PEXM2UI.js";
108
+ } from "./chunk-XJSLJLNY.js";
109
+ import "./chunk-ETK6IBCH.js";
110
+ import "./chunk-DQR5TPFB.js";
111
111
  import "./chunk-I3DPMTSF.js";
112
112
  import "./chunk-WNWQBB7F.js";
113
113
  import "./chunk-NRU2EBYZ.js";
114
114
  import "./chunk-RHLNVZMS.js";
115
- import "./chunk-3MP6ACKM.js";
116
- import "./chunk-6GU6JSK6.js";
117
- import "./chunk-ENKJ7XIF.js";
118
- import "./chunk-5DJOB7IX.js";
119
- import "./chunk-SK4FFCFR.js";
120
- import "./chunk-AHJYP7DG.js";
121
- import "./chunk-UAWY6X7V.js";
115
+ import "./chunk-7MCPDYKP.js";
116
+ import "./chunk-S5GU345P.js";
117
+ import "./chunk-3YSSXSC2.js";
118
+ import "./chunk-CQ2JOXEQ.js";
119
+ import "./chunk-AMADTKC6.js";
120
+ import "./chunk-IVMPA6RC.js";
121
+ import "./chunk-GPTBEPUE.js";
122
122
  import "./chunk-R4VDPFLS.js";
123
- import "./chunk-VAI5VOOI.js";
124
- import "./chunk-TAZZZKYO.js";
123
+ import "./chunk-2YAY5XHK.js";
124
+ import "./chunk-TKK5NPDQ.js";
125
125
  import {
126
126
  LocalExecutor
127
- } from "./chunk-T6DVUX4F.js";
128
- import "./chunk-T46BQOLY.js";
129
- import "./chunk-GNOMEMNI.js";
130
- import "./chunk-NPSRGIHV.js";
131
- import "./chunk-P7RCYELG.js";
132
- import "./chunk-X53JXRS4.js";
133
- import "./chunk-BO6CY4V2.js";
134
- import "./chunk-D6HU4VUZ.js";
135
- import "./chunk-N5YZMO33.js";
127
+ } from "./chunk-KCMEWNP7.js";
128
+ import "./chunk-FNWNUYS3.js";
129
+ import "./chunk-KATXZ5AB.js";
130
+ import "./chunk-B2BQX6JX.js";
131
+ import "./chunk-2BAKEGGF.js";
132
+ import "./chunk-37XZTLBJ.js";
133
+ import "./chunk-NF7NQOAP.js";
134
+ import "./chunk-7TQP6723.js";
135
+ import "./chunk-L4DRH6ZA.js";
136
136
  import {
137
137
  CLOUD_DASHBOARD_URL,
138
138
  HOST_CHANNEL_AUTH_REJECTED_SHORT,
@@ -154,7 +154,7 @@ import {
154
154
  summarizeHostChannelCause,
155
155
  validateReleaseRepository,
156
156
  validateReleaseVersionUrl
157
- } from "./chunk-WEZFTL4V.js";
157
+ } from "./chunk-COI4VFRW.js";
158
158
  import "./chunk-PXKCZB2I.js";
159
159
 
160
160
  // src/index.ts
@@ -313,7 +313,7 @@ function getDashboardUrl(name) {
313
313
  }
314
314
 
315
315
  // src/lib/api-client.ts
316
- var USER_AGENT = `openship-cli/${true ? "0.6.9" : "dev"}`;
316
+ var USER_AGENT = `openship-cli/${true ? "0.7.1" : "dev"}`;
317
317
  function getApiUrl2() {
318
318
  return `${getApiUrl()}/api`;
319
319
  }
@@ -1109,7 +1109,7 @@ function dockerNameRunning(nameFilter) {
1109
1109
  return r.stdout.trim().length > 0;
1110
1110
  }
1111
1111
  async function hostControlCheck(api) {
1112
- const { checkHostChannel } = await import("./host-channel-preflight-OI2TRHSG.js");
1112
+ const { checkHostChannel } = await import("./host-channel-preflight-U4IZCRXR.js");
1113
1113
  return hostControlRow(await checkHostChannel().catch(() => null), api);
1114
1114
  }
1115
1115
  var NEVER_PROVISIONED_DETAIL = `never provisioned \u2014 run \`${HOST_CHANNEL_PROVISION_COMMAND}\``;
@@ -1514,7 +1514,7 @@ async function interactiveDoctor() {
1514
1514
  continue;
1515
1515
  }
1516
1516
  if (action2 === "host-control") {
1517
- const { verifyHostChannel } = await import("./host-channel-preflight-OI2TRHSG.js");
1517
+ const { verifyHostChannel } = await import("./host-channel-preflight-U4IZCRXR.js");
1518
1518
  const report3 = await verifyHostChannel().catch(() => null);
1519
1519
  if (report3?.status === "fixed") log2.success("Host control is reachable now.");
1520
1520
  else if (report3?.status === "ok") log2.success("Host control was already reachable.");
@@ -1595,7 +1595,8 @@ function detectPackageManager(dir) {
1595
1595
  function detectStack(dir) {
1596
1596
  if (existsSync9(join7(dir, "go.mod"))) return "go";
1597
1597
  if (existsSync9(join7(dir, "Cargo.toml"))) return "rust";
1598
- if (existsSync9(join7(dir, "requirements.txt")) || existsSync9(join7(dir, "pyproject.toml"))) return "python";
1598
+ if (existsSync9(join7(dir, "requirements.txt")) || existsSync9(join7(dir, "pyproject.toml")))
1599
+ return "python";
1599
1600
  if (existsSync9(join7(dir, "package.json"))) return "node";
1600
1601
  return void 0;
1601
1602
  }
@@ -1607,7 +1608,11 @@ async function deployFolder(opts) {
1607
1608
  step("Creating upload session");
1608
1609
  const session = await apiRequest("/projects/folder/session", {
1609
1610
  method: "POST",
1610
- body: JSON.stringify({ name, packageManager: detectPackageManager(cwd), stack: detectStack(cwd) })
1611
+ body: JSON.stringify({
1612
+ name,
1613
+ packageManager: detectPackageManager(cwd),
1614
+ stack: detectStack(cwd)
1615
+ })
1611
1616
  });
1612
1617
  if (!session.sessionId || !session.upload) {
1613
1618
  throw new Error(session.error || "Failed to open upload session");
@@ -1654,6 +1659,7 @@ async function deployFolder(opts) {
1654
1659
  method: "POST",
1655
1660
  body: JSON.stringify({
1656
1661
  projectId: opts.projectId,
1662
+ ...opts.serverId ? { serverId: opts.serverId } : {},
1657
1663
  name: scan.name || name,
1658
1664
  gitProvider: "upload",
1659
1665
  framework: scan.stack,
@@ -1678,6 +1684,7 @@ async function deployFolder(opts) {
1678
1684
  body: JSON.stringify({
1679
1685
  projectId: ensured.project_id,
1680
1686
  uploadSessionId: session.sessionId,
1687
+ ...opts.serverId ? { deployTarget: "server", serverId: opts.serverId } : {},
1681
1688
  ...opts.environment ? { environment: opts.environment } : {},
1682
1689
  // Carry the scanned compose services so a multi-service folder deploys as
1683
1690
  // a services project (persisted rows + services-mode preflight). Absent for
@@ -1855,7 +1862,10 @@ function git(args) {
1855
1862
  return void 0;
1856
1863
  }
1857
1864
  }
1858
- var deployCommand = new Command11("deploy").description("Trigger a deployment for the current project").option("--project <id>", "Project ID (defaults to the linked project in .openship/project.json)").option("--branch <name>", "Git branch to deploy (defaults to the current branch)").option("--commit <sha>", "Specific commit SHA (defaults to the latest commit on the branch)").option("--env <environment>", "Target environment: production | preview", "production").option("--force-all", "Rebuild every enabled service (skip smart per-service routing)").option("--service-ids <ids>", "Comma-separated service IDs to deploy (smart routing)").option("--smart-route", "Rebuild only services changed since the active deploy").option("--refresh", "Re-apply current env to the active deploy (no git pull, no rebuild)").option("--name <name>", "Project name for a folder (non-git) deploy (defaults to the directory name)").option("--watch", "Stream the deployment logs until it finishes").action(async (opts) => {
1865
+ var deployCommand = new Command11("deploy").description("Trigger a deployment for the current project").option("--project <id>", "Project ID (defaults to the linked project in .openship/project.json)").option("--branch <name>", "Git branch to deploy (defaults to the current branch)").option("--commit <sha>", "Specific commit SHA (defaults to the latest commit on the branch)").option("--env <environment>", "Target environment: production | preview", "production").option("--force-all", "Rebuild every enabled service (skip smart per-service routing)").option("--service-ids <ids>", "Comma-separated service IDs to deploy (smart routing)").option("--smart-route", "Rebuild only services changed since the active deploy").option("--refresh", "Re-apply current env to the active deploy (no git pull, no rebuild)").option(
1866
+ "--name <name>",
1867
+ "Project name for a folder (non-git) deploy (defaults to the directory name)"
1868
+ ).option("--server <id>", "Registered server ID (see `openship server list`)").option("--watch", "Stream the deployment logs until it finishes").action(async (opts) => {
1859
1869
  const link = readProjectLink();
1860
1870
  const env = opts.env;
1861
1871
  if (env !== "production" && env !== "preview") {
@@ -1875,6 +1885,7 @@ var deployCommand = new Command11("deploy").description("Trigger a deployment fo
1875
1885
  name: opts.name,
1876
1886
  projectId: opts.project || link?.projectId,
1877
1887
  environment: env,
1888
+ serverId: opts.server,
1878
1889
  serviceIds,
1879
1890
  onStep: (m) => {
1880
1891
  if (spinner5) spinner5.text = m;
@@ -1910,6 +1921,7 @@ var deployCommand = new Command11("deploy").description("Trigger a deployment fo
1910
1921
  branch,
1911
1922
  commitSha: opts.commit || void 0,
1912
1923
  environment: env,
1924
+ serverId: opts.server || void 0,
1913
1925
  forceAll: opts.forceAll || void 0,
1914
1926
  serviceIds,
1915
1927
  smartRoute: opts.smartRoute || void 0,
@@ -2058,6 +2070,11 @@ var pin = new Command12("pin").description("Pin (or unpin) a deployment's rollba
2058
2070
  var cancel2 = new Command12("cancel").description("Cancel an in-progress deployment").argument("<id>", "Deployment ID").action(
2059
2071
  run(async (id) => {
2060
2072
  const res = await apiRequest(`/deployments/${id}/cancel`, { method: "POST" });
2073
+ if (res.pending || !res.success) {
2074
+ throw new Error(
2075
+ res.message || "Cancellation is still pending; wait for the deployment worker to stop before redeploying."
2076
+ );
2077
+ }
2061
2078
  report(res, `Cancelled ${id}`);
2062
2079
  })
2063
2080
  );
@@ -2204,6 +2221,8 @@ function printProject(project) {
2204
2221
  project.gitOwner && project.gitRepo ? `${project.gitOwner}/${project.gitRepo}` : null
2205
2222
  ],
2206
2223
  ["gitBranch", project.gitBranch],
2224
+ ["deployTarget", project.deployTarget],
2225
+ ["serverId", project.serverId],
2207
2226
  ["autoDeploy", project.autoDeploy],
2208
2227
  ["status", project.status]
2209
2228
  ];
@@ -2297,7 +2316,7 @@ var releaseImageCmd = new Command14("release-image").description("Track and depl
2297
2316
  `);
2298
2317
  })
2299
2318
  );
2300
- var createCmd = new Command14("create").description("Create a project").requiredOption("--name <name>", "Project name").option("--slug <slug>", "Free-subdomain slug (slug.opsh.io)").option("--git-owner <owner>", "GitHub owner/org").option("--git-repo <repo>", "GitHub repository name").option("--git-branch <branch>", "Git branch to deploy").option("--framework <framework>", "Stack/framework id").option("--local-path <path>", "Local source path").option("--port <port>", "Container port", (v) => Number(v)).option("--type <type>", "Project type: app | docker | services | monorepo").action(
2319
+ var createCmd = new Command14("create").description("Create a project").requiredOption("--name <name>", "Project name").option("--slug <slug>", "Free-subdomain slug (slug.opsh.io)").option("--git-owner <owner>", "GitHub owner/org").option("--git-repo <repo>", "GitHub repository name").option("--git-branch <branch>", "Git branch to deploy").option("--framework <framework>", "Stack/framework id").option("--local-path <path>", "Local source path").option("--port <port>", "Container port", (v) => Number(v)).option("--type <type>", "Project type: app | docker | services | monorepo").option("--server <id>", "Registered server ID (see `openship server list`)").action(
2301
2320
  action(async (opts) => {
2302
2321
  const body = { name: opts.name };
2303
2322
  if (opts.slug) body.slug = opts.slug;
@@ -2308,7 +2327,9 @@ var createCmd = new Command14("create").description("Create a project").required
2308
2327
  if (opts.localPath) body.localPath = opts.localPath;
2309
2328
  if (opts.port) body.port = opts.port;
2310
2329
  if (opts.type) body.projectType = opts.type;
2311
- const { data } = await apiRequest("/projects", {
2330
+ if (opts.server) body.serverId = opts.server;
2331
+ const endpoint = opts.localPath ? "/projects/import" : "/projects";
2332
+ const { data } = await apiRequest(endpoint, {
2312
2333
  method: "POST",
2313
2334
  body: JSON.stringify(body)
2314
2335
  });
@@ -2984,6 +3005,7 @@ function mapComposeService(name, def, baseDir, errors) {
2984
3005
  if (build && typeof build === "object" && Object.hasOwn(build, "args")) {
2985
3006
  advanced.buildArgTemplateKeys = [];
2986
3007
  }
3008
+ if (Object.hasOwn(d, "environment")) advanced.environmentTemplateKeys = [];
2987
3009
  if (Object.keys(advanced).length > 0) svc.advanced = advanced;
2988
3010
  return svc;
2989
3011
  }
@@ -3585,7 +3607,7 @@ async function runRepair2(mode) {
3585
3607
  requireLinux();
3586
3608
  const sp = spin2(mode === "migrate" ? "Migrating the existing proxy's sites into the edge\u2026" : "Taking over :80/:443\u2026");
3587
3609
  try {
3588
- const { repairEdgeConflict: repairEdgeConflict2 } = await import("./edge-preflight-QUW4BM7N.js");
3610
+ const { repairEdgeConflict: repairEdgeConflict2 } = await import("./edge-preflight-JAEFWBRI.js");
3589
3611
  sp?.stop();
3590
3612
  const res = await repairEdgeConflict2(mode, apiPort(), onLog);
3591
3613
  reportRepair(res);
@@ -3734,7 +3756,7 @@ async function panelStatus() {
3734
3756
  async function panelRepair(mode) {
3735
3757
  const sp = spin2(mode === "migrate" ? "Migrating the existing proxy's sites\u2026" : "Taking over :80/:443\u2026");
3736
3758
  try {
3737
- const { repairEdgeConflict: repairEdgeConflict2 } = await import("./edge-preflight-QUW4BM7N.js");
3759
+ const { repairEdgeConflict: repairEdgeConflict2 } = await import("./edge-preflight-JAEFWBRI.js");
3738
3760
  sp?.stop();
3739
3761
  const res = await repairEdgeConflict2(mode, apiPort(), onLog);
3740
3762
  renderRepair(res);
@@ -4576,7 +4598,7 @@ function printMonitoringNextSteps() {
4576
4598
  info(" openship edge analytics -p <project> per-domain analytics");
4577
4599
  }
4578
4600
  async function runMonitoringInstall(opts) {
4579
- const up = await import("./up-RC5ZQIAD.js");
4601
+ const up = await import("./up-U73RUN5R.js");
4580
4602
  let adminName = opts.adminName;
4581
4603
  let adminEmail = opts.adminEmail;
4582
4604
  let adminPassword = opts.adminPassword;
@@ -6733,7 +6755,7 @@ function applyOnlyArgv(selfArgs, json) {
6733
6755
  // src/commands/update.ts
6734
6756
  async function verifyHostChannelAfterUpdate() {
6735
6757
  if (isJsonMode()) return;
6736
- const { verifyHostChannel } = await import("./host-channel-preflight-OI2TRHSG.js");
6758
+ const { verifyHostChannel } = await import("./host-channel-preflight-U4IZCRXR.js");
6737
6759
  await verifyHostChannel().catch(() => {
6738
6760
  });
6739
6761
  }
@@ -6810,7 +6832,7 @@ async function runSourceUpdate(source, opts) {
6810
6832
  }
6811
6833
  var REINSTALL_HINT = "curl -fsSL https://get.openship.io | sh";
6812
6834
  async function runTarballUpdate(install, opts) {
6813
- const current = "0.6.9";
6835
+ const current = "0.7.1";
6814
6836
  let latest;
6815
6837
  try {
6816
6838
  latest = (await resolveLatestTag()).replace(/^v/, "");
@@ -6894,7 +6916,7 @@ var updateCommand = new Command26("update").description("Update the Openship CLI
6894
6916
  if (source) return runSourceUpdate(source, opts);
6895
6917
  const cliInstall = readCliInstall();
6896
6918
  if (cliInstall?.method === "tarball") return runTarballUpdate(cliInstall, opts);
6897
- const current = "0.6.9";
6919
+ const current = "0.7.1";
6898
6920
  let latest;
6899
6921
  try {
6900
6922
  latest = (await resolveLatestTag()).replace(/^v/, "");
@@ -7502,7 +7524,7 @@ async function runWizard() {
7502
7524
  }
7503
7525
  }
7504
7526
  }
7505
- const uiTag = `v${"0.6.9"}`;
7527
+ const uiTag = `v${"0.7.1"}`;
7506
7528
  if (method === "bare") {
7507
7529
  const dl = spinner4();
7508
7530
  dl.start("Pulling the Openship dist from GitHub");
@@ -7562,7 +7584,7 @@ async function runWizard() {
7562
7584
  const dashboardPort = String(ports.dashboard);
7563
7585
  const moved = portMoveNotice(ports, composeTrustedOriginUrls());
7564
7586
  if (moved.length) log5.info(moved.join("\n"));
7565
- if (!pinnedImagesReady({ version: "0.6.9" })) {
7587
+ if (!pinnedImagesReady({ version: "0.7.1" })) {
7566
7588
  cancel4("The pinned Openship image tag isn't in the registry yet \u2014 nothing on this box was changed.");
7567
7589
  process.exit(1);
7568
7590
  }
@@ -7586,7 +7608,7 @@ async function runWizard() {
7586
7608
  dashboardPort,
7587
7609
  publicUrl,
7588
7610
  trustProxy: behindProxy,
7589
- version: "0.6.9",
7611
+ version: "0.7.1",
7590
7612
  noHostControl: !allowHostControl
7591
7613
  });
7592
7614
  if (!fetched.ok) {
@@ -7615,7 +7637,7 @@ async function runWizard() {
7615
7637
  dashboardPort,
7616
7638
  publicUrl,
7617
7639
  trustProxy: behindProxy,
7618
- version: "0.6.9",
7640
+ version: "0.7.1",
7619
7641
  noHostControl: !allowHostControl
7620
7642
  });
7621
7643
  if (!up.ok) {
@@ -7716,7 +7738,7 @@ async function runWizard() {
7716
7738
  if (result.liveUrl) liveUrl2 = result.liveUrl;
7717
7739
  else if (!result.domainRegistered) liveUrl2 = `http://localhost:${started.dashPort}`;
7718
7740
  for (const w of result.warnings) log5.warn(w);
7719
- const { verifyHostChannel } = await import("./host-channel-preflight-OI2TRHSG.js");
7741
+ const { verifyHostChannel } = await import("./host-channel-preflight-U4IZCRXR.js");
7720
7742
  await verifyHostChannel().catch(() => {
7721
7743
  });
7722
7744
  finishSetup({
@@ -7995,7 +8017,7 @@ function attachCompletion(program2) {
7995
8017
 
7996
8018
  // src/index.ts
7997
8019
  var program = new Command28();
7998
- program.name("openship").description("Openship CLI \u2014 install, run, and manage Openship from your terminal").version("0.6.9").option("--json", "Machine-readable JSON output (stdout data only)").hook("preAction", (thisCommand) => {
8020
+ program.name("openship").description("Openship CLI \u2014 install, run, and manage Openship from your terminal").version("0.7.1").option("--json", "Machine-readable JSON output (stdout data only)").hook("preAction", (thisCommand) => {
7999
8021
  if (thisCommand.opts().json) setJsonMode(true);
8000
8022
  }).action(async () => {
8001
8023
  const installed = serviceStatus().installed || readInstallMethod() === "compose";
@@ -4,9 +4,9 @@ import { createRequire as __ospCreateRequire } from "node:module";
4
4
  const require = __ospCreateRequire(import.meta.url);
5
5
  import {
6
6
  LocalExecutor
7
- } from "./chunk-T6DVUX4F.js";
8
- import "./chunk-P7RCYELG.js";
9
- import "./chunk-WEZFTL4V.js";
7
+ } from "./chunk-KCMEWNP7.js";
8
+ import "./chunk-2BAKEGGF.js";
9
+ import "./chunk-COI4VFRW.js";
10
10
  import "./chunk-PXKCZB2I.js";
11
11
  export {
12
12
  LocalExecutor
@@ -14,18 +14,18 @@ import {
14
14
  renderProxyOptions,
15
15
  renderProxyTlsOptions,
16
16
  summarizeCertbotFailure
17
- } from "./chunk-IAMOUDHY.js";
18
- import "./chunk-7PEXM2UI.js";
17
+ } from "./chunk-ETK6IBCH.js";
18
+ import "./chunk-DQR5TPFB.js";
19
19
  import "./chunk-I3DPMTSF.js";
20
20
  import "./chunk-R4VDPFLS.js";
21
- import "./chunk-GNOMEMNI.js";
22
- import "./chunk-NPSRGIHV.js";
23
- import "./chunk-P7RCYELG.js";
24
- import "./chunk-X53JXRS4.js";
25
- import "./chunk-BO6CY4V2.js";
26
- import "./chunk-D6HU4VUZ.js";
27
- import "./chunk-N5YZMO33.js";
28
- import "./chunk-WEZFTL4V.js";
21
+ import "./chunk-KATXZ5AB.js";
22
+ import "./chunk-B2BQX6JX.js";
23
+ import "./chunk-2BAKEGGF.js";
24
+ import "./chunk-37XZTLBJ.js";
25
+ import "./chunk-NF7NQOAP.js";
26
+ import "./chunk-7TQP6723.js";
27
+ import "./chunk-L4DRH6ZA.js";
28
+ import "./chunk-COI4VFRW.js";
29
29
  import "./chunk-PXKCZB2I.js";
30
30
  export {
31
31
  MANAGED_STATIC_BASE,
@@ -40,14 +40,14 @@ import {
40
40
  ensureOpenRestyConfig,
41
41
  luaSourceAvailable,
42
42
  parseNginxVersion
43
- } from "./chunk-7PEXM2UI.js";
44
- import "./chunk-GNOMEMNI.js";
45
- import "./chunk-NPSRGIHV.js";
46
- import "./chunk-P7RCYELG.js";
47
- import "./chunk-BO6CY4V2.js";
48
- import "./chunk-D6HU4VUZ.js";
49
- import "./chunk-N5YZMO33.js";
50
- import "./chunk-WEZFTL4V.js";
43
+ } from "./chunk-DQR5TPFB.js";
44
+ import "./chunk-KATXZ5AB.js";
45
+ import "./chunk-B2BQX6JX.js";
46
+ import "./chunk-2BAKEGGF.js";
47
+ import "./chunk-NF7NQOAP.js";
48
+ import "./chunk-7TQP6723.js";
49
+ import "./chunk-L4DRH6ZA.js";
50
+ import "./chunk-COI4VFRW.js";
51
51
  import "./chunk-PXKCZB2I.js";
52
52
  export {
53
53
  ACME_CHALLENGE_LOCATION,
@@ -6,12 +6,12 @@ import {
6
6
  privilegedExecutor,
7
7
  rootChecked,
8
8
  rootOrDegrade
9
- } from "./chunk-T46BQOLY.js";
10
- import "./chunk-GNOMEMNI.js";
11
- import "./chunk-NPSRGIHV.js";
12
- import "./chunk-P7RCYELG.js";
13
- import "./chunk-N5YZMO33.js";
14
- import "./chunk-WEZFTL4V.js";
9
+ } from "./chunk-FNWNUYS3.js";
10
+ import "./chunk-KATXZ5AB.js";
11
+ import "./chunk-B2BQX6JX.js";
12
+ import "./chunk-2BAKEGGF.js";
13
+ import "./chunk-L4DRH6ZA.js";
14
+ import "./chunk-COI4VFRW.js";
15
15
  import "./chunk-PXKCZB2I.js";
16
16
  export {
17
17
  privilegedExecutor,