Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/build/azure-pipelines/upload-nlsmetadata.js
3520 views
1
"use strict";
2
var __importDefault = (this && this.__importDefault) || function (mod) {
3
return (mod && mod.__esModule) ? mod : { "default": mod };
4
};
5
Object.defineProperty(exports, "__esModule", { value: true });
6
/*---------------------------------------------------------------------------------------------
7
* Copyright (c) Microsoft Corporation. All rights reserved.
8
* Licensed under the MIT License. See License.txt in the project root for license information.
9
*--------------------------------------------------------------------------------------------*/
10
const event_stream_1 = __importDefault(require("event-stream"));
11
const vinyl_fs_1 = __importDefault(require("vinyl-fs"));
12
const gulp_merge_json_1 = __importDefault(require("gulp-merge-json"));
13
const gulp_gzip_1 = __importDefault(require("gulp-gzip"));
14
const identity_1 = require("@azure/identity");
15
const path = require("path");
16
const fs_1 = require("fs");
17
const azure = require('gulp-azure-storage');
18
const commit = process.env['BUILD_SOURCEVERSION'];
19
const credential = new identity_1.ClientAssertionCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], () => Promise.resolve(process.env['AZURE_ID_TOKEN']));
20
function main() {
21
return new Promise((c, e) => {
22
const combinedMetadataJson = event_stream_1.default.merge(
23
// vscode: we are not using `out-build/nls.metadata.json` here because
24
// it includes metadata for translators for `keys`. but for our purpose
25
// we want only the `keys` and `messages` as `string`.
26
event_stream_1.default.merge(vinyl_fs_1.default.src('out-build/nls.keys.json', { base: 'out-build' }), vinyl_fs_1.default.src('out-build/nls.messages.json', { base: 'out-build' }))
27
.pipe((0, gulp_merge_json_1.default)({
28
fileName: 'vscode.json',
29
jsonSpace: '',
30
concatArrays: true,
31
edit: (parsedJson, file) => {
32
if (file.base === 'out-build') {
33
if (file.basename === 'nls.keys.json') {
34
return { keys: parsedJson };
35
}
36
else {
37
return { messages: parsedJson };
38
}
39
}
40
}
41
})),
42
// extensions
43
vinyl_fs_1.default.src('.build/extensions/**/nls.metadata.json', { base: '.build/extensions' }), vinyl_fs_1.default.src('.build/extensions/**/nls.metadata.header.json', { base: '.build/extensions' }), vinyl_fs_1.default.src('.build/extensions/**/package.nls.json', { base: '.build/extensions' })).pipe((0, gulp_merge_json_1.default)({
44
fileName: 'combined.nls.metadata.json',
45
jsonSpace: '',
46
concatArrays: true,
47
edit: (parsedJson, file) => {
48
if (file.basename === 'vscode.json') {
49
return { vscode: parsedJson };
50
}
51
// Handle extensions and follow the same structure as the Core nls file.
52
switch (file.basename) {
53
case 'package.nls.json':
54
// put package.nls.json content in Core NlsMetadata format
55
// language packs use the key "package" to specify that
56
// translations are for the package.json file
57
parsedJson = {
58
messages: {
59
package: Object.values(parsedJson)
60
},
61
keys: {
62
package: Object.keys(parsedJson)
63
},
64
bundles: {
65
main: ['package']
66
}
67
};
68
break;
69
case 'nls.metadata.header.json':
70
parsedJson = { header: parsedJson };
71
break;
72
case 'nls.metadata.json': {
73
// put nls.metadata.json content in Core NlsMetadata format
74
const modules = Object.keys(parsedJson);
75
const json = {
76
keys: {},
77
messages: {},
78
bundles: {
79
main: []
80
}
81
};
82
for (const module of modules) {
83
json.messages[module] = parsedJson[module].messages;
84
json.keys[module] = parsedJson[module].keys;
85
json.bundles.main.push(module);
86
}
87
parsedJson = json;
88
break;
89
}
90
}
91
// Get extension id and use that as the key
92
const folderPath = path.join(file.base, file.relative.split('/')[0]);
93
const manifest = (0, fs_1.readFileSync)(path.join(folderPath, 'package.json'), 'utf-8');
94
const manifestJson = JSON.parse(manifest);
95
const key = manifestJson.publisher + '.' + manifestJson.name;
96
return { [key]: parsedJson };
97
},
98
}));
99
const nlsMessagesJs = vinyl_fs_1.default.src('out-build/nls.messages.js', { base: 'out-build' });
100
event_stream_1.default.merge(combinedMetadataJson, nlsMessagesJs)
101
.pipe((0, gulp_gzip_1.default)({ append: false }))
102
.pipe(vinyl_fs_1.default.dest('./nlsMetadata'))
103
.pipe(event_stream_1.default.through(function (data) {
104
console.log(`Uploading ${data.path}`);
105
// trigger artifact upload
106
console.log(`##vso[artifact.upload containerfolder=nlsmetadata;artifactname=${data.basename}]${data.path}`);
107
this.emit('data', data);
108
}))
109
.pipe(azure.upload({
110
account: process.env.AZURE_STORAGE_ACCOUNT,
111
credential,
112
container: '$web',
113
prefix: `nlsmetadata/${commit}/`,
114
contentSettings: {
115
contentEncoding: 'gzip',
116
cacheControl: 'max-age=31536000, public'
117
}
118
}))
119
.on('end', () => c())
120
.on('error', (err) => e(err));
121
});
122
}
123
main().catch(err => {
124
console.error(err);
125
process.exit(1);
126
});
127
//# sourceMappingURL=upload-nlsmetadata.js.map
128