# Subcomponent
[](https://travis-ci.org/subcomponent/subcomponent)
Subcomponent is a *components orchestrator*. You define components as being
opaque projects that can be retrieved using various methods (git, svn,
download, ...). Components can express dependencies between each other. This
allows to run user-defined commands in a specific order.
This is expressed in the subcomponent description language:
```subcomponent
subcomponents {
my-lib-component {
path: "where/the/lib/will/be/downloaded";
name: "My Lib";
fetch {
git {
url: "git://example.com/repo.git",
"https://example.com/repo.git",
"https://example-backup.com/repo.git";
branch: "dev";
shallow: true;
}
}
}
xen {
name: "Xen";
path: "xen-4.8.0";
fetch {
artifact {
url: "https://downloads.xenproject.org/release/xen/4.8.0/xen-4.8.0.tar.gz";
compression: "tar", "gz";
pgp-signature: "https://downloads.xenproject.org/release/xen/4.8.0/xen-4.8.0.tar.gz.sig";
pgp-pubkey: "83FE14C957E82BD9";
}
}
}
}
```
## TODO List
- [ ] Dependencies between components
- [ ] status command
- [ ] Definition of command hooks
- [ ] gzip unpacker
- [ ] xz unpacker
- [ ] Booleans should be handled by the lexer, not by the parser
## Documentation
[Sphinx](http://www.sphinx-doc.org/en/stable/) is used to generate the
documentation, so you first need to have it installed:
```bash
pip install sphinx
```
Then, to generate the HTML documentation, you can just run the following:
```bash
make -C doc html man
```
The HTML documentation will be available in `docs/_build/html/`.
The manual page of subcomponent will be in `docs/_build/man`.
## Tests
Subcomponent prefers to develop system tests instead of unit tests. You can run
unit tests via `cargo`:
```bash
cargo test
```
System tests rely on [robotframework](http://robotframework.org/), so you
first need to make sure that this python module is installed:
```bash
pip install robotframework
```
The following commands are available
```bash
make -C tests unit-tests # Run unit tests in release
make -C tests system-tests # Run system tests in release
make -C tests # Run all the tests in release
```
Please report failing tests!
## Continuous Integration
We use [travis](https://travis-ci.org/subcomponent/subcomponent) to check that
upstream code pass the implemented tests.
## License
Subcomponent is MIT-licensed. See the `LICENSE` file for more details.