oclif 4.15.5 → 4.15.6
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/lib/aws.d.ts +8 -2
- package/lib/aws.js +22 -5
- package/lib/commands/promote.d.ts +1 -0
- package/lib/commands/promote.js +71 -16
- package/lib/commands/upload/deb.d.ts +1 -0
- package/lib/commands/upload/deb.js +7 -2
- package/lib/commands/upload/macos.d.ts +1 -0
- package/lib/commands/upload/macos.js +4 -1
- package/lib/commands/upload/tarballs.d.ts +1 -0
- package/lib/commands/upload/tarballs.js +5 -0
- package/lib/commands/upload/win.d.ts +1 -0
- package/lib/commands/upload/win.js +4 -1
- package/lib/version-indexes.d.ts +1 -0
- package/lib/version-indexes.js +2 -0
- package/oclif.manifest.json +31 -1
- package/package.json +1 -1
package/lib/aws.d.ts
CHANGED
|
@@ -5,12 +5,18 @@ declare const _default: {
|
|
|
5
5
|
createCloudfrontInvalidation: (options: CreateInvalidationRequest) => Promise<CreateInvalidationCommandOutput>;
|
|
6
6
|
};
|
|
7
7
|
readonly s3: {
|
|
8
|
-
copyObject: (options: CopyObjectRequest, ignoreMissing
|
|
8
|
+
copyObject: (options: CopyObjectRequest, { dryRun, ignoreMissing, namespace }: {
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
ignoreMissing?: boolean;
|
|
11
|
+
namespace?: string;
|
|
12
|
+
}) => Promise<CopyObjectOutput>;
|
|
9
13
|
deleteObjects: (options: DeleteObjectsRequest) => Promise<DeleteObjectsOutput>;
|
|
10
14
|
getObject: (options: GetObjectRequest) => Promise<GetObjectOutput>;
|
|
11
15
|
headObject: (options: HeadObjectRequest) => Promise<HeadObjectOutput>;
|
|
12
16
|
listObjects: (options: ListObjectsV2Request) => Promise<ListObjectsV2Output>;
|
|
13
|
-
uploadFile: (local: string, options: PutObjectRequest
|
|
17
|
+
uploadFile: (local: string, options: PutObjectRequest, { dryRun }?: {
|
|
18
|
+
dryRun?: boolean;
|
|
19
|
+
}) => Promise<PutObjectOutput>;
|
|
14
20
|
};
|
|
15
21
|
};
|
|
16
22
|
export default _default;
|
package/lib/aws.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const client_cloudfront_1 = require("@aws-sdk/client-cloudfront");
|
|
4
4
|
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
5
5
|
const errors_1 = require("@oclif/core/errors");
|
|
6
|
+
const ux_1 = require("@oclif/core/ux");
|
|
6
7
|
const fs_extra_1 = require("fs-extra");
|
|
7
8
|
const log_1 = require("./log");
|
|
8
9
|
const util_1 = require("./util");
|
|
@@ -60,17 +61,27 @@ exports.default = {
|
|
|
60
61
|
},
|
|
61
62
|
get s3() {
|
|
62
63
|
return {
|
|
63
|
-
copyObject: (options, ignoreMissing
|
|
64
|
-
|
|
64
|
+
copyObject: (options, { dryRun, ignoreMissing, namespace }) => new Promise((resolve, reject) => {
|
|
65
|
+
const logNamespace = namespace ? `> ${namespace}` : `> s3://${options.CopySource}`;
|
|
66
|
+
ux_1.ux.stdout(logNamespace);
|
|
67
|
+
ux_1.ux.stdout(' action: copy');
|
|
68
|
+
ux_1.ux.stdout(` source: s3://${options.CopySource}`);
|
|
69
|
+
ux_1.ux.stdout(` target: s3://${options.Bucket}/${options.Key}`);
|
|
70
|
+
ux_1.ux.stdout();
|
|
71
|
+
if (dryRun)
|
|
72
|
+
return;
|
|
65
73
|
aws.s3
|
|
66
74
|
?.send(new client_s3_1.CopyObjectCommand(options))
|
|
67
75
|
.then((data) => resolve(data))
|
|
68
76
|
.catch((error) => {
|
|
69
77
|
if (error.Code === 'NoSuchKey') {
|
|
70
78
|
if (ignoreMissing) {
|
|
71
|
-
|
|
79
|
+
ux_1.ux.stdout(logNamespace);
|
|
80
|
+
ux_1.ux.stdout(` warning: s3://${options.CopySource} does not exist - skipping because of --ignore-missing`);
|
|
72
81
|
return;
|
|
73
82
|
}
|
|
83
|
+
ux_1.ux.stdout(logNamespace);
|
|
84
|
+
ux_1.ux.stdout(` error: s3://${options.CopySource} does not exist`);
|
|
74
85
|
reject(new errors_1.CLIError(`Failed to copy source object s3://${options.CopySource} to s3://${options.Bucket}/${options.Key} because the source object does not exist`, {
|
|
75
86
|
suggestions: [
|
|
76
87
|
'Use the "oclif upload" to upload the object first',
|
|
@@ -110,8 +121,14 @@ exports.default = {
|
|
|
110
121
|
.then((data) => resolve(data))
|
|
111
122
|
.catch((error) => reject(error));
|
|
112
123
|
}),
|
|
113
|
-
uploadFile: (local, options) => new Promise((resolve, reject) => {
|
|
114
|
-
|
|
124
|
+
uploadFile: (local, options, { dryRun } = {}) => new Promise((resolve, reject) => {
|
|
125
|
+
ux_1.ux.stdout(`> ${local}`);
|
|
126
|
+
ux_1.ux.stdout(' action: upload');
|
|
127
|
+
ux_1.ux.stdout(` source: ${(0, util_1.prettifyPaths)(local)}`);
|
|
128
|
+
ux_1.ux.stdout(` target: s3://${options.Bucket}/${options.Key}`);
|
|
129
|
+
ux_1.ux.stdout();
|
|
130
|
+
if (dryRun)
|
|
131
|
+
return;
|
|
115
132
|
options.Body = (0, fs_extra_1.createReadStream)(local);
|
|
116
133
|
aws.s3
|
|
117
134
|
?.send(new client_s3_1.PutObjectCommand(options))
|
|
@@ -4,6 +4,7 @@ export default class Promote extends Command {
|
|
|
4
4
|
static flags: {
|
|
5
5
|
channel: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
6
|
deb: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
8
|
'ignore-missing': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
9
|
indexes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
10
|
macos: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
package/lib/commands/promote.js
CHANGED
|
@@ -39,6 +39,9 @@ class Promote extends core_1.Command {
|
|
|
39
39
|
static flags = {
|
|
40
40
|
channel: core_1.Flags.string({ default: 'stable', description: 'Channel to promote to.', required: true }),
|
|
41
41
|
deb: core_1.Flags.boolean({ char: 'd', description: 'Promote debian artifacts.' }),
|
|
42
|
+
'dry-run': core_1.Flags.boolean({
|
|
43
|
+
description: 'Run the command without uploading to S3 or copying versioned tarballs/installers to channel.',
|
|
44
|
+
}),
|
|
42
45
|
'ignore-missing': core_1.Flags.boolean({
|
|
43
46
|
description: 'Ignore missing tarballs/installers and continue promoting the rest.',
|
|
44
47
|
}),
|
|
@@ -57,6 +60,7 @@ class Promote extends core_1.Command {
|
|
|
57
60
|
if (flags['ignore-missing']) {
|
|
58
61
|
this.warn("--ignore-missing flag is being used - This command will continue to run even if a promotion fails because it doesn't exist");
|
|
59
62
|
}
|
|
63
|
+
this.log(`Promoting v${flags.version} (${flags.sha}) to ${flags.channel} channel\n`);
|
|
60
64
|
const buildConfig = await Tarballs.buildConfig(flags.root, { targets: flags?.targets?.split(',') });
|
|
61
65
|
const { config, s3Config } = buildConfig;
|
|
62
66
|
const indexDefaults = {
|
|
@@ -75,8 +79,6 @@ class Promote extends core_1.Command {
|
|
|
75
79
|
const cloudBucketCommitKey = (shortKey) => path.join(s3Config.bucket, (0, upload_util_1.commitAWSDir)(flags.version, flags.sha, s3Config), shortKey);
|
|
76
80
|
const cloudChannelKey = (shortKey) => path.join((0, upload_util_1.channelAWSDir)(flags.channel, s3Config), shortKey);
|
|
77
81
|
// copy tarballs manifests
|
|
78
|
-
if (buildConfig.targets.length > 0)
|
|
79
|
-
this.log(`\nPromoting buildmanifests & unversioned tarballs to ${flags.channel}`);
|
|
80
82
|
const promoteManifest = async (target) => {
|
|
81
83
|
const manifest = (0, upload_util_1.templateShortKey)('manifest', {
|
|
82
84
|
arch: target.arch,
|
|
@@ -91,7 +93,11 @@ class Promote extends core_1.Command {
|
|
|
91
93
|
...awsDefaults,
|
|
92
94
|
CopySource: cloudBucketCommitKey(manifest),
|
|
93
95
|
Key: cloudChannelKey(unversionedManifest),
|
|
94
|
-
},
|
|
96
|
+
}, {
|
|
97
|
+
dryRun: flags['dry-run'],
|
|
98
|
+
ignoreMissing: flags['ignore-missing'],
|
|
99
|
+
namespace: unversionedManifest,
|
|
100
|
+
});
|
|
95
101
|
};
|
|
96
102
|
const promoteGzTarballs = async (target) => {
|
|
97
103
|
const versionedTarGzName = (0, upload_util_1.templateShortKey)('versioned', {
|
|
@@ -111,9 +117,20 @@ class Promote extends core_1.Command {
|
|
|
111
117
|
...awsDefaults,
|
|
112
118
|
CopySource: versionedTarGzKey,
|
|
113
119
|
Key: unversionedTarGzKey,
|
|
114
|
-
},
|
|
120
|
+
}, {
|
|
121
|
+
dryRun: flags['dry-run'],
|
|
122
|
+
ignoreMissing: flags['ignore-missing'],
|
|
123
|
+
namespace: unversionedTarGzName,
|
|
124
|
+
}),
|
|
115
125
|
...(flags.indexes
|
|
116
|
-
? [
|
|
126
|
+
? [
|
|
127
|
+
(0, version_indexes_1.appendToIndex)({
|
|
128
|
+
...indexDefaults,
|
|
129
|
+
dryRun: flags['dry-run'],
|
|
130
|
+
filename: unversionedTarGzName,
|
|
131
|
+
originalUrl: versionedTarGzKey,
|
|
132
|
+
}),
|
|
133
|
+
]
|
|
117
134
|
: []),
|
|
118
135
|
]);
|
|
119
136
|
};
|
|
@@ -135,14 +152,24 @@ class Promote extends core_1.Command {
|
|
|
135
152
|
...awsDefaults,
|
|
136
153
|
CopySource: versionedTarXzKey,
|
|
137
154
|
Key: unversionedTarXzKey,
|
|
138
|
-
},
|
|
155
|
+
}, {
|
|
156
|
+
dryRun: flags['dry-run'],
|
|
157
|
+
ignoreMissing: flags['ignore-missing'],
|
|
158
|
+
namespace: unversionedTarXzName,
|
|
159
|
+
}),
|
|
139
160
|
...(flags.indexes
|
|
140
|
-
? [
|
|
161
|
+
? [
|
|
162
|
+
(0, version_indexes_1.appendToIndex)({
|
|
163
|
+
...indexDefaults,
|
|
164
|
+
dryRun: flags['dry-run'],
|
|
165
|
+
filename: unversionedTarXzName,
|
|
166
|
+
originalUrl: versionedTarXzKey,
|
|
167
|
+
}),
|
|
168
|
+
]
|
|
141
169
|
: []),
|
|
142
170
|
]);
|
|
143
171
|
};
|
|
144
172
|
const promoteMacInstallers = async () => {
|
|
145
|
-
this.log(`\nPromoting macos pkgs to ${flags.channel}`);
|
|
146
173
|
const arches = (0, util_1.uniq)(buildConfig.targets.filter((t) => t.platform === 'darwin').map((t) => t.arch));
|
|
147
174
|
await Promise.all(arches.map(async (arch) => {
|
|
148
175
|
const darwinPkg = (0, upload_util_1.templateShortKey)('macos', { arch, bin: config.bin, sha: flags.sha, version: flags.version });
|
|
@@ -154,16 +181,26 @@ class Promote extends core_1.Command {
|
|
|
154
181
|
...awsDefaults,
|
|
155
182
|
CopySource: darwinCopySource,
|
|
156
183
|
Key: cloudChannelKey(unversionedPkg),
|
|
157
|
-
},
|
|
184
|
+
}, {
|
|
185
|
+
dryRun: flags['dry-run'],
|
|
186
|
+
ignoreMissing: flags['ignore-missing'],
|
|
187
|
+
namespace: unversionedPkg,
|
|
188
|
+
}),
|
|
158
189
|
...(flags.indexes
|
|
159
|
-
? [
|
|
190
|
+
? [
|
|
191
|
+
(0, version_indexes_1.appendToIndex)({
|
|
192
|
+
...indexDefaults,
|
|
193
|
+
dryRun: flags['dry-run'],
|
|
194
|
+
filename: unversionedPkg,
|
|
195
|
+
originalUrl: darwinCopySource,
|
|
196
|
+
}),
|
|
197
|
+
]
|
|
160
198
|
: []),
|
|
161
199
|
]);
|
|
162
200
|
}));
|
|
163
201
|
};
|
|
164
202
|
const promoteWindowsInstallers = async () => {
|
|
165
203
|
// copy win exe
|
|
166
|
-
this.log(`\nPromoting windows exe to ${flags.channel}`);
|
|
167
204
|
const arches = buildConfig.targets.filter((t) => t.platform === 'win32').map((t) => t.arch);
|
|
168
205
|
await Promise.all(arches.map(async (arch) => {
|
|
169
206
|
const winPkg = (0, upload_util_1.templateShortKey)('win32', { arch, bin: config.bin, sha: flags.sha, version: flags.version });
|
|
@@ -175,9 +212,20 @@ class Promote extends core_1.Command {
|
|
|
175
212
|
...awsDefaults,
|
|
176
213
|
CopySource: winCopySource,
|
|
177
214
|
Key: cloudChannelKey(unversionedExe),
|
|
178
|
-
},
|
|
215
|
+
}, {
|
|
216
|
+
dryRun: flags['dry-run'],
|
|
217
|
+
ignoreMissing: flags['ignore-missing'],
|
|
218
|
+
namespace: unversionedExe,
|
|
219
|
+
}),
|
|
179
220
|
...(flags.indexes
|
|
180
|
-
? [
|
|
221
|
+
? [
|
|
222
|
+
(0, version_indexes_1.appendToIndex)({
|
|
223
|
+
...indexDefaults,
|
|
224
|
+
dryRun: flags['dry-run'],
|
|
225
|
+
filename: unversionedExe,
|
|
226
|
+
originalUrl: winCopySource,
|
|
227
|
+
}),
|
|
228
|
+
]
|
|
181
229
|
: []),
|
|
182
230
|
]);
|
|
183
231
|
core_1.ux.action.stop('successfully');
|
|
@@ -201,7 +249,6 @@ class Promote extends core_1.Command {
|
|
|
201
249
|
'InRelease',
|
|
202
250
|
'Release.gpg',
|
|
203
251
|
];
|
|
204
|
-
this.log(`\nPromoting debian artifacts to ${flags.channel}`);
|
|
205
252
|
await Promise.all(debArtifacts.flatMap((artifact) => {
|
|
206
253
|
const debCopySource = cloudBucketCommitKey(`apt/${artifact}`);
|
|
207
254
|
const debKey = cloudChannelKey(`apt/${artifact}`);
|
|
@@ -215,12 +262,20 @@ class Promote extends core_1.Command {
|
|
|
215
262
|
...awsDefaults,
|
|
216
263
|
CopySource: debCopySource,
|
|
217
264
|
Key: debKey,
|
|
218
|
-
},
|
|
265
|
+
}, {
|
|
266
|
+
dryRun: flags['dry-run'],
|
|
267
|
+
ignoreMissing: flags['ignore-missing'],
|
|
268
|
+
namespace: debKey,
|
|
269
|
+
}),
|
|
219
270
|
aws_1.default.s3.copyObject({
|
|
220
271
|
...awsDefaults,
|
|
221
272
|
CopySource: debCopySource,
|
|
222
273
|
Key: workaroundKey,
|
|
223
|
-
},
|
|
274
|
+
}, {
|
|
275
|
+
dryRun: flags['dry-run'],
|
|
276
|
+
ignoreMissing: flags['ignore-missing'],
|
|
277
|
+
namespace: workaroundKey,
|
|
278
|
+
}),
|
|
224
279
|
];
|
|
225
280
|
}));
|
|
226
281
|
};
|
|
@@ -2,6 +2,7 @@ import { Command } from '@oclif/core';
|
|
|
2
2
|
export default class UploadDeb extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static flags: {
|
|
5
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
5
6
|
root: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
7
|
};
|
|
7
8
|
run(): Promise<void>;
|
|
@@ -36,6 +36,7 @@ const upload_util_1 = require("../../upload-util");
|
|
|
36
36
|
class UploadDeb extends core_1.Command {
|
|
37
37
|
static description = 'Upload deb package built with `pack deb`.';
|
|
38
38
|
static flags = {
|
|
39
|
+
'dry-run': core_1.Flags.boolean({ description: 'Run the command without uploading to S3.' }),
|
|
39
40
|
root: core_1.Flags.string({ char: 'r', default: '.', description: 'Path to oclif CLI root.', required: true }),
|
|
40
41
|
};
|
|
41
42
|
async run() {
|
|
@@ -54,7 +55,9 @@ class UploadDeb extends core_1.Command {
|
|
|
54
55
|
const cloudKeyBase = (0, upload_util_1.commitAWSDir)(config.pjson.version, buildConfig.gitSha, s3Config);
|
|
55
56
|
const upload = (file) => {
|
|
56
57
|
const cloudKey = `${cloudKeyBase}/apt/${file}`;
|
|
57
|
-
return aws_1.default.s3.uploadFile(dist(file), { ...S3Options, CacheControl: 'max-age=86400', Key: cloudKey }
|
|
58
|
+
return aws_1.default.s3.uploadFile(dist(file), { ...S3Options, CacheControl: 'max-age=86400', Key: cloudKey }, {
|
|
59
|
+
dryRun: flags['dry-run'],
|
|
60
|
+
});
|
|
58
61
|
};
|
|
59
62
|
// apt expects ../apt/dists/versionName/[artifacts] but oclif wants versions/sha/apt/[artifacts]
|
|
60
63
|
// see https://github.com/oclif/oclif/issues/347 for the AWS-redirect that solves this
|
|
@@ -62,7 +65,9 @@ class UploadDeb extends core_1.Command {
|
|
|
62
65
|
// with this, the docs are correct. The copies are all done in parallel so it shouldn't be too costly.
|
|
63
66
|
const uploadWorkaround = (file) => {
|
|
64
67
|
const cloudKey = `${cloudKeyBase}/apt/./${file}`;
|
|
65
|
-
return aws_1.default.s3.uploadFile(dist(file), { ...S3Options, CacheControl: 'max-age=86400', Key: cloudKey }
|
|
68
|
+
return aws_1.default.s3.uploadFile(dist(file), { ...S3Options, CacheControl: 'max-age=86400', Key: cloudKey }, {
|
|
69
|
+
dryRun: flags['dry-run'],
|
|
70
|
+
});
|
|
66
71
|
};
|
|
67
72
|
const uploadDeb = async (arch) => {
|
|
68
73
|
const deb = (0, upload_util_1.templateShortKey)('deb', {
|
|
@@ -2,6 +2,7 @@ import { Command, Interfaces } from '@oclif/core';
|
|
|
2
2
|
export default class UploadMacos extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static flags: {
|
|
5
|
+
'dry-run': Interfaces.BooleanFlag<boolean>;
|
|
5
6
|
root: Interfaces.OptionFlag<string, Interfaces.CustomOptions>;
|
|
6
7
|
targets: Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
|
|
7
8
|
};
|
|
@@ -36,6 +36,7 @@ const util_1 = require("../../util");
|
|
|
36
36
|
class UploadMacos extends core_1.Command {
|
|
37
37
|
static description = 'Upload macos installers built with `pack macos`.';
|
|
38
38
|
static flags = {
|
|
39
|
+
'dry-run': core_1.Flags.boolean({ description: 'Run the command without uploading to S3.' }),
|
|
39
40
|
root: core_1.Flags.string({ char: 'r', default: '.', description: 'Path to oclif CLI root.', required: true }),
|
|
40
41
|
targets: core_1.Flags.string({
|
|
41
42
|
char: 't',
|
|
@@ -61,7 +62,9 @@ class UploadMacos extends core_1.Command {
|
|
|
61
62
|
const cloudKey = `${cloudKeyBase}/${templateKey}`;
|
|
62
63
|
const localPkg = dist(`macos/${templateKey}`);
|
|
63
64
|
if (fs.existsSync(localPkg))
|
|
64
|
-
await aws_1.default.s3.uploadFile(localPkg, { ...S3Options, CacheControl: 'max-age=86400', Key: cloudKey }
|
|
65
|
+
await aws_1.default.s3.uploadFile(localPkg, { ...S3Options, CacheControl: 'max-age=86400', Key: cloudKey }, {
|
|
66
|
+
dryRun: flags['dry-run'],
|
|
67
|
+
});
|
|
65
68
|
else
|
|
66
69
|
this.error('Cannot find macOS pkg', {
|
|
67
70
|
suggestions: ['Run "oclif pack macos" before uploading'],
|
|
@@ -2,6 +2,7 @@ import { Command, Interfaces } from '@oclif/core';
|
|
|
2
2
|
export default class UploadTarballs extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static flags: {
|
|
5
|
+
'dry-run': Interfaces.BooleanFlag<boolean>;
|
|
5
6
|
root: Interfaces.OptionFlag<string, Interfaces.CustomOptions>;
|
|
6
7
|
targets: Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
|
|
7
8
|
xz: Interfaces.BooleanFlag<boolean>;
|
|
@@ -35,6 +35,7 @@ const upload_util_1 = require("../../upload-util");
|
|
|
35
35
|
class UploadTarballs extends core_1.Command {
|
|
36
36
|
static description = 'Upload an oclif CLI to S3.';
|
|
37
37
|
static flags = {
|
|
38
|
+
'dry-run': core_1.Flags.boolean({ description: 'Run the command without uploading to S3.' }),
|
|
38
39
|
root: core_1.Flags.string({ char: 'r', default: '.', description: 'Path to oclif CLI root.', required: true }),
|
|
39
40
|
targets: core_1.Flags.string({ char: 't', description: 'Comma-separated targets to upload (e.g.: linux-arm,win32-x64).' }),
|
|
40
41
|
xz: core_1.Flags.boolean({ allowNo: true, description: 'Also upload xz.' }),
|
|
@@ -81,6 +82,8 @@ class UploadTarballs extends core_1.Command {
|
|
|
81
82
|
CacheControl: 'max-age=604800',
|
|
82
83
|
ContentType: 'application/gzip',
|
|
83
84
|
Key: cloudKey,
|
|
85
|
+
}, {
|
|
86
|
+
dryRun: flags['dry-run'],
|
|
84
87
|
});
|
|
85
88
|
};
|
|
86
89
|
const maybeUploadManifest = async () => {
|
|
@@ -93,6 +96,8 @@ class UploadTarballs extends core_1.Command {
|
|
|
93
96
|
CacheControl: 'max-age=86400',
|
|
94
97
|
ContentType: 'application/json',
|
|
95
98
|
Key: cloudKey,
|
|
99
|
+
}, {
|
|
100
|
+
dryRun: flags['dry-run'],
|
|
96
101
|
});
|
|
97
102
|
}
|
|
98
103
|
core_1.ux.warn(`Cannot find buildmanifest ${local}. CLI will not be able to update itself.`);
|
|
@@ -2,6 +2,7 @@ import { Command } from '@oclif/core';
|
|
|
2
2
|
export default class UploadWin extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static flags: {
|
|
5
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
5
6
|
root: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
7
|
targets: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
8
|
};
|
|
@@ -35,6 +35,7 @@ const upload_util_1 = require("../../upload-util");
|
|
|
35
35
|
class UploadWin extends core_1.Command {
|
|
36
36
|
static description = 'Upload windows installers built with `pack win`.';
|
|
37
37
|
static flags = {
|
|
38
|
+
'dry-run': core_1.Flags.boolean({ description: 'Run the command without uploading to S3.' }),
|
|
38
39
|
root: core_1.Flags.string({ char: 'r', default: '.', description: 'Path to oclif CLI root.', required: true }),
|
|
39
40
|
targets: core_1.Flags.string({ description: 'Comma-separated targets to pack (e.g.: win32-x64,win32-x86,win32-arm64).' }),
|
|
40
41
|
};
|
|
@@ -71,7 +72,9 @@ class UploadWin extends core_1.Command {
|
|
|
71
72
|
const localExe = dist(`win32/${templateKey}`);
|
|
72
73
|
const cloudKey = `${cloudKeyBase}/${templateKey}`;
|
|
73
74
|
if (fs.existsSync(localExe))
|
|
74
|
-
await aws_1.default.s3.uploadFile(localExe, { ...S3Options, CacheControl: 'max-age=86400', Key: cloudKey }
|
|
75
|
+
await aws_1.default.s3.uploadFile(localExe, { ...S3Options, CacheControl: 'max-age=86400', Key: cloudKey }, {
|
|
76
|
+
dryRun: flags['dry-run'],
|
|
77
|
+
});
|
|
75
78
|
};
|
|
76
79
|
await Promise.all([uploadWin('x64'), uploadWin('x86'), uploadWin('arm64')]);
|
|
77
80
|
(0, log_1.log)(`done uploading windows executables for v${config.version}-${buildConfig.gitSha}`);
|
package/lib/version-indexes.d.ts
CHANGED
package/lib/version-indexes.js
CHANGED
package/oclif.manifest.json
CHANGED
|
@@ -381,6 +381,12 @@
|
|
|
381
381
|
"allowNo": false,
|
|
382
382
|
"type": "boolean"
|
|
383
383
|
},
|
|
384
|
+
"dry-run": {
|
|
385
|
+
"description": "Run the command without uploading to S3 or copying versioned tarballs/installers to channel.",
|
|
386
|
+
"name": "dry-run",
|
|
387
|
+
"allowNo": false,
|
|
388
|
+
"type": "boolean"
|
|
389
|
+
},
|
|
384
390
|
"ignore-missing": {
|
|
385
391
|
"description": "Ignore missing tarballs/installers and continue promoting the rest.",
|
|
386
392
|
"name": "ignore-missing",
|
|
@@ -940,6 +946,12 @@
|
|
|
940
946
|
"args": {},
|
|
941
947
|
"description": "Upload deb package built with `pack deb`.",
|
|
942
948
|
"flags": {
|
|
949
|
+
"dry-run": {
|
|
950
|
+
"description": "Run the command without uploading to S3.",
|
|
951
|
+
"name": "dry-run",
|
|
952
|
+
"allowNo": false,
|
|
953
|
+
"type": "boolean"
|
|
954
|
+
},
|
|
943
955
|
"root": {
|
|
944
956
|
"char": "r",
|
|
945
957
|
"description": "Path to oclif CLI root.",
|
|
@@ -972,6 +984,12 @@
|
|
|
972
984
|
"args": {},
|
|
973
985
|
"description": "Upload macos installers built with `pack macos`.",
|
|
974
986
|
"flags": {
|
|
987
|
+
"dry-run": {
|
|
988
|
+
"description": "Run the command without uploading to S3.",
|
|
989
|
+
"name": "dry-run",
|
|
990
|
+
"allowNo": false,
|
|
991
|
+
"type": "boolean"
|
|
992
|
+
},
|
|
975
993
|
"root": {
|
|
976
994
|
"char": "r",
|
|
977
995
|
"description": "Path to oclif CLI root.",
|
|
@@ -1012,6 +1030,12 @@
|
|
|
1012
1030
|
"args": {},
|
|
1013
1031
|
"description": "Upload an oclif CLI to S3.",
|
|
1014
1032
|
"flags": {
|
|
1033
|
+
"dry-run": {
|
|
1034
|
+
"description": "Run the command without uploading to S3.",
|
|
1035
|
+
"name": "dry-run",
|
|
1036
|
+
"allowNo": false,
|
|
1037
|
+
"type": "boolean"
|
|
1038
|
+
},
|
|
1015
1039
|
"root": {
|
|
1016
1040
|
"char": "r",
|
|
1017
1041
|
"description": "Path to oclif CLI root.",
|
|
@@ -1058,6 +1082,12 @@
|
|
|
1058
1082
|
"args": {},
|
|
1059
1083
|
"description": "Upload windows installers built with `pack win`.",
|
|
1060
1084
|
"flags": {
|
|
1085
|
+
"dry-run": {
|
|
1086
|
+
"description": "Run the command without uploading to S3.",
|
|
1087
|
+
"name": "dry-run",
|
|
1088
|
+
"allowNo": false,
|
|
1089
|
+
"type": "boolean"
|
|
1090
|
+
},
|
|
1061
1091
|
"root": {
|
|
1062
1092
|
"char": "r",
|
|
1063
1093
|
"description": "Path to oclif CLI root.",
|
|
@@ -1093,5 +1123,5 @@
|
|
|
1093
1123
|
]
|
|
1094
1124
|
}
|
|
1095
1125
|
},
|
|
1096
|
-
"version": "4.15.
|
|
1126
|
+
"version": "4.15.6"
|
|
1097
1127
|
}
|