notes/RELEASING.md
Dioxus is big and requires a lot of hand-holding to release. This guide is accurate as of Dec 17, 2024. As we improve the release process, we'll update this guide.
What we need to release:
This involves making sure the metadata of the crates is correct before we publish.
git or path dependencies - all dependencies should be versionedcargo doc --workspace --no-deps --all-features --document-private-items to make sure docs can compilecargo owner --add github:dioxuslabs:publish <crate>)cargo run --example <example> and dx run <example> should both work.cargo install --path packages/cli). Ideally cargo update as well since crates.io doesn't use a locked install.cargo workspaces. This involves going to Cargo.toml and updating the [workspace.package] version and each crate's version to the new version in the [workspace.dependencies] section.dx new to work. It's likely that this already exists since we tend to try dx new frequently before releasing.dioxus are updated to point to the new version. This involves basically CTRL-F'ing for /0.6/ and replacing it with /0.7/ etc.main branch and pushed to github.main branch (cargo workspaces publish requires you to be on the main branch)cargo-workspaces installed. There are other tools but this one is the one we've used in the past. It has some small bugs but is generally reliable. This tool is important because it coordinates the release order of the crates since they depend on each other. Eventually cargo itself will have this functionality, I believe. Unfortunately, there's no way to "dry-run" a workspace publish since crates rely on each other and won't succeed if their dependencies aren't published.cargo workspaces publish --publish-as-is --allow-dirty --no-git-push --no-individual-tags. This will publish the crates to crates.io. It might take a while. Only jkelleyrtp currently has sufficient rate-limits to publish all the crates at once. If any crate fails, you might need to fix the problems manually and then run the command again. If an error occurs, you might also need to reset the most recent git commit and wipe the tag. git reset --hard HEAD~1 and git tag -d <tag>. Be careful with these commands, especially if you're on the main branch.main branch and push it.main branch, e.g. git push origin v0.6.0docs.rs builds the new docs for each crate. IE go to https://docs.rs/crate/dioxus/latest and ensure there's no errors. We've had issues before with docs.rs not building properly.dx new app. Do a dry-run of building a new app to make sure it works and no obvious errors are present.Publish CLI github action using a manual trigger. Fill in the small form with the appropriate information. This should be the version you just released IE v0.6.1. The corresponding github release post must exist for the binstall to be published! You need to be part of the dioxuslabs/publish org to trigger this action.deploy.yml to point to the new binstall versiongit or path dependencies and crates.io patches.examples/untested folder.dioxus version in Cargo.toml (use the docsite as a canary)dx serve and make sure it worksssg is properly generating all the pages. Currently it's flakey and occasionally fails.This is very manual. In theory it can be automated but I've struggled with the azure portal in the past.
package.json and package-lock.jsonwasm-bindgen is installed to current version (cargo binstall wasm-bindgen-cli)npm install to make sure you install all the dependenciesnpm run vsix to create the vsix filevsce publish or manually upload the vsix file to the marketplaceThere are a number of crates that are part of the Dioxus ecosystem that we usually want ready before publishing to reddit/twitter/youtube/etc.
Verify everything works and is ready to go.
dx new app plus dx serve works out of the box. hot-reload works for rsx and assets.wasm-bindgen errors popup, especially with version bumps.Actually marketing:
github:dioxuslabs:publish to be able to publish all the crates at once.examples/untested folder when we release a new version. Ideally we have a workspace with all versions of dioxus and can include the examples in the relevant frames.docs CI using DOCS_RS env var to ensure docs are built the same way as docs.rs