• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

cameri / nostream / 24937797860

25 Apr 2026 06:35PM UTC coverage: 63.498% (-12.0%) from 75.491%
24937797860

Pull #574

github

web-flow
Merge b4c964365 into c0c1c35b8
Pull Request #574: feat: migrate nostream scripts to unified CLI/TUI

1619 of 2880 branches covered (56.22%)

Branch coverage included in aggregate %.

735 of 1701 new or added lines in 29 files covered. (43.21%)

3838 of 5714 relevant lines covered (67.17%)

16.28 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

14.43
/src/cli/commands/dev.ts
1
import { confirm, isCancel, cancel } from '@clack/prompts'
2✔
2
import ora from 'ora'
2✔
3

4
import { runCleanDb } from '../../clean-db'
2✔
5
import { runCommand } from '../utils/process'
2✔
6
import { runStop } from './stop'
2✔
7

8
type DevOptions = {
9
  yes?: boolean
10
}
11

12
const ensureConfirmed = async (message: string, yes?: boolean): Promise<boolean> => {
2✔
NEW
13
  if (yes) {
×
NEW
14
    return true
×
15
  }
16

NEW
17
  if (!process.stdin.isTTY) {
×
NEW
18
    throw new Error('Interactive confirmation is unavailable. Re-run with --yes.')
×
19
  }
20

NEW
21
  const answer = await confirm({ message, initialValue: false })
×
NEW
22
  if (isCancel(answer)) {
×
NEW
23
    cancel('Operation cancelled')
×
NEW
24
    return false
×
25
  }
26

NEW
27
  return answer
×
28
}
29

30
const runWithSpinner = async (
2✔
31
  loadingText: string,
32
  successText: string,
33
  failureText: string,
34
  action: () => Promise<number>,
35
): Promise<number> => {
NEW
36
  const spinner = ora(loadingText).start()
×
37

NEW
38
  try {
×
NEW
39
    const code = await action()
×
NEW
40
    if (code === 0) {
×
NEW
41
      spinner.succeed(successText)
×
42
    } else {
NEW
43
      spinner.fail(failureText)
×
44
    }
45

NEW
46
    return code
×
47
  } catch (error) {
NEW
48
    spinner.fail(failureText)
×
NEW
49
    throw error
×
50
  }
51
}
52

53
export const runDevDbClean = async (rawArgs: string[], options: DevOptions = {}): Promise<number> => {
2!
NEW
54
  if (rawArgs.length === 0) {
×
NEW
55
    const confirmed = await ensureConfirmed('Delete all events from the database?', options.yes)
×
NEW
56
    if (!confirmed) {
×
NEW
57
      return 1
×
58
    }
59

NEW
60
    return runWithSpinner('Cleaning database...', 'Database clean completed', 'Database clean failed', () =>
×
NEW
61
      runCleanDb(['--all', '--force']),
×
62
    )
63
  }
64

NEW
65
  return runWithSpinner('Cleaning database...', 'Database clean completed', 'Database clean failed', () =>
×
NEW
66
    runCleanDb(rawArgs),
×
67
  )
68
}
69

70
export const runDevDbReset = async (options: DevOptions): Promise<number> => {
2✔
NEW
71
  const confirmed = await ensureConfirmed('Reset database and rerun migrations?', options.yes)
×
NEW
72
  if (!confirmed) {
×
NEW
73
    return 1
×
74
  }
75

NEW
76
  const spinner = ora('Resetting database (rollback)...').start()
×
77

NEW
78
  let code = await runCommand('npm', ['run', 'db:migrate:rollback', '--', '--all'])
×
NEW
79
  if (code !== 0) {
×
NEW
80
    spinner.fail('Database reset failed during rollback')
×
NEW
81
    return code
×
82
  }
83

NEW
84
  spinner.text = 'Resetting database (migrate)...'
×
NEW
85
  code = await runCommand('npm', ['run', 'db:migrate'])
×
NEW
86
  if (code === 0) {
×
NEW
87
    spinner.succeed('Database reset completed')
×
88
  } else {
NEW
89
    spinner.fail('Database reset failed during migrate')
×
90
  }
91

NEW
92
  return code
×
93
}
94

95
export const runDevSeedRelay = async (): Promise<number> => {
2✔
NEW
96
  return runWithSpinner('Seeding relay data...', 'Relay seed completed', 'Relay seed failed', () =>
×
NEW
97
    runCommand('npm', ['run', 'db:seed']),
×
98
  )
99
}
100

101
export const runDevDockerClean = async (options: DevOptions): Promise<number> => {
2✔
NEW
102
  const confirmed = await ensureConfirmed('Run docker system prune and docker volume prune?', options.yes)
×
NEW
103
  if (!confirmed) {
×
NEW
104
    return 1
×
105
  }
106

NEW
107
  let code = await runStop({ all: true }, [])
×
NEW
108
  if (code !== 0) {
×
NEW
109
    return code
×
110
  }
111

NEW
112
  code = await runCommand('docker', ['system', 'prune', '-a', '-f'])
×
NEW
113
  if (code !== 0) {
×
NEW
114
    return code
×
115
  }
116

NEW
117
  return runCommand('docker', ['volume', 'prune', '-f'])
×
118
}
119

120
export const runDevTestUnit = async (): Promise<number> => {
2✔
NEW
121
  return runWithSpinner('Running unit tests...', 'Unit tests completed', 'Unit tests failed', () =>
×
NEW
122
    runCommand('npm', ['run', 'test:unit']),
×
123
  )
124
}
125

126
export const runDevTestCli = async (): Promise<number> => {
2✔
NEW
127
  return runWithSpinner('Running CLI tests...', 'CLI tests completed', 'CLI tests failed', () =>
×
NEW
128
    runCommand('npm', ['run', 'test:cli']),
×
129
  )
130
}
131

132
export const runDevTestIntegration = async (): Promise<number> => {
2✔
NEW
133
  return runWithSpinner(
×
134
    'Running integration tests...',
135
    'Integration tests completed',
136
    'Integration tests failed',
NEW
137
    () => runCommand('npm', ['run', 'test:integration']),
×
138
  )
139
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc