# Checkout code and build it

## Prerequisites

* Java 11+

## Quick start

```sh
git clone --recursive https://github.com/PegasysEng/pantheon
cd pantheon
./gradlew build  
./gradlew integrationTest
```

## Checkout source code

```
git clone --recursive git@github.com:PegasysEng/pantheon.git
```
OR
```
git clone --recursive https://github.com/PegasysEng/pantheon
```

## See what tasks are available
To see all of the gradle tasks that are available:
```
cd pantheon
./gradlew tasks  
```


## Build from source
After you have checked out the code, this will build the distribution binaries.
```
cd pantheon
./gradlew build  
```

## Run tests
All the unit tests are run as part of the build, but can be explicitly triggered with:
```
./gradlew test
```
The integration tests can be triggered with:
```
./gradlew integrationTest
```

The reference tests (described below) can be triggered with:
```
./gradlew referenceTest
```
The system tests can be triggered with:
```
./gradlew smokeTest
```
The acceptance tests can be triggered with:
```
./gradlew acceptanceTest
```

### Ethereum reference tests

On top of the project proper unit tests, specific unit tests are provided to
run the Ethereum reference tests available at https://github.com/ethereum/tests
and described at http://ethereum-tests.readthedocs.io/en/latest/. Those are run
as part of the unit test suite as described above, but for debugging, it is
often convenient to run only a subset of those tests, for which a few convenience
as provided. For instance, one can run only "Frontier" general state tests with
```
./gradlew :ethereum:tech.pegasys.pantheon.ethereum.vm:referenceTest -Dtest.single=GeneralStateTest -Dtest.ethereum.state.eip=Frontier
```
or only the tests that match a particular pattern with something like:
```
gradle :ethereum:tech.pegasys.pantheon.ethereum.vm:test -Dtest.single=GeneralStateTest -Dtest.ethereum.include='^CALLCODE.*-Frontier'
```
Please see the comment on the `test` target in the top level `build.gradle`
file for more details.

