import { execFile } from "node:child_process"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { promisify } from "node:util"; import { resolveReleaseVersion } from "../release-version.mjs"; import { uploadReleaseAssets } from "./upload-release-assets.mjs"; const execFileAsync = promisify(execFile); export async function runReleaseTagPipeline(env = process.env) { const projectRoot = resolveProjectRoot(); const releaseVersion = resolveReleaseVersion(env); const publicBaseUrl = env.UPDATE_PUBLIC_BASE_URL ?? `https://wksgx-1343191620.cos.ap-nanjing.myqcloud.com/star-chart-search-enhancer/releases/${releaseVersion}`; console.log(`release version: ${releaseVersion}`); console.log("running build:release"); await runNpmScript("build:release", projectRoot, { ...env, EXTENSION_VERSION: releaseVersion }); console.log("running package-release"); await runNodeScript("scripts/package-release.mjs", projectRoot, { ...env, EXTENSION_VERSION: releaseVersion }); console.log("writing latest manifest"); await runNpmScript("write:latest", projectRoot, { ...env, EXTENSION_VERSION: releaseVersion, UPDATE_PUBLIC_BASE_URL: publicBaseUrl }); console.log("uploading release assets to COS"); await uploadReleaseAssets({ env: { ...env, EXTENSION_VERSION: releaseVersion }, projectRoot, releaseVersion }); } async function runNpmScript(scriptName, cwd, env) { await execFileAsync("npm", ["run", scriptName], { cwd, env, stdio: "inherit" }); } async function runNodeScript(scriptPath, cwd, env) { await execFileAsync("node", [scriptPath], { cwd, env, stdio: "inherit" }); } function resolveProjectRoot() { return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); } if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { await runReleaseTagPipeline(); }