mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
175 lines
4.6 KiB
JavaScript
175 lines
4.6 KiB
JavaScript
import * as esbuild from "esbuild"
|
|
import * as fs from "fs"
|
|
import * as path from "path"
|
|
import { fileURLToPath } from "url"
|
|
|
|
import { getGitSha, copyPaths, copyLocales, copyWasms, generatePackageJson } from "@roo-code/build"
|
|
|
|
const __filename = fileURLToPath(import.meta.url)
|
|
const __dirname = path.dirname(__filename)
|
|
|
|
async function main() {
|
|
const name = "extension-nightly"
|
|
const production = process.argv.includes("--production")
|
|
const minify = production
|
|
const sourcemap = !production
|
|
|
|
const overrideJson = JSON.parse(fs.readFileSync(path.join(__dirname, "package.nightly.json"), "utf8"))
|
|
console.log(`[${name}] name: ${overrideJson.name}`)
|
|
console.log(`[${name}] version: ${overrideJson.version}`)
|
|
|
|
const gitSha = getGitSha()
|
|
console.log(`[${name}] gitSha: ${gitSha}`)
|
|
|
|
/**
|
|
* @type {import('esbuild').BuildOptions}
|
|
*/
|
|
const buildOptions = {
|
|
bundle: true,
|
|
minify,
|
|
sourcemap,
|
|
logLevel: "silent",
|
|
format: "cjs",
|
|
sourcesContent: false,
|
|
platform: "node",
|
|
define: {
|
|
"process.env.PKG_NAME": '"roo-code-nightly"',
|
|
"process.env.PKG_VERSION": `"${overrideJson.version}"`,
|
|
"process.env.PKG_OUTPUT_CHANNEL": '"Roo-Code-Nightly"',
|
|
...(gitSha ? { "process.env.PKG_SHA": `"${gitSha}"` } : {}),
|
|
},
|
|
}
|
|
|
|
const srcDir = path.join(__dirname, "..", "..", "src")
|
|
const buildDir = path.join(__dirname, "build")
|
|
const distDir = path.join(buildDir, "dist")
|
|
|
|
console.log(`[${name}] srcDir: ${srcDir}`)
|
|
console.log(`[${name}] buildDir: ${buildDir}`)
|
|
console.log(`[${name}] distDir: ${distDir}`)
|
|
|
|
// Clean build directory before starting new build
|
|
if (fs.existsSync(buildDir)) {
|
|
console.log(`[${name}] Cleaning build directory: ${buildDir}`)
|
|
fs.rmSync(buildDir, { recursive: true, force: true })
|
|
}
|
|
|
|
/**
|
|
* @type {import('esbuild').Plugin[]}
|
|
*/
|
|
const plugins = [
|
|
{
|
|
name: "copyPaths",
|
|
setup(build) {
|
|
build.onEnd(() => {
|
|
copyPaths(
|
|
[
|
|
["../README.md", "README.md"],
|
|
["../CHANGELOG.md", "CHANGELOG.md"],
|
|
["../LICENSE", "LICENSE"],
|
|
["../.env", ".env", { optional: true }],
|
|
[".vscodeignore", ".vscodeignore"],
|
|
["assets", "assets"],
|
|
["integrations", "integrations"],
|
|
["node_modules/vscode-material-icons/generated", "assets/vscode-material-icons"],
|
|
["../webview-ui/audio", "webview-ui/audio"],
|
|
],
|
|
srcDir,
|
|
buildDir,
|
|
)
|
|
})
|
|
},
|
|
},
|
|
{
|
|
name: "generatePackageJson",
|
|
setup(build) {
|
|
build.onEnd(() => {
|
|
const packageJson = JSON.parse(fs.readFileSync(path.join(srcDir, "package.json"), "utf8"))
|
|
|
|
const generatedPackageJson = generatePackageJson({
|
|
packageJson,
|
|
overrideJson,
|
|
substitution: ["roo-cline", "roo-code-nightly"],
|
|
})
|
|
|
|
fs.writeFileSync(path.join(buildDir, "package.json"), JSON.stringify(generatedPackageJson, null, 2))
|
|
console.log(`[generatePackageJson] Generated package.json`)
|
|
|
|
let count = 0
|
|
|
|
fs.readdirSync(path.join(srcDir)).forEach((file) => {
|
|
if (file.startsWith("package.nls")) {
|
|
fs.copyFileSync(path.join(srcDir, file), path.join(buildDir, file))
|
|
count++
|
|
}
|
|
})
|
|
|
|
console.log(`[generatePackageJson] Copied ${count} package.nls*.json files to ${buildDir}`)
|
|
|
|
const nlsPkg = JSON.parse(fs.readFileSync(path.join(srcDir, "package.nls.json"), "utf8"))
|
|
|
|
const nlsNightlyPkg = JSON.parse(
|
|
fs.readFileSync(path.join(__dirname, "package.nls.nightly.json"), "utf8"),
|
|
)
|
|
|
|
fs.writeFileSync(
|
|
path.join(buildDir, "package.nls.json"),
|
|
JSON.stringify({ ...nlsPkg, ...nlsNightlyPkg }, null, 2),
|
|
)
|
|
|
|
console.log(`[generatePackageJson] Generated package.nls.json`)
|
|
})
|
|
},
|
|
},
|
|
{
|
|
name: "copyWasms",
|
|
setup(build) {
|
|
build.onEnd(() => copyWasms(srcDir, distDir))
|
|
},
|
|
},
|
|
{
|
|
name: "copyLocales",
|
|
setup(build) {
|
|
build.onEnd(() => copyLocales(srcDir, distDir))
|
|
},
|
|
},
|
|
]
|
|
|
|
/**
|
|
* @type {import('esbuild').BuildOptions}
|
|
*/
|
|
const extensionBuildOptions = {
|
|
...buildOptions,
|
|
plugins,
|
|
entryPoints: [path.join(srcDir, "extension.ts")],
|
|
outfile: path.join(distDir, "extension.js"),
|
|
external: ["vscode"],
|
|
}
|
|
|
|
/**
|
|
* @type {import('esbuild').BuildOptions}
|
|
*/
|
|
const workerBuildOptions = {
|
|
...buildOptions,
|
|
entryPoints: [path.join(srcDir, "workers", "countTokens.ts")],
|
|
outdir: path.join(distDir, "workers"),
|
|
}
|
|
|
|
const [extensionBuildContext, workerBuildContext] = await Promise.all([
|
|
esbuild.context(extensionBuildOptions),
|
|
esbuild.context(workerBuildOptions),
|
|
])
|
|
|
|
await Promise.all([
|
|
extensionBuildContext.rebuild(),
|
|
extensionBuildContext.dispose(),
|
|
|
|
workerBuildContext.rebuild(),
|
|
workerBuildContext.dispose(),
|
|
])
|
|
}
|
|
|
|
main().catch((e) => {
|
|
console.error(e)
|
|
process.exit(1)
|
|
})
|