training-update-apply-smoke-test.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. 'use strict';
  2. const assert = require('assert/strict');
  3. const fs = require('fs');
  4. const os = require('os');
  5. const path = require('path');
  6. const { runUpdateHelper } = require('../mcp/src/core/update-service');
  7. async function main() {
  8. const archive = path.resolve(String(process.env.QIWEI_UPDATE_TEST_ARCHIVE || '').trim());
  9. if (!archive || !fs.existsSync(archive)) {
  10. process.stdout.write(JSON.stringify({ status: 'skipped', reason: 'set QIWEI_UPDATE_TEST_ARCHIVE to a local Bun ZIP' }) + '\n');
  11. return;
  12. }
  13. const root = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-update-apply-'));
  14. try {
  15. fs.mkdirSync(path.join(root, 'outputs', 'runtime'), { recursive: true });
  16. fs.mkdirSync(path.join(root, 'knowledge'), { recursive: true });
  17. fs.writeFileSync(path.join(root, 'version.json'), JSON.stringify({ version: '0.5.2' }), 'utf8');
  18. fs.writeFileSync(path.join(root, '.env.local'), 'QIWEI_TEST_KEEP=1\n', 'utf8');
  19. fs.writeFileSync(path.join(root, 'knowledge', '客户资料.md'), 'keep-knowledge', 'utf8');
  20. fs.writeFileSync(path.join(root, 'outputs', 'runtime', 'keep.txt'), 'keep-output', 'utf8');
  21. fs.writeFileSync(path.join(root, 'qiwei.runtime.config.mjs'), 'export default {}\n', 'utf8');
  22. process.env.QIWEI_UPDATE_RESTART = '0';
  23. const result = await runUpdateHelper(['--archive', archive, '--package-root', root]);
  24. assert.equal(result.version, '0.5.3');
  25. assert.equal(fs.readFileSync(path.join(root, '.env.local'), 'utf8'), 'QIWEI_TEST_KEEP=1\n');
  26. assert.equal(fs.readFileSync(path.join(root, 'knowledge', '客户资料.md'), 'utf8'), 'keep-knowledge');
  27. assert.equal(fs.readFileSync(path.join(root, 'outputs', 'runtime', 'keep.txt'), 'utf8'), 'keep-output');
  28. assert.equal(fs.existsSync(path.join(root, 'qiwei.runtime.config.mjs')), true);
  29. process.stdout.write(JSON.stringify({ status: 'passed', checks: ['version-replaced', 'env-preserved', 'knowledge-preserved', 'outputs-preserved', 'runtime-config-preserved'] }, null, 2) + '\n');
  30. } finally {
  31. // Keep the temporary tree for inspection on Windows; recursive removal of
  32. // a freshly extracted 100 MB package can crash the host Node process.
  33. if (process.env.QIWEI_UPDATE_TEST_CLEANUP === '1') fs.rmSync(root, { recursive: true, force: true });
  34. }
  35. }
  36. main().catch(error => {
  37. process.stderr.write(JSON.stringify({ status: 'failed', message: error.message, stack: error.stack }, null, 2) + '\n');
  38. process.exitCode = 1;
  39. });