summaryrefslogtreecommitdiffhomepage
path: root/packages/shared/test/fixture
diff options
context:
space:
mode:
authorDax <[email protected]>2026-04-15 11:50:24 -0400
committerGitHub <[email protected]>2026-04-15 15:50:24 +0000
commit4ae7c77f8abda8d51ddf52ee6e07890fa19b6629 (patch)
treed1b2891cb58ffe0d7d2a9e3af67340921f9f9758 /packages/shared/test/fixture
parentf1751401aa2c53a4a0215c6deddf93df306aac8b (diff)
downloadopencode-4ae7c77f8abda8d51ddf52ee6e07890fa19b6629.tar.gz
opencode-4ae7c77f8abda8d51ddf52ee6e07890fa19b6629.zip
migrate: move flock and hash utilities to shared package (#22640)
Diffstat (limited to 'packages/shared/test/fixture')
-rw-r--r--packages/shared/test/fixture/flock-worker.ts72
1 files changed, 72 insertions, 0 deletions
diff --git a/packages/shared/test/fixture/flock-worker.ts b/packages/shared/test/fixture/flock-worker.ts
new file mode 100644
index 000000000..9954d290c
--- /dev/null
+++ b/packages/shared/test/fixture/flock-worker.ts
@@ -0,0 +1,72 @@
+import fs from "fs/promises"
+import { Flock } from "@opencode-ai/shared/util/flock"
+
+type Msg = {
+ key: string
+ dir: string
+ staleMs?: number
+ timeoutMs?: number
+ baseDelayMs?: number
+ maxDelayMs?: number
+ holdMs?: number
+ ready?: string
+ active?: string
+ done?: string
+}
+
+function sleep(ms: number) {
+ return new Promise<void>((resolve) => {
+ setTimeout(resolve, ms)
+ })
+}
+
+function input() {
+ const raw = process.argv[2]
+ if (!raw) {
+ throw new Error("Missing flock worker input")
+ }
+
+ return JSON.parse(raw) as Msg
+}
+
+async function job(input: Msg) {
+ if (input.ready) {
+ await fs.writeFile(input.ready, String(process.pid))
+ }
+
+ if (input.active) {
+ await fs.writeFile(input.active, String(process.pid), { flag: "wx" })
+ }
+
+ try {
+ if (input.holdMs && input.holdMs > 0) {
+ await sleep(input.holdMs)
+ }
+
+ if (input.done) {
+ await fs.appendFile(input.done, "1\n")
+ }
+ } finally {
+ if (input.active) {
+ await fs.rm(input.active, { force: true })
+ }
+ }
+}
+
+async function main() {
+ const msg = input()
+
+ await Flock.withLock(msg.key, () => job(msg), {
+ dir: msg.dir,
+ staleMs: msg.staleMs,
+ timeoutMs: msg.timeoutMs,
+ baseDelayMs: msg.baseDelayMs,
+ maxDelayMs: msg.maxDelayMs,
+ })
+}
+
+await main().catch((err) => {
+ const text = err instanceof Error ? (err.stack ?? err.message) : String(err)
+ process.stderr.write(text)
+ process.exit(1)
+})