Release Process
July 18, 2026 ยท View on GitHub
This is the end-to-end release checklist for Row-Bot.
Versioning
Row-Bot uses semantic versioning:
- Patch:
3.17.1for bug fixes - Minor:
3.21.0for new backwards-compatible features - Major:
4.0.0for breaking changes - Beta/RC:
3.21.0-beta.1,3.21.0-rc.1
Before release
-
Make sure all feature/fix PRs are merged to
main. -
Run the full suite locally:
python -m pip install "uv>=0.7,<1.0" uv lock --check python scripts/export_locked_requirements.py --check uv sync --locked --all-extras --group test uv run python scripts/verify_runtime_dependencies.py all uv run python scripts/run_test_matrix.py release -
Cut a release-prep branch:
git checkout main git pull --ff-only git checkout -b chore/release-vX.Y.Z -
Bump versions with:
python scripts/cut_release.py X.Y.ZThis updates
src/row_bot/version.py,installer/row_bot_setup.iss,installer/install_deps.bat, theStart Row-Bot.commandfallback,.github/workflows/release.yml, the macOS appInfo.plist, the bug report version placeholder, and the brand/user-agent contract expectations. The Linux package script derives its version fromsrc/row_bot/version.pyor the workflowROW_BOT_VERSIONargument. -
Update
RELEASE_NOTES.mdwith human-readable notes. -
Confirm new shipped runtime files are covered by platform packaging: Windows
installer/row_bot_setup.iss, macOSinstaller/build_mac_app.sh, Linuxinstaller/build_linux_app.sh, the Linux bootstrapperinstaller/install-linux.sh, and the installer payload notes ininstaller/README.md. The current source-layout and payload contract is summarized indocs/SOURCE_LAYOUT.md. For Computer Use releases, also confirm the pinned Cua manifest is packaged while the third-party executable remains an explicit post-install download. -
Smoke-test first-run behavior against a clean data directory before building artifacts, especially setup wizard imports, provider config defaults, and Custom/Self-hosted endpoint setup. Confirm Computer Use remains off by default and does not download or invoke Cua before its disclosure and an explicit Install or Repair action.
-
Run focused startup and packaging hardening tests:
uv run python scripts/verify_runtime_dependencies.py all uv run python -m pytest tests/test_dependency_metadata.py tests/test_optional_dependency_imports.py tests/test_startup_hardening.py tests/test_app_port.py tests/test_linux_support.py -
For dependency, payload, or installer changes, run GitHub Actions ->
Installer Verifymanually on the release-prep branch. Windows, Linux, and macOS should all pass unless a skipped platform is documented. -
Open and merge the release-prep PR.
Build artifacts
-
Tag the release commit:
git checkout main git pull --ff-only git tag -a vX.Y.Z -m "vX.Y.Z" git push origin vX.Y.Z -
Run GitHub Actions ->
Release - Build & Sign Installersmanually. This produces Windows, macOS, and Linux workflow artifacts; final release assets are uploaded manually after signing and smoke testing. -
Download the Windows setup exe from the workflow artifact.
-
Sign it locally with the Certum certificate. Windows signing is intentionally not done in CI:
$signtool = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe" $exe = "dist\Row-Bot-X.Y.Z-Windows-x64.exe" & $signtool sign /sha1 2341B4B36A21DF948E538A88BB194FAE4D1CAE51 /fd SHA256 /tr http://time.certum.pl /td SHA256 /d "Row-Bot" /du "https://row-bot.ai" $exe & $signtool verify /pa /v $exe -
Upload the signed exe to the draft GitHub Release.
-
Run notarization workflows for macOS when needed and upload the stapled DMG.
-
Download the Linux
Row-Bot-X.Y.Z-Linux-x86_64.tar.gzartifact, extract it on a clean Linux VM, run./install.sh, and confirm~/.local/bin/row-botopens the browser UI and~/.local/bin/row-bot --server --no-open --port 8092answers/api/launcher-ping. -
Smoke-test the final Windows, macOS, and Linux artifacts. For Windows, include repair/upgrade over an existing install and confirm the bundled
python\directory is replaced while Row-Bot user data is preserved. If a broken optional package such as TorchCodec was present in the old embedded runtime, confirm it is removed or the startup log contains a clear recovery hint. Also run the packaged launcher recovery commands against a disposable data directory:--reset-tasks-db,--reset-db, and--restore-data. Confirm they print the resolved data paths and that task DB reset backs uptasks.db,tasks.db-wal, andtasks.db-shm. On Windows and macOS, also exercise Computer Use setup, telemetry consent, pinned-runtime verification, one target-window action, Stop, Take over, and permission recovery. Confirm screenshots and typed content do not appear in logs. On Linux, confirm Computer Use reports unsupported without attempting a driver download. -
Publish the GitHub Release.
-
Confirm
.github/workflows/update-manifest.ymlpatches SHA256 hashes into the release body. -
Test the packaged updater from the previous stable version on each platform.
v4 Rebrand Upgrade Note
Row-Bot v4 uses Row-Bot release asset names and the Row-Bot SHA256 manifest marker. Pre-v4 in-app updaters recognize only the old 3.x artifact and manifest contract, so do not upload duplicate legacy-named v4 assets to bridge that gap. For the v4 jump, direct existing users to download and run a Row-Bot v4 installer manually. Current Row-Bot releases no longer run the old automatic Thoth-to-Row-Bot startup migration; users still on Thoth or an early Row-Bot build should first install and launch a previous migration-capable Row-Bot release, then upgrade to the current release. Future Row-Bot releases are discoverable by the Row-Bot updater using the v4 asset contract.
Linux Release Notes
Linux is shipped as a one-line installer backed by a self-contained XDG
user-install tarball, not as a root package. The supported baseline launches
Row-Bot in the system browser and avoids requiring pywebview, GTK/Qt,
AppIndicator, or tray backends. Native window and tray mode can still be tested
manually with row-bot --native or row-bot --tray on desktops with the required
libraries.
The user-facing install command is:
curl -fsSL https://raw.githubusercontent.com/siddsachar/row-bot/main/installer/install-linux.sh | bash
The bootstrapper resolves the latest GitHub Release, downloads the matching
Row-Bot-X.Y.Z-Linux-ARCH.tar.gz, verifies its SHA256 from the release manifest,
and then runs the tarball's bundled install.sh.
For unreleased Linux hotfix validation from a checkout, use the build script, not the one-line bootstrapper. The bootstrapper always resolves published GitHub Release assets. From the repository root:
bash installer/build_linux_app.sh X.Y.Z
tar -xzf dist/Row-Bot-X.Y.Z-Linux-*.tar.gz
cd Row-Bot-X.Y.Z-Linux-*
./install.sh
~/.local/bin/row-bot
The root-level build_linux_app.sh wrapper delegates to
installer/build_linux_app.sh so support snippets run from the checkout root do
not fail with a missing-script error.
If packaged Linux startup fails after printing Row-Bot server started, collect:
tail -200 ~/.row-bot/row_bot_app.log
tail -200 ~/.row-bot/row_bot_app.log.prev
uname -a
cat /etc/os-release
~/.local/bin/row-bot --server --no-open --port 8092 --no-ollama
The launcher prints the selected port, child-process exit code when available,
and the tail of ~/.row-bot/row_bot_app.log on readiness failure. For slow machines
or first-run package initialization, increase the wait with
ROW_BOT_STARTUP_TIMEOUT=180 ~/.local/bin/row-bot.
The tarball installs under ~/.local/share/row-bot/releases/<version>, updates
~/.local/share/row-bot/current, creates ~/.local/bin/row-bot, and installs a
freedesktop .desktop file plus icon into user XDG locations. In-app updates
download the next Linux tarball, verify SHA256 through the release manifest,
install the new release under the same user-owned tree, flip the current
symlink, and restart through ~/.local/bin/row-bot.
Manual Linux smoke matrix before publishing:
- Ubuntu 22.04 or 24.04 GNOME Wayland
- Debian 12
- Fedora current
- Headless Ubuntu server mode
Minimum smoke checks:
- Fresh tarball install and desktop launcher
- Default installed command:
~/.local/bin/row-bot - One-line installer after the GitHub Release is published
~/.local/bin/row-bot --server --no-open --port 8092plus/api/launcher-ping- First-run setup with Providers and Custom/Self-hosted paths
- Ollama local model when
ollamais installed and inPATH - Browser tool after Playwright browser/dependency install
- Computer Use remains unavailable without attempting a Cua download
- Designer export and vault/open-folder actions
- Update from the previous Linux tarball to the new tarball
Camera/screenshot capture is optional on Linux. Missing OpenCV/MSS native
dependencies should disable those capture paths without preventing the app from
serving /api/launcher-ping.
Post-release
- Post release notes and announcement.
- Open a tracking issue for the next patch/minor release.
- Label any follow-up bugs with the released version.