# 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`.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.iva.opencb.org/master/admin-guide/installation/how-to-build-from-source-code.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
