feat: complete release preparation, 10+ ad mediation, CI/CD, and docker deployment
Some checks failed
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / deploy (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Release & Packaging Pipeline / Build & Publish Admin Docker Image (push) Failing after 8s
Release & Code Signing CA Pipeline / build-and-sign-windows (push) Failing after 1m51s
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 5s
Release & Code Signing CA Pipeline / build-and-sign-macos (push) Failing after 3s
Release & Packaging Pipeline / Package macOS Desktop App (push) Failing after 4s
Release & Packaging Pipeline / Package Windows Desktop App (push) Failing after 2m28s
Release & Packaging Pipeline / Publish Official GitHub Release (push) Has been skipped
Some checks failed
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / deploy (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Release & Packaging Pipeline / Build & Publish Admin Docker Image (push) Failing after 8s
Release & Code Signing CA Pipeline / build-and-sign-windows (push) Failing after 1m51s
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 5s
Release & Code Signing CA Pipeline / build-and-sign-macos (push) Failing after 3s
Release & Packaging Pipeline / Package macOS Desktop App (push) Failing after 4s
Release & Packaging Pipeline / Package Windows Desktop App (push) Failing after 2m28s
Release & Packaging Pipeline / Publish Official GitHub Release (push) Has been skipped
This commit is contained in:
parent
5cd1de6859
commit
708e20f747
406 changed files with 42464 additions and 6199 deletions
|
|
@ -248,35 +248,55 @@ class AudioCaptureService extends EventEmitter {
|
|||
}
|
||||
|
||||
/**
|
||||
* Windows: PowerShell로 AudioEndpoint 열거.
|
||||
* Windows: PowerShell로 AudioEndpoint 열거 (비차단 비동기).
|
||||
* SoX -t waveaudio는 이름으로 매칭하므로 FriendlyName을 deviceId로 사용.
|
||||
*/
|
||||
private async _getDevicesWindows(): Promise<AudioDevice[]> {
|
||||
const { execSync } = await import('child_process')
|
||||
const { exec } = await import('child_process')
|
||||
const psCommand = `[Console]::OutputEncoding = [Text.Encoding]::UTF8; Get-PnpDevice -Class AudioEndpoint -Status OK | Select-Object InstanceId, FriendlyName | ConvertTo-Json -Compress`
|
||||
const output = execSync(`powershell -NoProfile -Command "${psCommand}"`, {
|
||||
encoding: 'utf8',
|
||||
timeout: 5000,
|
||||
env: { ...process.env, PYTHONIOENCODING: 'utf-8' },
|
||||
}).trim()
|
||||
|
||||
if (!output) return []
|
||||
return new Promise<AudioDevice[]>((resolve) => {
|
||||
exec(
|
||||
`powershell -NoProfile -Command "${psCommand}"`,
|
||||
{ encoding: 'utf8', timeout: 3000, env: { ...process.env, PYTHONIOENCODING: 'utf-8' } },
|
||||
(err, stdout) => {
|
||||
if (err || !stdout?.trim()) {
|
||||
return resolve([
|
||||
{ deviceId: 'default', label: '기본 마이크 (Default)', isDefault: true }
|
||||
])
|
||||
}
|
||||
|
||||
const parsed: unknown = JSON.parse(output.startsWith('[') ? output : `[${output}]`)
|
||||
if (!Array.isArray(parsed)) return []
|
||||
try {
|
||||
const output = stdout.trim()
|
||||
const parsed: unknown = JSON.parse(output.startsWith('[') ? output : `[${output}]`)
|
||||
if (!Array.isArray(parsed) || parsed.length === 0) {
|
||||
return resolve([
|
||||
{ deviceId: 'default', label: '기본 마이크 (Default)', isDefault: true }
|
||||
])
|
||||
}
|
||||
|
||||
const result: AudioDevice[] = []
|
||||
for (const dev of parsed) {
|
||||
const d = dev as { InstanceId?: string; FriendlyName?: string }
|
||||
if (d.InstanceId && d.FriendlyName) {
|
||||
result.push({
|
||||
deviceId: d.FriendlyName,
|
||||
label: d.FriendlyName,
|
||||
isDefault: false,
|
||||
})
|
||||
}
|
||||
}
|
||||
return result
|
||||
const result: AudioDevice[] = []
|
||||
for (const dev of parsed) {
|
||||
const d = dev as { InstanceId?: string; FriendlyName?: string }
|
||||
if (d.InstanceId && d.FriendlyName) {
|
||||
result.push({
|
||||
deviceId: d.FriendlyName,
|
||||
label: d.FriendlyName,
|
||||
isDefault: result.length === 0,
|
||||
})
|
||||
}
|
||||
}
|
||||
resolve(result.length > 0 ? result : [
|
||||
{ deviceId: 'default', label: '기본 마이크 (Default)', isDefault: true }
|
||||
])
|
||||
} catch {
|
||||
resolve([
|
||||
{ deviceId: 'default', label: '기본 마이크 (Default)', isDefault: true }
|
||||
])
|
||||
}
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue