Skip to content

Commit 5ec059d

Browse files
committed
chore: wip
1 parent 49f2510 commit 5ec059d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+269
-51
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ packages/launchpad/bin/launchpad
1515
packages/launchpad/bin/launchpad*
1616
packages/launchpad/test/clean-integration-*
1717
*.bun-build
18+
/.local

packages/launchpad/src/services/manager.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -706,8 +706,30 @@ async function executePostStartCommands(service: ServiceInstance): Promise<void>
706706
return
707707
}
708708

709-
// Wait a moment for the service to be fully ready
710-
await new Promise(resolve => setTimeout(resolve, 2000))
709+
// Wait for the service to be fully ready, especially for databases
710+
if (definition.name === 'postgres' || definition.name === 'mysql') {
711+
// For databases, wait longer and check if they're actually ready
712+
await new Promise(resolve => setTimeout(resolve, 5000))
713+
714+
// Try to verify the service is responding before running post-start commands
715+
if (definition.healthCheck) {
716+
for (let i = 0; i < 5; i++) {
717+
try {
718+
const healthResult = await checkServiceHealth(service)
719+
if (healthResult)
720+
break
721+
}
722+
catch {
723+
// Health check failed, wait a bit more
724+
await new Promise(resolve => setTimeout(resolve, 1000))
725+
}
726+
}
727+
}
728+
}
729+
else {
730+
// For other services, use the original wait time
731+
await new Promise(resolve => setTimeout(resolve, 2000))
732+
}
711733

712734
for (const commandTemplate of definition.postStartCommands) {
713735
try {
@@ -727,7 +749,17 @@ async function executePostStartCommands(service: ServiceInstance): Promise<void>
727749
env: { ...process.env, ...definition.env },
728750
})
729751

752+
// Add timeout for post-start commands (30 seconds max)
753+
const timeout = setTimeout(() => {
754+
if (config.verbose) {
755+
console.warn(`⚠️ Post-start command timed out after 30s: ${resolvedCommand.join(' ')}`)
756+
}
757+
proc.kill('SIGTERM')
758+
resolve()
759+
}, 30000)
760+
730761
proc.on('close', (code) => {
762+
clearTimeout(timeout)
731763
if (code === 0) {
732764
resolve()
733765
}
@@ -742,6 +774,7 @@ async function executePostStartCommands(service: ServiceInstance): Promise<void>
742774
})
743775

744776
proc.on('error', (error) => {
777+
clearTimeout(timeout)
745778
if (config.verbose) {
746779
console.warn(`⚠️ Post-start command error: ${error.message}`)
747780
}

packages/launchpad/test/binary-stub-isolation.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ describe('Binary Stub Isolation', () => {
1717
})
1818

1919
afterEach(() => {
20-
process.env = originalEnv
20+
// Restore environment variables properly without replacing the entire process.env object
21+
Object.keys(process.env).forEach((key) => {
22+
delete process.env[key]
23+
})
24+
Object.assign(process.env, originalEnv)
2125
if (fs.existsSync(tempDir)) {
2226
fs.rmSync(tempDir, { recursive: true, force: true })
2327
}

packages/launchpad/test/bootstrap.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ describe('Bootstrap Command', () => {
1414
})
1515

1616
afterEach(() => {
17-
process.env = originalEnv
17+
// Restore environment variables properly without replacing the entire process.env object
18+
Object.keys(process.env).forEach((key) => {
19+
delete process.env[key]
20+
})
21+
Object.assign(process.env, originalEnv)
1822
if (fs.existsSync(tempDir)) {
1923
fs.rmSync(tempDir, { recursive: true, force: true })
2024
}

packages/launchpad/test/bun-performance-optimizations.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,11 @@ describe('Bun Performance Optimizations', () => {
5252
if (fs.existsSync(tempDir)) {
5353
fs.rmSync(tempDir, { recursive: true, force: true })
5454
}
55-
process.env = originalEnv
55+
// Restore environment variables properly without replacing the entire process.env object
56+
Object.keys(process.env).forEach((key) => {
57+
delete process.env[key]
58+
})
59+
Object.assign(process.env, originalEnv)
5660
// Clean up global mocks
5761
delete (globalThis as any).fetch
5862
})

packages/launchpad/test/bun.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,11 @@ describe('Bun', () => {
7070
})
7171

7272
afterEach(() => {
73-
process.env = originalEnv
73+
// Restore environment variables properly without replacing the entire process.env object
74+
Object.keys(process.env).forEach((key) => {
75+
delete process.env[key]
76+
})
77+
Object.assign(process.env, originalEnv)
7478
if (fs.existsSync(tempDir)) {
7579
fs.rmSync(tempDir, { recursive: true, force: true })
7680
}

packages/launchpad/test/cache-performance.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ describe('Cache Performance Tests', () => {
2626
})
2727

2828
afterEach(() => {
29-
process.env = originalEnv
29+
// Restore environment variables properly without replacing the entire process.env object
30+
Object.keys(process.env).forEach((key) => {
31+
delete process.env[key]
32+
})
33+
Object.assign(process.env, originalEnv)
3034

3135
// Clean up temp directory
3236
try {

packages/launchpad/test/caching-integration.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,11 @@ describe('Caching Integration Tests', () => {
132132
})
133133

134134
afterEach(() => {
135-
process.env = originalEnv
135+
// Restore environment variables properly without replacing the entire process.env object
136+
Object.keys(process.env).forEach((key) => {
137+
delete process.env[key]
138+
})
139+
Object.assign(process.env, originalEnv)
136140
if (fs.existsSync(tempDir)) {
137141
fs.rmSync(tempDir, { recursive: true, force: true })
138142
}

packages/launchpad/test/caching-performance.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ describe('Caching Performance Benchmarks', () => {
2929
})
3030

3131
afterEach(() => {
32-
process.env = originalEnv
32+
// Restore environment variables properly without replacing the entire process.env object
33+
Object.keys(process.env).forEach((key) => {
34+
delete process.env[key]
35+
})
36+
Object.assign(process.env, originalEnv)
3337
if (fs.existsSync(tempDir)) {
3438
fs.rmSync(tempDir, { recursive: true, force: true })
3539
}

packages/launchpad/test/caching.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ describe('Package Caching System', () => {
2929
})
3030

3131
afterEach(() => {
32-
process.env = originalEnv
32+
// Restore environment variables properly without replacing the entire process.env object
33+
Object.keys(process.env).forEach((key) => {
34+
delete process.env[key]
35+
})
36+
Object.assign(process.env, originalEnv)
3337
if (fs.existsSync(tempDir)) {
3438
fs.rmSync(tempDir, { recursive: true, force: true })
3539
}

0 commit comments

Comments
 (0)