Files
Voiced/docs/RELEASE.md
T
xavierk 129bde35dd Prepare the 1.0.0 release (Phase G)
- Bump the version to 1.0.0 in package.json, Cargo.toml, tauri.conf.json and the Void template. Fingerprint goldens are unchanged.
- Rewrite the README: features, data paths on Linux and Windows, backup and restore (backups contain the ERPNext API secret), bundled fonts and licences, font overrides, the ERPNext recipe, build and packaging commands, gates and known limitations.
- Add docs/RELEASE.md with the release steps and a manual first-run checklist.
- Void template: use a plain npm ci (the optional-dependency omit breaks vite and tsc), and note vendoring and that no OpenSSL is needed.

Verified: build-xbps.sh builds voiced-1.0.0_1; it installs and removes cleanly in a clean void-glibc container with fonts, licences and fc-cache handling in place. The cross-compiled NSIS installer is 11.45 MiB and has not been run on Windows.
2026-10-04 23:56:32 +05:30

4.7 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. Canva licence

The 13 Canva-derived templates are re-creations of Canva designs. Canva's content licence may restrict that. Until it is confirmed in writing, distribute builds containing those templates only to this vendor. If the answer is no, remove the templates from src/pdf/templates/registry.ts and catalog.ts (Classic stays) and rebuild. Also still open: a chartered accountant's sign-off on the SAC code and the signature rule.