Skip to content
Open
Show file tree
Hide file tree
Changes from 2 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
5 changes: 3 additions & 2 deletions src/kontrol/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,9 @@ def main() -> None:
def exec_load_state(options: LoadStateOptions) -> None:
foundry = _load_foundry(options.foundry_root, add_enum_constraints=options.enum_constraints)
if options.output_dir_name is None:
options.output_dir_name = foundry.profile.get('test', '')
output_dir = foundry._root / options.output_dir_name
output_dir = foundry.config('test', '')
Comment thread
RaoulSchaffranek marked this conversation as resolved.
Outdated
else:
output_dir = foundry._root / options.output_dir_name
foundry_state_load(options=options, output_dir=output_dir)


Expand Down
21 changes: 18 additions & 3 deletions src/kontrol/foundry.py
Original file line number Diff line number Diff line change
Expand Up @@ -476,9 +476,19 @@ def profile(self) -> dict[str, Any]:

return {**default_profile, **current_profile}

def config(self, key: str, default: Any = None) -> Any:
"""
Get a configuration value from an environment variable or foundry.toml profile.
This mimics Foundry's behavior of allowing environment variables to override
settings in foundry.toml.
"""
env_name = 'FOUNDRY_' + key.upper()
return os.getenv(env_name, self.profile.get(key, default))

@property
def out(self) -> Path:
return self._root / self.profile.get('out', '')
out = self.config('out', '')
return self._root / out

@property
def proofs_dir(self) -> Path:
Expand All @@ -502,13 +512,18 @@ def main_file(self) -> Path:

@property
def build_info(self) -> Path:
build_info_path = self.profile.get('build_info_path')
build_info_path = self.config('build_info_path', '')

if build_info_path:
return self._root / build_info_path
else:
return self.out / 'build-info'

@property
def test_path(self) -> Path:
test_path = self.config('test', '')
return self._root / test_path

@property
def ffi(self) -> bool:
if os.getenv('FOUNDRY_FFI', '').lower() in ('true', '1'):
Expand Down Expand Up @@ -644,7 +659,7 @@ def load_lemmas(self, lemmas_id: str | None) -> KFlatModule | None:

@cached_property
def all_tests(self) -> list[str]:
test_dir = os.path.join(self.profile.get('test', 'test'), '')
test_dir = os.path.join(self.config('test', 'test'), '')
return [
f'{contract.name_with_path}.{method.signature}'
for contract in self.contracts.values()
Expand Down
6 changes: 2 additions & 4 deletions src/tests/integration/test_foundry_prove.py
Original file line number Diff line number Diff line change
Expand Up @@ -784,7 +784,6 @@ def test_load_state_diff(

foundry_root_dir = root_tmp_dir / 'foundry'
foundry = Foundry(foundry_root=foundry_root_dir)
output_dir = foundry._root / foundry.profile.get('test', '')
foundry_state_load(
LoadStateOptions(
{
Expand All @@ -794,7 +793,7 @@ def test_load_state_diff(
'from_state_diff': 'True',
}
),
output_dir=output_dir,
output_dir=foundry.test_path,
)

generated_main_file = foundry_root_dir / 'src' / 'LoadStateDiff.sol'
Expand Down Expand Up @@ -828,7 +827,6 @@ def test_load_state_dump(

foundry_root_dir = root_tmp_dir / 'foundry'
foundry = Foundry(foundry_root=foundry_root_dir)
output_dir = foundry._root / foundry.profile.get('test', '')
foundry_state_load(
LoadStateOptions(
{
Expand All @@ -837,7 +835,7 @@ def test_load_state_dump(
'output_dir_name': 'src',
}
),
output_dir=output_dir,
output_dir=foundry.test_path,
)

generated_main_file = foundry_root_dir / 'src' / 'LoadStateDump.sol'
Expand Down
Loading