mirror of
https://github.com/iflytek/skillhub.git
synced 2026-10-17 04:33:36 +00:00
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import { access, writeFile } from 'node:fs/promises'
|
|
import { acquireSkillTargetLock } from '../../src/services/skill-target-lock'
|
|
import { CliError } from '../../src/shared/errors'
|
|
|
|
const [rootDir, slug, readyPath, startPath, acquiredPath, releasePath] = process.argv.slice(2)
|
|
if (!rootDir || !slug || !readyPath || !startPath || !acquiredPath || !releasePath) process.exit(5)
|
|
|
|
try {
|
|
await writeFile(readyPath, 'ready')
|
|
let startRequested = false
|
|
while (!startRequested) {
|
|
try {
|
|
await access(startPath)
|
|
startRequested = true
|
|
} catch {
|
|
await new Promise(resolve => setTimeout(resolve, 10))
|
|
}
|
|
}
|
|
const release = await acquireSkillTargetLock(rootDir, slug)
|
|
await writeFile(acquiredPath, 'acquired')
|
|
process.stdout.write('acquired\n')
|
|
let releaseRequested = false
|
|
while (!releaseRequested) {
|
|
try {
|
|
await access(releasePath)
|
|
releaseRequested = true
|
|
} catch {
|
|
await new Promise(resolve => setTimeout(resolve, 10))
|
|
}
|
|
}
|
|
await release()
|
|
process.exit(0)
|
|
} catch (error) {
|
|
if (error instanceof CliError) {
|
|
process.stderr.write(`${error.message}\n`)
|
|
process.exit(error.exitCode)
|
|
}
|
|
throw error
|
|
}
|