mirror of
https://github.com/UNITRONIX/BetterDesk.git
synced 2026-09-11 01:55:43 +00:00
fbdf5ba19e
Stable Release/tag builds were skipped for [version-bump] commits and never moved latest, so Docker installs on :latest stayed on 3.5.4 without the #382 signal fix. Dispatch now publishes latest + VERSION. Refs #387 Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
149 lines
9.1 KiB
Markdown
149 lines
9.1 KiB
Markdown
# Pre-Release Validation Checklist
|
|
|
|
Use this checklist before every tagged release to ensure quality and stability.
|
|
|
|
---
|
|
|
|
## 1. Go Server
|
|
|
|
- [ ] **Build**: `cd betterdesk-server && go build -o betterdesk-server .` — exits 0
|
|
- [ ] **Vet**: `go vet ./...` — no warnings
|
|
- [ ] **Tests**: `go test ./...` — all pass
|
|
- [ ] **Cross-compile**: `GOOS=linux GOARCH=amd64`, `GOOS=linux GOARCH=arm64`, `GOOS=windows GOARCH=amd64`
|
|
- [ ] **Binary starts**: runs with `--help`, prints version
|
|
- [ ] **SQLite migration**: fresh DB created and migrated automatically
|
|
- [ ] **PostgreSQL migration**: (if available) fresh DB created and migrated
|
|
|
|
## 2. Node.js Console
|
|
|
|
- [ ] **Install**: `cd web-nodejs && npm ci` — exits 0
|
|
- [ ] **Audit**: `npm audit --omit=dev --audit-level=moderate` — 0 moderate+ vulnerabilities (or documented exceptions)
|
|
- [ ] **Unit tests**: `npm run test:ci` — all pass (same command as Web Console CI)
|
|
- [ ] **Secret scan**: `gitleaks detect --source . --config .gitleaks.toml` and `bash scripts/check-no-sensitive-paths.sh` — no operator fingerprints
|
|
- [ ] **i18n coverage**: `npm run i18n:check` — 0 missing keys across all languages
|
|
- [ ] **Startup**: `node server.js` starts without errors, serves on port 5000
|
|
- [ ] **Login**: Admin login works, session created
|
|
- [ ] **Critical pages**: Dashboard, Devices, Users, Settings render correctly
|
|
|
|
## 3. RdClient Desktop (Tauri)
|
|
|
|
- [ ] **Install deps**: `cd rdclient-desktop && npm ci`
|
|
- [ ] **Rust check**: `cd rdclient-desktop/src-tauri && cargo check && cargo test discovery`
|
|
- [ ] **Tauri build**: `npm run build` — deb/AppImage/MSI as configured
|
|
- [ ] **Setup**: LAN discovery or manual URL; `probe_server_url` rejects non-panel hosts
|
|
- [ ] **Settings**: sign out, reset client clears cookies + vault
|
|
- [ ] **Linux session**: VP9/H.264 stable on WebKitGTK (no AV1 decode loop)
|
|
- [ ] **Windows**: WebView2 runtime present; session connects
|
|
- [ ] **Generator RdClient**: new bundle → 6 platform builds queue on build host with Rust/Tauri toolchain
|
|
|
|
## 4. BetterDesk Desktop (native Rust + Flutter)
|
|
|
|
- [ ] **Core tests**: `cd betterdesk-desktop && cargo test`
|
|
- [ ] **Flutter tests**: `cd betterdesk-desktop/flutter && flutter test`
|
|
- [ ] **Toolchain check**: `python betterdesk-desktop/build.py check`
|
|
- [ ] **Windows artifacts**: EXE, portable ZIP and MSI are attached to the release
|
|
- [ ] **Linux artifacts**: `.deb`, `.rpm`, AppImage and `.tar.gz` are attached
|
|
- [ ] **Checksums**: `DESKTOP_CHECKSUMS.sha256` matches every desktop artifact
|
|
- [ ] **Setup**: manual HTTPS URL, scheme-less auto-probe, explicit HTTP, deploy string and loopback URL work
|
|
- [ ] **Security**: explicit HTTP is visibly reported as plaintext; invalid server key and URL credentials are rejected
|
|
- [ ] **Tray**: closing the window hides it; tray menu restores or explicitly quits
|
|
- [ ] **Elevation**: machine/security settings fail closed without UAC/polkit confirmation
|
|
- [ ] **Identity**: durable device ID, secure Ed25519 key and rotating session password survive restart
|
|
- [ ] **Remote desktop**: Windows capture, input, clipboard, bounded files, audio negotiation and monitor enumeration are exercised in both directions
|
|
- [ ] **Interop**: BetterDesk Desktop ↔ BetterDesk server ↔ RustDesk peer and CDAP agent
|
|
- [ ] **Performance**: UI remains responsive during connection, reconnect and transfers
|
|
|
|
## 5. Desktop Client (Tauri — legacy betterdesk-mgmt)
|
|
|
|
- [ ] **Install deps**: `cd betterdesk-mgmt && pnpm install`
|
|
- [ ] **Frontend build**: `pnpm build` — no errors
|
|
- [ ] **Tauri build**: `cargo tauri build` — NSIS + MSI produced
|
|
- [ ] **Installer runs**: installs and launches without crash
|
|
- [ ] **Single-instance**: second launch brings first to foreground
|
|
|
|
## 5. Agent Client (Tauri)
|
|
|
|
- [ ] **Install deps**: `cd betterdesk-agent-client && pnpm install`
|
|
- [ ] **Build**: `cargo tauri build` — NSIS produced
|
|
- [ ] **Setup wizard**: 5-step onboarding completes successfully
|
|
- [ ] **Registration**: device appears in server peer list
|
|
|
|
## 6. Native Agent (Go)
|
|
|
|
- [ ] **Build**: `cd betterdesk-agent && go build -o betterdesk-agent .`
|
|
- [ ] **Connection**: connects to CDAP gateway, manifests registers
|
|
- [ ] **Heartbeat**: metrics flow (CPU / Memory / Disk)
|
|
|
|
## 7. Docker
|
|
|
|
- [ ] **Build all images**: `docker compose build` — no errors
|
|
- [ ] **Start stack**: `docker compose up -d` — all containers healthy
|
|
- [ ] **API reachable**: `curl http://localhost:21114/api/health` returns OK
|
|
- [ ] **Console reachable**: `curl http://localhost:5000` returns HTML
|
|
- [ ] **Single-container (local build):** `docker compose -f docker-compose.single.yml up -d` works
|
|
- [ ] **Official quick-start (GHCR pull):** `docker compose -f docker-compose.quick.single.yml pull && up -d` works
|
|
|
|
## 8. Installer Scripts
|
|
|
|
- [ ] **Linux fresh**: `sudo ./betterdesk.sh --auto` on clean Ubuntu/Debian
|
|
- [ ] **Linux update**: `sudo ./betterdesk.sh` option 2 preserves DB + config
|
|
- [ ] **Linux privilege migration**: run
|
|
`sudo node web-nodejs/scripts/linux-ensure-console-user.js`; verify the
|
|
sudoers file contains only the fixed
|
|
`/usr/local/libexec/betterdesk/betterdesk-privileged-update.js` broker and
|
|
no `ExecStartPre=+...linux-ensure-console-user.js` remains in the console
|
|
unit.
|
|
- [ ] **Linux protected binary**: if the Go server is root-owned, deploy the
|
|
reviewed binary with the documented root-only helper; confirm the panel
|
|
reports a manual step instead of using `sudo` on repository scripts.
|
|
- [ ] **Windows fresh**: `.\betterdesk.ps1 -Auto` on clean Windows Server
|
|
- [ ] **Windows update**: `.\betterdesk.ps1` option 2 preserves DB + config
|
|
- [ ] **Docker script**: `./betterdesk-docker.sh` option 1 installs successfully
|
|
- [ ] **Static CI**: `Installer CI` passes Bash syntax, PowerShell AST and
|
|
Compose validation; `install.sh` is included in version verification.
|
|
- [ ] **Installer unit gate**: `Installer CI` runs the protocol, safe-path,
|
|
disk-space preflight and binary-rollback tests; the non-mutating `--help`
|
|
checks pass.
|
|
- [ ] **Protocol matrix**: run
|
|
`node scripts/installer-protocol-check.js` against the selected API,
|
|
console/reverse-proxy URL and signal/relay ports; for HTTPS confirm the
|
|
certificate SAN and redirect behaviour.
|
|
- [ ] **Agent fallback**: Linux agent service and Windows NSSM service start;
|
|
on a disposable Windows host with NSSM unavailable, the scheduled-task
|
|
fallback starts and `-Uninstall` / `-u` removes both service/task variants
|
|
while preserving data; use `-Purge` / `--purge` only for explicit cleanup.
|
|
- [ ] **Support Agent lifecycle**: `betterdesk-support-agent -install` is
|
|
idempotent; `-uninstall` removes autostart and binaries while preserving
|
|
enrollment state, and `-uninstall -purge` removes state only when requested.
|
|
- [ ] **Native uninstall**: `betterdesk.sh --auto --uninstall` and
|
|
`betterdesk.ps1 -Auto -Uninstall` remove services while preserving data;
|
|
repeat with `--purge` / `-Purge` only when data removal is intended.
|
|
- [ ] **Docker uninstall**: default `install.sh --uninstall` preserves
|
|
volumes; `--purge` removes them only after an explicit data-loss decision.
|
|
- [ ] **Rollback**: force a failed update in a disposable environment and
|
|
confirm the previous console/source/binary remains usable and update SHA is
|
|
not advanced.
|
|
- [ ] **Runtime smoke**: run the manual `Installer CI` Docker runtime smoke
|
|
workflow for the exact GHCR tag intended for release.
|
|
- [ ] **Lifecycle E2E**: on isolated Linux and Windows hosts, execute fresh
|
|
install → update → repair → backup/restore → uninstall → reinstall; record
|
|
elapsed time and confirm no duplicate services, rules or data.
|
|
|
|
See [`docs/important/installer-contract.md`](important/installer-contract.md)
|
|
for the lifecycle guarantees and platform endpoint matrix.
|
|
|
|
## 9. Documentation & Release
|
|
|
|
Applies only to merges into **`main`** (stable). Version bump, tag, and GitHub Release are automated by [`.github/workflows/version-bump-main.yml`](../../.github/workflows/version-bump-main.yml) — see [branching-and-versioning.md](important/branching-and-versioning.md).
|
|
|
|
- [ ] **PR source:** changes merged from `dev` → `main` (not direct commits to `main`)
|
|
- [ ] **CHANGELOG.md:** `[Unreleased]` section reflects this release (CI moves it into the version section on merge)
|
|
- [ ] **README.md:** reflects current features
|
|
- [ ] **Version parity:** `node scripts/bump-version.js --verify` passes locally (CI enforces on version file changes)
|
|
- [ ] **After merge:** verify CI created tag `v<version>` and GitHub Release
|
|
- [ ] **GHCR image tags:** verify `ghcr.io/unitronix/betterdesk` (official), `betterdesk-server`, and `betterdesk-console` show semver tag (e.g. `3.1.0`) and git ref (`v3.1.0`) after workflow completes
|
|
- [ ] **Sync dev:** merge `main` → `dev` so development continues from the new minor version
|
|
- [ ] **Manual fallback:** Actions → “Build & Publish Docker Images” → Run workflow → leave tag `latest` (publishes `latest` + current `VERSION`) or set tag input `v<version>` if you only need a custom tag. Confirm package tags include both semver and `latest` after a stable release.
|
|
- [ ] **No secrets in diff:** `git diff --cached` has no API keys / passwords
|
|
- [ ] **No debug code:** no `console.log` debug statements, no `TODO` in shipped code
|