| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import * as child_process from 'child_process' |
| import * as nodefs from 'fs' |
| import * as path from 'path' |
| import { downloadLanguageServer } from './lspArtifact' |
|
|
| function parseArgs() { |
| |
| |
| |
| |
| |
| |
|
|
| const args: { [key: string]: any } = { |
| |
| debug: false, |
| |
| skipClean: false, |
| feature: '', |
| } |
|
|
| const givenArgs = process.argv.slice(2) |
| const validOptions = ['--debug', '--no-clean', '--feature'] |
| const expectValue = ['--feature'] |
|
|
| for (let i = 0; i < givenArgs.length; i++) { |
| const a = givenArgs[i] |
| const argName = a.replace(/^-+/, '') |
| if (!validOptions.includes(a)) { |
| throw Error(`invalid argument: ${a}`) |
| } |
| if (expectValue.includes(a)) { |
| i++ |
| const val = givenArgs[i] |
| if (val === undefined) { |
| throw Error(`missing value for arg: ${a}`) |
| } |
| args[argName] = val |
| } else { |
| args[argName] = true |
| } |
| } |
|
|
| return args |
| } |
|
|
| |
| |
| |
| |
| function isRelease(): boolean { |
| const tag = child_process.execFileSync('git', ['tag', '-l', '--contains', 'HEAD']).toString() |
| return !!tag?.match(/v\d+\.\d+\.\d+/) |
| } |
|
|
| |
| |
| |
| function isBeta(): boolean { |
| try { |
| |
| |
| |
| const betaUrl = require(path.resolve('./src/dev/config')).betaUrl |
| return !!betaUrl |
| } catch { |
| return false |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| function getVersionSuffix(feature: string, debug: boolean): string { |
| if (isRelease()) { |
| return '' |
| } |
| const debugSuffix = debug ? '-debug' : '' |
| const featureSuffix = feature === '' ? '' : `-${feature}` |
| const commitId = child_process.execFileSync('git', ['rev-parse', '--short=7', 'HEAD']).toString().trim() |
| |
| const commitSuffix = commitId ? `-g${commitId}` : '' |
| return `${debugSuffix}${featureSuffix}${commitSuffix}` |
| } |
|
|
| async function main() { |
| const args = parseArgs() |
| |
| |
| const packageJsonFile = './package.json' |
| const backupJsonFile = `${packageJsonFile}.package.bk` |
| const webpackConfigJsFile = '../webpack.base.config.js' |
| const backupWebpackConfigFile = `${webpackConfigJsFile}.package.bk` |
|
|
| if (!nodefs.existsSync(packageJsonFile)) { |
| throw new Error(`package.json not found, cannot package this directory: ${process.cwd()}`) |
| } |
|
|
| let release = true |
|
|
| try { |
| release = isRelease() |
|
|
| if (release && isBeta()) { |
| throw new Error('Cannot package VSIX as both a release and a beta simultaneously') |
| } |
| |
| nodefs.copyFileSync(packageJsonFile, backupJsonFile) |
| const packageJson = JSON.parse(nodefs.readFileSync(packageJsonFile, { encoding: 'utf-8' })) |
|
|
| if (!release || args.debug) { |
| const versionSuffix = getVersionSuffix(args.feature, args.debug) |
| const version = packageJson.version |
| if (isBeta()) { |
| |
| packageJson.version = `99.0.0${versionSuffix}` |
| } else { |
| packageJson.version = version.replace('-SNAPSHOT', versionSuffix) |
| } |
|
|
| if (args.skipClean) { |
| |
| const prepublish = packageJson.scripts['vscode:prepublish'] |
| const replaced = prepublish.replace('npm run clean', 'echo "Skipped clean"') |
| packageJson.scripts['vscode:prepublish'] = replaced |
| } |
|
|
| if (args.debug) { |
| nodefs.copyFileSync(webpackConfigJsFile, backupWebpackConfigFile) |
| const webpackConfigJs = nodefs.readFileSync(webpackConfigJsFile, { encoding: 'utf-8' }) |
| nodefs.writeFileSync(webpackConfigJsFile, webpackConfigJs.replace(/minimize: true/, 'minimize: false')) |
| } |
| } |
|
|
| nodefs.writeFileSync(packageJsonFile, JSON.stringify(packageJson, undefined, ' ')) |
|
|
| |
| if (packageJson.name === 'amazon-q-vscode') { |
| await downloadLanguageServer() |
| } |
|
|
| child_process.execFileSync( |
| 'vsce', |
| [ |
| 'package', |
| '--ignoreFile', |
| '../.vscodeignore.packages', |
| |
| |
| |
| |
| |
| |
| '--no-dependencies', |
| ], |
| { |
| stdio: 'inherit', |
| shell: process.platform === 'win32', |
| } |
| ) |
|
|
| console.log(`VSIX Version: ${packageJson.version}`) |
|
|
| |
| |
| |
| const vsixName = `${packageJson.name}-${packageJson.version}.vsix` |
| nodefs.renameSync(vsixName, `../../${vsixName}`) |
| } catch (e) { |
| console.log(e) |
| throw Error('package.ts: failed') |
| } finally { |
| |
| nodefs.copyFileSync(backupJsonFile, packageJsonFile) |
| nodefs.unlinkSync(backupJsonFile) |
| if (args.debug) { |
| nodefs.copyFileSync(backupWebpackConfigFile, webpackConfigJsFile) |
| nodefs.unlinkSync(backupWebpackConfigFile) |
| } |
| } |
| } |
|
|
| main() |
|
|