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 and synchronizes the README
installation requirement to ~> MAJOR.MINOR. If mix.exs or README.md has
uncommitted changes (including an installation update made by the script), it
exits without creating a tag. Commit those changes and rerun bin/release so
the tag includes the updated installation instructions.
Once both files are committed, the script creates the corresponding
vMAJOR.MINOR.PATCH tag. It refuses to replace an existing local or remote
tag before changing the README. 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