Skip to main content

Developing Izanami

Here are some tips to help you get started with Izanami contribution.

Cloning remote repository

git clone git@github.com:MAIF/izanami.git
cd izanami

Using mise

Tools

The easiest way to setup your dev environment is to use mise.

You'll also need a docker environment (docker / podman / colima).

Setup up environment

Once you installed mise, run below command to setup you dev environment:

mise install # Install needed dependencies (sbt, java, node, ...)
mise run install # Install front & back dependencies, pull docker images

Running the app

To run Izanami, run below command

mise run dev

This will run frontend, backend and a bunch of docker containers (postgres, fake mail provider, fake oidc server, ...).

This command display log nicely using process-compose, a nice TUI that allows seeing logs / state for each application component (back, front & containers).

Running only containers

To run only containers, use

mise run dev:containers

Running only backend

To run only containers, use

mise run dev:back

``

Running only frontend

To run only containers, use

mise run dev:front

Running tests

Backend

To run backend tests, use

mise run test:back 

⚠️ Backend tests restart Izanami backend with misc configurations, therefore Izanami backend must not be started to run these tests.

Frontend

To run frontend tests, use

mise run test:front

⚠️ Frontend tests start backend with a test specific configuration, therefore Izanami backend must not be started to run these tests.

Both

Command

mise run tests

Runs frontend tests then backend tests.

Documentation

To start documentation locally, run

mise run doc

Packaging

To package Izanami :

mise run package

To start packaged jar (you'll need docker container running, you can use mise run dev:containers).

mise run package:run

To build docker image (after packaging frontend and backends)

mise run docker:build

To test docker image (you'll need docker container running, you can use mise run dev:containers).

mise run docker:run

To build "test" docker image (docker image with embeded postgres)

docker:build-demo

Clean up

Docker containers may keep running even after command are terminated, to stop all container associated with Izanami run

mise run clean

Without mise

Here is what you'll need to run Izanami without mise

  • SBT > 1.9.7
  • JDK >= 21
  • Node > 20
  • Docker / Colima / Podman whatever allows you to run docker-compose

Install dependencies

For backend

sbt compile

For frontend

cd izanami-frontend
npm install --force
npx playwright install chromium

To pull images

docker-compose pull

Running project

First let's start some containers, docker-compose.yml contains everything that may be needed by Izanami (mock SMTP server, WASMO, simple OIDC provider, postgres database, ...). You may delete some of these elements to reduce consumed resources, however you need to keep the Postgres database.

# In root directory
docker-compose up

Now let's start the backend

# Opening 5005 port allows to plug in Izanami for debug
sbt -jvm-debug 5005
# You may add -Dapp.sessions.TTL=604800 to have longer login sessions
~run -Dconfig.resource=dev.conf

And finally let's start frontend application

cd izanami-frontend
npm run dev

After eveyrhing is started, browse to http://localhost:3000 (login form may take some time to respon since compilation is started on first backend request).

Running tests

Backend tests

To run backend tests, you will need to start Izanami and associated containers independently.

To do so, just start the backend and the docker containers with the above commands.

Once backend and containers are started, just run

sbt "testOnly *AllTests"

Backend test without starting container

Alternatively, you can run one test suite directly (without Izanami and containers running). The suite will start everything for you, however this is way slower than above method and still highly experimental.

If you're using Colima instead of docker, this method may require the following env variables to be set :

DOCKER_HOST=unix://${HOME}/.colima/default/docker.sock;
RYUK_CONTAINER_PRIVILEGED=true;
TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE=/var/run/docker.sock

Frontend tests

As for backend tests, you'll docker containers started to run frontend tests.

Izanami backend must be started using a specific configuration (this is needed for test that set up OIDC).

sbt "run -Dconfig.resource=base-test.conf -Dlogger.file=./test/resources/logback.xml"

You'll also need to start your frontend on localhost:3000 (using above commands).

Once everything is running, just run

cd izanami-frontend
npm test

To display playwright UI, use

npm test -- --ui

Serving documentation locally

To run documentation, just install and start project in manual folder.

cd manual
npm install
npm start

Packaging

To package frontend :

cd izanami-frontend
npm run build

To package backend (make sure to package frontend first) :

sbt "set test in assembly := {}" clean assembly

To start generated jar (you need running containers).

java -Dconfig.resource=dev.conf -jar ./target/izanami.jar

To build docker image (after packaging frontend and backends)

docker build -t izanami .

To test docker image

docker run --env IZANAMI_PG_URI=postgresql://postgres:postgres@host.docker.internal:5432/postgres -p 9000:9000 izanami

To build "test" docker image (docker image with embeded postgres)

docker build -t izanami-test-standalone -f ./demo-docker-image/Dockerfile-pg-embeded .