Path: blob/main/build/azure-pipelines/common/releaseBuild.ts
3520 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { ClientAssertionCredential } from '@azure/identity';6import { CosmosClient } from '@azure/cosmos';7import { retry } from './retry';89function getEnv(name: string): string {10const result = process.env[name];1112if (typeof result === 'undefined') {13throw new Error('Missing env: ' + name);14}1516return result;17}1819interface Config {20id: string;21frozen: boolean;22}2324function createDefaultConfig(quality: string): Config {25return {26id: quality,27frozen: false28};29}3031async function getConfig(client: CosmosClient, quality: string): Promise<Config> {32const query = `SELECT TOP 1 * FROM c WHERE c.id = "${quality}"`;3334const res = await client.database('builds').container('config').items.query(query).fetchAll();3536if (res.resources.length === 0) {37return createDefaultConfig(quality);38}3940return res.resources[0] as Config;41}4243async function main(force: boolean): Promise<void> {44const commit = getEnv('BUILD_SOURCEVERSION');45const quality = getEnv('VSCODE_QUALITY');4647const aadCredentials = new ClientAssertionCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, () => Promise.resolve(process.env['AZURE_ID_TOKEN']!));48const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, aadCredentials });4950if (!force) {51const config = await getConfig(client, quality);5253console.log('Quality config:', config);5455if (config.frozen) {56console.log(`Skipping release because quality ${quality} is frozen.`);57return;58}59}6061console.log(`Releasing build ${commit}...`);6263const scripts = client.database('builds').container(quality).scripts;64await retry(() => scripts.storedProcedure('releaseBuild').execute('', [commit]));65}6667const [, , force] = process.argv;6869console.log(process.argv);7071main(/^true$/i.test(force)).then(() => {72console.log('Build successfully released');73process.exit(0);74}, err => {75console.error(err);76process.exit(1);77});787980