Add pre-commit hook definition + test (#1877)

* 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>
pull/1874/head
Daniel Bast 3 months ago committed by GitHub
parent e64be9d3a3
commit 9bbe7d607e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 32
      .github/workflows/pre-commit-hooks-test.yml
  2. 8
      .pre-commit-hooks.yaml
  3. 11
      README.md
  4. 14
      tests/pre-commit-hooks/Counter.sol
  5. 30
      tests/pre-commit-hooks/test.sh

@ -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

@ -0,0 +1,8 @@
- id: mythril
name: Mythril
description: Analyze EVM bytecode with Mythril
entry: myth
args:
- analyze
language: python
types: ["solidity"]

@ -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

@ -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++;
}
}

@ -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
Loading…
Cancel
Save