From 453679849876a5425d60f9dd1fd5d1e5200f7550 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Thu, 8 Jun 2023 13:37:04 -0500 Subject: [PATCH 1/5] increase observability and provide suggestions/clearer errors --- crytic_compile/platform/foundry.py | 34 ++++++----------------------- crytic_compile/platform/hardhat.py | 35 ++++++++++-------------------- 2 files changed, 18 insertions(+), 51 deletions(-) diff --git a/crytic_compile/platform/foundry.py b/crytic_compile/platform/foundry.py index 447908b6..48edab0b 100755 --- a/crytic_compile/platform/foundry.py +++ b/crytic_compile/platform/foundry.py @@ -51,34 +51,14 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: str) -> None: ) if not ignore_compile: - cmd = [ - "forge", - "build", - "--build-info", - ] - - LOGGER.info( - "'%s' running", - " ".join(cmd), - ) - - with subprocess.Popen( - cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, + run( + [ + "forge", + "build", + "--build-info", + ], cwd=self._target, - executable=shutil.which(cmd[0]), - ) as process: - - stdout_bytes, stderr_bytes = process.communicate() - stdout, stderr = ( - stdout_bytes.decode(errors="backslashreplace"), - stderr_bytes.decode(errors="backslashreplace"), - ) # convert bytestrings to unicode strings - - LOGGER.info(stdout) - if stderr: - LOGGER.error(stderr) + ) build_directory = Path( self._target, diff --git a/crytic_compile/platform/hardhat.py b/crytic_compile/platform/hardhat.py index fbfdbcca..db3389b0 100755 --- a/crytic_compile/platform/hardhat.py +++ b/crytic_compile/platform/hardhat.py @@ -45,12 +45,18 @@ def hardhat_like_parsing( InvalidCompilation: If hardhat failed to run """ + if not os.path.isdir(build_directory): + txt = ( + f"Compilation failed. Can you run build command?\n{build_directory} is not a directory." + ) + raise InvalidCompilation(txt) + files = sorted( os.listdir(build_directory), key=lambda x: os.path.getmtime(Path(build_directory, x)) ) files = [str(f) for f in files if str(f).endswith(".json")] if not files: - txt = f"`compile` failed. Can you run it?\n{build_directory} is empty" + txt = f"Compilation failed. Can you run build command?\n{build_directory} is empty." raise InvalidCompilation(txt) for file in files: @@ -168,29 +174,7 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: str) -> None: if not hardhat_ignore_compile: cmd = base_cmd + ["compile", "--force"] - - LOGGER.info( - "'%s' running", - " ".join(cmd), - ) - - with subprocess.Popen( - cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - cwd=self._target, - executable=shutil.which(cmd[0]), - ) as process: - - stdout_bytes, stderr_bytes = process.communicate() - stdout, stderr = ( - stdout_bytes.decode(errors="backslashreplace"), - stderr_bytes.decode(errors="backslashreplace"), - ) # convert bytestrings to unicode strings - - LOGGER.info(stdout) - if stderr: - LOGGER.error(stderr) + run(cmd, cwd=self._target) hardhat_like_parsing(crytic_compile, self._target, build_directory, hardhat_working_dir) @@ -226,6 +210,9 @@ def is_supported(target: str, **kwargs: str) -> bool: # If there is both foundry and hardhat, foundry takes priority if os.path.isfile(os.path.join(target, "foundry.toml")): + LOGGER.info( + "foundry.toml found, ignoring hardhat. To force hardhat, use `--compile-force-framework hardhat`" + ) return False return os.path.isfile(os.path.join(target, "hardhat.config.js")) | os.path.isfile( From 8a16a362475df68f0b40d3d5036969ac27bdde64 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Thu, 8 Jun 2023 13:48:19 -0500 Subject: [PATCH 2/5] remove unused imports --- crytic_compile/platform/foundry.py | 2 -- crytic_compile/platform/hardhat.py | 2 -- 2 files changed, 4 deletions(-) diff --git a/crytic_compile/platform/foundry.py b/crytic_compile/platform/foundry.py index 48edab0b..f0d6c7f8 100755 --- a/crytic_compile/platform/foundry.py +++ b/crytic_compile/platform/foundry.py @@ -3,8 +3,6 @@ """ import logging import os -import shutil -import subprocess from pathlib import Path from typing import TYPE_CHECKING, List diff --git a/crytic_compile/platform/hardhat.py b/crytic_compile/platform/hardhat.py index db3389b0..09721461 100755 --- a/crytic_compile/platform/hardhat.py +++ b/crytic_compile/platform/hardhat.py @@ -4,8 +4,6 @@ import json import logging import os -import shutil -import subprocess from pathlib import Path from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union From 748e175852542d5d5e767cb5b0a45ae20580324e Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Thu, 8 Jun 2023 13:57:56 -0500 Subject: [PATCH 3/5] add back subprocess import --- crytic_compile/platform/hardhat.py | 1 + 1 file changed, 1 insertion(+) diff --git a/crytic_compile/platform/hardhat.py b/crytic_compile/platform/hardhat.py index 09721461..45ab6362 100755 --- a/crytic_compile/platform/hardhat.py +++ b/crytic_compile/platform/hardhat.py @@ -4,6 +4,7 @@ import json import logging import os +import subprocess from pathlib import Path from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union From 4a96a1f55d790e407877965384aaa25c8a0ab83f Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Thu, 8 Jun 2023 14:00:05 -0500 Subject: [PATCH 4/5] fix another broken import --- crytic_compile/platform/hardhat.py | 1 + 1 file changed, 1 insertion(+) diff --git a/crytic_compile/platform/hardhat.py b/crytic_compile/platform/hardhat.py index 45ab6362..db3389b0 100755 --- a/crytic_compile/platform/hardhat.py +++ b/crytic_compile/platform/hardhat.py @@ -4,6 +4,7 @@ import json import logging import os +import shutil import subprocess from pathlib import Path from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union From 068d60c109a2f0095247c9457b3df1a7aee5cbe5 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Fri, 9 Jun 2023 08:45:17 -0500 Subject: [PATCH 5/5] remove log --- crytic_compile/platform/hardhat.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/crytic_compile/platform/hardhat.py b/crytic_compile/platform/hardhat.py index db3389b0..8741fee9 100755 --- a/crytic_compile/platform/hardhat.py +++ b/crytic_compile/platform/hardhat.py @@ -210,9 +210,6 @@ def is_supported(target: str, **kwargs: str) -> bool: # If there is both foundry and hardhat, foundry takes priority if os.path.isfile(os.path.join(target, "foundry.toml")): - LOGGER.info( - "foundry.toml found, ignoring hardhat. To force hardhat, use `--compile-force-framework hardhat`" - ) return False return os.path.isfile(os.path.join(target, "hardhat.config.js")) | os.path.isfile(