Files
Voiced/docs/RELEASE.md
T
2026-10-05 12:37:42 +05:30

4.4 KiB

Release checklist

Run from the repository root on a quiet machine, on a branch cut from main.

1. Version

Keep these in step: package.json and the root entry of package-lock.json, src-tauri/Cargo.toml and src-tauri/Cargo.lock (cargo update --offline -p voiced), src-tauri/tauri.conf.json, and version= plus revision= in packaging/void/template. The PDF Creator string follows package.json (src/lib/pdf.tsx); layout fingerprints do not include it, so goldens stay unchanged.

2. Gates

npm run build
npm test                                   # about 7 minutes
npm run fonts:verify
cargo test --manifest-path src-tauri/Cargo.toml
cargo tree -i aws-lc-sys --manifest-path src-tauri/Cargo.toml                                  # must not match
cargo tree -i aws-lc-sys --manifest-path src-tauri/Cargo.toml --target x86_64-pc-windows-msvc  # must not match

Real-webview self-test on the debug build:

npm run tauri -- build --debug --no-bundle --features custom-protocol
VOICED_SELFTEST_OUT=/tmp/voiced-e2e/report.json XDG_DATA_HOME=/tmp/voiced-e2e/data \
  XDG_CONFIG_HOME=/tmp/voiced-e2e/config timeout 180 src-tauri/target/debug/voiced

/tmp/voiced-e2e/report.json must contain "ok": true. Repeat the same check on each installed build with Settings, Diagnostics.

3. Void package

./packaging/void/build-xbps.sh
tar --zstd -tf build/void/repo/voiced-<version>_1.x86_64.xbps | less

Expect ./usr/bin/voiced, the desktop file, hicolor icons, usr/share/fonts/voiced/<family>/*.ttf, usr/share/licenses/voiced/*-OFL.txt, ./INSTALL and ./REMOVE. Then install it into a clean container:

podman run --rm -v "$PWD/build/void/repo:/repo:Z" ghcr.io/void-linux/void-glibc-full sh -c '
  xbps-install -Syu xbps && xbps-install -y -R /repo voiced &&
  fc-list | grep -iE "montserrat|poppins|lustria|dm sans|inter|jost|open sans|ibm plex" &&
  ls /usr/share/licenses/voiced && ldd /usr/bin/voiced | grep "not found"; xbps-remove -y voiced'

ldd must print no not found line, and xbps-remove must finish without errors. Optionally build with xbps-src in a void-packages checkout (see the README).

4. Windows installer

npm run app:build:windows            # standard installer
npm run app:build:windows:offline    # only for machines without internet

Needs cargo-xwin, makensis and the NSIS plugin cache (README, "Building for Windows"). Check the size of src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/*-setup.exe against the budget of about 25 MB. Optional: sign it with osslsigncode. Never commit build outputs (build/, dist/, src-tauri/target/).

5. Manual first-run checklist (on a real machine, installed build, not app:dev)

Linux and Windows. Windows has never been run on real hardware, so treat it as untested until this passes.

  • Onboarding and Branding. Complete first-run setup; upload a wide and a square logo, check the dark-theme wordmark and the signature.
  • Template picker. Open all 14 templates; switch A4 and Letter and the margin presets; check the logo slots.
  • Export. Issue an invoice; export searchable and flattened; change settings and re-export; "Original as issued" must be byte-identical to the archived PDF. On Windows, check file names with /, : and reserved names.
  • Fonts. Settings, Fonts: import a TTF for Now, Gotham or Open Sauce One (if a licensed file is at hand), confirm a template that uses it changes, remove it again.
  • Clients. Create a client with structured address and GST category; use it on an invoice.
  • Settings tabs. Business, Branding, Bank and payments, Invoice defaults, Numbering, Templates and export, Fonts, Data, Integrations: open each and save a change.
  • History, detail and payments. Filter the list; open an invoice; record a payment with TDS; cancel one; export CSV, JSON and voiced.invoice.v1.
  • Data. Backup now, change something, restore the backup, restart, confirm the data returned and that backups/pre-restore-* exists. Confirm the archive and fonts directories (Windows: under %LOCALAPPDATA%).
  • Integrations. Test connection and push an invoice to a test ERPNext (README, "ERPNext integration").
  • Single instance. Launch a second copy: the first window must come to the front.

6. Open items

A chartered accountant's sign-off on the SAC code and the signature rule is still open.