scripts/utils/common_jobs.mjs (70 lines of code) (raw):

import path from 'node:path'; import fs from 'node:fs'; import { writeFile } from 'node:fs/promises'; // eslint-disable-next-line import/no-unresolved import { copy } from 'fs-extra/esm'; import * as glob from 'glob'; import { rimraf } from 'rimraf'; import { root, run } from './run_utils.mjs'; import { generateFont } from './generate_font.mjs'; import { prettyPrint } from './packages.mjs'; const prepareDistDirs = async env => { fs.mkdirSync(path.join(root, `dist-${env}`)); fs.mkdirSync(path.join(root, `dist-${env}/webviews`)); fs.mkdirSync(path.join(root, `dist-${env}/assets`)); }; const copyLanguageServerAssets = env => { const platformDirectory = env === 'desktop' ? 'node' : 'browser'; const basePath = path.join(root, 'node_modules/@gitlab-org/gitlab-lsp/out'); const platformAssets = glob.sync( [ path.join(basePath, platformDirectory, '**', 'main-bundle.*'), path.join(basePath, '**', '*.wasm'), path.join(basePath, 'webviews', '**', '*.*'), ], { windowsPathsNoEscape: true, }, ); const copyPromises = platformAssets.map(asset => copy(asset, path.join(`dist-${env}/assets/language-server`, asset.replace(basePath, ''))), ); return Promise.all(copyPromises); }; export const copyStaticProjectFiles = env => { const files = ['.vscodeignore', 'README.md', 'LICENSE', 'CHANGELOG.md']; files.forEach(file => { fs.copyFileSync(path.join(root, file), path.join(root, `dist-${env}/${file}`)); }); }; export async function cleanBuild(env) { await rimraf(`dist-${env}`); } export async function prepareWebviews(webviews, env) { const targets = Object.keys(webviews); return Promise.all( targets.map(async target => { await run('npm', ['run', '--prefix', path.join(root, `webviews/${target}`), 'build']); webviews[target].forEach(async webview => { await copy( path.join(root, `webviews/${target}/dist/${webview}`), path.join(root, `dist-${env}/webviews/${webview}`), ); }); }), ); } export async function generateAssets(packageJson, env) { return Promise.all([ copy(path.join(root, 'src/assets'), path.join(root, `dist-${env}/assets`)), copyLanguageServerAssets(env), generateFont(packageJson, `dist-${env}`), ]); } export async function writePackageJson(packageJson, env) { await writeFile(path.join(root, `dist-${env}/package.json`), prettyPrint(packageJson)); } export async function commonJobs(env) { await cleanBuild(env); await prepareDistDirs(env); }