Files
xavierk 0faf3d63ee Release 1.1.0
Version bump, the README line about units, and two new manual checks in the release checklist (export then New invoice
through the real save dialog, and units).

Claude-Session: https://claude.ai/code/session_01PZypiWDfMkDTeEPeXjRhW5
2026-10-06 09:35:26 +05:30

4.9 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.
  • Export, then New invoice. Issue and export in both formats through the real save dialog, press "New invoice", issue and export a second one. The window must stay usable after every export (1.1.0 fixed a blank window caused by buttons inside a Carbon notification; the dialog itself can only be checked by hand).
  • Units. Add a rate line in hours typed as 4:30 (amount counts 4.5), one in km and one with a custom unit; check the quantity and rate columns on a few templates and A4/Letter.
  • 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.