mirror of
https://github.com/nimbold/Firelink.git
synced 2026-08-16 14:28:21 +00:00
feat(release): add cross-platform packaging
Add target-aware engine provisioning, platform package configs, and CI/release verification for macOS arm64, Windows x64, and Linux AppImage.
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
# Firelink Cross-Platform Release Checklist
|
||||
|
||||
Audit date: 2026-06-23
|
||||
|
||||
Targets:
|
||||
|
||||
- macOS arm64
|
||||
- Windows x64
|
||||
- Linux x64 AppImage
|
||||
|
||||
## Current status
|
||||
|
||||
| Target | Implementation | Validation |
|
||||
|---|---|---|
|
||||
| macOS arm64 | Complete | Native build, packaged-engine verification, and packaged launch smoke passed |
|
||||
| Windows x64 | Complete | Payload provision/static verification passed; native CI and clean-machine QA pending |
|
||||
| Linux x64 AppImage | Complete | Payload provision/static verification passed; native CI and desktop-matrix QA pending |
|
||||
|
||||
Windows/Linux publication remains blocked until native GitHub Actions and clean-machine QA pass. macOS distribution is intentionally unsigned and unnotarized because no Apple Developer account is planned.
|
||||
|
||||
## Implemented foundations
|
||||
|
||||
- Central target triple, executable suffix, trusted system `PATH`, engine naming, and path-comparison helpers.
|
||||
- Target-aware engine resolver for development and packaged resources.
|
||||
- Absolute yt-dlp downloader/tool paths. Unix symlink staging removed.
|
||||
- Official PyInstaller **onedir** yt-dlp payloads retained for every target.
|
||||
- Checksum-pinned source archives, payload manifests, target-only staging, and packaged-resource verification.
|
||||
- macOS Keychain, Windows Credential Manager, and Linux Secret Service keyring backends.
|
||||
- Session-only browser pairing fallback when native credential storage is unavailable.
|
||||
- OS standard directories plus synchronously persisted user-approved download roots.
|
||||
- Windows reserved filename sanitization and platform-correct duplicate path comparison.
|
||||
- Platform-specific Tauri window and bundle configuration.
|
||||
- Native CI matrix and release jobs for unsigned macOS DMG, unsigned Windows NSIS, and Linux AppImage.
|
||||
- Linux deep-link registration without native messaging.
|
||||
- Platform-aware scheduler permissions, tray/menu labels, dock badge, notifications, proxy behavior, and sleep prevention.
|
||||
- Cancellable delayed post-queue system actions with active-transfer recheck.
|
||||
- Bounded local logging enabled by default, secret/home-path redaction, and safe export naming.
|
||||
- Third-party notices and engine provenance locks included in packages.
|
||||
|
||||
## Engine payloads
|
||||
|
||||
Required names:
|
||||
|
||||
```text
|
||||
macOS arm64
|
||||
aria2c-aarch64-apple-darwin
|
||||
yt-dlp-aarch64-apple-darwin
|
||||
ffmpeg-aarch64-apple-darwin
|
||||
deno-aarch64-apple-darwin
|
||||
|
||||
Windows x64
|
||||
aria2c-x86_64-pc-windows-msvc.exe
|
||||
yt-dlp-x86_64-pc-windows-msvc.exe
|
||||
ffmpeg-x86_64-pc-windows-msvc.exe
|
||||
deno-x86_64-pc-windows-msvc.exe
|
||||
|
||||
Linux x64
|
||||
aria2c-x86_64-unknown-linux-gnu
|
||||
yt-dlp-x86_64-unknown-linux-gnu
|
||||
ffmpeg-x86_64-unknown-linux-gnu
|
||||
deno-x86_64-unknown-linux-gnu
|
||||
```
|
||||
|
||||
Supply-chain files:
|
||||
|
||||
- `engines.lock.json`: committed macOS payload hashes.
|
||||
- `engine-sources.lock.json`: Windows/Linux archive URLs and hashes.
|
||||
- `scripts/provision-engines.js`: download, checksum, extract, normalize, and manifest.
|
||||
- `scripts/stage-engines.js`: verify and stage one target.
|
||||
- `scripts/verify-binaries.js`: architecture, runtime layout, linkage, version, startup, and aria2 RPC checks.
|
||||
|
||||
yt-dlp must remain launcher plus adjacent `_internal`. Onefile builds are rejected. Warm startup target remains below eight seconds; current macOS warm `--version` measured about 0.23 seconds.
|
||||
|
||||
## Filesystem and permissions
|
||||
|
||||
- Download authorization uses canonical paths and approved roots; no hardcoded `/Volumes`.
|
||||
- Folder-dialog selections are approved synchronously in backend before enqueue, avoiding settings-persistence races.
|
||||
- Open, reveal, replace, and delete operations remain constrained to Firelink-owned paths.
|
||||
- `~`, Windows separators, missing leaf components, symlinks, and case rules are handled per platform.
|
||||
- Scheduler automation permission controls appear only on macOS. Windows/Linux show honest system-policy behavior.
|
||||
- Sleep prevention uses platform backend behavior and surfaces errors.
|
||||
- Browser pairing survives credential-store failure only for current session and reports that state.
|
||||
|
||||
## Desktop integration
|
||||
|
||||
- macOS: dock badge, menu-bar wording, transparent sidebar window, unsigned/unnotarized release.
|
||||
- Windows: system tray wording, Mica window config, NSIS installer, SmartScreen warning expected while unsigned.
|
||||
- Linux: system tray wording, opaque decorated window, AppImage, runtime deep-link registration.
|
||||
- Notifications request permission and surface denial/errors. Sound names are platform-specific where verified.
|
||||
- Post-queue sleep/shutdown/restart waits ten seconds, can be cancelled, and aborts if transfers resume.
|
||||
|
||||
## Logging and privacy
|
||||
|
||||
- Logging starts enabled and rotates at 10 MB with three retained files.
|
||||
- Authorization, cookies, signed URL queries, tokens, and home paths are redacted.
|
||||
- Export avoids exposing source log directory paths.
|
||||
- Logs remain local unless user explicitly exports them.
|
||||
|
||||
## Browser integration
|
||||
|
||||
- Existing authenticated loopback HTTP integration remains.
|
||||
- Responses identify Firelink through `X-Firelink-Server`.
|
||||
- Pairing tokens use native credential storage where available.
|
||||
- No native-messaging dependency is introduced.
|
||||
|
||||
## Validation completed
|
||||
|
||||
- Frontend: 31 tests passed.
|
||||
- Rust: 82 unit tests passed, 1 network-dependent test ignored.
|
||||
- Download engine: 5 integration tests passed.
|
||||
- Queue manager: 17 integration tests passed.
|
||||
- TypeScript/Vite production build passed.
|
||||
- Rust/TypeScript binding generation passed.
|
||||
- Windows and Linux payload provisioning plus static architecture/runtime-layout verification passed.
|
||||
- macOS target staging, engine runtime/RPC verification, release `.app` build, packaged-resource verification, notice layout, and outside-repository launch smoke passed.
|
||||
- Workflow YAML parsing and `git diff --check` passed.
|
||||
|
||||
## Native QA still required
|
||||
|
||||
### Windows x64
|
||||
|
||||
- Run CI/release jobs on `windows-latest`.
|
||||
- Install NSIS output on clean Windows 11 x64.
|
||||
- Verify SmartScreen flow, tray, notifications, sleep prevention, file dialogs, path case behavior, Credential Manager persistence, browser handoff, media download, pause/resume, replace/delete, scheduler, and uninstall.
|
||||
|
||||
### Linux x64
|
||||
|
||||
- Run CI/release jobs on Ubuntu 22.04.
|
||||
- Launch extracted AppImage under X11 and Wayland desktops.
|
||||
- Verify Secret Service present and absent behavior, tray support variance, notifications, sleep inhibition, file dialogs, deep links, browser handoff, media download, pause/resume, replace/delete, scheduler, and AppImage portability.
|
||||
|
||||
### macOS arm64
|
||||
|
||||
- Test downloaded unsigned artifact on a clean machine.
|
||||
- Confirm documented Finder/Privacy & Security approval flow.
|
||||
- Verify first-launch unsigned-engine delay, notifications, menu bar, sleep prevention, scheduler automation permission, browser handoff, and media download.
|
||||
|
||||
## Release decision
|
||||
|
||||
Implementation phase is complete. Release certification is not complete until native Windows/Linux workflows and clean-machine QA pass. Failures found there must be fixed at root before publication.
|
||||
Reference in New Issue
Block a user