Skip to content

Commit

Permalink
Merge pull request #410 from Chia-Network/pre-commit
Browse files Browse the repository at this point in the history
introduce pre-commit
  • Loading branch information
arvidn authored Feb 26, 2024
2 parents ebc5fa6 + 81131ef commit d9d7310
Show file tree
Hide file tree
Showing 4 changed files with 153 additions and 4 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ jobs:
uses: dtolnay/rust-toolchain
with:
components: rustfmt, clippy

- name: fmt
run: |
cargo fmt --all -- --files-with-diff --check
Expand All @@ -302,7 +302,7 @@ jobs:
- uses: dtolnay/rust-toolchain
with:
components: clippy

- name: workspace
run: |
cargo clippy --workspace --all-features -- -Dwarnings
Expand Down
52 changes: 52 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: check-yaml
- id: check-added-large-files
- repo: local
hooks:
- id: fmt
name: fmt
description: run cargo fmt on the workspace
entry: cargo fmt --all -- --color always
language: system
pass_filenames: false
- id: clippy
name: clippy
description: run cargo clippy on the workspace
stages: [pre-push]
entry: cargo clippy --workspace --all-features -- -Dwarnings
language: system
pass_filenames: false
- id: build
name: build
description: run cargo build on the workspace
stages: [pre-push]
entry: cargo build --all-features --workspace
language: system
pass_filenames: false
- id: benchmarks
name: build benchmarks
description: run cargo bench on the workspace
stages: [pre-push]
entry: cargo bench --no-run --workspace
language: system
pass_filenames: false
- id: tests
name: run tests
description: run cargo test on the workspace
stages: [pre-push]
entry: cargo test --workspace
language: system
pass_filenames: false
- id: wheel
name: build wheel
description: run maturin develop on the wheel
stages: [pre-push]
entry: sh -c "cd wheel && maturin develop"
language: system
pass_filenames: false
100 changes: 99 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,102 @@
This cargo workspace contains code useful for working with the Chia network.

It contains a rust crate `chia` (here), a python wheel api `chia_rs` (in `wheel`), and web assembly (in `wasm`).
# Tests

To run tests:

```
cargo test --all
```

Some slow tests are only enabled in optimized builds, so it may also be a good
idea to run the tests in release mode:

```
cargo test --all --release
```

You may need a python virtual environment activated for the tests to link.
This seems to be caused by the pyo3 dependency in the `wheel`.

# Benchmarks

To run benchmarks for a specific crate:

```
cargo bench -- --save-baseline before
<make change>
cargo bench -- --save-baseline after
critcmp after before
```

You can also run all the benchmarks by including `--workspace` on the command
line.

# pre-commit

This repository has a pre-commit configuration, which is hooked into git by
running:

```
pre-commit install --hook-type pre-commit --hook-type pre-push
```

It runs `cargo fmt` on all crates on every commit, and runs clippy and builds on
push.

To run all checks explicitly (without pushing), run:

```
pre-commit run --all --hook-stage pre-push
```

# python bindings

The `wheel` crate is a single python wheel that exports the functionality of
all crates in the repository.

It's built with `maturin`. You need to have activated a python virtual
environment for the build to work.

```
pip install maturin
cd wheel
maturin develop
```

Once built, the python tests can be run, from the root of the repository. Note
that the tests require that `chia-blockchain` and `blspy` wheels are installed.

```
pytest tests
```

# Fuzzers

Fuzzers can't be run or listed for the whole workspace, but only for individual
crates. There is a tool to generate a fuzzing corpus from a blockchain database.
It's run like this:

```
cd chia-tools
cargo run --release --bin gen-corpus -- --help
```

The following crates have fuzzers:

* chia-bls
* chia-protocol
* chia-wallet
* clvm-utils
* chia (the root crate)

To list and run fuzzers:

```
cargo fuzz list
```

```
cargo fuzz run <name-of-fuzzer>
```

1 change: 0 additions & 1 deletion src/gen/test_generators.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ use chia_protocol::{Bytes, Bytes48};
use clvmr::allocator::NodePtr;
use clvmr::Allocator;
use std::iter::zip;
use std::string::String;
use text_diff::diff;
use text_diff::Difference;

Expand Down

0 comments on commit d9d7310

Please sign in to comment.