@cicore/cli 1.0.0
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/bin/ci.js +13 -0
- package/dist/commands/addon/api-actions.d.ts +45 -0
- package/dist/commands/addon/api-actions.d.ts.map +1 -0
- package/dist/commands/addon/api-actions.js +281 -0
- package/dist/commands/addon/api-actions.js.map +1 -0
- package/dist/commands/addon/build.d.ts +11 -0
- package/dist/commands/addon/build.d.ts.map +1 -0
- package/dist/commands/addon/build.js +182 -0
- package/dist/commands/addon/build.js.map +1 -0
- package/dist/commands/addon/create.d.ts +11 -0
- package/dist/commands/addon/create.d.ts.map +1 -0
- package/dist/commands/addon/create.js +1186 -0
- package/dist/commands/addon/create.js.map +1 -0
- package/dist/commands/addon/delete.d.ts +13 -0
- package/dist/commands/addon/delete.d.ts.map +1 -0
- package/dist/commands/addon/delete.js +83 -0
- package/dist/commands/addon/delete.js.map +1 -0
- package/dist/commands/addon/deploy.d.ts +27 -0
- package/dist/commands/addon/deploy.d.ts.map +1 -0
- package/dist/commands/addon/deploy.js +459 -0
- package/dist/commands/addon/deploy.js.map +1 -0
- package/dist/commands/addon/dev-deploy.d.ts +31 -0
- package/dist/commands/addon/dev-deploy.d.ts.map +1 -0
- package/dist/commands/addon/dev-deploy.js +128 -0
- package/dist/commands/addon/dev-deploy.js.map +1 -0
- package/dist/commands/addon/dev.d.ts +36 -0
- package/dist/commands/addon/dev.d.ts.map +1 -0
- package/dist/commands/addon/dev.js +323 -0
- package/dist/commands/addon/dev.js.map +1 -0
- package/dist/commands/addon/extract-classes.d.ts +23 -0
- package/dist/commands/addon/extract-classes.d.ts.map +1 -0
- package/dist/commands/addon/extract-classes.js +281 -0
- package/dist/commands/addon/extract-classes.js.map +1 -0
- package/dist/commands/addon/generate-safelist.d.ts +24 -0
- package/dist/commands/addon/generate-safelist.d.ts.map +1 -0
- package/dist/commands/addon/generate-safelist.js +276 -0
- package/dist/commands/addon/generate-safelist.js.map +1 -0
- package/dist/commands/addon/index.d.ts +19 -0
- package/dist/commands/addon/index.d.ts.map +1 -0
- package/dist/commands/addon/index.js +296 -0
- package/dist/commands/addon/index.js.map +1 -0
- package/dist/commands/addon/init-repo.d.ts +25 -0
- package/dist/commands/addon/init-repo.d.ts.map +1 -0
- package/dist/commands/addon/init-repo.js +171 -0
- package/dist/commands/addon/init-repo.js.map +1 -0
- package/dist/commands/addon/install.d.ts +23 -0
- package/dist/commands/addon/install.d.ts.map +1 -0
- package/dist/commands/addon/install.js +84 -0
- package/dist/commands/addon/install.js.map +1 -0
- package/dist/commands/addon/list.d.ts +10 -0
- package/dist/commands/addon/list.d.ts.map +1 -0
- package/dist/commands/addon/list.js +102 -0
- package/dist/commands/addon/list.js.map +1 -0
- package/dist/commands/addon/manifest-refresh.d.ts +17 -0
- package/dist/commands/addon/manifest-refresh.d.ts.map +1 -0
- package/dist/commands/addon/manifest-refresh.js +48 -0
- package/dist/commands/addon/manifest-refresh.js.map +1 -0
- package/dist/commands/addon/migrate.d.ts +40 -0
- package/dist/commands/addon/migrate.d.ts.map +1 -0
- package/dist/commands/addon/migrate.js +236 -0
- package/dist/commands/addon/migrate.js.map +1 -0
- package/dist/commands/addon/publish.d.ts +33 -0
- package/dist/commands/addon/publish.d.ts.map +1 -0
- package/dist/commands/addon/publish.js +236 -0
- package/dist/commands/addon/publish.js.map +1 -0
- package/dist/commands/addon/scaffold-quality.d.ts +21 -0
- package/dist/commands/addon/scaffold-quality.d.ts.map +1 -0
- package/dist/commands/addon/scaffold-quality.js +90 -0
- package/dist/commands/addon/scaffold-quality.js.map +1 -0
- package/dist/commands/addon/sign.d.ts +9 -0
- package/dist/commands/addon/sign.d.ts.map +1 -0
- package/dist/commands/addon/sign.js +83 -0
- package/dist/commands/addon/sign.js.map +1 -0
- package/dist/commands/addon/toggle.d.ts +6 -0
- package/dist/commands/addon/toggle.d.ts.map +1 -0
- package/dist/commands/addon/toggle.js +46 -0
- package/dist/commands/addon/toggle.js.map +1 -0
- package/dist/commands/agent/index.d.ts +34 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +564 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/brand/index.d.ts +54 -0
- package/dist/commands/brand/index.d.ts.map +1 -0
- package/dist/commands/brand/index.js +367 -0
- package/dist/commands/brand/index.js.map +1 -0
- package/dist/commands/build/index.d.ts +53 -0
- package/dist/commands/build/index.d.ts.map +1 -0
- package/dist/commands/build/index.js +726 -0
- package/dist/commands/build/index.js.map +1 -0
- package/dist/commands/cache/flush-local.d.ts +31 -0
- package/dist/commands/cache/flush-local.d.ts.map +1 -0
- package/dist/commands/cache/flush-local.js +161 -0
- package/dist/commands/cache/flush-local.js.map +1 -0
- package/dist/commands/cache/index.d.ts +14 -0
- package/dist/commands/cache/index.d.ts.map +1 -0
- package/dist/commands/cache/index.js +453 -0
- package/dist/commands/cache/index.js.map +1 -0
- package/dist/commands/check/index.d.ts +8 -0
- package/dist/commands/check/index.d.ts.map +1 -0
- package/dist/commands/check/index.js +1316 -0
- package/dist/commands/check/index.js.map +1 -0
- package/dist/commands/cloudflare/index.d.ts +8 -0
- package/dist/commands/cloudflare/index.d.ts.map +1 -0
- package/dist/commands/cloudflare/index.js +453 -0
- package/dist/commands/cloudflare/index.js.map +1 -0
- package/dist/commands/core/create.d.ts +12 -0
- package/dist/commands/core/create.d.ts.map +1 -0
- package/dist/commands/core/create.js +206 -0
- package/dist/commands/core/create.js.map +1 -0
- package/dist/commands/core/delete.d.ts +11 -0
- package/dist/commands/core/delete.d.ts.map +1 -0
- package/dist/commands/core/delete.js +64 -0
- package/dist/commands/core/delete.js.map +1 -0
- package/dist/commands/core/env.d.ts +12 -0
- package/dist/commands/core/env.d.ts.map +1 -0
- package/dist/commands/core/env.js +95 -0
- package/dist/commands/core/env.js.map +1 -0
- package/dist/commands/core/health.d.ts +6 -0
- package/dist/commands/core/health.d.ts.map +1 -0
- package/dist/commands/core/health.js +215 -0
- package/dist/commands/core/health.js.map +1 -0
- package/dist/commands/core/index.d.ts +15 -0
- package/dist/commands/core/index.d.ts.map +1 -0
- package/dist/commands/core/index.js +86 -0
- package/dist/commands/core/index.js.map +1 -0
- package/dist/commands/core/list.d.ts +11 -0
- package/dist/commands/core/list.d.ts.map +1 -0
- package/dist/commands/core/list.js +58 -0
- package/dist/commands/core/list.js.map +1 -0
- package/dist/commands/core/rebuild.d.ts +13 -0
- package/dist/commands/core/rebuild.d.ts.map +1 -0
- package/dist/commands/core/rebuild.js +119 -0
- package/dist/commands/core/rebuild.js.map +1 -0
- package/dist/commands/db/index.d.ts +23 -0
- package/dist/commands/db/index.d.ts.map +1 -0
- package/dist/commands/db/index.js +355 -0
- package/dist/commands/db/index.js.map +1 -0
- package/dist/commands/db/promote-silo.d.ts +320 -0
- package/dist/commands/db/promote-silo.d.ts.map +1 -0
- package/dist/commands/db/promote-silo.js +930 -0
- package/dist/commands/db/promote-silo.js.map +1 -0
- package/dist/commands/db/relocate.d.ts +41 -0
- package/dist/commands/db/relocate.d.ts.map +1 -0
- package/dist/commands/db/relocate.js +482 -0
- package/dist/commands/db/relocate.js.map +1 -0
- package/dist/commands/db/rollback-silo.d.ts +44 -0
- package/dist/commands/db/rollback-silo.d.ts.map +1 -0
- package/dist/commands/db/rollback-silo.js +402 -0
- package/dist/commands/db/rollback-silo.js.map +1 -0
- package/dist/commands/deploy/index.d.ts +26 -0
- package/dist/commands/deploy/index.d.ts.map +1 -0
- package/dist/commands/deploy/index.js +107 -0
- package/dist/commands/deploy/index.js.map +1 -0
- package/dist/commands/devops/index.d.ts +6 -0
- package/dist/commands/devops/index.d.ts.map +1 -0
- package/dist/commands/devops/index.js +220 -0
- package/dist/commands/devops/index.js.map +1 -0
- package/dist/commands/domain/index.d.ts +8 -0
- package/dist/commands/domain/index.d.ts.map +1 -0
- package/dist/commands/domain/index.js +386 -0
- package/dist/commands/domain/index.js.map +1 -0
- package/dist/commands/image/index.d.ts +8 -0
- package/dist/commands/image/index.d.ts.map +1 -0
- package/dist/commands/image/index.js +308 -0
- package/dist/commands/image/index.js.map +1 -0
- package/dist/commands/install/factory-reset.d.ts +21 -0
- package/dist/commands/install/factory-reset.d.ts.map +1 -0
- package/dist/commands/install/factory-reset.js +83 -0
- package/dist/commands/install/factory-reset.js.map +1 -0
- package/dist/commands/install/index.d.ts +17 -0
- package/dist/commands/install/index.d.ts.map +1 -0
- package/dist/commands/install/index.js +44 -0
- package/dist/commands/install/index.js.map +1 -0
- package/dist/commands/install/install.d.ts +35 -0
- package/dist/commands/install/install.d.ts.map +1 -0
- package/dist/commands/install/install.js +171 -0
- package/dist/commands/install/install.js.map +1 -0
- package/dist/commands/login/index.d.ts +15 -0
- package/dist/commands/login/index.d.ts.map +1 -0
- package/dist/commands/login/index.js +58 -0
- package/dist/commands/login/index.js.map +1 -0
- package/dist/commands/nginx/index.d.ts +11 -0
- package/dist/commands/nginx/index.d.ts.map +1 -0
- package/dist/commands/nginx/index.js +580 -0
- package/dist/commands/nginx/index.js.map +1 -0
- package/dist/commands/server/bootstrap.d.ts +25 -0
- package/dist/commands/server/bootstrap.d.ts.map +1 -0
- package/dist/commands/server/bootstrap.js +260 -0
- package/dist/commands/server/bootstrap.js.map +1 -0
- package/dist/commands/server/index.d.ts +8 -0
- package/dist/commands/server/index.d.ts.map +1 -0
- package/dist/commands/server/index.js +2524 -0
- package/dist/commands/server/index.js.map +1 -0
- package/dist/commands/setup/index.d.ts +34 -0
- package/dist/commands/setup/index.d.ts.map +1 -0
- package/dist/commands/setup/index.js +423 -0
- package/dist/commands/setup/index.js.map +1 -0
- package/dist/commands/ssl/index.d.ts +8 -0
- package/dist/commands/ssl/index.d.ts.map +1 -0
- package/dist/commands/ssl/index.js +275 -0
- package/dist/commands/ssl/index.js.map +1 -0
- package/dist/commands/superadmin/index.d.ts +16 -0
- package/dist/commands/superadmin/index.d.ts.map +1 -0
- package/dist/commands/superadmin/index.js +81 -0
- package/dist/commands/superadmin/index.js.map +1 -0
- package/dist/commands/tenant/index.d.ts +6 -0
- package/dist/commands/tenant/index.d.ts.map +1 -0
- package/dist/commands/tenant/index.js +192 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/addon-sign.d.ts +23 -0
- package/dist/lib/addon-sign.d.ts.map +1 -0
- package/dist/lib/addon-sign.js +39 -0
- package/dist/lib/addon-sign.js.map +1 -0
- package/dist/lib/addon-sign.test.d.ts +2 -0
- package/dist/lib/addon-sign.test.d.ts.map +1 -0
- package/dist/lib/addon-sign.test.js +27 -0
- package/dist/lib/addon-sign.test.js.map +1 -0
- package/dist/lib/cdn.d.ts +25 -0
- package/dist/lib/cdn.d.ts.map +1 -0
- package/dist/lib/cdn.js +131 -0
- package/dist/lib/cdn.js.map +1 -0
- package/dist/lib/cloudflare.d.ts +133 -0
- package/dist/lib/cloudflare.d.ts.map +1 -0
- package/dist/lib/cloudflare.js +435 -0
- package/dist/lib/cloudflare.js.map +1 -0
- package/dist/lib/config.d.ts +96 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +132 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/env.d.ts +8 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/env.js +64 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/hosts.d.ts +194 -0
- package/dist/lib/hosts.d.ts.map +1 -0
- package/dist/lib/hosts.js +183 -0
- package/dist/lib/hosts.js.map +1 -0
- package/dist/lib/logger.d.ts +68 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +130 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/nginx-config.d.ts +78 -0
- package/dist/lib/nginx-config.d.ts.map +1 -0
- package/dist/lib/nginx-config.js +736 -0
- package/dist/lib/nginx-config.js.map +1 -0
- package/dist/lib/ops/addon-dev.d.ts +93 -0
- package/dist/lib/ops/addon-dev.d.ts.map +1 -0
- package/dist/lib/ops/addon-dev.js +237 -0
- package/dist/lib/ops/addon-dev.js.map +1 -0
- package/dist/lib/ops/addon-quality.d.ts +38 -0
- package/dist/lib/ops/addon-quality.d.ts.map +1 -0
- package/dist/lib/ops/addon-quality.js +338 -0
- package/dist/lib/ops/addon-quality.js.map +1 -0
- package/dist/lib/ops/addon-routes.d.ts +49 -0
- package/dist/lib/ops/addon-routes.d.ts.map +1 -0
- package/dist/lib/ops/addon-routes.js +189 -0
- package/dist/lib/ops/addon-routes.js.map +1 -0
- package/dist/lib/ops/addon.d.ts +120 -0
- package/dist/lib/ops/addon.d.ts.map +1 -0
- package/dist/lib/ops/addon.js +260 -0
- package/dist/lib/ops/addon.js.map +1 -0
- package/dist/lib/ops/cdn.d.ts +87 -0
- package/dist/lib/ops/cdn.d.ts.map +1 -0
- package/dist/lib/ops/cdn.js +170 -0
- package/dist/lib/ops/cdn.js.map +1 -0
- package/dist/lib/ops/cf.d.ts +36 -0
- package/dist/lib/ops/cf.d.ts.map +1 -0
- package/dist/lib/ops/cf.js +114 -0
- package/dist/lib/ops/cf.js.map +1 -0
- package/dist/lib/ops/compose.d.ts +95 -0
- package/dist/lib/ops/compose.d.ts.map +1 -0
- package/dist/lib/ops/compose.js +165 -0
- package/dist/lib/ops/compose.js.map +1 -0
- package/dist/lib/ops/core.d.ts +117 -0
- package/dist/lib/ops/core.d.ts.map +1 -0
- package/dist/lib/ops/core.js +322 -0
- package/dist/lib/ops/core.js.map +1 -0
- package/dist/lib/ops/db.d.ts +116 -0
- package/dist/lib/ops/db.d.ts.map +1 -0
- package/dist/lib/ops/db.js +351 -0
- package/dist/lib/ops/db.js.map +1 -0
- package/dist/lib/ops/dns.d.ts +111 -0
- package/dist/lib/ops/dns.d.ts.map +1 -0
- package/dist/lib/ops/dns.js +306 -0
- package/dist/lib/ops/dns.js.map +1 -0
- package/dist/lib/ops/image.d.ts +94 -0
- package/dist/lib/ops/image.d.ts.map +1 -0
- package/dist/lib/ops/image.js +159 -0
- package/dist/lib/ops/image.js.map +1 -0
- package/dist/lib/ops/nginx.d.ts +114 -0
- package/dist/lib/ops/nginx.d.ts.map +1 -0
- package/dist/lib/ops/nginx.js +388 -0
- package/dist/lib/ops/nginx.js.map +1 -0
- package/dist/lib/ops/redis.d.ts +7 -0
- package/dist/lib/ops/redis.d.ts.map +1 -0
- package/dist/lib/ops/redis.js +35 -0
- package/dist/lib/ops/redis.js.map +1 -0
- package/dist/lib/ops/ssh.d.ts +127 -0
- package/dist/lib/ops/ssh.d.ts.map +1 -0
- package/dist/lib/ops/ssh.js +269 -0
- package/dist/lib/ops/ssh.js.map +1 -0
- package/dist/lib/prompts.d.ts +46 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +113 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/sast.d.ts +43 -0
- package/dist/lib/sast.d.ts.map +1 -0
- package/dist/lib/sast.js +79 -0
- package/dist/lib/sast.js.map +1 -0
- package/dist/lib/sast.test.d.ts +2 -0
- package/dist/lib/sast.test.d.ts.map +1 -0
- package/dist/lib/sast.test.js +33 -0
- package/dist/lib/sast.test.js.map +1 -0
- package/dist/lib/shell.d.ts +61 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +183 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/lib/ssh-config.d.ts +37 -0
- package/dist/lib/ssh-config.d.ts.map +1 -0
- package/dist/lib/ssh-config.js +122 -0
- package/dist/lib/ssh-config.js.map +1 -0
- package/dist/lib/tenant-scope.d.ts +38 -0
- package/dist/lib/tenant-scope.d.ts.map +1 -0
- package/dist/lib/tenant-scope.js +129 -0
- package/dist/lib/tenant-scope.js.map +1 -0
- package/dist/lib/tenant-scope.test.d.ts +2 -0
- package/dist/lib/tenant-scope.test.d.ts.map +1 -0
- package/dist/lib/tenant-scope.test.js +223 -0
- package/dist/lib/tenant-scope.test.js.map +1 -0
- package/package.json +58 -0
- package/templates/bootstrap/.env.template +54 -0
- package/templates/bootstrap/docker-compose.yml +145 -0
- package/templates/vhost.conf.tmpl +446 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/addon/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9F"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vu addon:list [core]
|
|
3
|
+
*/
|
|
4
|
+
import { log, formatTable } from '../../lib/logger.js';
|
|
5
|
+
import { ssh } from '../../lib/shell.js';
|
|
6
|
+
import { getEnv, paths } from '../../lib/config.js';
|
|
7
|
+
import fs from 'fs-extra';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
export async function listAddons(core, options) {
|
|
10
|
+
const env = getEnv();
|
|
11
|
+
if (env === 'dev') {
|
|
12
|
+
await listLocalAddons(options);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
await listServerAddons(core, options);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async function listLocalAddons(options) {
|
|
19
|
+
log.title('Local Addons');
|
|
20
|
+
const addonsPath = paths.dev.addons;
|
|
21
|
+
if (!await fs.pathExists(addonsPath)) {
|
|
22
|
+
log.info('No addons directory found');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const entries = await fs.readdir(addonsPath, { withFileTypes: true });
|
|
26
|
+
const addons = entries.filter(e => e.isDirectory() && !e.name.startsWith('.'));
|
|
27
|
+
if (addons.length === 0) {
|
|
28
|
+
log.info('No addons found');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const addonData = [];
|
|
32
|
+
for (const addon of addons) {
|
|
33
|
+
const addonJsonPath = path.join(addonsPath, addon.name, 'addon.json');
|
|
34
|
+
let version = '-';
|
|
35
|
+
let description = '-';
|
|
36
|
+
let enabled = false;
|
|
37
|
+
if (await fs.pathExists(addonJsonPath)) {
|
|
38
|
+
try {
|
|
39
|
+
const json = await fs.readJson(addonJsonPath);
|
|
40
|
+
version = String(json.version || '-');
|
|
41
|
+
description = String(json.description || '-');
|
|
42
|
+
enabled = json.admin?.enabled || json.web?.enabled || false;
|
|
43
|
+
}
|
|
44
|
+
catch { }
|
|
45
|
+
}
|
|
46
|
+
addonData.push({
|
|
47
|
+
name: addon.name,
|
|
48
|
+
version,
|
|
49
|
+
description: description.slice(0, 40),
|
|
50
|
+
enabled,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (options.json) {
|
|
54
|
+
console.log(JSON.stringify(addonData, null, 2));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
formatTable(['Name', 'Version', 'Description', 'Status'], addonData.map(a => [
|
|
58
|
+
a.name,
|
|
59
|
+
a.version,
|
|
60
|
+
a.description,
|
|
61
|
+
a.enabled ? '✓ Enabled' : '○ Disabled',
|
|
62
|
+
]));
|
|
63
|
+
log.blank();
|
|
64
|
+
log.info(`Total: ${addonData.length} addon(s)`);
|
|
65
|
+
}
|
|
66
|
+
async function listServerAddons(core, options) {
|
|
67
|
+
const targetCore = core || 'core1';
|
|
68
|
+
log.title(`Addons in ${targetCore}`);
|
|
69
|
+
const result = await ssh(`ls -1 /home/cores/${targetCore}/addons/ 2>/dev/null`, { silent: true });
|
|
70
|
+
if (!result.success || !result.stdout.trim()) {
|
|
71
|
+
log.info('No addons found');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const addonNames = result.stdout.trim().split('\n').filter(Boolean);
|
|
75
|
+
const addonData = [];
|
|
76
|
+
for (const name of addonNames) {
|
|
77
|
+
const jsonResult = await ssh(`cat /home/cores/${targetCore}/addons/${name}/addon.json 2>/dev/null`, { silent: true });
|
|
78
|
+
let version = '-';
|
|
79
|
+
let description = '-';
|
|
80
|
+
if (jsonResult.success) {
|
|
81
|
+
try {
|
|
82
|
+
const json = JSON.parse(jsonResult.stdout);
|
|
83
|
+
version = json.version || '-';
|
|
84
|
+
description = json.description || '-';
|
|
85
|
+
}
|
|
86
|
+
catch { }
|
|
87
|
+
}
|
|
88
|
+
addonData.push({
|
|
89
|
+
name,
|
|
90
|
+
version,
|
|
91
|
+
description: description.slice(0, 40),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
if (options.json) {
|
|
95
|
+
console.log(JSON.stringify(addonData, null, 2));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
formatTable(['Name', 'Version', 'Description'], addonData.map(a => [a.name, a.version, a.description]));
|
|
99
|
+
log.blank();
|
|
100
|
+
log.info(`Total: ${addonData.length} addon(s) in ${targetCore}`);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/addon/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI — `ci addon manifest-refresh` (M3.4, FLIP-1 Worker-side seam / serhat O-1)
|
|
3
|
+
*
|
|
4
|
+
* enforcement_mode flip'ini ETKİLİ kılan Worker-side adım: cp_enforcement_config'teki
|
|
5
|
+
* GÜNCEL mode + addon kataloğundan İMZALI manifest'i yeniden üretir (refresh-manifest-
|
|
6
|
+
* job.php, container-içi, READ-ONLY) → R2'ye (addons/_manifest.json) yükler → Worker
|
|
7
|
+
* yeni `enforcement_mode`'u görür. Acil-rollback'in Worker yarısı da budur (set off → refresh).
|
|
8
|
+
*
|
|
9
|
+
* SINIR: host-side flag-set (enforcement-flag.sh + runbook §5) = mehmet. Bu komut onun
|
|
10
|
+
* yazdığı DB flag'ini okuyup manifest'e yansıtır — flip'in iki ucundan biri. Addon
|
|
11
|
+
* PUBLISH'siz (cp_addons'a yazmaz). Live R2 upload Mustafa-gate; --dry-run kısa-devre.
|
|
12
|
+
*/
|
|
13
|
+
export interface ManifestRefreshOptions {
|
|
14
|
+
host?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function refreshManifest(options: ManifestRefreshOptions): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=manifest-refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-refresh.d.ts","sourceRoot":"","sources":["../../../src/commands/addon/manifest-refresh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCpF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI — `ci addon manifest-refresh` (M3.4, FLIP-1 Worker-side seam / serhat O-1)
|
|
3
|
+
*
|
|
4
|
+
* enforcement_mode flip'ini ETKİLİ kılan Worker-side adım: cp_enforcement_config'teki
|
|
5
|
+
* GÜNCEL mode + addon kataloğundan İMZALI manifest'i yeniden üretir (refresh-manifest-
|
|
6
|
+
* job.php, container-içi, READ-ONLY) → R2'ye (addons/_manifest.json) yükler → Worker
|
|
7
|
+
* yeni `enforcement_mode`'u görür. Acil-rollback'in Worker yarısı da budur (set off → refresh).
|
|
8
|
+
*
|
|
9
|
+
* SINIR: host-side flag-set (enforcement-flag.sh + runbook §5) = mehmet. Bu komut onun
|
|
10
|
+
* yazdığı DB flag'ini okuyup manifest'e yansıtır — flip'in iki ucundan biri. Addon
|
|
11
|
+
* PUBLISH'siz (cp_addons'a yazmaz). Live R2 upload Mustafa-gate; --dry-run kısa-devre.
|
|
12
|
+
*/
|
|
13
|
+
import { execFile } from 'node:child_process';
|
|
14
|
+
import { log } from '../../lib/logger.js';
|
|
15
|
+
import { getHostConfig } from '../../lib/hosts.js';
|
|
16
|
+
import { cdnUploadManifest } from '../../lib/ops/cdn.js';
|
|
17
|
+
import { isDryRun } from '../../lib/config.js';
|
|
18
|
+
export async function refreshManifest(options) {
|
|
19
|
+
const cfg = getHostConfig(options.host ?? 'cicore');
|
|
20
|
+
const container = process.env.CICORE_PHP_CONTAINER ?? 'cicore-php';
|
|
21
|
+
const runner = process.env.REFRESH_MANIFEST_RUNNER ?? '/var/www/app/Backend/Console/refresh-manifest-job.php';
|
|
22
|
+
log.title('Manifest Refresh — enforcement_mode → imzalı manifest → R2 (FLIP-1 Worker-side)');
|
|
23
|
+
// 1. GÜNCEL imzalı manifest'i container-içinde üret (cp_enforcement_config + addonlar
|
|
24
|
+
// okunur; READ-ONLY, addon publish YOK).
|
|
25
|
+
const run = await new Promise((resolve) => {
|
|
26
|
+
execFile('docker', ['exec', container, 'php', runner], { timeout: 120_000 }, (error, stdout, stderr) => {
|
|
27
|
+
resolve({ ok: !error, stdout: stdout ?? '', error: error ? ((stderr ?? '').trim() || error.message).slice(0, 500) : '' });
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
if (!run.ok) {
|
|
31
|
+
log.error(`refresh-manifest-job başarısız: ${run.error}`);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
const line = run.stdout.split('\n').find((l) => l.startsWith('MANIFEST_JSON='));
|
|
35
|
+
if (!line) {
|
|
36
|
+
log.error('refresh-manifest-job: MANIFEST_JSON üretilmedi');
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const manifestJson = line.slice('MANIFEST_JSON='.length);
|
|
40
|
+
// 2. R2'ye yükle (addons/_manifest.json) → Worker yeni enforcement_mode'u görür.
|
|
41
|
+
const up = await cdnUploadManifest(cfg, manifestJson);
|
|
42
|
+
if (!up.success && !isDryRun()) {
|
|
43
|
+
log.error(`manifest upload başarısız: ${up.errorMessage}`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
log.success(`İmzalı manifest R2'ye yüklendi (addons/_manifest.json)${isDryRun() ? ' (dry-run)' : ''} → Worker enforcement_mode güncel (flip etkili).`);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=manifest-refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-refresh.js","sourceRoot":"","sources":["../../../src/commands/addon/manifest-refresh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAM/C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA+B;IACnE,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,YAAY,CAAC;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,uDAAuD,CAAC;IAE9G,GAAG,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;IAE7F,sFAAsF;IACtF,4CAA4C;IAC5C,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAiD,CAAC,OAAO,EAAE,EAAE;QACxF,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACrG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,GAAG,CAAC,KAAK,CAAC,mCAAmC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,GAAG,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzD,iFAAiF;IACjF,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC/B,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,GAAG,CAAC,OAAO,CAAC,yDAAyD,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,kDAAkD,CAAC,CAAC;AACzJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI - Addon Migration Commands
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* vu addon:migrate <name> <core> - Run migrations
|
|
6
|
+
* vu addon:rebuild <name> <core> - Drop + migrate
|
|
7
|
+
* vu addon:reset <name> <core> - Drop all tables
|
|
8
|
+
* vu addon:uninstall <name> <core> - Remove addon tables
|
|
9
|
+
*/
|
|
10
|
+
interface MigrateOptions {
|
|
11
|
+
rollback?: boolean;
|
|
12
|
+
fresh?: boolean;
|
|
13
|
+
host?: string;
|
|
14
|
+
}
|
|
15
|
+
interface RebuildOptions {
|
|
16
|
+
host?: string;
|
|
17
|
+
}
|
|
18
|
+
interface ResetOptions {
|
|
19
|
+
host?: string;
|
|
20
|
+
force?: boolean;
|
|
21
|
+
}
|
|
22
|
+
interface UninstallOptions {
|
|
23
|
+
host?: string;
|
|
24
|
+
force?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function migrateAddon(name: string, core: string, options: MigrateOptions): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Rebuild addon - Drop tables and re-run migrations
|
|
29
|
+
*/
|
|
30
|
+
export declare function rebuildAddon(name: string, core: string, options: RebuildOptions): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Reset addon - Drop all tables and re-create from scratch
|
|
33
|
+
*/
|
|
34
|
+
export declare function resetAddon(name: string, core: string, options: ResetOptions): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Uninstall addon - Remove database tables only
|
|
37
|
+
*/
|
|
38
|
+
export declare function uninstallAddon(name: string, core: string, options: UninstallOptions): Promise<void>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/commands/addon/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAeD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ErG;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDrG;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDjG;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzG"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI - Addon Migration Commands
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* vu addon:migrate <name> <core> - Run migrations
|
|
6
|
+
* vu addon:rebuild <name> <core> - Drop + migrate
|
|
7
|
+
* vu addon:reset <name> <core> - Drop all tables
|
|
8
|
+
* vu addon:uninstall <name> <core> - Remove addon tables
|
|
9
|
+
*/
|
|
10
|
+
import { log, spinner } from '../../lib/logger.js';
|
|
11
|
+
import { ssh, dockerExec, exec } from '../../lib/shell.js';
|
|
12
|
+
import { containers } from '../../lib/config.js';
|
|
13
|
+
import { confirm } from '../../lib/prompts.js';
|
|
14
|
+
import { getSSHHost, buildSSHCommand } from '../../lib/ssh-config.js';
|
|
15
|
+
// Helper to run command on remote or local
|
|
16
|
+
async function runOnTarget(host, localCmd, remoteCmd) {
|
|
17
|
+
if (host) {
|
|
18
|
+
const args = buildSSHCommand(host, remoteCmd);
|
|
19
|
+
return await exec('ssh', args, { silent: true });
|
|
20
|
+
}
|
|
21
|
+
return await dockerExec(containers.php, localCmd, { silent: true });
|
|
22
|
+
}
|
|
23
|
+
export async function migrateAddon(name, core, options) {
|
|
24
|
+
log.title(`Migrate Addon: ${name} in ${core}`);
|
|
25
|
+
const addonPath = `/home/cores/${core}/addons/${name}`;
|
|
26
|
+
const migrationsPath = `${addonPath}/Backend/Migrations`;
|
|
27
|
+
// Check migrations exist
|
|
28
|
+
const checkResult = await ssh(`ls ${migrationsPath}/*.php 2>/dev/null | wc -l`, { silent: true });
|
|
29
|
+
const migrationCount = parseInt(checkResult.stdout.trim()) || 0;
|
|
30
|
+
if (migrationCount === 0) {
|
|
31
|
+
log.info('No migrations found for this addon');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
log.info(`Found ${migrationCount} migration file(s)`);
|
|
35
|
+
// Fresh migration warning
|
|
36
|
+
if (options.fresh) {
|
|
37
|
+
const confirmed = await confirm('Fresh migration will DROP all addon tables. Continue?', false);
|
|
38
|
+
if (!confirmed) {
|
|
39
|
+
log.warn('Cancelled');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Run migrations via PHP
|
|
44
|
+
const migrateSpinner = spinner('Running migrations...').start();
|
|
45
|
+
const action = options.rollback ? 'rollback' : (options.fresh ? 'fresh' : 'up');
|
|
46
|
+
const phpCmd = `php -r "
|
|
47
|
+
require '/var/www/vendor/autoload.php';
|
|
48
|
+
|
|
49
|
+
\\\$corePath = '/var/www/cores/${core}';
|
|
50
|
+
\\\$addonName = '${name}';
|
|
51
|
+
\\\$action = '${action}';
|
|
52
|
+
|
|
53
|
+
// Load core .env
|
|
54
|
+
\\\$dotenv = Dotenv\\\\Dotenv::createImmutable(\\\$corePath);
|
|
55
|
+
\\\$dotenv->load();
|
|
56
|
+
|
|
57
|
+
// Run migration
|
|
58
|
+
\\\$migrator = new VuCore\\\\Core\\\\Database\\\\Migrator(\\\$corePath, \\\$addonName);
|
|
59
|
+
\\\$result = \\\$migrator->\\\$action();
|
|
60
|
+
|
|
61
|
+
echo json_encode(\\\$result);
|
|
62
|
+
"`;
|
|
63
|
+
const result = await dockerExec(containers.php, phpCmd, { silent: true });
|
|
64
|
+
if (!result.success) {
|
|
65
|
+
migrateSpinner.fail('Migration failed');
|
|
66
|
+
log.error(result.stderr);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
migrateSpinner.succeed('Migrations complete');
|
|
70
|
+
try {
|
|
71
|
+
const output = JSON.parse(result.stdout);
|
|
72
|
+
if (output.migrations) {
|
|
73
|
+
log.blank();
|
|
74
|
+
log.info('Executed migrations:');
|
|
75
|
+
output.migrations.forEach((m) => log.item(m));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
log.debug(result.stdout);
|
|
80
|
+
}
|
|
81
|
+
log.blank();
|
|
82
|
+
log.success('Migration complete');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Rebuild addon - Drop tables and re-run migrations
|
|
86
|
+
*/
|
|
87
|
+
export async function rebuildAddon(name, core, options) {
|
|
88
|
+
log.title(`Rebuild Addon: ${name} in ${core}`);
|
|
89
|
+
// Get host if specified
|
|
90
|
+
let host = null;
|
|
91
|
+
if (options.host) {
|
|
92
|
+
host = await getSSHHost(options.host);
|
|
93
|
+
if (!host) {
|
|
94
|
+
log.error(`SSH host '${options.host}' not found`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
log.kv('Target', `${host.name} (${host.hostname})`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
log.kv('Target', 'Local Docker');
|
|
101
|
+
}
|
|
102
|
+
const confirmed = await confirm(`This will DROP all tables for ${name} and re-run migrations. Continue?`, false);
|
|
103
|
+
if (!confirmed) {
|
|
104
|
+
log.warn('Cancelled');
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const rebuildSpinner = spinner('Rebuilding addon...').start();
|
|
108
|
+
// PHP command to rebuild addon
|
|
109
|
+
const phpCmd = `php /var/www/public/index.php addons/${name}/rebuild`;
|
|
110
|
+
const remoteCmd = `docker exec cicore_php ${phpCmd}`;
|
|
111
|
+
const result = await runOnTarget(host, phpCmd, remoteCmd);
|
|
112
|
+
if (!result.success) {
|
|
113
|
+
rebuildSpinner.fail('Rebuild failed');
|
|
114
|
+
log.error(result.stderr || result.stdout);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
rebuildSpinner.succeed('Addon rebuilt');
|
|
118
|
+
// Parse output
|
|
119
|
+
try {
|
|
120
|
+
const lines = result.stdout.split('\n').filter(l => l.trim());
|
|
121
|
+
lines.forEach(line => {
|
|
122
|
+
if (line.includes('✅') || line.includes('success')) {
|
|
123
|
+
log.success(line);
|
|
124
|
+
}
|
|
125
|
+
else if (line.includes('❌') || line.includes('error')) {
|
|
126
|
+
log.error(line);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
log.info(line);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
log.debug(result.stdout);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Reset addon - Drop all tables and re-create from scratch
|
|
139
|
+
*/
|
|
140
|
+
export async function resetAddon(name, core, options) {
|
|
141
|
+
log.title(`Reset Addon: ${name} in ${core}`);
|
|
142
|
+
// Get host if specified
|
|
143
|
+
let host = null;
|
|
144
|
+
if (options.host) {
|
|
145
|
+
host = await getSSHHost(options.host);
|
|
146
|
+
if (!host) {
|
|
147
|
+
log.error(`SSH host '${options.host}' not found`);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
log.kv('Target', `${host.name} (${host.hostname})`);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
log.kv('Target', 'Local Docker');
|
|
154
|
+
}
|
|
155
|
+
if (!options.force) {
|
|
156
|
+
const confirmed = await confirm(`⚠️ WARNING: This will DELETE ALL DATA for ${name}. This cannot be undone. Continue?`, false);
|
|
157
|
+
if (!confirmed) {
|
|
158
|
+
log.warn('Cancelled');
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const resetSpinner = spinner('Resetting addon (dropping all tables)...').start();
|
|
163
|
+
// PHP command to reset addon
|
|
164
|
+
const phpCmd = `php /var/www/public/index.php addons/${name}/reset`;
|
|
165
|
+
const remoteCmd = `docker exec cicore_php ${phpCmd}`;
|
|
166
|
+
const result = await runOnTarget(host, phpCmd, remoteCmd);
|
|
167
|
+
if (!result.success) {
|
|
168
|
+
resetSpinner.fail('Reset failed');
|
|
169
|
+
log.error(result.stderr || result.stdout);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
resetSpinner.succeed('Addon reset complete');
|
|
173
|
+
// Parse output
|
|
174
|
+
try {
|
|
175
|
+
const lines = result.stdout.split('\n').filter(l => l.trim());
|
|
176
|
+
lines.forEach(line => {
|
|
177
|
+
if (line.includes('Dropped') || line.includes('Created')) {
|
|
178
|
+
log.item(line);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
log.debug(result.stdout);
|
|
184
|
+
}
|
|
185
|
+
log.blank();
|
|
186
|
+
log.warn('All addon data has been deleted. Run migrations to recreate tables.');
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Uninstall addon - Remove database tables only
|
|
190
|
+
*/
|
|
191
|
+
export async function uninstallAddon(name, core, options) {
|
|
192
|
+
log.title(`Uninstall Addon: ${name} from ${core}`);
|
|
193
|
+
// Get host if specified
|
|
194
|
+
let host = null;
|
|
195
|
+
if (options.host) {
|
|
196
|
+
host = await getSSHHost(options.host);
|
|
197
|
+
if (!host) {
|
|
198
|
+
log.error(`SSH host '${options.host}' not found`);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
log.kv('Target', `${host.name} (${host.hostname})`);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
log.kv('Target', 'Local Docker');
|
|
205
|
+
}
|
|
206
|
+
if (!options.force) {
|
|
207
|
+
const confirmed = await confirm(`This will remove all database tables for ${name}. Continue?`, false);
|
|
208
|
+
if (!confirmed) {
|
|
209
|
+
log.warn('Cancelled');
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const uninstallSpinner = spinner('Uninstalling addon...').start();
|
|
214
|
+
// PHP command to uninstall addon
|
|
215
|
+
const phpCmd = `php /var/www/public/index.php addons/${name}/uninstall`;
|
|
216
|
+
const remoteCmd = `docker exec cicore_php ${phpCmd}`;
|
|
217
|
+
const result = await runOnTarget(host, phpCmd, remoteCmd);
|
|
218
|
+
if (!result.success) {
|
|
219
|
+
uninstallSpinner.fail('Uninstall failed');
|
|
220
|
+
log.error(result.stderr || result.stdout);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
uninstallSpinner.succeed('Addon uninstalled');
|
|
224
|
+
// Parse output
|
|
225
|
+
try {
|
|
226
|
+
const lines = result.stdout.split('\n').filter(l => l.trim());
|
|
227
|
+
lines.forEach(line => log.item(line));
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
log.debug(result.stdout);
|
|
231
|
+
}
|
|
232
|
+
log.blank();
|
|
233
|
+
log.info('Database tables removed. Addon files are still present.');
|
|
234
|
+
log.info(`To completely remove: vu addon:delete ${name} ${core}`);
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/commands/addon/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI — `ci addon publish` (M3.4 S4, option-b / K4 single authority)
|
|
3
|
+
*
|
|
4
|
+
* Publishes an addon to the central marketplace:
|
|
5
|
+
* 1. build (unless --skip-build) — reuse `ci addon build`
|
|
6
|
+
* 2. package → zip — addonPackageBackend
|
|
7
|
+
* 3. sha256 + HMAC signature — addon-sign (cross-lang parity)
|
|
8
|
+
* 4. upload artifact to R2 — cdnUploadZip (→ addons/<name>/<ver>/)
|
|
9
|
+
* 5. enqueue a SIGNED publish_addon job — enqueueJob (cp_provisioning_jobs)
|
|
10
|
+
*
|
|
11
|
+
* The CLI never writes cp_addons directly. The agent (`ci agent run`) claims the
|
|
12
|
+
* signed job (HMAC-verified) and runs publish-addon-job.php INSIDE the app
|
|
13
|
+
* container, so the control-plane registration goes through AddonRegistryService
|
|
14
|
+
* — the SINGLE writer (K-M3.4-1) — then rebuilds + uploads the CDN manifest.
|
|
15
|
+
*
|
|
16
|
+
* Live steps (R2 upload + enqueue) are Mustafa-gated; `--dry-run` (global
|
|
17
|
+
* CICORE_DRY_RUN) short-circuits the R2/DB writes (build + sha + sign still run).
|
|
18
|
+
*/
|
|
19
|
+
export interface PublishOptions {
|
|
20
|
+
core?: string;
|
|
21
|
+
version?: string;
|
|
22
|
+
host?: string;
|
|
23
|
+
title?: string;
|
|
24
|
+
plan?: string;
|
|
25
|
+
public?: boolean;
|
|
26
|
+
skipBuild?: boolean;
|
|
27
|
+
skipScan?: boolean;
|
|
28
|
+
skipEnqueue?: boolean;
|
|
29
|
+
semgrepConfig?: string;
|
|
30
|
+
requestedBy?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function publishAddon(name: string, options: PublishOptions): Promise<void>;
|
|
33
|
+
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/commands/addon/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAmBH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgNvF"}
|