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.