// 执行脚本 taro build --type h5 ,并且把环境变量 TARO_API_URL 传递过去 const { execSync } = require('child_process'); const fs = require('fs'); const path = require('path'); function isCI() { const isCI = process.env.CI === 'true' || !!process.env.GITHUB_ACTIONS; return isCI; } function getGhToken() { // 1. 在 GitHub Actions 里官方会注入 ACTIONS_RUNTIME_TOKEN 或 CI=true const isCI = process.env.CI === 'true' || !!process.env.GITHUB_ACTIONS; if (isCI) { console.log(`you are running in ic and the GH_token is ${process.env.GH_TOKEN}`) // CI 环境:直接拿 secret(工作流里必须 env:{GH_TOKEN:${{secrets.GH_TOKEN}}}) const token = process.env.GH_TOKEN; if (!token) throw new Error('CI 环境缺少 GH_TOKEN,请检查 workflow yaml'); return token; } // 2. 本地开发:优先读本地 ~/.gh-token(自己放的),没有再读环境变量,还没有就空 try { return readFileSync(join(require('os').homedir(), '.gh-token'), 'utf8').trim(); } catch { return process.env.GH_TOKEN || ''; } } const TARO_API_URL = 'http://localhost:6001'; // 远程地址,这里写死,要做成部署后可配置 const TARO_MQTT_URL = 'ws://localhost:8083/mqtt'; const rootDir = path.join(__dirname, '..'); // 项目根目录 try { console.log(`复制arm平台必须构建文件taro.linux-arm64-gnu.node到目标位置`); fs.copyFileSync( path.join(rootDir, '.build', 'taro.linux-arm64-gnu.node'), path.join(rootDir, 'node_modules', '@tarojs', 'binding', 'taro.linux-arm64-gnu.node') ); console.log(`复制arm平台必须构建文件taro.linux-arm64-gnu.node到目标位置===完成`); } catch (err) { console.error('复制arm平台构建所需文件时失败 :', err.message); process.exit(1); } execSync(`npm run build:h5`, { cwd: rootDir, stdio: 'inherit', env: { ...process.env, TARO_API_URL, TARO_MQTT_URL } }, (error, stdout, stderr) => { if (error) { console.error(`Error executing command: ${error.message}`); return; } if (stderr) { console.error(`Command stderr: ${stderr}`); return; } console.log(`Command stdout: ${stdout}`); }); function run(cmd, env = {}) { console.log(`\n>>> ${cmd}`); try { execSync(cmd, { stdio: 'inherit', cwd: process.cwd(), env: env }); } catch (e) { console.error(`命令失败: ${cmd}`, e.message); exit(1); } } try { // run('npm run build:h5'); // run('npm run prebuild:arm:linux'); const GH_TOKEN = getGhToken(); // CI/本地 都能拿到合适值 // run('npm run build:electron:win'); //ci 环境才使用 publish const cmd = isCI() ? 'npx electron-builder --config electron-builder.json --linux --publish always' : 'npm run build:electron:linux'; execSync(cmd, { stdio: 'inherit', cwd: process.cwd(), env: { ...process.env, GH_TOKEN } // 关键:仅追加 token,其他不动 }); console.log('\n✅ 全部构建完成'); } catch (err) { console.error('Failed to execute :', err.message); process.exit(1); }