"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); const azure = require("azure-storage"); const mime = require("mime"); const minimist = require("minimist"); const path_1 = require("path"); const fileNames = [ 'fake.html', 'host.js', 'index.html', 'main.js', 'service-worker.js' ]; async function assertContainer(blobService, container) { await new Promise((c, e) => blobService.createContainerIfNotExists(container, { publicAccessLevel: 'blob' }, err => err ? e(err) : c())); } async function doesBlobExist(blobService, container, blobName) { const existsResult = await new Promise((c, e) => blobService.doesBlobExist(container, blobName, (err, r) => err ? e(err) : c(r))); return existsResult.exists; } async function uploadBlob(blobService, container, blobName, file) { const blobOptions = { contentSettings: { contentType: mime.lookup(file), cacheControl: 'max-age=31536000, public' } }; await new Promise((c, e) => blobService.createBlockBlobFromLocalFile(container, blobName, file, blobOptions, err => err ? e(err) : c())); } async function publish(commit, files) { console.log('Publishing...'); console.log('Commit:', commit); const storageAccount = process.env['AZURE_WEBVIEW_STORAGE_ACCOUNT']; const blobService = azure.createBlobService(storageAccount, process.env['AZURE_WEBVIEW_STORAGE_ACCESS_KEY']) .withFilter(new azure.ExponentialRetryPolicyFilter(20)); await assertContainer(blobService, commit); for (const file of files) { const blobName = path_1.basename(file); const blobExists = await doesBlobExist(blobService, commit, blobName); if (blobExists) { console.log(`Blob ${commit}, ${blobName} already exists, not publishing again.`); continue; } console.log('Uploading blob to Azure storage...'); await uploadBlob(blobService, commit, blobName, file); } console.log('Blobs successfully uploaded.'); } function main() { const commit = process.env['BUILD_SOURCEVERSION']; if (!commit) { console.warn('Skipping publish due to missing BUILD_SOURCEVERSION'); return; } const opts = minimist(process.argv.slice(2)); const [directory] = opts._; const files = fileNames.map(fileName => path_1.join(directory, fileName)); publish(commit, files).catch(err => { console.error(err); process.exit(1); }); } if (process.argv.length < 3) { console.error('Usage: node publish.js <directory>'); process.exit(-1); } main();