Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removing hardcoded JSONs (grumpkin) #62

Merged
merged 9 commits into from
Mar 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: Run unit tests

on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
merge_group:
workflow_dispatch:

jobs:
unit-tests:
name: Unit Tests
runs-on: buildjet-16vcpu-ubuntu-2204
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.8

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Check formatting
run: |
forge fmt --check

- name: Regenerate Contracts
run: |
python src/blocks/poseidon/poseidon-contract-gen.py src/blocks/poseidon/neptune-constants-U24-pallas.json PoseidonU24Pallas > src/blocks/poseidon/PoseidonNeptuneU24pallas.sol
python src/blocks/poseidon/poseidon-contract-gen.py src/blocks/poseidon/neptune-constants-U24-vesta.json PoseidonU24Vesta > src/blocks/poseidon/PoseidonNeptuneU24vesta.sol

- name: Run forge fmt on re-generated contracts
run: |
forge fmt

- name: Check discrepancies
run: |
if [[ `git status --porcelain` ]]; then
echo "There are discrepancies between the repository and the source. Please ensure the contracts are up to date."
exit 1
fi

- name: Run Forge build
run: |
forge --version
forge build

- name: Run Forge tests
run: |
forge test -vvv

- name: Get sizes of compiled contracts
run: |
forge --version
forge build --sizes || true
134 changes: 0 additions & 134 deletions .github/workflows/test.yml

This file was deleted.

1 change: 0 additions & 1 deletion compressed-snark-grumpkin.json

This file was deleted.

1 change: 0 additions & 1 deletion compressed-snark-pasta.json

This file was deleted.

66 changes: 66 additions & 0 deletions generate_contract_input.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Run with `python generate_contract_input.py` or e.g. `python generate_contract_input.py https://github.com/lurk-lab/Nova.git ea4f75c225cb29f523780858ec84f1ff51c229bc solidity_compatibility_e2e_pasta`

import subprocess
import sys
import os
import re

file_path = 'rust-reference-info.env'

def parse_variables_from_file(file_path):
variables = {}
with open(file_path, 'r') as file:
content = file.read()
# Define regex patterns for matching variables
nova_url_pattern = r'NOVA_URL=\"(.+?)\"'
nova_commit_pattern = r'NOVA_COMMIT=\"(.+?)\"'
nova_test_name_pattern = r'NOVA_TEST_NAME=\"(.+?)\"'

# Match variables using regular expressions
nova_url_match = re.search(nova_url_pattern, content)
nova_commit_match = re.search(nova_commit_pattern, content)
nova_test_name_match = re.search(nova_test_name_pattern, content)

# Extract matched variables
if nova_url_match:
variables['NOVA_URL'] = nova_url_match.group(1)
if nova_commit_match:
variables['NOVA_COMMIT'] = nova_commit_match.group(1)
if nova_commit_match:
variables['NOVA_TEST_NAME'] = nova_test_name_match.group(1)

return variables

if __name__ == "__main__":
nova_repo_arg = ""
nova_commit_arg = ""
nova_test_name_arg = ""

if len(sys.argv) > 1:
nova_repo_arg = sys.argv[1]
nova_commit_arg = sys.argv[2]
nova_test_name_arg = sys.argv[3]

# Configurations
parsed_variables = parse_variables_from_file(file_path)
nova_repo_url = nova_repo_arg if nova_repo_arg else parsed_variables['NOVA_URL']
nova_commit_hash = nova_commit_arg if nova_commit_arg else parsed_variables['NOVA_COMMIT']
nova_test_name = nova_test_name_arg if nova_test_name_arg else parsed_variables['NOVA_TEST_NAME']

print("Pulling project from: " + nova_repo_url + " " + nova_commit_hash)
target_directory = "verify_cache"
nova_directory = "nova"

if os.path.exists(target_directory):
subprocess.run(['rm', '-rf', target_directory], check=True)
os.mkdir(target_directory)
os.mkdir(target_directory + "/" + nova_directory)
os.chdir(target_directory)
os.system(f"git clone {nova_repo_url} {nova_directory}")
os.chdir(nova_directory)
os.system(f"git checkout {nova_commit_hash}")

# Build the Nova project
os.system(f"cargo test {nova_test_name} --release -- --ignored")
print("Copy generated keys from Nova...")
os.system(f"cp vk.json compressed-snark.json ../../.")
File renamed without changes.
Loading
Loading