Skip to content

Commit 5aca011

Browse files
srprasannaCopilot
andauthored
Phase4 dualchannel (#5)
* feat: Implement audio capture and testing features - Added AudioTester component for testing speaker and microphone capture. - Introduced AudioDeviceSelector for selecting audio devices. - Created AudioPlayer for playback of meeting recordings. - Updated Settings page to include an Audio Testing tab. - Enhanced dual audio capture functionality in the backend. - Documented audio capture implementation plan and critical issues in AUDIO_CAPTURE_TODO.md. - Added MarkdownEditor for editing insights with live preview. * feat: Implement dual audio capture for simultaneous speaker and microphone input * refactor: Simplify audio device selector and markdown components styling * Update .github/workflows/ci.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * feat: Add dual audio capture support for Linux and improve error handling in Windows * refactor: Update audio capture logging for Linux and enhance device selection logic * feat: Enhance build process with ARM64 support for Windows and Linux, add placeholder for missing frontend dist * style: Format warning messages for better readability in build script --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent c81df92 commit 5aca011

31 files changed

Lines changed: 3606 additions & 207 deletions

.claude/settings.local.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,16 @@
44
"Bash(cargo build:*)",
55
"Bash(npm run build)",
66
"Bash(cargo check:*)",
7-
"Bash(npm run check:*)"
7+
"Bash(npm run check:*)",
8+
"Bash(rustc --version --verbose:*)",
9+
"Bash(rustup show:*)",
10+
"Bash(rustup toolchain install:*)",
11+
"Bash(git config:*)",
12+
"Bash(cargo test:*)",
13+
"Bash(python:*)",
14+
"Bash(chmod:*)",
15+
"Bash(npm run detect-target:*)",
16+
"Bash(node -p:*)"
817
],
918
"deny": [],
1019
"ask": []

.github/workflows/release.yml

Lines changed: 258 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,14 @@ jobs:
109109
## Meet Scribe ${{ steps.get_version.outputs.version }}
110110
111111
### Downloads
112-
- **Windows**: `meet-scribe_${{ steps.get_version.outputs.version }}_x64_en-US.msi`
113-
- **Linux**: `meet-scribe_${{ steps.get_version.outputs.version }}_amd64.deb` or `meet-scribe_${{ steps.get_version.outputs.version }}_amd64.AppImage`
112+
113+
**Windows:**
114+
- x64: `meet-scribe_${{ steps.get_version.outputs.version }}_x64_en-US.msi`
115+
- ARM64: `meet-scribe_${{ steps.get_version.outputs.version }}_arm64_en-US.msi`
116+
117+
**Linux:**
118+
- x64: `meet-scribe_${{ steps.get_version.outputs.version }}_amd64.deb` or `meet-scribe_${{ steps.get_version.outputs.version }}_amd64.AppImage`
119+
- ARM64: `meet-scribe_${{ steps.get_version.outputs.version }}_arm64.deb` or `meet-scribe_${{ steps.get_version.outputs.version }}_arm64.AppImage`
114120
115121
### Installation
116122
@@ -239,6 +245,85 @@ jobs:
239245
asset_name: meet-scribe_${{ needs.prepare-release.outputs.version }}_x64_en-US.msi
240246
asset_content_type: application/x-msi
241247

248+
# Build for Windows ARM64
249+
build-windows-arm64:
250+
needs: prepare-release
251+
runs-on: windows-latest
252+
steps:
253+
- name: Checkout code
254+
uses: actions/checkout@v4
255+
with:
256+
ref: ${{ needs.prepare-release.outputs.tag || github.ref }}
257+
258+
- name: Setup Node.js
259+
uses: actions/setup-node@v4
260+
with:
261+
node-version: '20'
262+
cache: 'npm'
263+
cache-dependency-path: apps/desktop/package-lock.json
264+
265+
- name: Setup Rust
266+
uses: dtolnay/rust-toolchain@stable
267+
with:
268+
targets: aarch64-pc-windows-msvc
269+
270+
- name: Rust cache
271+
uses: Swatinem/rust-cache@v2
272+
with:
273+
workspaces: apps/desktop/src-tauri
274+
key: arm64
275+
276+
- name: Install dependencies
277+
run: |
278+
cd apps/desktop
279+
npm ci
280+
281+
- name: Build frontend
282+
run: |
283+
cd apps/desktop
284+
npm run build
285+
286+
- name: Build Tauri app (ARM64)
287+
env:
288+
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
289+
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
290+
run: |
291+
cd apps/desktop
292+
npm run tauri build -- --target aarch64-pc-windows-msvc
293+
294+
- name: List build artifacts
295+
run: |
296+
Get-ChildItem -Path apps/desktop/src-tauri/target/aarch64-pc-windows-msvc/release/bundle -Recurse | Select-Object FullName
297+
298+
- name: Upload Windows ARM64 MSI
299+
uses: actions/upload-release-asset@v1
300+
env:
301+
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
302+
with:
303+
upload_url: ${{ needs.prepare-release.outputs.upload_url }}
304+
asset_path: apps/desktop/src-tauri/target/aarch64-pc-windows-msvc/release/bundle/msi/meet-scribe_${{ needs.prepare-release.outputs.version }}_arm64_en-US.msi
305+
asset_name: meet-scribe_${{ needs.prepare-release.outputs.version }}_arm64_en-US.msi
306+
asset_content_type: application/x-msi
307+
308+
- name: Upload Windows ARM64 MSI Signature
309+
continue-on-error: true
310+
uses: actions/upload-release-asset@v1
311+
env:
312+
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
313+
with:
314+
upload_url: ${{ needs.prepare-release.outputs.upload_url }}
315+
asset_path: apps/desktop/src-tauri/target/aarch64-pc-windows-msvc/release/bundle/msi/meet-scribe_${{ needs.prepare-release.outputs.version }}_arm64_en-US.msi.sig
316+
asset_name: meet-scribe_${{ needs.prepare-release.outputs.version }}_arm64_en-US.msi.sig
317+
asset_content_type: text/plain
318+
319+
- name: Save Windows ARM64 signature as artifact
320+
continue-on-error: true
321+
uses: actions/upload-artifact@v4
322+
with:
323+
name: windows-arm64-sig
324+
path: apps/desktop/src-tauri/target/aarch64-pc-windows-msvc/release/bundle/msi/meet-scribe_${{ needs.prepare-release.outputs.version }}_arm64_en-US.msi.sig
325+
retention-days: 1
326+
242327
# Build for Linux
243328
build-linux:
244329
needs: prepare-release
@@ -363,9 +448,137 @@ jobs:
363448
path: apps/desktop/src-tauri/target/release/bundle/appimage/meet-scribe_${{ needs.prepare-release.outputs.version }}_amd64.AppImage.sig
364449
retention-days: 1
365450

451+
# Build for Linux ARM64
452+
build-linux-arm64:
453+
needs: prepare-release
454+
runs-on: ubuntu-latest
455+
steps:
456+
- name: Checkout code
457+
uses: actions/checkout@v4
458+
with:
459+
ref: ${{ needs.prepare-release.outputs.tag || github.ref }}
460+
461+
- name: Setup Node.js
462+
uses: actions/setup-node@v4
463+
with:
464+
node-version: '20'
465+
cache: 'npm'
466+
cache-dependency-path: apps/desktop/package-lock.json
467+
468+
- name: Setup Rust
469+
uses: dtolnay/rust-toolchain@stable
470+
with:
471+
targets: aarch64-unknown-linux-gnu
472+
473+
- name: Rust cache
474+
uses: Swatinem/rust-cache@v2
475+
with:
476+
workspaces: apps/desktop/src-tauri
477+
key: arm64
478+
479+
- name: Install cross-compilation tools
480+
run: |
481+
sudo apt-get update
482+
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
483+
484+
- name: Install ARM64 system dependencies
485+
run: |
486+
sudo dpkg --add-architecture arm64
487+
sudo bash -c 'cat > /etc/apt/sources.list.d/arm64.list <<EOF
488+
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc) main restricted universe multiverse
489+
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc)-updates main restricted universe multiverse
490+
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc)-security main restricted universe multiverse
491+
EOF'
492+
sudo apt-get update || true
493+
sudo apt-get install -y \
494+
libwebkit2gtk-4.1-dev:arm64 \
495+
libssl-dev:arm64 \
496+
libgtk-3-dev:arm64 \
497+
libayatana-appindicator3-dev:arm64 \
498+
librsvg2-dev:arm64 \
499+
libpulse-dev:arm64 || echo "Some ARM64 packages may not be available"
500+
501+
- name: Configure cross-compilation
502+
run: |
503+
mkdir -p ~/.cargo
504+
cat >> ~/.cargo/config.toml <<EOF
505+
[target.aarch64-unknown-linux-gnu]
506+
linker = "aarch64-linux-gnu-gcc"
507+
EOF
508+
509+
- name: Install dependencies
510+
run: |
511+
cd apps/desktop
512+
npm ci
513+
514+
- name: Build frontend
515+
run: |
516+
cd apps/desktop
517+
npm run build
518+
519+
- name: Build Tauri app (ARM64)
520+
env:
521+
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
522+
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
523+
PKG_CONFIG_SYSROOT_DIR: /usr/aarch64-linux-gnu
524+
PKG_CONFIG_PATH: /usr/lib/aarch64-linux-gnu/pkgconfig
525+
run: |
526+
cd apps/desktop
527+
npm run tauri build -- --target aarch64-unknown-linux-gnu
528+
529+
- name: List build artifacts
530+
run: |
531+
echo "Checking ARM64 bundle directory..."
532+
if [ -d "apps/desktop/src-tauri/target/aarch64-unknown-linux-gnu/release/bundle" ]; then
533+
cd apps/desktop/src-tauri/target/aarch64-unknown-linux-gnu/release/bundle
534+
ls -lR
535+
else
536+
echo "ARM64 bundle directory not found!"
537+
ls -lR apps/desktop/src-tauri/target/aarch64-unknown-linux-gnu/ || echo "Target directory doesn't exist"
538+
fi
539+
540+
- name: Upload Linux ARM64 DEB
541+
uses: actions/upload-release-asset@v1
542+
env:
543+
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
544+
with:
545+
upload_url: ${{ needs.prepare-release.outputs.upload_url }}
546+
asset_path: apps/desktop/src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/deb/meet-scribe_${{ needs.prepare-release.outputs.version }}_arm64.deb
547+
asset_name: meet-scribe_${{ needs.prepare-release.outputs.version }}_arm64.deb
548+
asset_content_type: application/vnd.debian.binary-package
549+
550+
- name: Upload Linux ARM64 AppImage
551+
uses: actions/upload-release-asset@v1
552+
env:
553+
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
554+
with:
555+
upload_url: ${{ needs.prepare-release.outputs.upload_url }}
556+
asset_path: apps/desktop/src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/appimage/meet-scribe_${{ needs.prepare-release.outputs.version }}_aarch64.AppImage
557+
asset_name: meet-scribe_${{ needs.prepare-release.outputs.version }}_arm64.AppImage
558+
asset_content_type: application/octet-stream
559+
560+
- name: Upload Linux ARM64 AppImage Signature
561+
continue-on-error: true
562+
uses: actions/upload-release-asset@v1
563+
env:
564+
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
565+
with:
566+
upload_url: ${{ needs.prepare-release.outputs.upload_url }}
567+
asset_path: apps/desktop/src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/appimage/meet-scribe_${{ needs.prepare-release.outputs.version }}_aarch64.AppImage.sig
568+
asset_name: meet-scribe_${{ needs.prepare-release.outputs.version }}_arm64.AppImage.sig
569+
asset_content_type: text/plain
570+
571+
- name: Save Linux ARM64 signature as artifact
572+
continue-on-error: true
573+
uses: actions/upload-artifact@v4
574+
with:
575+
name: linux-arm64-sig
576+
path: apps/desktop/src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/appimage/meet-scribe_${{ needs.prepare-release.outputs.version }}_aarch64.AppImage.sig
577+
retention-days: 1
578+
366579
# Generate and upload updater manifest
367580
create-updater-manifest:
368-
needs: [prepare-release, build-windows, build-linux]
581+
needs: [prepare-release, build-windows, build-windows-arm64, build-linux, build-linux-arm64]
369582
runs-on: ubuntu-latest
370583
permissions:
371584
contents: write
@@ -384,6 +597,20 @@ jobs:
384597
name: linux-sig
385598
path: ./sigs
386599

600+
- name: Download Windows ARM64 signature
601+
uses: actions/download-artifact@v4
602+
continue-on-error: true
603+
with:
604+
name: windows-arm64-sig
605+
path: ./sigs
606+
607+
- name: Download Linux ARM64 signature
608+
uses: actions/download-artifact@v4
609+
continue-on-error: true
610+
with:
611+
name: linux-arm64-sig
612+
path: ./sigs
613+
387614
- name: Generate and upload latest.json
388615
env:
389616
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
@@ -395,19 +622,35 @@ jobs:
395622
# Read signature files if they exist
396623
WINDOWS_SIG=""
397624
LINUX_SIG=""
625+
WINDOWS_ARM64_SIG=""
626+
LINUX_ARM64_SIG=""
398627
399628
if [ -f "./sigs/meet-scribe_${VERSION}_x64_en-US.msi.sig" ]; then
400629
WINDOWS_SIG=$(cat "./sigs/meet-scribe_${VERSION}_x64_en-US.msi.sig")
401-
echo "Found Windows signature"
630+
echo "Found Windows x64 signature"
402631
else
403-
echo "No Windows signature found (signing may not be configured)"
632+
echo "No Windows x64 signature found (signing may not be configured)"
404633
fi
405634
406635
if [ -f "./sigs/meet-scribe_${VERSION}_amd64.AppImage.sig" ]; then
407636
LINUX_SIG=$(cat "./sigs/meet-scribe_${VERSION}_amd64.AppImage.sig")
408-
echo "Found Linux signature"
637+
echo "Found Linux x64 signature"
638+
else
639+
echo "No Linux x64 signature found (signing may not be configured)"
640+
fi
641+
642+
if [ -f "./sigs/meet-scribe_${VERSION}_arm64_en-US.msi.sig" ]; then
643+
WINDOWS_ARM64_SIG=$(cat "./sigs/meet-scribe_${VERSION}_arm64_en-US.msi.sig")
644+
echo "Found Windows ARM64 signature"
409645
else
410-
echo "No Linux signature found (signing may not be configured)"
646+
echo "No Windows ARM64 signature found (signing may not be configured)"
647+
fi
648+
649+
if [ -f "./sigs/meet-scribe_${VERSION}_arm64.AppImage.sig" ]; then
650+
LINUX_ARM64_SIG=$(cat "./sigs/meet-scribe_${VERSION}_arm64.AppImage.sig")
651+
echo "Found Linux ARM64 signature"
652+
else
653+
echo "No Linux ARM64 signature found (signing may not be configured)"
411654
fi
412655
413656
# Create the updater manifest JSON
@@ -424,6 +667,14 @@ jobs:
424667
"linux-x86_64": {
425668
"signature": "$LINUX_SIG",
426669
"url": "https://github.com/$REPO/releases/download/$TAG/meet-scribe_${VERSION}_amd64.AppImage"
670+
},
671+
"windows-aarch64": {
672+
"signature": "$WINDOWS_ARM64_SIG",
673+
"url": "https://github.com/$REPO/releases/download/$TAG/meet-scribe_${VERSION}_arm64_en-US.msi"
674+
},
675+
"linux-aarch64": {
676+
"signature": "$LINUX_ARM64_SIG",
677+
"url": "https://github.com/$REPO/releases/download/$TAG/meet-scribe_${VERSION}_arm64.AppImage"
427678
}
428679
}
429680
}

0 commit comments

Comments
 (0)