-
Update version in
mix.exsandnative/rustyxml/Cargo.toml -
Update
CHANGELOG.md -
Commit:
git commit -am "Bump version to x.y.z" -
Push to main:
git push origin main -
Trigger NIF build:
gh workflow run release.yml --field version=x.y.z -
Wait for ALL 30 builds to complete (~5-10 min)
gh run watch <run-id>
-
Verify draft release has 30 assets:
gh release view vx.y.z --json assets --jq '.assets | length' -
Publish draft release (assets must be public before checksums can be generated):
gh release edit vx.y.z --draft=false
-
Clear checksum and generate new checksums:
rm -f checksum-Elixir.RustyXML.Native.exs && FORCE_RUSTYXML_BUILD=1 mix compile && mix rustler_precompiled.download RustyXML.Native --all --print -
Commit checksums:
git add checksum-Elixir.RustyXML.Native.exs && git commit -m "Add vx.y.z checksums" && git push -
Publish to Hex:
mix hex.publish
- Do NOT publish the draft release (step 8) until ALL 30 jobs complete and assets are attached
- The workflow creates a draft release - each job attaches its asset to this draft
- Publishing too early causes a race condition where later jobs fail to attach their assets
- Step 7 verifies all assets are present before proceeding
- Draft release assets are not publicly accessible, so the release must be published before generating checksums
- Publishing the release automatically creates the git tag (no need to create it manually)
# Monitor build progress
gh run list --workflow=release.yml
gh run watch <run-id>
# Check draft release assets
gh release view vx.y.z --json assets --jq '.assets | length' # Should be 30
gh release view vx.y.z --json assets --jq '.assets[].name'
# If something goes wrong, delete and retry
gh release delete vx.y.z --yes
gh workflow run release.yml --field version=x.y.z