> For the complete documentation index, see [llms.txt](https://docs.iva.opencb.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.iva.opencb.org/master/admin-guide/installation/how-to-build-from-source-code.md).

# How to build from source code

IVA is developed with Lit, therefore it is mainly developed in JavaScript and makes a heavy usage of HTML and CSS. It uses Grunt as building tool. IVA also requires of OpenCB JSorolla project to be built, this is a JavaScript library developed for several OpenCB web-based projects, this can be found as Git submodule in IVA.

Stable releases are merged and tagged at `master` branch, you are encourage to use the latest stable release for production. Current active development is carried out at `develop` branch, only building is guaranteed and bugs are expected, use this branch for development or for testing new functionalities. The only dependency of IVA from OpenCB is JSorolla.

## Prerequisites

The following technologies are needed to build IVA

* Install [Nodejs ](https://nodejs.org/en/)

## Cloning

IVA is an open-source project and can be downloaded either as package(tar.gz) from GitHub releases or source code by cloning the repository.

Default `develop` branch can be downloaded by executing:

```bash
$ git clone https://github.com/opencb/iva.git
Cloning into 'iva'...
remote: Counting objects: 624, done.
remote: Total 624 (delta 0), reused 0 (delta 0), pack-reused 624
Receiving objects: 100% (624/624), 139.37 KiB | 0 bytes/s, done.
Resolving deltas: 100% (356/356), done.
Checking connectivity... done.
```

Latest stable release at `master` branch can be downloaded by executing:

```bash
$ git clone -b master https://github.com/opencb/iva.git
Cloning into 'iva'...
remote: Counting objects: 624, done.
remote: Total 624 (delta 0), reused 0 (delta 0), pack-reused 624
Receiving objects: 100% (624/624), 139.37 KiB | 191.00 KiB/s, done.
Resolving deltas: 100% (356/356), done.
Checking connectivity... done.
```

After this, in both cases, you **must** execute the following command to fetch the JSorolla submodule (only the first time):

```
git submodule update --init
```

Go to `lib/jsorolla` and checkout to `develop` branch of Jsorolla by

```
cd lib/jsorolla
git checkout develop
```

## Build

First, you must update JSorolla dependencies, from the root folder execute:

```
cd lib/jsorolla
npm install
```

Finally, to build IVA execute:

We have to install npm packages for IVA, from the root folder execute:

```
npm install
```

And now execute:

```
npm run build
```

when completed, all compiled files will be located under the `build` folder.

## Test

We use [Cypress.io](https://www.cypress.io/) as e2e testing framework.

Having the project running through the command `npm run serve`, you can run the interactive E2E test suite by running the command

```
npm run e2e
```

**Run tests and generate a report**

To run test in headless version (no browser) and generate a report, run

```
npm run e2e-report
```

for more help, try `npm run e2e-report -h`.

For Windows environment, just add the suffix `-win`

```
npm run e2e-win
npm run e2e-report-win
```

for more help, try `npm run e2e-report-win -h`.

The HTML report will be generated in `./report`. The filename will have the structure `<OPENCGA_STUDY_FQN>__<TIME>_<DATE>.html`.
