@saltcorn/cli 1.1.0-beta.0 → 1.1.0-beta.10

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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.0-beta.0",
2
+ "version": "1.1.0-beta.10",
3
3
  "commands": {
4
4
  "add-schema": {
5
5
  "id": "add-schema",
@@ -53,6 +53,13 @@
53
53
  "description": "Backup tenant in saltcorn zip format",
54
54
  "multiple": false
55
55
  },
56
+ "all_tenants": {
57
+ "name": "all_tenants",
58
+ "type": "boolean",
59
+ "char": "a",
60
+ "description": "Backup all tenants in saltcorn zip format",
61
+ "allowNo": false
62
+ },
56
63
  "zip": {
57
64
  "name": "zip",
58
65
  "type": "boolean",
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@saltcorn/cli",
3
3
  "description": "Command-line interface for Saltcorn, open-source no-code platform",
4
4
  "homepage": "https://saltcorn.com",
5
- "version": "1.1.0-beta.0",
5
+ "version": "1.1.0-beta.10",
6
6
  "author": "Tom Nielsen @glutamate",
7
7
  "bin": {
8
8
  "saltcorn": "./bin/saltcorn"
@@ -11,13 +11,13 @@
11
11
  "dependencies": {
12
12
  "@oclif/core": "^2.16.0",
13
13
  "@oclif/plugin-plugins": "^3.9.4",
14
- "@saltcorn/admin-models": "1.1.0-beta.0",
15
- "@saltcorn/common-code": "1.1.0-beta.0",
16
- "@saltcorn/data": "1.1.0-beta.0",
17
- "@saltcorn/mobile-app": "1.1.0-beta.0",
18
- "@saltcorn/mobile-builder": "1.1.0-beta.0",
19
- "@saltcorn/plugins-loader": "1.1.0-beta.0",
20
- "@saltcorn/server": "1.1.0-beta.0",
14
+ "@saltcorn/admin-models": "1.1.0-beta.10",
15
+ "@saltcorn/common-code": "1.1.0-beta.10",
16
+ "@saltcorn/data": "1.1.0-beta.10",
17
+ "@saltcorn/mobile-app": "1.1.0-beta.10",
18
+ "@saltcorn/mobile-builder": "1.1.0-beta.10",
19
+ "@saltcorn/plugins-loader": "1.1.0-beta.10",
20
+ "@saltcorn/server": "1.1.0-beta.10",
21
21
  "contractis": "^0.1.0",
22
22
  "dateformat": "^3.0.3",
23
23
  "inquirer": "^7.3.3",
@@ -57,9 +57,8 @@
57
57
  "repository": "github:saltcorn/saltcorn",
58
58
  "scripts": {
59
59
  "postpack": "rm -f oclif.manifest.json",
60
- "prepack": "oclif manifest && oclif readme",
60
+ "manifest": "oclif manifest && oclif readme",
61
61
  "test": "echo NO TESTS",
62
- "version": "oclif readme && git add README.md",
63
62
  "tsc": "echo \"Error: no TypeScript support yet\"",
64
63
  "clean": "echo \"Error: no TypeScript support yet\""
65
64
  },
@@ -11,6 +11,7 @@ const { getConnectObject } = require("@saltcorn/data/db/connect");
11
11
  const day = dateFormat(new Date(), "yyyymmdd");
12
12
  const connobj = getConnectObject();
13
13
  const { init_some_tenants } = require("../common");
14
+ const fs = require("fs");
14
15
 
15
16
  const pgdb = connobj.database;
16
17
 
@@ -45,6 +46,32 @@ class BackupCommand extends Command {
45
46
  const fnm = await create_backup(flags.output);
46
47
  console.log(fnm);
47
48
  });
49
+ } else if (flags.all_tenants) {
50
+ const db = require("@saltcorn/data/db");
51
+
52
+ const { create_backup } = require("@saltcorn/admin-models/models/backup");
53
+ const { loadAllPlugins } = require("@saltcorn/server/load_plugins");
54
+ const { eachTenant } = require("@saltcorn/admin-models/models/tenant");
55
+ const { init_multi_tenant } = require("@saltcorn/data/db/state");
56
+ let nten = 0,
57
+ nerr = 0;
58
+ const domain_files = {};
59
+ await eachTenant(async () => {
60
+ try {
61
+ nten += 1;
62
+ const domain = db.getTenantSchema();
63
+ await init_multi_tenant(loadAllPlugins, undefined, [domain]);
64
+ console.log("Backup tenant", domain);
65
+ const fnm = await create_backup(flags.output);
66
+ console.log(fnm);
67
+ domain_files[domain] = fnm;
68
+ } catch (e) {
69
+ nerr += 1;
70
+ console.error(e);
71
+ }
72
+ });
73
+ fs.writeFileSync("domain_files.json", JSON.stringify(domain_files));
74
+ console.log("done backup all tenants", nerr, "/", nten, "errors");
48
75
  } else if (flags.zip) {
49
76
  // zip the saltcorn backup
50
77
  const { create_backup } = require("@saltcorn/admin-models/models/backup");
@@ -115,6 +142,10 @@ BackupCommand.flags = {
115
142
  char: "t",
116
143
  description: "Backup tenant in saltcorn zip format",
117
144
  }),
145
+ all_tenants: Flags.boolean({
146
+ char: "a",
147
+ description: "Backup all tenants in saltcorn zip format",
148
+ }),
118
149
  zip: Flags.boolean({
119
150
  char: "z",
120
151
  description: "Backup public in saltcorn zip format",
@@ -102,21 +102,19 @@ class ReleaseCommand extends Command {
102
102
  const tags = !tags0 ? [] : Array.isArray(tags0) ? tags0 : [tags0];
103
103
  if (flags.tag) tags.push(flags.tag);
104
104
  const firstTag = tags[0];
105
- spawnSync(
106
- "npm",
107
- [
108
- "publish",
109
- "--access=public",
110
- ...(firstTag ? [`--tag ${firstTag}`] : []),
111
- ],
112
- {
113
- stdio: "inherit",
114
- cwd: `packages/${dir}/`,
115
- }
105
+ console.log(
106
+ `packages/${dir}$ npm publish ${firstTag ? `--tag ${firstTag}` : ""}`
116
107
  );
108
+ spawnSync("npm", ["publish", ...(firstTag ? ["--tag", firstTag] : [])], {
109
+ stdio: "inherit",
110
+ cwd: `packages/${dir}/`,
111
+ });
117
112
  tags.shift();
118
113
  for (const tag of tags) {
119
114
  await sleep(3000);
115
+ console.log(
116
+ `packages/${dir}$ npm dist-tag add @saltcorn/cli@${version} ${tag}`
117
+ );
120
118
  spawnSync("npm", ["dist-tag", "add", `@saltcorn/cli@${version}`, tag], {
121
119
  stdio: "inherit",
122
120
  cwd: `packages/${dir}/`,
@@ -158,12 +156,24 @@ class ReleaseCommand extends Command {
158
156
  stdio: "inherit",
159
157
  cwd: `packages/saltcorn-cli/`,
160
158
  });
159
+ spawnSync("npm", ["install", "--legacy-peer-deps"], {
160
+ stdio: "inherit",
161
+ cwd: `packages/saltcorn-cli/`,
162
+ });
163
+ spawnSync("npm", ["run", "manifest"], {
164
+ stdio: "inherit",
165
+ cwd: `packages/saltcorn-cli/`,
166
+ });
167
+ spawnSync("npm", ["install", "--legacy-peer-deps"], {
168
+ stdio: "inherit",
169
+ cwd: ".",
170
+ });
161
171
  // do not run 'audit fix' on full point releases, only on -beta.x, -rc.x etc
162
- if (version.includes("-"))
172
+ /*if (version.includes("-"))
163
173
  spawnSync("npm", ["audit", "fix"], {
164
174
  stdio: "inherit",
165
175
  cwd: `packages/saltcorn-cli/`,
166
- });
176
+ });*/
167
177
  await publish("saltcorn-cli", "next");
168
178
  fs.writeFileSync(`package.json`, JSON.stringify(rootPackageJson, null, 2));
169
179
  // update Dockerfile
@@ -6,6 +6,7 @@ const { Command, Flags, Args } = require("@oclif/core");
6
6
  const { spawnSync } = require("child_process");
7
7
  const path = require("path");
8
8
  const { maybe_as_tenant } = require("../common");
9
+ const fs = require("fs");
9
10
 
10
11
  /**
11
12
  * RestoreCommand Class
@@ -72,6 +73,32 @@ class RestoreCommand extends Command {
72
73
  case ".zip":
73
74
  this.zip_restore(args.file, flags.tenant);
74
75
  break;
76
+ case ".json":
77
+ if (!args.file.includes("domain_files.json")) {
78
+ console.error("unknown filetype: " + path.extname(args.file));
79
+ this.exit(1);
80
+ }
81
+ const fileConts = fs.readFileSync(args.file);
82
+ const domain_files = JSON.parse(fileConts);
83
+ const {
84
+ insertTenant,
85
+ getAllTenants,
86
+ switchToTenant,
87
+ } = require("@saltcorn/admin-models/models/tenant");
88
+ const { add_tenant } = require("@saltcorn/data/db/state");
89
+
90
+ let existing_tenants = new Set(await getAllTenants());
91
+ existing_tenants.add("public");
92
+ for (const [tenant, fnm] of Object.entries(domain_files)) {
93
+ console.log("restore", tenant, "from", fnm);
94
+ if (!existing_tenants.has(tenant)) {
95
+ const tenrow = await insertTenant(tenant);
96
+ add_tenant(tenant);
97
+ await switchToTenant(tenrow);
98
+ }
99
+ await this.zip_restore(fnm, tenant === "public" ? undefined : tenant);
100
+ }
101
+ break;
75
102
  default:
76
103
  console.error("unknown filetype: " + path.extname(args.file));
77
104
  this.exit(1);