Skip to content

Commit

Permalink
Add pre-commit hook definition + test (#1877)
Browse files Browse the repository at this point in the history
* Add pre-commit hook + test

* Update README.md

* Update README.md

* update README.md

Co-authored-by: Nikhil Parasaram <tommycjniko@gmail.com>

---------

Co-authored-by: Nikhil Parasaram <nikhilparasaram@gmail.com>
Co-authored-by: Nikhil Parasaram <tommycjniko@gmail.com>
  • Loading branch information
3 people authored Aug 21, 2024
1 parent e64be9d commit 9bbe7d6
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 0 deletions.
32 changes: 32 additions & 0 deletions .github/workflows/pre-commit-hooks-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: pre-commit

on:
push:
branches:
- master
- develop
tags:
- '*'
pull_request:
paths:
- .github/workflows/pre-commit-hooks-test.yml
- .pre-commit-hooks.yaml
- tests/pre-commit-hooks/*
- requirements.txt
- setup.py

jobs:
hooks-test:
runs-on: ubuntu-latest
name: test hooks
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install pre-commit
run: |
python -m pip install pre-commit
- name: Test hooks
run: |
./tests/pre-commit-hooks/test.sh
8 changes: 8 additions & 0 deletions .pre-commit-hooks.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
- id: mythril
name: Mythril
description: Analyze EVM bytecode with Mythril
entry: myth
args:
- analyze
language: python
types: ["solidity"]
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,17 @@ Install from Pypi (Python 3.7-3.10):
$ pip3 install mythril
```

Use it via pre-commit hook (replace `$GIT_TAG` with real tag):

```YAML
- repo: https://github.com/Consensys/mythril
rev: $GIT_TAG
hooks:
- id: mythril
```
Additionally, set `args: [disassemble]` or `args: [read-storage]` to use a different command than `analyze`.

See the [docs](https://mythril-classic.readthedocs.io/en/master/installation.html) for more detailed instructions.

## Usage
Expand Down
14 changes: 14 additions & 0 deletions tests/pre-commit-hooks/Counter.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.26;

contract Counter {
uint256 public number;

function setNumber(uint256 newNumber) public {
number = newNumber;
}

function increment() public {
number++;
}
}
30 changes: 30 additions & 0 deletions tests/pre-commit-hooks/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/env bash

set -o errtrace -o nounset -o pipefail -o errexit

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"

# Create temp working directory for mock repo
MOCK_REPO=$(mktemp -d)
if [[ ! "$MOCK_REPO" || ! -d "$MOCK_REPO" ]]; then
echo "Could not create temp dir"
exit 1
fi
function cleanup {
echo "Deleting temp working directory $MOCK_REPO"
rm -rf "$MOCK_REPO"
}
trap cleanup EXIT

# Filling the mock repo
pushd "$MOCK_REPO" >/dev/null || exit 1
git init --initial-branch=master
git config user.email "test@example.com"
git config user.name "pre-commit test"
cp "$SCRIPT_DIR/Counter.sol" .
git add .
git commit -m "Initial commit"

# Run pre-commit inside the mock repo while referencing the mythril directory,
# where the .pre-commit-hooks.yaml is located.
pre-commit try-repo "$SCRIPT_DIR/../.." mythril --verbose --color=always --all-files

0 comments on commit 9bbe7d6

Please sign in to comment.