# Releasing

Releasing a new version needs a few steps that we want to automate, yet are currently manual:

## Update the version in file `Cargo.toml`

Edit the file `Cargo.toml`.

Update the version number.

## Update the version and date in the files `lib.rs` and `README.md`

Edit the file `lib.rs` and `README.md`.

Update the version number.

Update the date stamp, which uses ISO UTC format.

## Update the version in all source files

Search for:

```text
assertables/1.0.0/
```

Replace with:

```text
assertables/1.1.0/
```

## Verify

Verify everything is correct locally:

```sh
cargo fmt
cargo test
cargo deny check
cargo semver-checks
cargo build --release
cargo doc
```

## Generate docs as JSON & markdown & llms.txt

Run:

```sh
RUSTC_BOOTSTRAP=1 RUSTDOCFLAGS="-Z unstable-options --output-format json" cargo doc --no-deps
rustdoc-md --path target/doc/assertables.json --output assertables.md
cp assertables.md llms.txt
```

The code above generates the crate's documentation:

1. Generate one JSON file `target/doc/assertables.json`.

2. Convert from the JSON file into a Markdown file `target/doc/assertables.md`.

3. Copy the Markdown file to the standard file name `llms.txt`; do a copy instead of a symlink because symlinks don't work well on some operating systems.


## Release

Releasing a new version uses these steps:

```sh
git commit "Your message here"
git tag "1.1.1"
git push --tags
cargo publish
```

Confirm that the crate is published:

* <https://crates.io/crates/assertables>
