-
Notifications
You must be signed in to change notification settings - Fork 29.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add publishing of webview content to pipeline (#80069)
* Experimental publish step of webview contents * Move webview publish into product compile * Move test step first * More script after install * Move script after build * Debug * Add env var * Don't log env
- Loading branch information
Showing
3 changed files
with
102 additions
and
0 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,9 @@ | ||
#!/usr/bin/env bash | ||
set -e | ||
REPO="$(pwd)" | ||
|
||
# Publish webview contents | ||
PACKAGEJSON="$REPO/package.json" | ||
VERSION=$(node -p "require(\"$PACKAGEJSON\").version") | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
joaomoreno
Member
|
||
|
||
node build/azure-pipelines/common/publish-webview.js "$REPO/src/vs/workbench/contrib/webview/browser/pre/" |
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,87 @@ | ||
/*--------------------------------------------------------------------------------------------- | ||
* Copyright (c) Microsoft Corporation. All rights reserved. | ||
* Licensed under the MIT License. See License.txt in the project root for license information. | ||
*--------------------------------------------------------------------------------------------*/ | ||
|
||
import * as azure from 'azure-storage'; | ||
import * as mime from 'mime'; | ||
import * as minimist from 'minimist'; | ||
import { basename, join } from 'path'; | ||
|
||
const fileNames = [ | ||
'fake.html', | ||
'host.js', | ||
'index.html', | ||
'main.js', | ||
'service-worker.js' | ||
]; | ||
|
||
async function assertContainer(blobService: azure.BlobService, container: string): Promise<void> { | ||
await new Promise((c, e) => blobService.createContainerIfNotExists(container, { publicAccessLevel: 'blob' }, err => err ? e(err) : c())); | ||
} | ||
|
||
async function doesBlobExist(blobService: azure.BlobService, container: string, blobName: string): Promise<boolean | undefined> { | ||
const existsResult = await new Promise<azure.BlobService.BlobResult>((c, e) => blobService.doesBlobExist(container, blobName, (err, r) => err ? e(err) : c(r))); | ||
return existsResult.exists; | ||
} | ||
|
||
async function uploadBlob(blobService: azure.BlobService, container: 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(container, blobName, file, blobOptions, err => err ? e(err) : c())); | ||
} | ||
|
||
async function publish(commit: string, files: readonly string[]): Promise<void> { | ||
|
||
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 = 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(): void { | ||
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 => 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(); |
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
@mjbvz Are these two lines necessary?