Open
Description
Thoughts
- Version bumping is time consuming and feels automateable.
- The steps before it (test, build, lint) should be run in the CI - also when releasing.
- Releases span JS (npm) and RUST (cargo) repositories. Ideally, both are automated.
- Manual changelog editing is proven to be error-prone. Let's get rid of it. Conventional Commits seems like a better paradigm.
- Version bumps require commit, so probably require an automated PR - or we need a CLI that also commits. In any case, we can't have the CI bumping code without a PR.
Right now releasing a new version is too much manual work:
In browser
pnpm lint-fix
- commit any changes (if they are there)
pnpm build
to build typescript files (don't skip this!)- make sure
atomic-server
is running onlocalhost
. pnpm test
pnpm test-e2e
- Update the
package.json
files forlib
,rust
, anddata-browser
with a new version number. Match the version number withatomic-data-rust
- Check the changelog, make sure the headers are correct
- Now do the rust libraries
- Commit any changes, name it
vX.XX.XX
pnpm publish -r
- Choose a new version. Versions should match
atomic-data-rs
. - This updates the
package.json
files, creates a commit, tags it, pushes it to github, and publishes the builds to npm. - If this fails, try
pnpm version patch
andpnpm publish
- DONT run
pnpm npm publish
, as it will not resolve workspace dependencies correctly.
- Choose a new version. Versions should match
In the rust crates
- Commit changes
- Make sure all tests run properly
- Test, build and update the
/browser
versions (package.json
files, see./browser/contributing.md
) - Use
cargo workspaces version patch --no-git-commit
(and maybe replacepatch
with theminor
) to update allcargo.toml
files in one command. You'll need tocargo install cargo-workspaces
if this command is not possible. - Publish to cargo:
cargo publish
. Firstlib
, thencli
andserver
. - Publish to
npm
(seebrowser/contribute.md
) - Update the
CHANGELOG.md
files (browser and root)
Solutions
cargo-release
automates bumping versions and publishing. I used it some time ago, for somereason removed it from the docs. I recall having some issues with it.release-plz
, which creates PRs for releases. Written in rust, supports only rust.release-please
, does the same, typescript, by google. Supports rust workspaces with a plugin, but also supports pnpm.