spine连接器和导出修改
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import { access, mkdtemp, rm } from 'node:fs/promises'
|
||||
import { constants } from 'node:fs'
|
||||
import { tmpdir } from 'node:os'
|
||||
import { join, resolve } from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import { spawn } from 'node:child_process'
|
||||
|
||||
const projectDir = resolve(fileURLToPath(new URL('..', import.meta.url)))
|
||||
const platformName = process.platform === 'darwin' ? 'macos' : process.platform === 'win32' ? 'windows' : process.platform
|
||||
const executableName = process.platform === 'win32' ? 'SpineParticleConnector.exe' : 'SpineParticleConnector'
|
||||
const executablePath = join(projectDir, 'release', 'connector', `${platformName}-${process.arch}`, executableName)
|
||||
const port = 27844
|
||||
|
||||
async function waitForHealth() {
|
||||
const deadline = Date.now() + 10_000
|
||||
let lastError = null
|
||||
while (Date.now() < deadline) {
|
||||
try {
|
||||
const response = await fetch(`http://127.0.0.1:${port}/v1/health`)
|
||||
if (response.ok) return response.json()
|
||||
lastError = new Error(`健康检查返回 ${response.status}`)
|
||||
} catch (error) {
|
||||
lastError = error
|
||||
}
|
||||
await new Promise((resolveDelay) => setTimeout(resolveDelay, 150))
|
||||
}
|
||||
throw lastError || new Error('健康检查超时')
|
||||
}
|
||||
|
||||
async function main() {
|
||||
await access(executablePath, constants.X_OK)
|
||||
const configDir = await mkdtemp(join(tmpdir(), 'spine-particle-sea-test-'))
|
||||
const processHandle = spawn(executablePath, [], {
|
||||
env: { ...process.env, SPINE_CONNECTOR_PORT: String(port), SPINE_CONNECTOR_CONFIG: join(configDir, 'config.json') },
|
||||
stdio: ['ignore', 'pipe', 'pipe'],
|
||||
})
|
||||
let output = ''
|
||||
processHandle.stdout.on('data', (chunk) => { output += chunk })
|
||||
processHandle.stderr.on('data', (chunk) => { output += chunk })
|
||||
|
||||
try {
|
||||
const health = await waitForHealth()
|
||||
if (health.connectorVersion !== '1.0.0' || !Array.isArray(health.supportedVersions) || !health.supportedVersions.includes('4.3')) {
|
||||
throw new Error(`独立连接器健康检查内容不正确:${JSON.stringify(health)}`)
|
||||
}
|
||||
console.log(`独立连接器验证通过:${executablePath}`)
|
||||
console.log(`支持版本:${health.supportedVersions.join(', ')}`)
|
||||
} finally {
|
||||
if (!processHandle.killed) processHandle.kill('SIGTERM')
|
||||
await new Promise((resolveDelay) => processHandle.once('exit', resolveDelay)).catch(() => {})
|
||||
if (!processHandle.killed) processHandle.kill('SIGKILL')
|
||||
await rm(configDir, { recursive: true, force: true })
|
||||
}
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
console.error(error)
|
||||
process.exitCode = 1
|
||||
})
|
||||
Reference in New Issue
Block a user