2022-06-15 07:51:47 +00:00
|
|
|
---
|
|
|
|
title: "Building and Testing"
|
|
|
|
description: "Building and Testing Authelia."
|
|
|
|
lead: "This section covers the build process and how to perform tests in development."
|
2022-06-28 05:27:14 +00:00
|
|
|
date: 2022-06-15T17:51:47+10:00
|
2022-06-15 07:51:47 +00: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.
|
|
|
|
|
2023-03-19 06:29:12 +00:00
|
|
|
## Manually Building
|
|
|
|
|
|
|
|
### Binary
|
|
|
|
|
|
|
|
If you want to manually build the binary from source you will require the open source software described in the
|
2023-03-20 00:25:21 +00:00
|
|
|
[Development Environment](./environment.md#setup) documentation. Then you can follow the below steps on Linux (you may
|
|
|
|
have to adapt them on other systems).
|
2023-03-19 06:29:12 +00:00
|
|
|
|
2023-03-20 00:25:21 +00:00
|
|
|
Clone the Repository:
|
2023-03-19 06:29:12 +00:00
|
|
|
|
|
|
|
```bash
|
|
|
|
git clone https://github.com/authelia/authelia.git
|
2023-03-20 00:25:21 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
Download the Dependencies:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
cd authelia && go mod download
|
|
|
|
cd web && pnpm install
|
|
|
|
cd ..
|
|
|
|
```
|
|
|
|
|
|
|
|
Build the Web Frontend:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
cd web && pnpm build
|
2023-03-19 06:29:12 +00:00
|
|
|
cd ..
|
2023-03-20 00:25:21 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
Build the Binary (with debug symbols):
|
|
|
|
|
|
|
|
```bash
|
|
|
|
CGO_ENABLED=1 CGO_CPPFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong" CGO_LDFLAGS="-Wl,-z,relro,-z,now" \
|
|
|
|
go build -ldflags "-linkmode=external" -trimpath -buildmode=pie -o authelia ./cmd/authelia
|
|
|
|
```
|
|
|
|
|
|
|
|
Build the Binary (without debug symbols):
|
|
|
|
|
|
|
|
```bash
|
2023-03-19 06:29:12 +00:00
|
|
|
CGO_ENABLED=1 CGO_CPPFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong" CGO_LDFLAGS="-Wl,-z,relro,-z,now" \
|
|
|
|
go build -ldflags "-linkmode=external -s -w" -trimpath -buildmode=pie -o authelia ./cmd/authelia
|
|
|
|
```
|
|
|
|
|
2022-06-15 07:51:47 +00:00
|
|
|
[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
|