---
title: "Building and Testing"
description: "Building and Testing Authelia."
lead: "This section covers the build process and how to perform tests in development."
date: 2022-05-15T13:52:27+10:00
draft: false
images: []
menu:
  contributing:
    parent: "development"
weight: 240
toc: true
aliases:
  - /docs/contributing/build-and-dev.html
---

__Authelia__ is built a [React] frontend user portal bundled in a [Go] application which acts as a basic webserver for
the [React] assets and a dedicated API.

The GitHub repository comes with a CLI dedicated to developers called
[authelia-scripts](reference-authelia-scripts.md) which can be setup by looking at
[Reference: authelia-scripts](reference-authelia-scripts.md).

In order to build and contribute to __Authelia__, you need to make sure that you have looked at the
[Environment](environment.md) guide to configure your development environment.

## Get started

In order to ease development, __Authelia__ uses the concept of [suites] to run Authelia from source code so that your
patches are included. This is a kind of virtual environment running __Authelia__ in a complete ecosystem
(LDAP, Redis, SQL server). Note that __Authelia__ is hot-reloaded in the environment so that your patches are instantly
included.

The next command starts the suite called *Standalone*:

```bash
authelia-scripts suites setup Standalone
```

Most of the suites are using docker-compose to bootstrap the environment. Therefore, you can check the logs of all
application by running the following command on the component you want to monitor.

```bash
docker logs authelia_authelia-backend_1 -f
```

Then, edit the code and observe how __Authelia__ is automatically reloaded.

### Unit tests

To run the unit tests, run:

```bash
authelia-scripts unittest
```

### Integration tests

Integration tests are located under the `internal/suites` directory and are based on Selenium. A suite is a combination
of environment and tests. Executing a suite therefore means starting the environment, running the tests and tearing down
the environment. Each step can be run independently:

```bash
# List the available suites
$ authelia-scripts suites list
Standalone
DuoPush
LDAP
Traefik

# Start the environment of Standalone suite.
$ authelia-scripts suites setup Standalone

# Run the tests related to the currently running suite.
$ authelia-scripts suites test

# Tear down the environment
$ authelia-scripts suites teardown Standalone
```

In order to test all suites (approx 30 minutes), you need to make sure there is no currently running sui te and then you
should run:

```bash
authelia-scripts suites test
```

Also, you don't need to start the suite before testing it. Given you're not running any suite, just use the following
command to test the *Standalone* suite.

```bash
authelia-scripts suites test Standalone
```

The suite will be spawned, tests will be run and then the suite will be torn down automatically.

[suites]: ./integration-suites.md
[React]: https://reactjs.org/
[go]: https://go.dev/dl/
[Node.js]: https://nodejs.org/en/download/
[Docker]: https://docs.docker.com/get-docker/
[Docker Compose]: https://docs.docker.com/compose/install/
[golangci-lint]: https://golangci-lint.run/usage/install/
[goimports-reviser]: https://github.com/incu6us/goimports-reviser#install