This guide is for release maintainers. For everyday usage and operator flows, start with the root README, daily usage, and notifications guide.
Use this checklist before publishing a new taskers Linux release.
- Make sure the release work is recorded clearly in
jj. - Describe the current change with
jj desc -m "<type>: <summary>"if needed. - Split unrelated work into separate changes before publishing.
- Bump the workspace version in
Cargo.tomland update any internal dependency version pins that still reference the previous release.
- On Ubuntu 24.04, install the Linux UI dependencies first:
sudo apt-get install -y libgtk-4-dev libadwaita-1-dev libjavascriptcoregtk-6.0-dev libwebkitgtk-6.0-dev xvfb- Run the full active workspace test suite:
cargo test- Build the mainline app and run the headless smoke:
cargo build -p taskers-gtk --bin taskers-gtk
TASKERS_TERMINAL_BACKEND=mock \
bash scripts/headless-smoke.sh \
./target/debug/taskers-gtk \
--smoke-script baseline \
--diagnostic-log stderr \
--quit-after-ms 5000- Build the Linux bundle and verify the published launcher path:
bash scripts/build_linux_bundle.sh
bash scripts/smoke_linux_release_launcher.shThe output asset name must match:
taskers-linux-bundle-v<version>-<target>.tar.xz
- Build the release manifest from the generated assets:
python3 scripts/build_release_manifest.py- Dry-run the leaf crates that do not depend on unpublished workspace siblings:
cargo publish --dry-run -p taskers-domain
cargo publish --dry-run -p taskers-paths- After you bump the workspace to a new unpublished version,
cargo publish --dry-runfor dependent crates will still resolve dependencies from crates.io and fail until the earlier crates are actually published. That failure is expected for:taskers-controltaskers-runtimetaskers-ghosttytaskers-clitaskers
Before publishing, also verify the operator path still works:
cargo run -p taskers-cli -- --help
cargo run -p taskers-cli -- notify --help- Push the release tag so GitHub Actions can assemble the assets and attach them to a draft GitHub release.
- Confirm the draft release tagged
v<version>contains:taskers-manifest-v<version>.jsontaskers-linux-bundle-v<version>-x86_64-unknown-linux-gnu.tar.xztaskers-ghostty-runtime-v<version>-x86_64-unknown-linux-gnu.tar.xz
- Publish the GitHub release so the launcher assets are publicly downloadable before publishing the crates.
- Publish the crates to crates.io in dependency order:
cargo publish -p taskers-domain
cargo publish -p taskers-paths
cargo publish -p taskers-control
cargo publish -p taskers-runtime
cargo publish -p taskers-ghostty
cargo publish -p taskers-cli
cargo publish -p taskers- Verify the Linux launcher install:
cargo install taskers --locked
taskers- Confirm the published Linux launcher downloads the exact version-matched bundle on first launch.
- Confirm
cargo install taskers-cli --bin taskersctl --lockedstill works as the standalone helper path. - Confirm
cargo install taskers --lockedon macOS fails with the Linux-only guidance from the launcher crate.
For dev-desktop testing against the local checkout after a release pass:
bash scripts/install-dev-desktop-entry.shThat reinstalls the repo-local app into Cargo's bin directory and repoints the desktop entry to that installed binary.