# Build System Multi-platform packaging pipeline for proton-drive-linux. ## Overview The build system produces native packages across 8 format families and 18+ distribution targets: | Format | Targets | |---|---| | **APK** | Alpine 3.20, 3.22, 3.23 | | **AppImage** | linux-baseline | | **DEB** | Debian 12, 13; Ubuntu 24.04, 26.04 | | **RPM** | EL10, Fedora 43, 44; openSUSE Tumbleweed | | **AUR** | arch-native | | **Flatpak** | GNOME 49, 50 | | **Snap** | core24, core26 | ## Build Pipeline
graph LR
    WC_CLONE[Clone WebClients
ProtonMail/WebClients] WC_PATCH[Apply Platform Patch
patches/*.patch] WC_BUILD[Build WebClients
scripts/build-webclients.sh] TAURI_BUILD[Compile Tauri
cargo build --release] PKG[Package] subgraph "WebClients Patchers" STUBS[create_stubs.py
Stub private npm packages] DEPS[fix_deps.py
Fix dependency issues] DRAWER[patch_drive_linux_drawer.py
Sidebar rail injection] BRIDGE[patch_drive_linux_sync_bridge.py
Sync bridge injection] end subgraph "Outputs" APK_OUT[.apk.tar.gz] APPIMAGE[.AppImage] DEB_OUT[.deb] RPM_OUT[.rpm] AUR_OUT[.pkg.tar.zst] end WC_CLONE --> WC_PATCH WC_PATCH --> WC_BUILD WC_BUILD --> STUBS WC_BUILD --> DEPS WC_BUILD --> DRAWER WC_BUILD --> BRIDGE STUBS --> TAURI_BUILD DEPS --> TAURI_BUILD DRAWER --> TAURI_BUILD BRIDGE --> TAURI_BUILD TAURI_BUILD --> PKG PKG --> APK_OUT PKG --> APPIMAGE PKG --> DEB_OUT PKG --> RPM_OUT PKG --> AUR_OUT
## WebClients Integration The WebClients frontend (Proton's React monorepo) requires several patching steps before it works in the Tauri shell: ### 1. `create_stubs.py` Proton WebClients uses private npm packages that aren't published publicly. This script creates stub packages with empty `index.js` files so the build can resolve imports without the real packages. ### 2. `fix_deps.py` Patches dependency issues in the WebClients build — resolves workspace configuration conflicts and fixes version mismatches between the monorepo and standalone build. ### 3. `patch_drive_linux_drawer.py` Injects the Drive sidebar/rail component. Called when the `add-drive-linux-drawer-rail.patch` fails to apply automatically (due to upstream WebClients changes). ### 4. `patch_drive_linux_sync_bridge.py` Injects `ProtonDriveLinuxSyncBridge.tsx` into the Drive app. This component bridges the WebClients frontend with the Tauri sync backend via IPC. ## Build Scripts | Script | Location | Purpose | |---|---|---| | `build-webclients.sh` | `scripts/` | Full WebClients build: clone, patch, install, build Drive/Account/Verify | | `build-aur-package.sh` | `scripts/ci/` | AUR package build (PKGBUILD generation) | | `build-alpine-320-apk.sh` | `scripts/ci/` | Alpine 3.20 APK | | `build-alpine-322-apk.sh` | `scripts/ci/` | Alpine 3.22 APK | | `build-alpine-323-apk.sh` | `scripts/ci/` | Alpine 3.23 APK | | `build-opensuse-tumbleweed-rpm.sh` | `scripts/ci/` | openSUSE RPM | | `check-login-routing-regressions.sh` | `scripts/ci/` | Login/2FA routing regression tests | | `check-sync-regressions.sh` | `scripts/ci/` | Sync regression tests | | `write-artifact-manifest.sh` | `scripts/ci/` | Artifact metadata generation | ## Running Locally ```bash # Build WebClients first ./scripts/build-webclients.sh # Then build Tauri cd src-tauri cargo build --release ```