XUtils

AppSignal Elixir

The official [AppSignal](https://appsignal.com/) package for Elixir.


Configuration

A complete list of all configurable options for AppSignal for Elixir is available in our documentation.

Development

Testing

Testing is done with ExUnit and can be run with the mix test command. You can also supply a path to a specific file path you want to test and even a specific line on which the test you want to run is defined.

$ mono test
# The original command can still be used
$ mix test
$ mix test test/appsignal/some_test.ex:123

This project has several different test suites defined with different mix environments. You can run them by specifying the specific type of test suite in the MIX_ENV environment variable.

# Default
$ MIX_ENV=test mix test

# Run the test suite with the NIF inoperational. This will generate errors
# because the NIF is not active, but should run without failures.
$ MIX_ENV=test_no_nif mix test

Benchmarking

This package uses benchee to benchmark code. To run the benchmarker:

$ MIX_ENV=bench mix run bench/<file>.exs

AddressSanitizer

A memory testing setup is included to detect memory errors in the NIF. It’s set up in a Docker container to ensure reproducability.

To run the tests, build the container, which will build a version of the NIF with AddressSanitizer enabled. Then, run it with an APPSIGNAL_PUSH_API_KEY and APPSIGNAL_APP_NAME set to ensure AppSignal is enabled, and to be able to verify that data appears in AppSignal after running the test:

docker build --platform linux/amd64 -t appsignal-elixir-asan .
docker run \
  --env APPSIGNAL_PUSH_API_KEY=00000000-0000-0000-0000-000000000000 \
  --env APPSIGNAL_APP_NAME="appsignal-elixir" \
  --rm \
  -- \
  appsignal-elixir-asan

This test runs spans.exs, which is a script that calls most functions in the NIF.

Branches and versions

The main branch corresponds to the current release of the library. The develop branch is used for development of features that will end up in the next minor release. If you fix a bug open a pull request on main, if it’s a new feature on develop.

Making changes

When making changes to the project that require a release, add a changeset that will be used to update the generated CHANGELOG.md file upon release.

$ mono changeset add

Publishing new versions

  1. Merge the develop branch to main if necessary.

Updating the CI build matrix

  1. Update .semaphore/versions.rb to add or remove Elixir/OTP versions, or .semaphore/semaphore.yml.erb.
  2. Run script/generate_ci_matrix.

Articles

  • coming soon...