@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,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI - Addon Management Commands
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* vu addon:create <name> - Create a new addon
|
|
6
|
+
* vu addon:list [core] - List addons
|
|
7
|
+
* vu addon:build <name> - Build addon UI
|
|
8
|
+
* vu addon:install <name> <core> - Install addon to core
|
|
9
|
+
* vu addon:enable <name> <core> - Enable addon
|
|
10
|
+
* vu addon:disable <name> <core> - Disable addon
|
|
11
|
+
* vu addon:delete <name> <core> - Delete addon from core
|
|
12
|
+
* vu addon:migrate <name> <core> - Run addon migrations
|
|
13
|
+
* vu addon:sign <name> - Sign addon for marketplace
|
|
14
|
+
* vu addon:extract-classes [name] - Extract Tailwind classes from addon(s)
|
|
15
|
+
* vu addon:generate-safelist - Generate Tailwind safelist patterns
|
|
16
|
+
*/
|
|
17
|
+
import { createAddon } from './create.js';
|
|
18
|
+
import { listAddons } from './list.js';
|
|
19
|
+
import { buildAddon } from './build.js';
|
|
20
|
+
import { installAddon } from './install.js';
|
|
21
|
+
import { deployAddon } from './deploy.js';
|
|
22
|
+
import { devAddon, stopAddon, listDevSessions, resetDevSessions } from './dev.js';
|
|
23
|
+
import { scaffoldQuality } from './scaffold-quality.js';
|
|
24
|
+
import { publishAddon } from './publish.js';
|
|
25
|
+
import { refreshManifest } from './manifest-refresh.js';
|
|
26
|
+
import { enableAddon, disableAddon } from './toggle.js';
|
|
27
|
+
import { deleteAddon } from './delete.js';
|
|
28
|
+
import { migrateAddon, rebuildAddon, resetAddon, uninstallAddon } from './migrate.js';
|
|
29
|
+
import { signAddon } from './sign.js';
|
|
30
|
+
import { addonApiAction, buildRegistry, dumpAutoload } from './api-actions.js';
|
|
31
|
+
import { extractClasses } from './extract-classes.js';
|
|
32
|
+
import { generateSafelist } from './generate-safelist.js';
|
|
33
|
+
import { initRepo } from './init-repo.js';
|
|
34
|
+
export function registerAddonCommands(program) {
|
|
35
|
+
const addon = program
|
|
36
|
+
.command('addon')
|
|
37
|
+
.description('Addon management commands');
|
|
38
|
+
// vu addon:create <name>
|
|
39
|
+
addon
|
|
40
|
+
.command('create <name>')
|
|
41
|
+
.description('HelloWorld şablonundan addon iskeleti oluşturur (vu addon create HesapMakinasi)')
|
|
42
|
+
.action(async (name) => {
|
|
43
|
+
await createAddon(name);
|
|
44
|
+
});
|
|
45
|
+
// ci addon init-repo <name> (S4-T23: GitLab repo oluştur + git push)
|
|
46
|
+
addon
|
|
47
|
+
.command('init-repo <name>')
|
|
48
|
+
.description('GitLab\'da repo oluşturur + git init + push (VPN gerekli, S4-T23)')
|
|
49
|
+
.option('--gitlab-url <url>', 'GitLab base URL', 'http://10.20.20.28')
|
|
50
|
+
.option('--group <group>', 'GitLab namespace/group', 'cicore-addons')
|
|
51
|
+
.option('--token <glpat>', 'GitLab personal access token (yoksa vault)')
|
|
52
|
+
.option('--dry-run', 'Gerçek işlem yapmadan simüle et')
|
|
53
|
+
.action(async (name, opts) => {
|
|
54
|
+
await initRepo(name, {
|
|
55
|
+
gitlabUrl: opts.gitlabUrl,
|
|
56
|
+
group: opts.group,
|
|
57
|
+
token: opts.token,
|
|
58
|
+
dryRun: opts.dryRun ?? false,
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
// vu addon:list [core]
|
|
62
|
+
addon
|
|
63
|
+
.command('list [core]')
|
|
64
|
+
.alias('ls')
|
|
65
|
+
.description('List addons (optionally for a specific core)')
|
|
66
|
+
.option('-j, --json', 'Output as JSON')
|
|
67
|
+
.option('-a, --all', 'Show all addons including disabled')
|
|
68
|
+
.action(async (core, options) => {
|
|
69
|
+
await listAddons(core, options);
|
|
70
|
+
});
|
|
71
|
+
// vu addon:build <name>
|
|
72
|
+
addon
|
|
73
|
+
.command('build <name>')
|
|
74
|
+
.description('Build addon UI (Vite ESM build)')
|
|
75
|
+
.option('-c, --core <core>', 'Target core', 'core1')
|
|
76
|
+
.option('--watch', 'Watch mode for development')
|
|
77
|
+
.option('--no-cdn', 'Skip CDN upload')
|
|
78
|
+
.action(async (name, options) => {
|
|
79
|
+
await buildAddon(name, options);
|
|
80
|
+
});
|
|
81
|
+
// ci addon:publish <name> — M3.4 merkezi marketplace yayını (option-b/K4)
|
|
82
|
+
addon
|
|
83
|
+
.command('publish <name>')
|
|
84
|
+
.description('Addon\'u merkezi marketplace\'e yayınla (build+sign+R2+publish_addon job, K-M3.4)')
|
|
85
|
+
.option('-c, --core <core>', 'Build target core', 'core1')
|
|
86
|
+
.option('--version <v>', 'Sürüm etiketi', 'latest')
|
|
87
|
+
.option('--host <alias>', 'Control-plane host', 'cicore')
|
|
88
|
+
.option('--title <t>', 'Görünen başlık (varsayılan: addon adı)')
|
|
89
|
+
.option('--plan <code>', 'Fiyat planı kodu (cp_plans.kind=addon); boş=ücretsiz')
|
|
90
|
+
.option('--public', 'Storefront kataloğunda listele (is_public)')
|
|
91
|
+
.option('--skip-build', 'Build adımını atla (mevcut dist kullan)')
|
|
92
|
+
.option('--skip-scan', 'SAST (Semgrep) pre-flight gate\'ini atla (fail-closed bypass, audit\'li)')
|
|
93
|
+
.option('--skip-enqueue', 'publish_addon job enqueue\'unu atla (sadece R2 upload)')
|
|
94
|
+
.option('--semgrep-config <cfg>', 'Semgrep ruleset (varsayılan: auto / CICORE_SEMGREP_CONFIG)')
|
|
95
|
+
.action(async (name, options) => {
|
|
96
|
+
await publishAddon(name, options);
|
|
97
|
+
});
|
|
98
|
+
// ci addon manifest-refresh — FLIP-1 Worker-side: enforcement_mode flip → imzalı manifest regen → R2
|
|
99
|
+
addon
|
|
100
|
+
.command('manifest-refresh')
|
|
101
|
+
.description('enforcement_mode flip\'ini Worker\'a yansıt: imzalı manifest\'i regen et + R2\'ye yükle (addon publish\'siz)')
|
|
102
|
+
.option('--host <alias>', 'Control-plane host', 'cicore')
|
|
103
|
+
.action(async (options) => {
|
|
104
|
+
await refreshManifest(options);
|
|
105
|
+
});
|
|
106
|
+
// vu addon:install <name> <core>
|
|
107
|
+
addon
|
|
108
|
+
.command('install <name> <core>')
|
|
109
|
+
.description('Install addon backend to a core on the given host')
|
|
110
|
+
.option('-f, --force', 'Overwrite existing addon')
|
|
111
|
+
.option('--no-build', 'Skip UI build (legacy, no-op — UI runs via `vu addon build`)')
|
|
112
|
+
.option('-h, --host <host>', 'Host alias (vucore | cicore)')
|
|
113
|
+
.action(async (name, core, options) => {
|
|
114
|
+
await installAddon(name, core, options);
|
|
115
|
+
});
|
|
116
|
+
// ci addon:deploy — personnel-friendly: cwd-based, host implicit cicore
|
|
117
|
+
addon
|
|
118
|
+
.command('deploy')
|
|
119
|
+
.description('Personel deploy: cwd\'deki addon\'u cicore staging\'in seçilen tenant\'ına yükle')
|
|
120
|
+
.option('-c, --core <core>', 'Hedef tenant: cicore | vucore (zorunlu)')
|
|
121
|
+
.option('-p, --path <path>', 'Addon dizini (default: cwd)')
|
|
122
|
+
.option('-f, --force', 'Production onayını atla (--force kaydı tutulur)')
|
|
123
|
+
// NOTE: --dry-run is registered globally on the top-level program
|
|
124
|
+
// (src/index.ts) so commander hoists it; this subcommand reads it
|
|
125
|
+
// via isDryRun() from lib/config. Listing it here would be a no-op.
|
|
126
|
+
.option('--no-quality', 'Pre-deploy quality gate (vue-tsc/eslint/php -l/schema) bypass (kayıt tutulur, sadece acil durum)')
|
|
127
|
+
.action(async (options) => {
|
|
128
|
+
await deployAddon(options);
|
|
129
|
+
});
|
|
130
|
+
// ci addon:dev-deploy was a Mustafa-only command (required the cicore
|
|
131
|
+
// monorepo, which personnel never has). Faz 2 made it redundant —
|
|
132
|
+
// `ci addon dev` covers fast dev iteration, `ci addon deploy` covers
|
|
133
|
+
// production. Removed from the registered commands here; the source
|
|
134
|
+
// (./dev-deploy.ts) stays for backwards-compat with any local script
|
|
135
|
+
// that imports it directly. If still unused after the pilot phase,
|
|
136
|
+
// delete the file entirely (tracked in plan FUTURE).
|
|
137
|
+
// ci addon:dev <name> — start a vite dev session for the addon (Faz 2A)
|
|
138
|
+
// Foreground vite + atomic override map + nginx snippet management.
|
|
139
|
+
// `--list` and `--reset` operate on the cores/dev/.dev-addon-overrides.json
|
|
140
|
+
// session registry. Run from anywhere inside dev-shell.
|
|
141
|
+
addon
|
|
142
|
+
.command('dev [name]')
|
|
143
|
+
.description('Addon HMR dev session: vite + nginx + override map atomically')
|
|
144
|
+
.option('--shell-path <path>', 'dev-shell dizini (default: auto-detect from cwd)')
|
|
145
|
+
.option('-p, --port <port>', 'vite port override (default: auto from 5173-5273 pool)')
|
|
146
|
+
.option('--list', 'List active dev sessions and exit')
|
|
147
|
+
.option('--reset', 'Stop all active sessions and clear state (use when sessions are stale)')
|
|
148
|
+
.action(async (name, options) => {
|
|
149
|
+
if (options.list) {
|
|
150
|
+
await listDevSessions(options);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (options.reset) {
|
|
154
|
+
await resetDevSessions(options);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (!name) {
|
|
158
|
+
console.error('Addon name required. Usage: ci addon dev <Name> | --list | --reset');
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
await devAddon(name, options);
|
|
162
|
+
});
|
|
163
|
+
// ci addon:stop <name> — stop a running dev session from a different terminal
|
|
164
|
+
addon
|
|
165
|
+
.command('stop <name>')
|
|
166
|
+
.description('Stop an active addon dev session (graceful SIGTERM + cleanup)')
|
|
167
|
+
.option('--shell-path <path>', 'dev-shell dizini (default: auto-detect from cwd)')
|
|
168
|
+
.action(async (name, options) => {
|
|
169
|
+
await stopAddon(name, options);
|
|
170
|
+
});
|
|
171
|
+
// ci addon:scaffold-quality — apply Faz 5 quality template to existing addon(s)
|
|
172
|
+
addon
|
|
173
|
+
.command('scaffold-quality')
|
|
174
|
+
.description('Mevcut addon\'a Faz 5 quality template (eslint/prettier/tsconfig/env.d.ts/CI) ekle')
|
|
175
|
+
.option('-p, --path <path>', 'Addon dizini (default: cwd)')
|
|
176
|
+
.option('--all', 'dev-shell\'deki tüm addonlara sırayla uygula')
|
|
177
|
+
.option('--overwrite', 'Mevcut config dosyalarını da üzerine yaz')
|
|
178
|
+
.action(async (options) => {
|
|
179
|
+
await scaffoldQuality(options);
|
|
180
|
+
});
|
|
181
|
+
// vu addon:enable <name> <core>
|
|
182
|
+
addon
|
|
183
|
+
.command('enable <name> <core>')
|
|
184
|
+
.description('Enable addon in a core')
|
|
185
|
+
.action(async (name, core) => {
|
|
186
|
+
await enableAddon(name, core);
|
|
187
|
+
});
|
|
188
|
+
// vu addon:disable <name> <core>
|
|
189
|
+
addon
|
|
190
|
+
.command('disable <name> <core>')
|
|
191
|
+
.description('Disable addon in a core')
|
|
192
|
+
.action(async (name, core) => {
|
|
193
|
+
await disableAddon(name, core);
|
|
194
|
+
});
|
|
195
|
+
// vu addon:delete <name> <core>
|
|
196
|
+
addon
|
|
197
|
+
.command('delete <name> <core>')
|
|
198
|
+
.alias('rm')
|
|
199
|
+
.description('Delete addon from a core on server')
|
|
200
|
+
.option('-f, --force', 'Skip confirmation')
|
|
201
|
+
.option('-h, --host <host>', 'SSH host for server')
|
|
202
|
+
.action(async (name, core, options) => {
|
|
203
|
+
await deleteAddon(name, core, options);
|
|
204
|
+
});
|
|
205
|
+
// vu addon:migrate <name> <core>
|
|
206
|
+
addon
|
|
207
|
+
.command('migrate <name> <core>')
|
|
208
|
+
.description('Run addon database migrations')
|
|
209
|
+
.option('--rollback', 'Rollback last migration')
|
|
210
|
+
.option('--fresh', 'Drop all tables and re-run migrations')
|
|
211
|
+
.action(async (name, core, options) => {
|
|
212
|
+
await migrateAddon(name, core, options);
|
|
213
|
+
});
|
|
214
|
+
// vu addon:sign <name>
|
|
215
|
+
addon
|
|
216
|
+
.command('sign <name>')
|
|
217
|
+
.description('Generate addon signature for marketplace')
|
|
218
|
+
.option('-k, --key <key>', 'Signing key')
|
|
219
|
+
.action(async (name, options) => {
|
|
220
|
+
await signAddon(name, options);
|
|
221
|
+
});
|
|
222
|
+
// vu addon:rebuild <name> <core>
|
|
223
|
+
addon
|
|
224
|
+
.command('rebuild <name> <core>')
|
|
225
|
+
.description('Rebuild addon (drop tables + re-run migrations)')
|
|
226
|
+
.option('-h, --host <host>', 'SSH host for remote server')
|
|
227
|
+
.action(async (name, core, options) => {
|
|
228
|
+
await rebuildAddon(name, core, options);
|
|
229
|
+
});
|
|
230
|
+
// vu addon:reset <name> <core>
|
|
231
|
+
addon
|
|
232
|
+
.command('reset <name> <core>')
|
|
233
|
+
.description('Reset addon (drop all tables and re-create)')
|
|
234
|
+
.option('-h, --host <host>', 'SSH host for remote server')
|
|
235
|
+
.option('-f, --force', 'Skip confirmation')
|
|
236
|
+
.action(async (name, core, options) => {
|
|
237
|
+
await resetAddon(name, core, options);
|
|
238
|
+
});
|
|
239
|
+
// vu addon:uninstall <name> <core>
|
|
240
|
+
addon
|
|
241
|
+
.command('uninstall <name> <core>')
|
|
242
|
+
.description('Uninstall addon (remove database tables)')
|
|
243
|
+
.option('-h, --host <host>', 'SSH host for remote server')
|
|
244
|
+
.option('-f, --force', 'Skip confirmation')
|
|
245
|
+
.action(async (name, core, options) => {
|
|
246
|
+
await uninstallAddon(name, core, options);
|
|
247
|
+
});
|
|
248
|
+
// vu addon:api <action> <name>
|
|
249
|
+
addon
|
|
250
|
+
.command('api <action> <name>')
|
|
251
|
+
.description('Run addon API action (migrate, build, rebuild, reset)')
|
|
252
|
+
.option('-h, --host <host>', 'SSH host for remote server')
|
|
253
|
+
.option('-c, --core <core>', 'Core name', 'core1')
|
|
254
|
+
.option('-d, --domain <domain>', 'API domain (for remote calls)')
|
|
255
|
+
.action(async (action, name, options) => {
|
|
256
|
+
await addonApiAction(action, name, options);
|
|
257
|
+
});
|
|
258
|
+
// vu addon:registry
|
|
259
|
+
addon
|
|
260
|
+
.command('registry')
|
|
261
|
+
.description('Build addon registry from filesystem')
|
|
262
|
+
.option('-h, --host <host>', 'SSH host for remote server')
|
|
263
|
+
.option('-d, --domain <domain>', 'API domain')
|
|
264
|
+
.action(async (options) => {
|
|
265
|
+
await buildRegistry(options);
|
|
266
|
+
});
|
|
267
|
+
// vu addon:autoload
|
|
268
|
+
addon
|
|
269
|
+
.command('autoload')
|
|
270
|
+
.description('Run composer dump-autoload')
|
|
271
|
+
.option('-h, --host <host>', 'SSH host for remote server')
|
|
272
|
+
.action(async (options) => {
|
|
273
|
+
await dumpAutoload(options);
|
|
274
|
+
});
|
|
275
|
+
// vu addon:extract-classes [name]
|
|
276
|
+
// Part of Automated Safelist Pipeline (TIER 1)
|
|
277
|
+
addon
|
|
278
|
+
.command('extract-classes [name]')
|
|
279
|
+
.description('Extract Tailwind CSS classes from addon Vue files')
|
|
280
|
+
.option('-o, --output <path>', 'Output JSON file path')
|
|
281
|
+
.option('-v, --verbose', 'Show detailed file-by-file output')
|
|
282
|
+
.action(async (name, options) => {
|
|
283
|
+
await extractClasses(name, options);
|
|
284
|
+
});
|
|
285
|
+
// vu addon:generate-safelist
|
|
286
|
+
// Part of Automated Safelist Pipeline (TIER 1)
|
|
287
|
+
addon
|
|
288
|
+
.command('generate-safelist')
|
|
289
|
+
.description('Generate Tailwind safelist patterns from extracted classes')
|
|
290
|
+
.option('-i, --input <path>', 'Input JSON file from extract-classes')
|
|
291
|
+
.option('-o, --output <path>', 'Output JS file path')
|
|
292
|
+
.action(async (options) => {
|
|
293
|
+
await generateSafelist(options);
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/addon/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK1C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAE5C,yBAAyB;IACzB,KAAK;SACF,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,iFAAiF,CAAC;SAC9F,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,sEAAsE;IACtE,KAAK;SACF,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,mEAAmE,CAAC;SAChF,MAAM,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,oBAAoB,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,eAAe,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,4CAA4C,CAAC;SACvE,MAAM,CAAC,WAAW,EAAE,iCAAiC,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAI,EAAE,EAAE;QACnC,MAAM,QAAQ,CAAC,IAAI,EAAE;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,uBAAuB;IACvB,KAAK;SACF,OAAO,CAAC,aAAa,CAAC;SACtB,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;SACtC,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,OAAO,EAAE,EAAE;QAClD,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEL,wBAAwB;IACxB,KAAK;SACF,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,OAAO,CAAC;SACnD,MAAM,CAAC,SAAS,EAAE,4BAA4B,CAAC;SAC/C,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEL,0EAA0E;IAC1E,KAAK;SACF,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,mFAAmF,CAAC;SAChG,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,OAAO,CAAC;SACzD,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,QAAQ,CAAC;SAClD,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,QAAQ,CAAC;SACxD,MAAM,CAAC,aAAa,EAAE,wCAAwC,CAAC;SAC/D,MAAM,CAAC,eAAe,EAAE,sDAAsD,CAAC;SAC/E,MAAM,CAAC,UAAU,EAAE,4CAA4C,CAAC;SAChE,MAAM,CAAC,cAAc,EAAE,yCAAyC,CAAC;SACjE,MAAM,CAAC,aAAa,EAAE,0EAA0E,CAAC;SACjG,MAAM,CAAC,gBAAgB,EAAE,wDAAwD,CAAC;SAClF,MAAM,CAAC,wBAAwB,EAAE,4DAA4D,CAAC;SAC9F,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEL,qGAAqG;IACrG,KAAK;SACF,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,8GAA8G,CAAC;SAC3H,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,QAAQ,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,iCAAiC;IACjC,KAAK;SACF,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;SACjD,MAAM,CAAC,YAAY,EAAE,8DAA8D,CAAC;SACpF,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACpD,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,wEAAwE;IACxE,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kFAAkF,CAAC;SAC/F,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,CAAC;SACtE,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;SAC1D,MAAM,CAAC,aAAa,EAAE,iDAAiD,CAAC;QACzE,kEAAkE;QAClE,kEAAkE;QAClE,oEAAoE;SACnE,MAAM,CAAC,cAAc,EAAE,kGAAkG,CAAC;SAC1H,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,sEAAsE;IACtE,kEAAkE;IAClE,qEAAqE;IACrE,oEAAoE;IACpE,qEAAqE;IACrE,mEAAmE;IACnE,qDAAqD;IAErD,wEAAwE;IACxE,oEAAoE;IACpE,4EAA4E;IAC5E,wDAAwD;IACxD,KAAK;SACF,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,qBAAqB,EAAE,kDAAkD,CAAC;SACjF,MAAM,CAAC,mBAAmB,EAAE,wDAAwD,CAAC;SACrF,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CAAC,SAAS,EAAE,wEAAwE,CAAC;SAC3F,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,OAAO,EAAE,EAAE;QAClD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,8EAA8E;IAC9E,KAAK;SACF,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,qBAAqB,EAAE,kDAAkD,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,gFAAgF;IAChF,KAAK;SACF,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,oFAAoF,CAAC;SACjG,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;SAC1D,MAAM,CAAC,OAAO,EAAE,8CAA8C,CAAC;SAC/D,MAAM,CAAC,aAAa,EAAE,0CAA0C,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,gCAAgC;IAChC,KAAK;SACF,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,EAAE;QAC3C,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,iCAAiC;IACjC,KAAK;SACF,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,EAAE;QAC3C,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,gCAAgC;IAChC,KAAK;SACF,OAAO,CAAC,sBAAsB,CAAC;SAC/B,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACpD,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEL,iCAAiC;IACjC,KAAK;SACF,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,YAAY,EAAE,yBAAyB,CAAC;SAC/C,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACpD,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,uBAAuB;IACvB,KAAK;SACF,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,iCAAiC;IACjC,KAAK;SACF,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACpD,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEL,+BAA+B;IAC/B,KAAK;SACF,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACpD,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEL,mCAAmC;IACnC,KAAK;SACF,OAAO,CAAC,yBAAyB,CAAC;SAClC,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACpD,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEL,+BAA+B;IAC/B,KAAK;SACF,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,mBAAmB,EAAE,WAAW,EAAE,OAAO,CAAC;SACjD,MAAM,CAAC,uBAAuB,EAAE,+BAA+B,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;QACtD,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEL,oBAAoB;IACpB,KAAK;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,uBAAuB,EAAE,YAAY,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,oBAAoB;IACpB,KAAK;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEL,kCAAkC;IAClC,+CAA+C;IAC/C,KAAK;SACF,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;SACtD,MAAM,CAAC,eAAe,EAAE,mCAAmC,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,OAAO,EAAE,EAAE;QAClD,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEL,6BAA6B;IAC7B,+CAA+C;IAC/C,KAAK;SACF,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,4DAA4D,CAAC;SACzE,MAAM,CAAC,oBAAoB,EAAE,sCAAsC,CAAC;SACpE,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ci addon init-repo <Name>
|
|
3
|
+
*
|
|
4
|
+
* S4-T23: Lokal scaffold sonrası GitLab repo oluşturur ve ilk push'u yapar.
|
|
5
|
+
*
|
|
6
|
+
* Yapılanlar:
|
|
7
|
+
* 1. GitLab'da `cicore-addons/<addon-kebab>` namespace'inde proje oluştur (API)
|
|
8
|
+
* 2. Lokal addon dizininde git init + initial commit
|
|
9
|
+
* 3. Remote ekle + push
|
|
10
|
+
*
|
|
11
|
+
* Gereksinimler:
|
|
12
|
+
* - VPN bağlantısı (10.20.20.28 erişilebilir)
|
|
13
|
+
* - GITLAB_TOKEN env veya vault: ci kasa get gitlab addons-token
|
|
14
|
+
*
|
|
15
|
+
* Kullanım:
|
|
16
|
+
* ci addon init-repo HesapMakinasi [--gitlab-url http://10.20.20.28] [--group cicore-addons]
|
|
17
|
+
*/
|
|
18
|
+
export interface InitRepoOptions {
|
|
19
|
+
readonly gitlabUrl?: string;
|
|
20
|
+
readonly group?: string;
|
|
21
|
+
readonly token?: string;
|
|
22
|
+
readonly dryRun?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function initRepo(name: string, options: InitRepoOptions): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=init-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-repo.d.ts","sourceRoot":"","sources":["../../../src/commands/addon/init-repo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B;AAYD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6IpF"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ci addon init-repo <Name>
|
|
3
|
+
*
|
|
4
|
+
* S4-T23: Lokal scaffold sonrası GitLab repo oluşturur ve ilk push'u yapar.
|
|
5
|
+
*
|
|
6
|
+
* Yapılanlar:
|
|
7
|
+
* 1. GitLab'da `cicore-addons/<addon-kebab>` namespace'inde proje oluştur (API)
|
|
8
|
+
* 2. Lokal addon dizininde git init + initial commit
|
|
9
|
+
* 3. Remote ekle + push
|
|
10
|
+
*
|
|
11
|
+
* Gereksinimler:
|
|
12
|
+
* - VPN bağlantısı (10.20.20.28 erişilebilir)
|
|
13
|
+
* - GITLAB_TOKEN env veya vault: ci kasa get gitlab addons-token
|
|
14
|
+
*
|
|
15
|
+
* Kullanım:
|
|
16
|
+
* ci addon init-repo HesapMakinasi [--gitlab-url http://10.20.20.28] [--group cicore-addons]
|
|
17
|
+
*/
|
|
18
|
+
import { execSync } from 'node:child_process';
|
|
19
|
+
import path from 'node:path';
|
|
20
|
+
import fs from 'fs-extra';
|
|
21
|
+
import { log, spinner } from '../../lib/logger.js';
|
|
22
|
+
import { findShellRoot } from '../../lib/ops/addon-dev.js';
|
|
23
|
+
import { paths } from '../../lib/config.js';
|
|
24
|
+
const DEFAULT_GITLAB_URL = 'http://10.20.20.28';
|
|
25
|
+
const DEFAULT_GROUP = 'cicore-addons';
|
|
26
|
+
function toKebab(name) {
|
|
27
|
+
return name
|
|
28
|
+
.replace(/([A-Z])/g, '-$1')
|
|
29
|
+
.toLowerCase()
|
|
30
|
+
.replace(/^-/, '');
|
|
31
|
+
}
|
|
32
|
+
export async function initRepo(name, options) {
|
|
33
|
+
log.title(`GitLab Repo Oluştur: ${name}`);
|
|
34
|
+
if (!/^[A-Z][a-zA-Z0-9]+$/.test(name)) {
|
|
35
|
+
log.error('Addon adı PascalCase olmalı. Örnek: HesapMakinasi');
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
const gitlabUrl = options.gitlabUrl ?? DEFAULT_GITLAB_URL;
|
|
39
|
+
const group = options.group ?? DEFAULT_GROUP;
|
|
40
|
+
const slug = toKebab(name);
|
|
41
|
+
const repoName = `addon-${slug}`;
|
|
42
|
+
// Token: --token flag > GITLAB_TOKEN env > vault
|
|
43
|
+
let token = options.token ?? process.env.GITLAB_TOKEN ?? '';
|
|
44
|
+
if (!token) {
|
|
45
|
+
try {
|
|
46
|
+
token = execSync(`bash "${path.resolve(process.cwd(), '../../../../.team/vault.sh')}" get gitlab addons-token 2>/dev/null`, { encoding: 'utf8' }).trim();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// vault erişimi yoksa devam et — sonra hata verir
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (!token) {
|
|
53
|
+
log.error('GitLab token bulunamadı. --token <glpat-...> ver veya GITLAB_TOKEN env ayarla.');
|
|
54
|
+
log.info('Vault: ci kasa get gitlab addons-token');
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
// Addon dizini bul
|
|
58
|
+
const shellRoot = findShellRoot(process.cwd());
|
|
59
|
+
const addonsRoot = shellRoot ? path.join(shellRoot, 'cores', 'dev', 'addons') : paths.dev.addons;
|
|
60
|
+
const addonPath = path.join(addonsRoot, name);
|
|
61
|
+
if (!(await fs.pathExists(path.join(addonPath, 'addon.json')))) {
|
|
62
|
+
log.error(`Addon bulunamadı: ${addonPath}`);
|
|
63
|
+
log.info(`Önce: ci addon create ${name}`);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
// 1. GitLab namespace ID bul
|
|
67
|
+
const s = spinner(`${gitlabUrl}/${group} namespace ID alınıyor...`).start();
|
|
68
|
+
let namespaceId;
|
|
69
|
+
try {
|
|
70
|
+
const nsRes = await fetch(`${gitlabUrl}/api/v4/namespaces?search=${encodeURIComponent(group)}&per_page=5`, { headers: { 'PRIVATE-TOKEN': token } });
|
|
71
|
+
if (!nsRes.ok)
|
|
72
|
+
throw new Error(`HTTP ${nsRes.status}: ${await nsRes.text()}`);
|
|
73
|
+
const nsData = (await nsRes.json());
|
|
74
|
+
const ns = nsData.find(n => n.full_path === group);
|
|
75
|
+
if (!ns)
|
|
76
|
+
throw new Error(`Grup "${group}" bulunamadı. Önce GitLab'da oluştur.`);
|
|
77
|
+
namespaceId = ns.id;
|
|
78
|
+
s.succeed(`Namespace: ${group} (id=${namespaceId})`);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
s.fail(`Namespace alınamadı: ${err.message}`);
|
|
82
|
+
log.info('VPN bağlı mı? 10.20.20.28 erişilebilir mi?');
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
// 2. GitLab'da proje oluştur
|
|
86
|
+
const s2 = spinner(`${group}/${repoName} projesi oluşturuluyor...`).start();
|
|
87
|
+
let cloneUrl;
|
|
88
|
+
try {
|
|
89
|
+
if (options.dryRun) {
|
|
90
|
+
s2.succeed(`[dry-run] Proje oluşturulacaktı: ${group}/${repoName}`);
|
|
91
|
+
cloneUrl = `${gitlabUrl}/${group}/${repoName}.git`;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const createRes = await fetch(`${gitlabUrl}/api/v4/projects`, {
|
|
95
|
+
method: 'POST',
|
|
96
|
+
headers: { 'PRIVATE-TOKEN': token, 'Content-Type': 'application/json' },
|
|
97
|
+
body: JSON.stringify({
|
|
98
|
+
name: repoName,
|
|
99
|
+
path: repoName,
|
|
100
|
+
namespace_id: namespaceId,
|
|
101
|
+
description: `${name} addon for ciCore platform`,
|
|
102
|
+
visibility: 'private',
|
|
103
|
+
initialize_with_readme: false,
|
|
104
|
+
}),
|
|
105
|
+
});
|
|
106
|
+
if (!createRes.ok) {
|
|
107
|
+
const body = await createRes.text();
|
|
108
|
+
if (createRes.status === 400 && body.includes('already been taken')) {
|
|
109
|
+
s2.warn(`Proje zaten var: ${group}/${repoName} — remote eklemeye devam`);
|
|
110
|
+
cloneUrl = `${gitlabUrl}/${group}/${repoName}.git`;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
throw new Error(`HTTP ${createRes.status}: ${body}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const proj = (await createRes.json());
|
|
118
|
+
cloneUrl = proj.http_url_to_repo;
|
|
119
|
+
s2.succeed(`Proje oluşturuldu: ${cloneUrl}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
s2.fail(`Proje oluşturulamadı: ${err.message}`);
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
// 3. git init + remote + initial commit + push
|
|
128
|
+
const s3 = spinner('git init + commit + push...').start();
|
|
129
|
+
try {
|
|
130
|
+
const run = (cmd) => execSync(cmd, { cwd: addonPath, stdio: 'pipe', encoding: 'utf8' });
|
|
131
|
+
// git init (idempotent)
|
|
132
|
+
run('git init -b main');
|
|
133
|
+
run('git add .');
|
|
134
|
+
try {
|
|
135
|
+
run('git commit -m "init: scaffold oluşturuldu (ci addon create)"');
|
|
136
|
+
}
|
|
137
|
+
catch { /* zaten commit varsa */ }
|
|
138
|
+
// remote ekle veya güncelle
|
|
139
|
+
try {
|
|
140
|
+
run('git remote add origin ' + cloneUrl);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
run('git remote set-url origin ' + cloneUrl);
|
|
144
|
+
}
|
|
145
|
+
if (!options.dryRun) {
|
|
146
|
+
// token'ı URL'e göm — tek-seferlik push (-u YOK: authUrl .git/config'e plaintext sızmaz)
|
|
147
|
+
const authUrl = cloneUrl.replace('http://', `http://oauth2:${token}@`);
|
|
148
|
+
run(`git push ${authUrl} main`);
|
|
149
|
+
// upstream'i token-suz origin üzerinden ayarla
|
|
150
|
+
run(`git branch --set-upstream-to=origin/main main`);
|
|
151
|
+
s3.succeed(`Push: ${cloneUrl}`);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
s3.succeed(`[dry-run] git push atlanırdı → ${cloneUrl}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
s3.fail(`git push başarısız: ${err.message}`);
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
log.blank();
|
|
162
|
+
log.success(`${name} GitLab'a yüklendi!`);
|
|
163
|
+
log.kv('Repo', `${gitlabUrl}/${group}/${repoName}`);
|
|
164
|
+
log.kv('Clone', cloneUrl);
|
|
165
|
+
log.blank();
|
|
166
|
+
log.info('Sonraki adımlar:');
|
|
167
|
+
log.item(`ci addon dev ${name} — lokal vite HMR`);
|
|
168
|
+
log.item(`ci addon deploy --core cicore — staging deploy`);
|
|
169
|
+
log.item(`CI/CD Variables → ${gitlabUrl}/${group}/${repoName}/-/settings/ci_cd`);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=init-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-repo.js","sourceRoot":"","sources":["../../../src/commands/addon/init-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vu addon install <name> <core> [--host <h>] — host-aware addon backend install
|
|
3
|
+
*
|
|
4
|
+
* Packages the local addon directory and ships it to the chosen host's
|
|
5
|
+
* deploy receiver, where `install-addon.sh` (forced-command wrapper)
|
|
6
|
+
* extracts it into `<coresHostPath>/<core>/addons/<name>/`, fixes
|
|
7
|
+
* permissions, and restarts PHP and Nuxt.
|
|
8
|
+
*
|
|
9
|
+
* The legacy build step (`build-addon-esm-master.sh` on vucore prod) is no
|
|
10
|
+
* longer invoked here — addon UI builds run locally via `vu addon build`
|
|
11
|
+
* before install, with the produced bundle uploaded to the CDN. This file
|
|
12
|
+
* is purely "deliver the backend zip to the server"; the UI deploy lives
|
|
13
|
+
* in `commands/build/addon` (refactored in step 3).
|
|
14
|
+
*/
|
|
15
|
+
export interface InstallOptions {
|
|
16
|
+
readonly force?: boolean;
|
|
17
|
+
/** When false, skip the local backend repackage and assume an already-staged install. */
|
|
18
|
+
readonly build?: boolean;
|
|
19
|
+
/** Host alias (vucore | cicore). Required — no implicit default. */
|
|
20
|
+
readonly host?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function installAddon(name: string, core: string, options: InstallOptions): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/addon/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAeH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,yFAAyF;IACzF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAiEf"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vu addon install <name> <core> [--host <h>] — host-aware addon backend install
|
|
3
|
+
*
|
|
4
|
+
* Packages the local addon directory and ships it to the chosen host's
|
|
5
|
+
* deploy receiver, where `install-addon.sh` (forced-command wrapper)
|
|
6
|
+
* extracts it into `<coresHostPath>/<core>/addons/<name>/`, fixes
|
|
7
|
+
* permissions, and restarts PHP and Nuxt.
|
|
8
|
+
*
|
|
9
|
+
* The legacy build step (`build-addon-esm-master.sh` on vucore prod) is no
|
|
10
|
+
* longer invoked here — addon UI builds run locally via `vu addon build`
|
|
11
|
+
* before install, with the produced bundle uploaded to the CDN. This file
|
|
12
|
+
* is purely "deliver the backend zip to the server"; the UI deploy lives
|
|
13
|
+
* in `commands/build/addon` (refactored in step 3).
|
|
14
|
+
*/
|
|
15
|
+
import path from 'path';
|
|
16
|
+
import fs from 'fs-extra';
|
|
17
|
+
import { log, spinner } from '../../lib/logger.js';
|
|
18
|
+
import { paths } from '../../lib/config.js';
|
|
19
|
+
import { confirm } from '../../lib/prompts.js';
|
|
20
|
+
import { getHostConfig } from '../../lib/hosts.js';
|
|
21
|
+
import { addonPackageBackend, addonInstallBackend, addonCleanupPackage, } from '../../lib/ops/addon.js';
|
|
22
|
+
import { runRemote } from '../../lib/ops/ssh.js';
|
|
23
|
+
export async function installAddon(name, core, options) {
|
|
24
|
+
log.title(`Install Addon: ${name} → ${core}`);
|
|
25
|
+
if (options.host === undefined) {
|
|
26
|
+
log.error('--host is required (vucore | cicore). Pass --host <alias>.');
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const cfg = getHostConfig(options.host);
|
|
30
|
+
log.info(`Target: ${cfg.brandName}`);
|
|
31
|
+
const localPath = path.join(paths.dev.addons, name);
|
|
32
|
+
const remotePath = `${cfg.coresHostPath}/${core}/addons/${name}`;
|
|
33
|
+
// Sanity: local addon must exist before we package.
|
|
34
|
+
if (!(await fs.pathExists(localPath))) {
|
|
35
|
+
log.error(`Addon "${name}" not found locally at ${localPath}`);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Idempotency check: if the addon already exists on the server, ask for
|
|
39
|
+
// overwrite confirmation unless --force. The deploy receiver does its
|
|
40
|
+
// own backup-on-overwrite, but a wrong-name install would clobber a
|
|
41
|
+
// good addon — better to surface the conflict here.
|
|
42
|
+
const check = await runRemote(cfg, `test -d ${shellQuote(remotePath)} && echo exists`, {
|
|
43
|
+
silent: true,
|
|
44
|
+
});
|
|
45
|
+
const alreadyInstalled = check.stdout.includes('exists');
|
|
46
|
+
if (alreadyInstalled && options.force !== true) {
|
|
47
|
+
const overwrite = await confirm(`Addon "${name}" already exists in ${core}. Overwrite (existing backed up)?`, false);
|
|
48
|
+
if (!overwrite) {
|
|
49
|
+
log.warn('Cancelled');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Package + ship.
|
|
54
|
+
const packSpinner = spinner('Packaging addon backend ...').start();
|
|
55
|
+
let pack;
|
|
56
|
+
try {
|
|
57
|
+
pack = await addonPackageBackend(name, localPath);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
packSpinner.fail('Packaging failed');
|
|
61
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
packSpinner.succeed(`Packaged: ${(pack.sizeBytes / 1024).toFixed(1)} KiB`);
|
|
65
|
+
try {
|
|
66
|
+
const installSpinner = spinner('Installing on server ...').start();
|
|
67
|
+
const result = await addonInstallBackend(cfg, pack.zipPath, name, core);
|
|
68
|
+
if (!result.success) {
|
|
69
|
+
installSpinner.fail('Server install failed');
|
|
70
|
+
log.error(result.stderr || result.stdout);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
installSpinner.succeed('Server install complete');
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
await addonCleanupPackage(pack.zipPath);
|
|
77
|
+
}
|
|
78
|
+
log.blank();
|
|
79
|
+
log.success(`Addon "${name}" installed to ${core} on ${cfg.brandName}`);
|
|
80
|
+
}
|
|
81
|
+
function shellQuote(s) {
|
|
82
|
+
return `'${s.replace(/'/g, `'\\''`)}'`;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/addon/install.ts"],"names":[],"mappings":"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"}
|