diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 3f4c33d..3f5c25a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -22,32 +22,32 @@ jobs: run: | mkdir -p .bb cat << EOF > .bb/config.yaml + version: 2.0.0 myPersonsName: bb myAssistantsName: Claude noBrowser: false + bbExeName: bb + bbApiExeName: bb-api api: environment: local - apiHostname: localhost - apiPort: 3000 - apiUseTls: false + hostname: localhost + port: 3162 ignoreLLMRequestCache: false usePromptCaching: true + tls: + useTls: false logFile: api.log logLevel: info - anthropicApiKey: >- - sk-not-a-valid-key-not-a-valid-key-not-a-valid-key-not-a-valid-key-not-a-valid-key + llmKeys: + anthropic: >- + sk-not-a-valid-key-not-a-valid-key-not-a-valid-key-not-a-valid-key-not-a-valid-key bui: environment: local - buiHostname: localhost - buiPort: 8000 - buiUseTls: false + hostname: localhost + port: 8000 + tls: + useTls: false cli: {} - repoInfo: - ctagsAutoGenerate: false - tokenLimit: 1024 - project: - name: bb - type: git EOF - name: Build site diff --git a/.github/workflows/dui-macos-release.yml b/.github/workflows/dui-macos-release.yml new file mode 100644 index 0000000..3471fde --- /dev/null +++ b/.github/workflows/dui-macos-release.yml @@ -0,0 +1,183 @@ +name: "DUI macOS Release" + +on: + push: + branches: ["main","release-build-testing"] + workflow_dispatch: + inputs: + version: + description: 'Version to release' + required: true + default: '0.0.0' + +jobs: + build-macos: + permissions: + contents: write + strategy: + fail-fast: false + matrix: + include: + - target: "aarch64-apple-darwin" + arch: "aarch64" + name: "Apple Silicon" + - target: "x86_64-apple-darwin" + arch: "x86_64" + name: "Intel" + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Deno + uses: denoland/setup-deno@v1 + with: + deno-version: v2.x + + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: './dui/src-tauri -> target' + + - name: Install frontend dependencies + run: | + cd dui + deno task build + + - name: Build DUI (Tauri) + uses: tauri-apps/tauri-action@v0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + projectPath: './dui' + args: --target ${{ matrix.target }} + + # Verify build artifacts exist + - name: Verify build artifacts + id: verify_artifacts + run: | + DMG_COUNT=$(find dui/src-tauri/target/${{ matrix.target }}/release/bundle/dmg -name "*.dmg" | wc -l) + APP_COUNT=$(find dui/src-tauri/target/${{ matrix.target }}/release/bundle/macos -name "*.app" | wc -l) + if [ "$DMG_COUNT" -eq 0 ] || [ "$APP_COUNT" -eq 0 ]; then + echo "::error::Missing build artifacts for ${{ matrix.name }} (${{ matrix.target }})" + exit 1 + fi + echo "Found $DMG_COUNT .dmg and $APP_COUNT .app files" + + # Upload artifacts for both architectures + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: dui-macos-${{ matrix.arch }} + path: | + dui/src-tauri/target/${{ matrix.target }}/release/bundle/dmg/*.dmg + dui/src-tauri/target/${{ matrix.target }}/release/bundle/macos/*.app + + # Create release with all artifacts + release: + needs: build-macos + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Get version from config + id: get_version + run: | + CONFIG_VERSION=$(cat dui/src-tauri/tauri.conf.json | jq -r .version) + echo "CONFIG_VERSION=$CONFIG_VERSION" >> $GITHUB_OUTPUT + + # If triggered by workflow_dispatch, verify version matches + if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then + if [[ "$CONFIG_VERSION" != "${{ github.event.inputs.version }}" ]]; then + echo "::error::Version mismatch: $CONFIG_VERSION (config) != ${{ github.event.inputs.version }} (input)" + exit 1 + fi + fi + + - name: Download all artifacts + uses: actions/download-artifact@v4 + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: dui-v${{ steps.get_version.outputs.CONFIG_VERSION }} + release_name: "Beyond Better DUI v${{ steps.get_version.outputs.CONFIG_VERSION }}" + body: | + Beyond Better DUI v${{ steps.get_version.outputs.CONFIG_VERSION }} + + This release includes: + - macOS .app bundles: + * Apple Silicon (M1/M2) version + * Intel version + - macOS disk images (.dmg): + * Apple Silicon (M1/M2) version + * Intel version + + Installation: + 1. Download the appropriate version for your Mac + 2. Open the .dmg file + 3. Drag the Beyond Better app to your Applications folder + draft: true + prerelease: false + + - name: Upload Release Assets + run: | + # Function to handle upload with retry + upload_asset() { + local file="$1" + local attempt=1 + local max_attempts=3 + + while [ $attempt -le $max_attempts ]; do + echo "Uploading $file (attempt $attempt of $max_attempts)" + if gh release upload "dui-v${{ steps.get_version.outputs.CONFIG_VERSION }}" "$file"; then + return 0 + fi + attempt=$((attempt + 1)) + if [ $attempt -le $max_attempts ]; then + echo "Retrying in 5 seconds..." + sleep 5 + fi + done + + echo "::error::Failed to upload $file after $max_attempts attempts" + return 1 + } + + for arch in x86_64 aarch64; do + case $arch in + "x86_64") arch_name="intel" ;; + "aarch64") arch_name="apple-silicon" ;; + esac + + cd "dui-macos-$arch" + + # Upload DMG files + for f in *.dmg; do + if [ -f "$f" ]; then + new_name="BB-dui-${{ steps.get_version.outputs.CONFIG_VERSION }}-macos-$arch_name.dmg" + cp "$f" "../$new_name" + upload_asset "../$new_name" + fi + done + + # Create and upload app archive + for app in *.app; do + if [ -d "$app" ]; then + new_name="BB-dui-${{ steps.get_version.outputs.CONFIG_VERSION }}-macos-$arch_name.app.tar.gz" + tar -czf "../$new_name" "$app" + upload_asset "../$new_name" + fi + done + + cd .. + done + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/docs/development/macos_release_process.md b/docs/development/macos_release_process.md new file mode 100644 index 0000000..9258acd --- /dev/null +++ b/docs/development/macos_release_process.md @@ -0,0 +1,95 @@ +# macOS Release Process + +This document describes the process for building and releasing the Beyond Better DUI for macOS. + +## Overview + +The DUI (Desktop User Interface) is built using Tauri and supports both Intel (x86_64) and Apple Silicon (aarch64) architectures. The release process is automated through GitHub Actions. + +## Release Assets + +Each release includes: +- `.app` bundles (archived as `.tar.gz`) + * Intel (x86_64) version + * Apple Silicon (aarch64) version +- `.dmg` disk images + * Intel (x86_64) version + * Apple Silicon (aarch64) version + +## Build Configuration + +The build configuration is defined in `dui/src-tauri/tauri.conf.json` and includes: +- DMG installer window layout +- Minimum macOS version (10.13) +- Required entitlements +- Icon configurations + +## Release Process + +### Automated Release (GitHub Actions) + +1. Trigger a release by either: + - Pushing to the `release` branch + - Using the "DUI macOS Release" workflow manually with a version number + +2. The workflow will: + - Build for both Intel and Apple Silicon + - Create `.app` bundles and `.dmg` installers + - Create a draft release + - Upload all assets with architecture-specific names + +### Manual Release Steps + +If needed, you can build locally using: +```bash +cd dui +# For Intel Macs +deno task tauri build --target x86_64-apple-darwin + +# For Apple Silicon Macs +deno task tauri build --target aarch64-apple-darwin +``` + +## Asset Naming Convention + +Release assets follow this naming pattern: +- `BB-dui-{version}-macos-intel.dmg` +- `BB-dui-{version}-macos-intel.app.tar.gz` +- `BB-dui-{version}-macos-apple-silicon.dmg` +- `BB-dui-{version}-macos-apple-silicon.app.tar.gz` + +## Version Management + +- The version number is managed in `dui/src-tauri/tauri.conf.json` +- When using manual workflow triggers, the input version must match the config +- Git tags are created in the format `dui-v{version}` + +## Requirements + +### Build Environment +- macOS machine (for local builds) +- Xcode Command Line Tools +- Rust with appropriate targets +- Deno + +### Signing and Notarization +- Apple Developer account (for future signing implementation) +- Developer certificate +- App-specific password for notarization + +## Future Enhancements + +1. Code Signing + - Implementation pending Apple Developer account + - Will require additional workflow secrets + - Will enable notarization + +2. Notarization + - To be implemented after signing + - Required for distribution outside App Store + - Will add additional build time + +3. App Store Distribution + - Future consideration + - Will require additional configuration + - Separate distribution process \ No newline at end of file diff --git a/docs/development/windows_linux_release_planning.md b/docs/development/windows_linux_release_planning.md new file mode 100644 index 0000000..c26e81d --- /dev/null +++ b/docs/development/windows_linux_release_planning.md @@ -0,0 +1,203 @@ +# Windows and Linux Release Planning + +This document outlines the planned implementation for Windows and Linux releases of the Beyond Better DUI. + +## Windows Release Plan + +### Phase 1: Basic MSI Installer +1. Configuration Requirements: + - WiX Toolset integration + - Registry entries for: + * Application registration + * Installation path tracking + * First-run configuration + - WebView2 bootstrapper (embedded) + - Per-machine installation in Program Files + - Standard uninstaller integration + +2. Build Environment: + - GitHub Actions Windows runner + - WiX Toolset v3 + - Rust with MSVC target + - Required system dependencies + +3. Release Assets: + - MSI installer for x64 systems + - Support for both per-user and per-machine installation + - Automated binary download on first run + +### Phase 2: Enhanced Windows Integration +1. Features: + - Windows "Apps & Features" integration + - Start menu shortcuts + - Optional desktop shortcut + - Protocol handler registration + - File association setup (if needed) + +2. User Experience: + - Silent installation option + - Custom installation directory option + - Progress indicators for binary downloads + - Proper elevation requests + +3. Updates: + - Auto-update support + - Delta updates if possible + - Update notification system + +## Linux Release Plan + +### Phase 1: AppImage Support +1. Configuration: + - Basic AppImage bundling + - Desktop entry integration + - Icon integration + - MIME type handling + +2. Build Requirements: + - GitHub Actions Ubuntu runner + - AppImage tooling + - Required system libraries + - Build matrix for architectures: + * x86_64 + * aarch64 (if supported) + +3. Release Assets: + - AppImage files + - SHA256 checksums + - GPG signatures (future) + +### Phase 2: Distribution Packages +1. Debian/Ubuntu (.deb): + - Package configuration + - Dependencies management + - Post-install scripts + - Repository setup (future) + +2. Red Hat/Fedora (.rpm): + - Package configuration + - Dependencies handling + - Post-install scripts + - Repository setup (future) + +3. Other Distributions: + - Arch Linux (AUR) + - Flatpak consideration + - Snap consideration + +## Common Requirements + +### Security Considerations +1. Windows: + - Code signing + - SmartScreen reputation + - Anti-virus compatibility + +2. Linux: + - Package signing + - Repository security + - Sandboxing options + +### Automation Requirements +1. Build Process: + - Separate workflows per platform + - Dependency caching + - Build artifacts validation + - Version consistency checks + +2. Testing: + - Installation testing + - Upgrade path testing + - Uninstallation testing + - Integration tests + +3. Release Process: + - Automated asset uploading + - Release notes generation + - Changelog management + - Version tracking + +### Documentation Needs +1. Installation Guides: + - Windows installation steps + - Linux distribution-specific guides + - Troubleshooting guides + +2. Build Documentation: + - Build environment setup + - Local build instructions + - Release process documentation + +3. Development Guides: + - Platform-specific considerations + - Testing requirements + - Release checklist + +## Implementation Priorities + +1. Windows MSI Installer: + - Basic installation functionality + - Registry integration + - Binary management + +2. AppImage Support: + - Basic functionality + - Desktop integration + - Binary management + +3. Enhanced Windows Features: + - Full system integration + - Update system + - User experience improvements + +4. Distribution Packages: + - Debian packages + - RPM packages + - Repository setup + +## Timeline Considerations + +- Phase 1 (Windows): 2-3 weeks +- Phase 1 (Linux/AppImage): 1-2 weeks +- Phase 2 (Windows): 2-3 weeks +- Phase 2 (Linux/Packages): 2-3 weeks + +Total estimated timeline: 7-11 weeks + +## Dependencies and Prerequisites + +1. Windows: + - WiX Toolset knowledge + - Windows installer experience + - Code signing certificate + +2. Linux: + - Package maintenance experience + - Repository management + - Build system knowledge + +## Risk Factors + +1. Windows: + - SmartScreen reputation building + - Anti-virus false positives + - WebView2 installation issues + +2. Linux: + - Distribution differences + - Dependency management + - Repository maintenance + +## Success Criteria + +1. Windows: + - Silent installation support + - Clean uninstallation + - Proper system integration + - Efficient binary management + +2. Linux: + - Distribution package standards + - Clean package management + - Desktop environment integration + - Efficient binary management \ No newline at end of file diff --git a/dui/src-tauri/macos/entitlements.plist b/dui/src-tauri/macos/entitlements.plist new file mode 100644 index 0000000..db4533c --- /dev/null +++ b/dui/src-tauri/macos/entitlements.plist @@ -0,0 +1,37 @@ + + + + + + com.apple.security.files.user-selected.read-write + + + + com.apple.security.network.client + + + + com.apple.security.network.server + + + + com.apple.security.files.downloads.read-write + + + + com.apple.security.cs.allow-unsigned-executable-memory + + + + com.apple.security.cs.allow-jit + + + + com.apple.security.cs.disable-library-validation + + + + com.apple.security.cs.allow-dyld-environment-variables + + + \ No newline at end of file diff --git a/dui/src-tauri/tauri.conf.json b/dui/src-tauri/tauri.conf.json index e8823b7..b627e09 100644 --- a/dui/src-tauri/tauri.conf.json +++ b/dui/src-tauri/tauri.conf.json @@ -23,7 +23,26 @@ }, "bundle": { "active": true, - "targets": "all", + "targets": ["app", "dmg"], + "macOS": { + "frameworks": [], + "minimumSystemVersion": "10.13", + "entitlements": "macos/entitlements.plist", + "dmg": { + "windowSize": { + "width": 660, + "height": 400 + }, + "appPosition": { + "x": 180, + "y": 170 + }, + "applicationFolderPosition": { + "x": 480, + "y": 170 + } + } + }, "icon": [ "icons/32x32.png", "icons/128x128.png", @@ -32,4 +51,4 @@ "icons/icon.ico" ] } -} +} \ No newline at end of file diff --git a/dui/src-tauri/windows/fragments/registry.wxs b/dui/src-tauri/windows/fragments/registry.wxs new file mode 100644 index 0000000..be11432 --- /dev/null +++ b/dui/src-tauri/windows/fragments/registry.wxs @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dui/src-tauri/windows/locales/en-US.wxl b/dui/src-tauri/windows/locales/en-US.wxl new file mode 100644 index 0000000..d995c02 --- /dev/null +++ b/dui/src-tauri/windows/locales/en-US.wxl @@ -0,0 +1,17 @@ + + + Launch Beyond Better DUI + A newer version of Beyond Better DUI is already installed. + Add Beyond Better DUI to the system PATH + Install Beyond Better DUI + Install BB binaries + Choose the folder in which to install Beyond Better DUI. + Installation Folder + Install Beyond Better DUI to: + Welcome to the Beyond Better DUI Setup Wizard + This wizard will guide you through the installation of Beyond Better DUI, a desktop manager for the BB AI assistant. + Beyond Better DUI Installation Complete + The installation was completed successfully. + Beyond Better DUI Installation Cancelled + Setup was interrupted. Your system has not been modified. + \ No newline at end of file