@capuchoo/cli 0.2.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/README.md +351 -0
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +5 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +5 -0
- package/dist/base-command.d.ts +15 -0
- package/dist/base-command.d.ts.map +1 -0
- package/dist/base-command.js +61 -0
- package/dist/base-command.js.map +1 -0
- package/dist/commands/auth/login.d.ts +19 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +74 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +6 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +22 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/whoami.d.ts +9 -0
- package/dist/commands/auth/whoami.d.ts.map +1 -0
- package/dist/commands/auth/whoami.js +77 -0
- package/dist/commands/auth/whoami.js.map +1 -0
- package/dist/commands/channel/list.d.ts +9 -0
- package/dist/commands/channel/list.d.ts.map +1 -0
- package/dist/commands/channel/list.js +47 -0
- package/dist/commands/channel/list.js.map +1 -0
- package/dist/commands/config/list.d.ts +9 -0
- package/dist/commands/config/list.d.ts.map +1 -0
- package/dist/commands/config/list.js +116 -0
- package/dist/commands/config/list.js.map +1 -0
- package/dist/commands/config/set.d.ts +11 -0
- package/dist/commands/config/set.d.ts.map +1 -0
- package/dist/commands/config/set.js +44 -0
- package/dist/commands/config/set.js.map +1 -0
- package/dist/commands/deploy/native.d.ts +23 -0
- package/dist/commands/deploy/native.d.ts.map +1 -0
- package/dist/commands/deploy/native.js +39 -0
- package/dist/commands/deploy/native.js.map +1 -0
- package/dist/commands/deploy/ota.d.ts +20 -0
- package/dist/commands/deploy/ota.d.ts.map +1 -0
- package/dist/commands/deploy/ota.js +20 -0
- package/dist/commands/deploy/ota.js.map +1 -0
- package/dist/commands/init.d.ts +17 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +232 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/version/bump.d.ts +13 -0
- package/dist/commands/version/bump.d.ts.map +1 -0
- package/dist/commands/version/bump.js +52 -0
- package/dist/commands/version/bump.js.map +1 -0
- package/dist/commands/version/sync.d.ts +12 -0
- package/dist/commands/version/sync.d.ts.map +1 -0
- package/dist/commands/version/sync.js +81 -0
- package/dist/commands/version/sync.js.map +1 -0
- package/dist/deploy/execute.d.ts +48 -0
- package/dist/deploy/execute.d.ts.map +1 -0
- package/dist/deploy/execute.js +280 -0
- package/dist/deploy/execute.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline/android.d.ts +37 -0
- package/dist/pipeline/android.d.ts.map +1 -0
- package/dist/pipeline/android.js +96 -0
- package/dist/pipeline/android.js.map +1 -0
- package/dist/pipeline/build.d.ts +69 -0
- package/dist/pipeline/build.d.ts.map +1 -0
- package/dist/pipeline/build.js +138 -0
- package/dist/pipeline/build.js.map +1 -0
- package/dist/pipeline/deploy.d.ts +74 -0
- package/dist/pipeline/deploy.d.ts.map +1 -0
- package/dist/pipeline/deploy.js +198 -0
- package/dist/pipeline/deploy.js.map +1 -0
- package/dist/pipeline/flavour.d.ts +66 -0
- package/dist/pipeline/flavour.d.ts.map +1 -0
- package/dist/pipeline/flavour.js +120 -0
- package/dist/pipeline/flavour.js.map +1 -0
- package/dist/pipeline/native-config.d.ts +43 -0
- package/dist/pipeline/native-config.d.ts.map +1 -0
- package/dist/pipeline/native-config.js +127 -0
- package/dist/pipeline/native-config.js.map +1 -0
- package/dist/pipeline/toolchain.d.ts +80 -0
- package/dist/pipeline/toolchain.d.ts.map +1 -0
- package/dist/pipeline/toolchain.js +146 -0
- package/dist/pipeline/toolchain.js.map +1 -0
- package/dist/pipeline/zip.d.ts +22 -0
- package/dist/pipeline/zip.d.ts.map +1 -0
- package/dist/pipeline/zip.js +188 -0
- package/dist/pipeline/zip.js.map +1 -0
- package/dist/services/cloud.d.ts +58 -0
- package/dist/services/cloud.d.ts.map +1 -0
- package/dist/services/cloud.js +89 -0
- package/dist/services/cloud.js.map +1 -0
- package/dist/utils/config.d.ts +52 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +144 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/exec.d.ts +44 -0
- package/dist/utils/exec.d.ts.map +1 -0
- package/dist/utils/exec.js +136 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/http.d.ts +37 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +137 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/reporter.d.ts +48 -0
- package/dist/utils/reporter.d.ts.map +1 -0
- package/dist/utils/reporter.js +108 -0
- package/dist/utils/reporter.js.map +1 -0
- package/oclif.manifest.json +568 -0
- package/package.json +81 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { confirm, input, select } from "@inquirer/prompts";
|
|
2
|
+
import { ENVIRONMENTS, PROJECT_CONFIG_VERSION, canCreateApps, defaultFlavour, isValidBundleId, } from "@capuchoo/core";
|
|
3
|
+
import { Flags } from "@oclif/core";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import ora from "ora";
|
|
8
|
+
import { CloudClient } from "../services/cloud.js";
|
|
9
|
+
import { projectConfigPath, readProjectConfig, resolveCredentials, writeProjectConfig, } from "../utils/config.js";
|
|
10
|
+
import AuthLogin from "./auth/login.js";
|
|
11
|
+
import { BaseCommand } from "../base-command.js";
|
|
12
|
+
export default class Init extends BaseCommand {
|
|
13
|
+
static description = "Link this directory to a Capucho app and write .capucho/project.json";
|
|
14
|
+
static examples = ["<%= config.bin %> init", "<%= config.bin %> init --link"];
|
|
15
|
+
static flags = {
|
|
16
|
+
link: Flags.boolean({
|
|
17
|
+
char: "l",
|
|
18
|
+
default: false,
|
|
19
|
+
description: "Link an existing app instead of creating one",
|
|
20
|
+
}),
|
|
21
|
+
force: Flags.boolean({
|
|
22
|
+
char: "f",
|
|
23
|
+
default: false,
|
|
24
|
+
description: "Overwrite an existing project.json",
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
async run() {
|
|
28
|
+
const { flags } = await this.parse(Init);
|
|
29
|
+
const appDir = process.cwd();
|
|
30
|
+
this.log("");
|
|
31
|
+
this.log(chalk.bold(" Initialise Capucho"));
|
|
32
|
+
this.log(chalk.dim(` ${appDir}`));
|
|
33
|
+
this.log("");
|
|
34
|
+
const existing = readProjectConfig(appDir);
|
|
35
|
+
if (existing && !flags.force) {
|
|
36
|
+
this.log(chalk.yellow(" Already initialised: ") + `${existing.appName} (${existing.appId})`);
|
|
37
|
+
const action = await select({
|
|
38
|
+
message: "What now?",
|
|
39
|
+
choices: [
|
|
40
|
+
{ name: "Keep it", value: "keep" },
|
|
41
|
+
{ name: "Re-link to a different app", value: "relink" },
|
|
42
|
+
],
|
|
43
|
+
});
|
|
44
|
+
if (action === "keep")
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// --- credentials ---------------------------------------------------------
|
|
48
|
+
let credentials = resolveCredentials();
|
|
49
|
+
if (!credentials) {
|
|
50
|
+
this.log(chalk.dim(" No credentials found yet.\n"));
|
|
51
|
+
try {
|
|
52
|
+
await AuthLogin.performLogin();
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
this.error(error instanceof Error ? error.message : String(error));
|
|
56
|
+
}
|
|
57
|
+
credentials = resolveCredentials();
|
|
58
|
+
}
|
|
59
|
+
if (!credentials) {
|
|
60
|
+
this.error("Still not authenticated, so this directory cannot be linked.");
|
|
61
|
+
}
|
|
62
|
+
const cloud = new CloudClient(credentials.endpoint, credentials.apiKey);
|
|
63
|
+
const profile = await cloud.whoami();
|
|
64
|
+
if (!profile) {
|
|
65
|
+
this.error(`The credentials for ${credentials.endpoint} were rejected.`);
|
|
66
|
+
}
|
|
67
|
+
// --- pick or create the app ---------------------------------------------
|
|
68
|
+
const mode = flags.link
|
|
69
|
+
? "existing"
|
|
70
|
+
: await select({
|
|
71
|
+
message: "Link this directory to",
|
|
72
|
+
choices: [
|
|
73
|
+
{ name: "An app that already exists", value: "existing" },
|
|
74
|
+
{ name: "A new app", value: "new" },
|
|
75
|
+
],
|
|
76
|
+
});
|
|
77
|
+
const app = mode === "existing" ? await this.linkExisting(cloud) : await this.createNew(cloud);
|
|
78
|
+
// --- flavours ------------------------------------------------------------
|
|
79
|
+
const flavours = this.detectFlavours(appDir);
|
|
80
|
+
const detected = Object.keys(flavours);
|
|
81
|
+
if (detected.length > 0) {
|
|
82
|
+
this.log("");
|
|
83
|
+
this.log(chalk.dim(` Detected flavours: ${detected.join(", ")}`));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.log("");
|
|
87
|
+
this.log(chalk.yellow(" No build/<env>/.env.<env> files found. The conventional layout will be\n" +
|
|
88
|
+
" written anyway - create the files, or edit project.json to point elsewhere."));
|
|
89
|
+
}
|
|
90
|
+
const config = {
|
|
91
|
+
version: PROJECT_CONFIG_VERSION,
|
|
92
|
+
appId: app.app_id,
|
|
93
|
+
cloudAppId: app.id,
|
|
94
|
+
appName: app.name,
|
|
95
|
+
createdAt: new Date().toISOString(),
|
|
96
|
+
webDir: this.detectWebDir(appDir),
|
|
97
|
+
androidDir: "android",
|
|
98
|
+
iosDir: "ios",
|
|
99
|
+
versionCodeFile: "version-code.json",
|
|
100
|
+
// Written out explicitly, even where it matches the default: this file is
|
|
101
|
+
// the contract with the CLI, and an explicit contract is easier to change
|
|
102
|
+
// than an implied one.
|
|
103
|
+
flavours: Object.fromEntries(ENVIRONMENTS.map((environment) => [
|
|
104
|
+
environment,
|
|
105
|
+
flavours[environment] ?? defaultFlavour(environment),
|
|
106
|
+
])),
|
|
107
|
+
};
|
|
108
|
+
writeProjectConfig(appDir, config);
|
|
109
|
+
// --- report --------------------------------------------------------------
|
|
110
|
+
this.log("");
|
|
111
|
+
this.log(chalk.green(" Linked."));
|
|
112
|
+
this.log(chalk.dim(` ${path.relative(appDir, projectConfigPath(appDir))}`));
|
|
113
|
+
this.log("");
|
|
114
|
+
this.log(` app ${chalk.cyan(app.name)}`);
|
|
115
|
+
this.log(` bundle id ${chalk.cyan(app.app_id)}`);
|
|
116
|
+
this.log(` cloud id ${chalk.dim(app.id)}`);
|
|
117
|
+
this.log("");
|
|
118
|
+
const channels = await cloud.channels(app.id).catch(() => []);
|
|
119
|
+
const deployable = channels.filter((channel) => channel.environment);
|
|
120
|
+
if (deployable.length > 0) {
|
|
121
|
+
this.log(chalk.bold(" channels"));
|
|
122
|
+
for (const channel of deployable) {
|
|
123
|
+
this.log(` ${channel.name} ${chalk.dim(`(${channel.environment})`)}`);
|
|
124
|
+
}
|
|
125
|
+
this.log("");
|
|
126
|
+
this.log(chalk.dim(" Deploy with: ") +
|
|
127
|
+
chalk.cyan(`capuchoo deploy ota --channel ${deployable[0].name}`));
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
this.log(chalk.yellow(" This app has no channel with an environment set yet."));
|
|
131
|
+
this.log(chalk.dim(" Create one in the dashboard - the environment is what tells the CLI\n" +
|
|
132
|
+
" which flavour to build."));
|
|
133
|
+
}
|
|
134
|
+
this.log("");
|
|
135
|
+
}
|
|
136
|
+
/** Detects which flavours the project actually has files for. */
|
|
137
|
+
detectFlavours(appDir) {
|
|
138
|
+
const found = {};
|
|
139
|
+
for (const environment of ENVIRONMENTS) {
|
|
140
|
+
const candidate = defaultFlavour(environment);
|
|
141
|
+
if (fs.existsSync(path.join(appDir, candidate.envFile))) {
|
|
142
|
+
found[environment] = candidate;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return found;
|
|
146
|
+
}
|
|
147
|
+
/** Reads `webDir` out of capacitor.config.* so the CLI zips the right folder. */
|
|
148
|
+
detectWebDir(appDir) {
|
|
149
|
+
for (const name of ["capacitor.config.ts", "capacitor.config.js", "capacitor.config.json"]) {
|
|
150
|
+
const file = path.join(appDir, name);
|
|
151
|
+
if (!fs.existsSync(file))
|
|
152
|
+
continue;
|
|
153
|
+
const match = /webDir\s*[:=]\s*["']([^"']+)["']/.exec(fs.readFileSync(file, "utf8"));
|
|
154
|
+
if (match?.[1])
|
|
155
|
+
return match[1];
|
|
156
|
+
}
|
|
157
|
+
return "dist";
|
|
158
|
+
}
|
|
159
|
+
async linkExisting(cloud) {
|
|
160
|
+
const spinner = ora({ text: "Fetching apps", stream: process.stderr }).start();
|
|
161
|
+
const apps = await cloud.apps();
|
|
162
|
+
spinner.stop();
|
|
163
|
+
if (apps.length === 0) {
|
|
164
|
+
this.error("This account has no apps yet. Re-run and choose to create one, or " +
|
|
165
|
+
"create it in the dashboard.");
|
|
166
|
+
}
|
|
167
|
+
return select({
|
|
168
|
+
message: "App",
|
|
169
|
+
choices: apps.map((app) => ({
|
|
170
|
+
name: `${app.name} ${chalk.dim(app.app_id)}`,
|
|
171
|
+
value: app,
|
|
172
|
+
})),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
async createNew(cloud) {
|
|
176
|
+
const spinner = ora({
|
|
177
|
+
text: "Fetching organizations",
|
|
178
|
+
stream: process.stderr,
|
|
179
|
+
}).start();
|
|
180
|
+
const organizations = await cloud.organizations();
|
|
181
|
+
spinner.stop();
|
|
182
|
+
const allowed = organizations.filter(canCreateApps);
|
|
183
|
+
if (allowed.length === 0) {
|
|
184
|
+
this.error(organizations.length === 0
|
|
185
|
+
? "This account belongs to no organization yet."
|
|
186
|
+
: "This account is a member, not an owner or admin, of every organization " +
|
|
187
|
+
"it belongs to, so it cannot create an app. Ask an owner.");
|
|
188
|
+
}
|
|
189
|
+
const organizationId = allowed.length === 1
|
|
190
|
+
? allowed[0].id
|
|
191
|
+
: await select({
|
|
192
|
+
message: "Organization",
|
|
193
|
+
choices: allowed.map((org) => ({
|
|
194
|
+
name: `${org.name} ${chalk.dim(`(${org.role})`)}`,
|
|
195
|
+
value: org.id,
|
|
196
|
+
})),
|
|
197
|
+
});
|
|
198
|
+
const name = await input({
|
|
199
|
+
message: "App name",
|
|
200
|
+
default: path.basename(process.cwd()),
|
|
201
|
+
validate: (value) => value.trim().length > 0 || "Required",
|
|
202
|
+
});
|
|
203
|
+
const appId = await input({
|
|
204
|
+
message: "Production bundle identifier",
|
|
205
|
+
validate: (value) => isValidBundleId(value.trim()) ||
|
|
206
|
+
"Expected something like com.company.app - lower case, at least two segments",
|
|
207
|
+
});
|
|
208
|
+
// Creating an app is the one irreversible thing this command does.
|
|
209
|
+
const proceed = await confirm({
|
|
210
|
+
message: `Create "${name}" (${appId})?`,
|
|
211
|
+
default: true,
|
|
212
|
+
});
|
|
213
|
+
if (!proceed)
|
|
214
|
+
this.error("Cancelled.");
|
|
215
|
+
const creating = ora({ text: "Creating app", stream: process.stderr }).start();
|
|
216
|
+
try {
|
|
217
|
+
const app = await cloud.createApp({
|
|
218
|
+
name: name.trim(),
|
|
219
|
+
app_id: appId.trim(),
|
|
220
|
+
platform: "android",
|
|
221
|
+
organization_id: organizationId,
|
|
222
|
+
});
|
|
223
|
+
creating.succeed(`Created ${app.name}`);
|
|
224
|
+
return app;
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
creating.fail("Could not create the app");
|
|
228
|
+
this.error(error instanceof Error ? error.message : String(error));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseCommand } from "../../base-command.js";
|
|
2
|
+
export default class VersionBump extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
environment: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=bump.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bump.d.ts","sourceRoot":"","sources":["../../../src/commands/version/bump.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,OAAgB,WAAW,SACwD;IAEnF,OAAgB,QAAQ,WAGtB;IAKF,OAAgB,IAAI;;MAMlB;IAEF,OAAgB,KAAK;;MAMnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB3B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ENVIRONMENTS, bumpVersion, nextVersionCode, } from "@capuchoo/core";
|
|
2
|
+
import { Args, Flags } from "@oclif/core";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { BaseCommand } from "../../base-command.js";
|
|
5
|
+
import { readVersionCodes, writeVersionCodes } from "../../pipeline/flavour.js";
|
|
6
|
+
import { readAppVersion, requireProjectConfig, writeAppVersion } from "../../utils/config.js";
|
|
7
|
+
export default class VersionBump extends BaseCommand {
|
|
8
|
+
static description = "Raise the app's semantic version, and optionally an environment's build number";
|
|
9
|
+
static examples = [
|
|
10
|
+
"<%= config.bin %> version bump patch",
|
|
11
|
+
"<%= config.bin %> version bump minor --environment staging",
|
|
12
|
+
];
|
|
13
|
+
// Declared with `Args` rather than a bare object. The previous version used a
|
|
14
|
+
// plain object cast `as const` and needed two @ts-ignore comments to compile,
|
|
15
|
+
// which also meant the option list was never actually enforced.
|
|
16
|
+
static args = {
|
|
17
|
+
type: Args.string({
|
|
18
|
+
description: "Which part of the version to raise",
|
|
19
|
+
options: ["major", "minor", "patch"],
|
|
20
|
+
required: true,
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
static flags = {
|
|
24
|
+
environment: Flags.string({
|
|
25
|
+
char: "e",
|
|
26
|
+
options: [...ENVIRONMENTS],
|
|
27
|
+
description: "Also increment this environment's native build number",
|
|
28
|
+
}),
|
|
29
|
+
};
|
|
30
|
+
async run() {
|
|
31
|
+
const { args, flags } = await this.parse(VersionBump);
|
|
32
|
+
const appDir = process.cwd();
|
|
33
|
+
const project = requireProjectConfig(appDir);
|
|
34
|
+
const previous = readAppVersion(appDir);
|
|
35
|
+
const next = bumpVersion(previous, args.type);
|
|
36
|
+
writeAppVersion(appDir, next);
|
|
37
|
+
this.log(` version ${chalk.dim(previous)} -> ${chalk.green(next)}`);
|
|
38
|
+
if (flags.environment) {
|
|
39
|
+
const environment = flags.environment;
|
|
40
|
+
const codes = nextVersionCode(readVersionCodes(appDir, project), environment);
|
|
41
|
+
writeVersionCodes(appDir, project, codes);
|
|
42
|
+
this.log(` build ${environment} -> ${chalk.green(String(codes[environment]))}`);
|
|
43
|
+
}
|
|
44
|
+
this.log("");
|
|
45
|
+
// No git tag, and no commit. The old command shelled out to
|
|
46
|
+
// `npm version <type> --no-git-tag-version`, which in a workspace bumped
|
|
47
|
+
// whichever package.json was nearest the process directory. Tagging stays
|
|
48
|
+
// with git and CI, where the release actually happens.
|
|
49
|
+
this.log(chalk.dim(" Nothing was committed or tagged. Commit the change yourself."));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=bump.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bump.js","sourceRoot":"","sources":["../../../src/commands/version/bump.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,GAGhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE9F,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAU,WAAW,GACzB,gFAAgF,CAAC;IAEnF,MAAM,CAAU,QAAQ,GAAG;QACzB,sCAAsC;QACtC,4DAA4D;KAC7D,CAAC;IAEF,8EAA8E;IAC9E,8EAA8E;IAC9E,gEAAgE;IAChE,MAAM,CAAU,IAAI,GAAG;QACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,oCAAoC;YACjD,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;YACpC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC;YAC1B,WAAW,EAAE,uDAAuD;SACrE,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAgB,CAAC,CAAC;QAE1D,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,WAAW,GAAG,KAAK,CAAC,WAA0B,CAAC;YACrD,MAAM,KAAK,GAAG,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;YAC9E,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,cAAc,WAAW,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,4DAA4D;QAC5D,yEAAyE;QACzE,0EAA0E;QAC1E,uDAAuD;QACvD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC,CAAC;IACxF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseCommand } from "../../base-command.js";
|
|
2
|
+
export default class VersionSync extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
bump: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
environment: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/version/sync.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,OAAgB,WAAW,SAC8C;IAEzE,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;MAYnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAmE3B"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { ENVIRONMENTS, versionEnv } from "@capuchoo/core";
|
|
2
|
+
import { Flags } from "@oclif/core";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { readVersionCodes, resolveFlavour, writeVersionCodes } from "../../pipeline/flavour.js";
|
|
5
|
+
import { readAppVersion, requireProjectConfig } from "../../utils/config.js";
|
|
6
|
+
import { nextVersionCode } from "@capuchoo/core";
|
|
7
|
+
import { BaseCommand } from "../../base-command.js";
|
|
8
|
+
export default class VersionSync extends BaseCommand {
|
|
9
|
+
static description = "Show, or advance, the version and build number used for each flavour";
|
|
10
|
+
static examples = [
|
|
11
|
+
"<%= config.bin %> version sync",
|
|
12
|
+
"<%= config.bin %> version sync --bump --environment staging",
|
|
13
|
+
];
|
|
14
|
+
static flags = {
|
|
15
|
+
bump: Flags.boolean({
|
|
16
|
+
char: "b",
|
|
17
|
+
default: false,
|
|
18
|
+
description: "Increment the build number for the selected environments",
|
|
19
|
+
}),
|
|
20
|
+
environment: Flags.string({
|
|
21
|
+
char: "e",
|
|
22
|
+
options: [...ENVIRONMENTS],
|
|
23
|
+
description: "Limit to one environment",
|
|
24
|
+
}),
|
|
25
|
+
json: Flags.boolean({ default: false, description: "Machine-readable output" }),
|
|
26
|
+
};
|
|
27
|
+
async run() {
|
|
28
|
+
const { flags } = await this.parse(VersionSync);
|
|
29
|
+
const appDir = process.cwd();
|
|
30
|
+
const project = requireProjectConfig(appDir);
|
|
31
|
+
const version = readAppVersion(appDir);
|
|
32
|
+
const targets = flags.environment
|
|
33
|
+
? [flags.environment]
|
|
34
|
+
: [...ENVIRONMENTS];
|
|
35
|
+
let codes = readVersionCodes(appDir, project);
|
|
36
|
+
if (flags.bump) {
|
|
37
|
+
for (const environment of targets) {
|
|
38
|
+
codes = nextVersionCode(codes, environment);
|
|
39
|
+
}
|
|
40
|
+
writeVersionCodes(appDir, project, codes);
|
|
41
|
+
}
|
|
42
|
+
const rows = targets.map((environment) => {
|
|
43
|
+
const flavour = resolveFlavour(appDir, project, environment);
|
|
44
|
+
return {
|
|
45
|
+
environment,
|
|
46
|
+
versionCode: codes[environment],
|
|
47
|
+
envFile: flavour.config.envFile,
|
|
48
|
+
// A flavour with no env file on disk cannot be built, and that is worth
|
|
49
|
+
// saying here rather than at deploy time.
|
|
50
|
+
present: flavour.envFile !== null,
|
|
51
|
+
variables: versionEnv(version, codes[environment]),
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
if (flags.json) {
|
|
55
|
+
this.log(JSON.stringify({ version, flavours: rows }, null, 2));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.log("");
|
|
59
|
+
this.log(` version ${chalk.green(version)} ${chalk.dim("(from package.json)")}`);
|
|
60
|
+
this.log("");
|
|
61
|
+
for (const row of rows) {
|
|
62
|
+
const marker = row.present ? chalk.green("*") : chalk.red("!");
|
|
63
|
+
this.log(` ${marker} ${row.environment.padEnd(8)} build ${String(row.versionCode).padEnd(5)} ${chalk.dim(row.envFile)}`);
|
|
64
|
+
if (!row.present) {
|
|
65
|
+
this.log(chalk.dim(` missing - this flavour cannot be built`));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
this.log("");
|
|
69
|
+
// The old `version sync` command rewrote these three variables into each
|
|
70
|
+
// committed .env file. It no longer writes to them at all - the deploy
|
|
71
|
+
// pipeline passes the values as environment variables, so nothing in the
|
|
72
|
+
// working tree changes. Only version-code.json is persisted.
|
|
73
|
+
this.log(chalk.dim(" These values are passed to the build as VITE_APP_VERSION, VERSION_CODE\n" +
|
|
74
|
+
" and BUILD_NUMBER. The env files are read, never written."));
|
|
75
|
+
if (flags.bump) {
|
|
76
|
+
this.log(chalk.dim(` ${project.versionCodeFile} updated.`));
|
|
77
|
+
}
|
|
78
|
+
this.log("");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/version/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAU,WAAW,GACzB,sEAAsE,CAAC;IAEzE,MAAM,CAAU,QAAQ,GAAG;QACzB,gCAAgC;QAChC,6DAA6D;KAC9D,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,0DAA0D;SACxE,CAAC;QACF,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC;YAC1B,WAAW,EAAE,0BAA0B;SACxC,CAAC;QACF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;KAChF,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvC,MAAM,OAAO,GAAkB,KAAK,CAAC,WAAW;YAC9C,CAAC,CAAC,CAAC,KAAK,CAAC,WAA0B,CAAC;YACpC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;QAEtB,IAAI,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC;gBAClC,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC9C,CAAC;YACD,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;YACvC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YAC7D,OAAO;gBACL,WAAW;gBACX,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;gBAC/B,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBAC/B,wEAAwE;gBACxE,0CAA0C;gBAC1C,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI;gBACjC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;aACnD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEb,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/D,IAAI,CAAC,GAAG,CACN,KAAK,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAChH,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,yEAAyE;QACzE,uEAAuE;QACvE,yEAAyE;QACzE,6DAA6D;QAC7D,IAAI,CAAC,GAAG,CACN,KAAK,CAAC,GAAG,CACP,4EAA4E;YAC1E,4DAA4D,CAC/D,CACF,CAAC;QACF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,eAAe,WAAW,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
import { type DeployKind } from "../pipeline/deploy.js";
|
|
3
|
+
/**
|
|
4
|
+
* Shared implementation for `deploy ota` and `deploy native`.
|
|
5
|
+
*
|
|
6
|
+
* The two commands were previously separate 300-line files that differed in
|
|
7
|
+
* about twenty lines. Every fix had to be applied twice, and in practice was
|
|
8
|
+
* not: the OTA path never sent `version_code`, so the backend could not
|
|
9
|
+
* evaluate a bundle's `min_update_version` gate for it, while the native path
|
|
10
|
+
* did.
|
|
11
|
+
*/
|
|
12
|
+
/** Flags both deploy commands accept. */
|
|
13
|
+
export declare const commonDeployFlags: {
|
|
14
|
+
readonly channel: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
readonly note: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
readonly version: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
readonly active: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
readonly required: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
19
|
+
readonly "skip-assets": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
20
|
+
readonly "skip-build": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
21
|
+
readonly "dry-run": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
22
|
+
readonly json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
23
|
+
readonly verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
24
|
+
readonly yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
25
|
+
};
|
|
26
|
+
export interface DeployFlags {
|
|
27
|
+
channel?: string;
|
|
28
|
+
note?: string;
|
|
29
|
+
version?: string;
|
|
30
|
+
active?: boolean;
|
|
31
|
+
required?: boolean;
|
|
32
|
+
"skip-assets": boolean;
|
|
33
|
+
"skip-build": boolean;
|
|
34
|
+
"dry-run": boolean;
|
|
35
|
+
json: boolean;
|
|
36
|
+
verbose: boolean;
|
|
37
|
+
yes: boolean;
|
|
38
|
+
platform?: string;
|
|
39
|
+
type?: string;
|
|
40
|
+
"allow-unsigned"?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface DeployCommandOptions {
|
|
43
|
+
kind: DeployKind;
|
|
44
|
+
command: Command;
|
|
45
|
+
flags: DeployFlags;
|
|
46
|
+
}
|
|
47
|
+
export declare function executeDeploy(options: DeployCommandOptions): Promise<void>;
|
|
48
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/deploy/execute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,OAAO,EAIL,KAAK,UAAU,EAEhB,MAAM,uBAAuB,CAAC;AAU/B;;;;;;;;GAQG;AAEH,yCAAyC;AACzC,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CA8CpB,CAAC;AAEX,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;CACpB;AAaD,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoQhF"}
|