Path: blob/main/build/azure-pipelines/distro/mixin-quality.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 fs from 'fs';6import path from 'path';78interface IBuiltInExtension {9readonly name: string;10readonly version: string;11readonly repo: string;12readonly metadata: any;13}1415interface OSSProduct {16readonly builtInExtensions: IBuiltInExtension[];17readonly webBuiltInExtensions?: IBuiltInExtension[];18}1920interface Product {21readonly builtInExtensions?: IBuiltInExtension[] | { 'include'?: IBuiltInExtension[]; 'exclude'?: string[] };22readonly webBuiltInExtensions?: IBuiltInExtension[];23}2425function log(...args: any[]): void {26console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);27}2829function main() {30const quality = process.env['VSCODE_QUALITY'];3132if (!quality) {33throw new Error('Missing VSCODE_QUALITY, skipping mixin');34}3536log(`Mixing in distro quality...`);3738const basePath = `.build/distro/mixin/${quality}`;3940for (const name of fs.readdirSync(basePath)) {41const distroPath = path.join(basePath, name);42const ossPath = path.relative(basePath, distroPath);4344if (ossPath === 'product.json') {45const distro = JSON.parse(fs.readFileSync(distroPath, 'utf8')) as Product;46const oss = JSON.parse(fs.readFileSync(ossPath, 'utf8')) as OSSProduct;47let builtInExtensions = oss.builtInExtensions;4849if (Array.isArray(distro.builtInExtensions)) {50log('Overwriting built-in extensions:', distro.builtInExtensions.map(e => e.name));5152builtInExtensions = distro.builtInExtensions;53} else if (distro.builtInExtensions) {54const include = distro.builtInExtensions['include'] ?? [];55const exclude = distro.builtInExtensions['exclude'] ?? [];5657log('OSS built-in extensions:', builtInExtensions.map(e => e.name));58log('Including built-in extensions:', include.map(e => e.name));59log('Excluding built-in extensions:', exclude);6061builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name));62builtInExtensions = [...builtInExtensions, ...include];6364log('Final built-in extensions:', builtInExtensions.map(e => e.name));65} else {66log('Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name));67}6869const result = { webBuiltInExtensions: oss.webBuiltInExtensions, ...distro, builtInExtensions };70fs.writeFileSync(ossPath, JSON.stringify(result, null, '\t'), 'utf8');71} else {72fs.cpSync(distroPath, ossPath, { force: true, recursive: true });73}7475log(distroPath, '✔︎');76}77}7879main();808182