-
Notifications
You must be signed in to change notification settings - Fork 911
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'origin/master' into feat/oneConnectionN…
…otebook
- Loading branch information
Showing
1,600 changed files
with
104,088 additions
and
29,115 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
blank_issues_enabled: false |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
disturl "https://atom.io/download/electron" | ||
target "6.0.12" | ||
target "6.1.5" | ||
runtime "electron" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
/*--------------------------------------------------------------------------------------------- | ||
* Copyright (c) Microsoft Corporation. All rights reserved. | ||
* Licensed under the Source EULA. See License.txt in the project root for license information. | ||
*--------------------------------------------------------------------------------------------*/ | ||
|
||
'use strict'; | ||
|
||
import * as fs from 'fs'; | ||
import { Readable } from 'stream'; | ||
import * as crypto from 'crypto'; | ||
import * as azure from 'azure-storage'; | ||
import * as mime from 'mime'; | ||
import { CosmosClient } from '@azure/cosmos'; | ||
|
||
interface Asset { | ||
platform: string; | ||
type: string; | ||
url: string; | ||
mooncakeUrl?: string; | ||
hash: string; | ||
sha256hash: string; | ||
size: number; | ||
supportsFastUpdate?: boolean; | ||
} | ||
|
||
if (process.argv.length !== 6) { | ||
console.error('Usage: node createAsset.js PLATFORM TYPE NAME FILE'); | ||
process.exit(-1); | ||
} | ||
|
||
function hashStream(hashName: string, stream: Readable): Promise<string> { | ||
return new Promise<string>((c, e) => { | ||
const shasum = crypto.createHash(hashName); | ||
|
||
stream | ||
.on('data', shasum.update.bind(shasum)) | ||
.on('error', e) | ||
.on('close', () => c(shasum.digest('hex'))); | ||
}); | ||
} | ||
|
||
async function doesAssetExist(blobService: azure.BlobService, quality: string, blobName: string): Promise<boolean | undefined> { | ||
const existsResult = await new Promise<azure.BlobService.BlobResult>((c, e) => blobService.doesBlobExist(quality, blobName, (err, r) => err ? e(err) : c(r))); | ||
return existsResult.exists; | ||
} | ||
|
||
async function uploadBlob(blobService: azure.BlobService, quality: string, blobName: string, file: string): Promise<void> { | ||
const blobOptions: azure.BlobService.CreateBlockBlobRequestOptions = { | ||
contentSettings: { | ||
contentType: mime.lookup(file), | ||
cacheControl: 'max-age=31536000, public' | ||
} | ||
}; | ||
|
||
await new Promise((c, e) => blobService.createBlockBlobFromLocalFile(quality, blobName, file, blobOptions, err => err ? e(err) : c())); | ||
} | ||
|
||
function getEnv(name: string): string { | ||
const result = process.env[name]; | ||
|
||
if (typeof result === 'undefined') { | ||
throw new Error('Missing env: ' + name); | ||
} | ||
|
||
return result; | ||
} | ||
|
||
async function main(): Promise<void> { | ||
const [, , platform, type, name, file] = process.argv; | ||
const quality = getEnv('VSCODE_QUALITY'); | ||
const commit = getEnv('BUILD_SOURCEVERSION'); | ||
|
||
console.log('Creating asset...'); | ||
|
||
const stat = await new Promise<fs.Stats>((c, e) => fs.stat(file, (err, stat) => err ? e(err) : c(stat))); | ||
const size = stat.size; | ||
|
||
console.log('Size:', size); | ||
|
||
const stream = fs.createReadStream(file); | ||
const [sha1hash, sha256hash] = await Promise.all([hashStream('sha1', stream), hashStream('sha256', stream)]); | ||
|
||
console.log('SHA1:', sha1hash); | ||
console.log('SHA256:', sha256hash); | ||
|
||
const blobName = commit + '/' + name; | ||
const storageAccount = process.env['AZURE_STORAGE_ACCOUNT_2']!; | ||
|
||
const blobService = azure.createBlobService(storageAccount, process.env['AZURE_STORAGE_ACCESS_KEY_2']!) | ||
.withFilter(new azure.ExponentialRetryPolicyFilter(20)); | ||
|
||
const blobExists = await doesAssetExist(blobService, quality, blobName); | ||
|
||
if (blobExists) { | ||
console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`); | ||
return; | ||
} | ||
|
||
console.log('Uploading blobs to Azure storage...'); | ||
|
||
await uploadBlob(blobService, quality, blobName, file); | ||
|
||
console.log('Blobs successfully uploaded.'); | ||
|
||
const asset: Asset = { | ||
platform, | ||
type, | ||
url: `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`, | ||
hash: sha1hash, | ||
sha256hash, | ||
size | ||
}; | ||
|
||
// Remove this if we ever need to rollback fast updates for windows | ||
if (/win32/.test(platform)) { | ||
asset.supportsFastUpdate = true; | ||
} | ||
|
||
console.log('Asset:', JSON.stringify(asset, null, ' ')); | ||
|
||
const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] }); | ||
const scripts = client.database('builds').container(quality).scripts; | ||
await scripts.storedProcedure('createAsset').execute('', [commit, asset, true]); | ||
} | ||
|
||
main().then(() => { | ||
console.log('Asset successfully created'); | ||
process.exit(0); | ||
}, err => { | ||
console.error(err); | ||
process.exit(1); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/*--------------------------------------------------------------------------------------------- | ||
* Copyright (c) Microsoft Corporation. All rights reserved. | ||
* Licensed under the Source EULA. See License.txt in the project root for license information. | ||
*--------------------------------------------------------------------------------------------*/ | ||
|
||
'use strict'; | ||
|
||
import { CosmosClient } from '@azure/cosmos'; | ||
|
||
if (process.argv.length !== 3) { | ||
console.error('Usage: node createBuild.js VERSION'); | ||
process.exit(-1); | ||
} | ||
|
||
function getEnv(name: string): string { | ||
const result = process.env[name]; | ||
|
||
if (typeof result === 'undefined') { | ||
throw new Error('Missing env: ' + name); | ||
} | ||
|
||
return result; | ||
} | ||
|
||
async function main(): Promise<void> { | ||
const [, , _version] = process.argv; | ||
const quality = getEnv('VSCODE_QUALITY'); | ||
const commit = getEnv('BUILD_SOURCEVERSION'); | ||
const queuedBy = getEnv('BUILD_QUEUEDBY'); | ||
const sourceBranch = getEnv('BUILD_SOURCEBRANCH'); | ||
const version = _version + (quality === 'stable' ? '' : `-${quality}`); | ||
|
||
console.log('Creating build...'); | ||
console.log('Quality:', quality); | ||
console.log('Version:', version); | ||
console.log('Commit:', commit); | ||
|
||
const build = { | ||
id: commit, | ||
timestamp: (new Date()).getTime(), | ||
version, | ||
isReleased: false, | ||
sourceBranch, | ||
queuedBy, | ||
assets: [], | ||
updates: {} | ||
}; | ||
|
||
const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] }); | ||
const scripts = client.database('builds').container(quality).scripts; | ||
await scripts.storedProcedure('createBuild').execute('', [{ ...build, _partitionKey: '' }]); | ||
} | ||
|
||
main().then(() => { | ||
console.log('Build successfully created'); | ||
process.exit(0); | ||
}, err => { | ||
console.error(err); | ||
process.exit(1); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/*--------------------------------------------------------------------------------------------- | ||
* Copyright (c) Microsoft Corporation. All rights reserved. | ||
* Licensed under the Source EULA. See License.txt in the project root for license information. | ||
*--------------------------------------------------------------------------------------------*/ | ||
|
||
'use strict'; | ||
|
||
import { CosmosClient } from '@azure/cosmos'; | ||
|
||
function getEnv(name: string): string { | ||
const result = process.env[name]; | ||
|
||
if (typeof result === 'undefined') { | ||
throw new Error('Missing env: ' + name); | ||
} | ||
|
||
return result; | ||
} | ||
|
||
interface Config { | ||
id: string; | ||
frozen: boolean; | ||
} | ||
|
||
function createDefaultConfig(quality: string): Config { | ||
return { | ||
id: quality, | ||
frozen: false | ||
}; | ||
} | ||
|
||
async function getConfig(client: CosmosClient, quality: string): Promise<Config> { | ||
const query = `SELECT TOP 1 * FROM c WHERE c.id = "${quality}"`; | ||
|
||
const res = await client.database('builds').container('config').items.query(query).fetchAll(); | ||
|
||
if (res.resources.length === 0) { | ||
return createDefaultConfig(quality); | ||
} | ||
|
||
return res.resources[0] as Config; | ||
} | ||
|
||
async function main(): Promise<void> { | ||
const commit = getEnv('BUILD_SOURCEVERSION'); | ||
const quality = getEnv('VSCODE_QUALITY'); | ||
|
||
const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] }); | ||
const config = await getConfig(client, quality); | ||
|
||
console.log('Quality config:', config); | ||
|
||
if (config.frozen) { | ||
console.log(`Skipping release because quality ${quality} is frozen.`); | ||
return; | ||
} | ||
|
||
console.log(`Releasing build ${commit}...`); | ||
|
||
const scripts = client.database('builds').container(quality).scripts; | ||
await scripts.storedProcedure('releaseBuild').execute('', [commit]); | ||
} | ||
|
||
main().then(() => { | ||
console.log('Build successfully released'); | ||
process.exit(0); | ||
}, err => { | ||
console.error(err); | ||
process.exit(1); | ||
}); |
Oops, something went wrong.