Development expects Elixir 1.19 and Erlang/OTP. The opt-in integration checks
also use InspIRCd on 127.0.0.1:6667 and, depending on the check,
atheme-services, irssi, tmux, and sudo.
Setup
Fetch dependencies and generate the local TLS fixtures. Fixture generation
requires openssl and only needs to run once after checkout:
mix deps.get
bin/setup-tests
Run the standard project checks:
mix format --check-formatted
mix compile --warnings-as-errors
mix test
mix docs
mix hex.build --unpack
Testing
Run the default automated suite:
mix test
Run the suite with the project coverage floor:
mix cover
Run repeatable microbenchmarks for the protocol hot paths:
mix bench
The benchmark uses only the Erlang/Elixir runtime and reports median and p95 sample time plus operations per second. Compare results on the same machine and runtime; it is intended for detecting relative regressions rather than publishing cross-machine absolute numbers.
Integration and release checks
Run the full standard verification gate when the local IRC services are available:
scripts/run_verification_gates.sh
Include the optional irssi cross-client check:
IRCXD_INCLUDE_IRSSI=1 scripts/run_verification_gates.sh
The integration tests expect a local InspIRCd on 127.0.0.1:6667. Additional
opt-in scripts create disposable local fixtures for services-backed IRCv3 and
real standard-replies coverage:
scripts/run_services_integration.sh
scripts/run_standard_replies_integration.sh
scripts/run_irssi_manual_check.sh
scripts/run_irssi_server_check.sh
Versioning and release tags
The package version follows Semantic Versioning. Choose
the increment based on the public API change, then update mix.exs with:
bin/bump-version <major|minor|patch>
majoris for incompatible public API changes.minoris for backward-compatible functionality.patchis for backward-compatible fixes.
For versions below 1.0.0, Hex recommends using a minor increment for breaking
changes. The package version remains plain MAJOR.MINOR.PATCH, as required by
Hex. After committing the version change and completing the release checks,
create its local Git tag with:
bin/release
The release script reads the version from mix.exs, creates the corresponding
vMAJOR.MINOR.PATCH tag, and refuses to replace an existing local or remote
tag. The v prefix follows the Git-tag example in the SemVer specification;
it is not part of the Hex package version. The script does not publish the
package or push the tag. Do those explicitly after reviewing the release:
mix hex.publish
git push origin vMAJOR.MINOR.PATCH