From 006eedd3a18ec0f7bce811f74f3b306b766bbf28 Mon Sep 17 00:00:00 2001 From: Cory Rivera Date: Fri, 19 Jan 2018 16:49:06 -0800 Subject: [PATCH] Update vscode build publishing scripts for use with sqlops (#518) * Modify publishing scripts and gulp mixin task for publishing update packages. * Change publish script so that mooncake publishing runs only if the required credentials are provided. --- build/gulpfile.mixin.js | 57 +++++++------------------------------ build/tfs/common/publish.ts | 36 ++++++++++++----------- 2 files changed, 29 insertions(+), 64 deletions(-) diff --git a/build/gulpfile.mixin.js b/build/gulpfile.mixin.js index 6aff18e9a1..5df471c6ea 100644 --- a/build/gulpfile.mixin.js +++ b/build/gulpfile.mixin.js @@ -6,64 +6,27 @@ 'use strict'; const gulp = require('gulp'); -const json = require('gulp-json-editor'); -const buffer = require('gulp-buffer'); -const filter = require('gulp-filter'); -const es = require('event-stream'); -const util = require('./lib/util'); -const remote = require('gulp-remote-src'); -const zip = require('gulp-vinyl-zip'); -const assign = require('object-assign'); -const pkg = require('../package.json'); +const jeditor = require('gulp-json-editor'); gulp.task('mixin', function () { - const repo = process.env['VSCODE_MIXIN_REPO']; - - if (!repo) { - console.log('Missing VSCODE_MIXIN_REPO, skipping mixin'); + const updateUrl = process.env['SQLOPS_UPDATEURL']; + if (!updateUrl) { + console.log('Missing SQLOPS_UPDATEURL, skipping mixin'); return; } const quality = process.env['VSCODE_QUALITY']; - if (!quality) { console.log('Missing VSCODE_QUALITY, skipping mixin'); return; } - const url = `https://github.com/${repo}/archive/${pkg.distro}.zip`; - const opts = { base: url }; - const username = process.env['VSCODE_MIXIN_USERNAME']; - const password = process.env['VSCODE_MIXIN_PASSWORD']; + let newValues = { + "updateUrl": updateUrl, + "quality": quality + }; - if (username || password) { - opts.auth = { user: username || '', pass: password || '' }; - } - - console.log('Mixing in sources from \'' + url + '\':'); - - let all = remote('', opts) - .pipe(zip.src()) - .pipe(filter(function (f) { return !f.isDirectory(); })) - .pipe(util.rebase(1)); - - if (quality) { - const productJsonFilter = filter('product.json', { restore: true }); - const mixin = all - .pipe(filter(['quality/' + quality + '/**'])) - .pipe(util.rebase(2)) - .pipe(productJsonFilter) - .pipe(buffer()) - .pipe(json(o => assign({}, require('../product.json'), o))) - .pipe(productJsonFilter.restore); - - all = es.merge(mixin); - } - - return all - .pipe(es.mapSync(function (f) { - console.log(f.relative); - return f; - })) + return gulp.src('./product.json') + .pipe(jeditor(newValues)) .pipe(gulp.dest('.')); }); \ No newline at end of file diff --git a/build/tfs/common/publish.ts b/build/tfs/common/publish.ts index 5c43f4d074..8fb87733a2 100644 --- a/build/tfs/common/publish.ts +++ b/build/tfs/common/publish.ts @@ -183,21 +183,9 @@ async function publish(commit: string, quality: string, platform: string, type: const blobService = azure.createBlobService(storageAccount, process.env['AZURE_STORAGE_ACCESS_KEY_2']) .withFilter(new azure.ExponentialRetryPolicyFilter(20)); - const mooncakeBlobService = azure.createBlobService(storageAccount, process.env['MOONCAKE_STORAGE_ACCESS_KEY'], `${storageAccount}.blob.core.chinacloudapi.cn`) - .withFilter(new azure.ExponentialRetryPolicyFilter(20)); + await assertContainer(blobService, quality); - // mooncake is fussy and far away, this is needed! - mooncakeBlobService.defaultClientRequestTimeoutInMs = 10 * 60 * 1000; - - await Promise.all([ - assertContainer(blobService, quality), - assertContainer(mooncakeBlobService, quality) - ]); - - const [blobExists, moooncakeBlobExists] = await Promise.all([ - doesAssetExist(blobService, quality, blobName), - doesAssetExist(mooncakeBlobService, quality, blobName) - ]); + const blobExists = await doesAssetExist(blobService, quality, blobName); const promises = []; @@ -205,8 +193,22 @@ async function publish(commit: string, quality: string, platform: string, type: promises.push(uploadBlob(blobService, quality, blobName, file)); } - if (!moooncakeBlobExists) { - promises.push(uploadBlob(mooncakeBlobService, quality, blobName, file)); + if (process.env['MOONCAKE_STORAGE_ACCESS_KEY']) { + const mooncakeBlobService = azure.createBlobService(storageAccount, process.env['MOONCAKE_STORAGE_ACCESS_KEY'], `${storageAccount}.blob.core.chinacloudapi.cn`) + .withFilter(new azure.ExponentialRetryPolicyFilter(20)); + + // mooncake is fussy and far away, this is needed! + mooncakeBlobService.defaultClientRequestTimeoutInMs = 10 * 60 * 1000; + + await assertContainer(mooncakeBlobService, quality); + + const mooncakeBlobExists = await doesAssetExist(mooncakeBlobService, quality, blobName); + + if (!mooncakeBlobExists) { + promises.push(uploadBlob(mooncakeBlobService, quality, blobName, file)); + } + } else { + console.log('Skipping Mooncake publishing.'); } if (promises.length === 0) { @@ -228,7 +230,7 @@ async function publish(commit: string, quality: string, platform: string, type: platform: platform, type: type, url: `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`, - mooncakeUrl: `${process.env['MOONCAKE_CDN_URL']}/${quality}/${blobName}`, + mooncakeUrl: process.env['MOONCAKE_CDN_URL'] ? `${process.env['MOONCAKE_CDN_URL']}/${quality}/${blobName}` : undefined, hash: sha1hash, sha256hash, size