# [WIP] Enso CI Build Scripts
The code under this directory is under ongoing intensive development. As such it
has not been reviewed or cleaned up yet.
## General principles
- Written in Rust.
- Portable. Works on any platform that Enso targets.
- Do not duplicate functionality that is already available in tools being part
of our tech stack.
- Supports both developers and CI use-cases (and environments). Developers can
call it locally to do anything that CI does.
- Does not require much setup work. Where feasible sets things up for the user.
### Concepts
#### Target
- Can be built locally from sources. Building yields artifacts.
- Artifacts are self-contained to a single filesystem directory.
- Artifacts can be downloaded from a remote location rather than built with the
same effect.
- Can contain other targets.
- Artifacts can be platform-specific.
- Artifacts must be releasable as CI run artifacts or release assets.
# Usage
While the script is invoked using `cargo run`, the convenience `run` script is
provided in the repository root.
The general usage form is:
```
./run [options]
```
The command itself is usually a combination of target name and subcommand, like
`ide build` or `backend test`.
At every layer, the `--help` command can be used to get more information. Note
that the information depends on the command, so running `./run --help` will not
give you the same information as `./run ide --help` nor
`./run ide build --help`.
## Targets
### IDE
IDE is the top level target for our project. It consists of `GUI` and `Backend`
targets.
Sources consist mostly of TS code for the Electron client and packaging.
Artifacts are platform specific and consist of the single image file.
### GUI
GUI is the front-end part of the project. It also packages WASM-compiled parser
written in rust.
Artifacts are portable across the platforms and consist of the web page that can
be served either using Electron client (as IDE does) or using a web server (like
the Cloud version of Enso).
### Backend
Backend is the back-end part of the project, as seen from the IDE perspective.
It contains a Project Manager bundle that includes:
- Project Manager native image;
- Enso Engine distribution (with the Standard Library);
- GraalVM distribution.
These components are not represented as "Targets" (in terms of build script) but
could be and likely will be in the future.