# Releasing Sting

The initial release target is `0.1.0`. Preparing a package and documentation is a
local operation; publishing to Hex and creating a public GitHub release are
separate maintainer actions.

## Validate the candidate

Use released dependencies, not a sibling Bumblebee checkout:

```sh
unset BUMBLEBEE_PATH
mix deps.get
mix hex.outdated --all
mix format --check-formatted
mix format --check-formatted bench/*.exs
mix compile --warnings-as-errors
STING_PYTHON=/absolute/path/to/venv/bin/python mix test
mix docs --warnings-as-errors
mix hex.build
```

The Python environment must contain `sentence-transformers==6.1.0`, `torch`,
`numpy`, and `datasets`. See the [parity guide](sentence-transformers-parity.md).
Check CI for both supported runtime lanes. Local validation on a newer Elixir
runtime does not establish support for the minimum version.

## Inspect the artifacts

- Confirm the version in `mix.exs` and installation example agree.
- Replace the changelog's `Unreleased` label with the actual release date.
- Open `doc/index.html` and check the README, parity guide, API navigation, and
  source-link targets. Before tagging, verify their shape; after pushing the
  corresponding `v0.1.0` tag, verify that the links resolve.
- Check source links without GitHub authentication. If the repository remains
  private, choose a public source location or remove public-source links before
  publishing. The release tag must exist remotely for versioned links to work.
- Inspect `mix hex.build` output: runtime requirements must include Bumblebee,
  Axon, Nx, Tokenizers, Safetensors, and Jason. `BUMBLEBEE_PATH` must be unset so
  Bumblebee is a Hex requirement.
- The package includes `lib`, `mix.exs`, README, changelog, license, and guides.
  It excludes tests, benchmarks, build output, development dependencies, and
  local environments. Hex consumers resolve the declared version constraints;
  the repository lockfile is not shipped as a consumer dependency lock.
- Build the unpacked package in production mode, or add it to a clean consumer
  project, to verify it compiles without development/test dependencies.

For an isolated production build:

```sh
unset BUMBLEBEE_PATH
release_dir=$(mktemp -d)
mix hex.build --unpack --output "$release_dir/package"
cd "$release_dir/package"
MIX_ENV=prod mix deps.get --only prod
MIX_ENV=prod mix compile --warnings-as-errors
```

## Publish

Once the candidate is approved, commit the release metadata, create the matching
version tag, and push the release commit and tag. Publish the reviewed package
with `mix hex.publish` using the maintainer's Hex account; this also builds and
publishes ExDoc documentation. Create GitHub release notes from the changelog.

Verify installation from Hex in a fresh project after publication. See the
[Hex publishing guide](https://hex.pm/docs/publish) for account setup and the
publication/reversion window. Package-name availability is not a reservation;
confirm it at publication time.
