From b4d4665792a7925fe486de642982ca592eb5d192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Wed, 27 Dec 2023 18:40:45 +0200 Subject: [PATCH 01/24] Fix args of wrapper script. --- build_with_docker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_with_docker.py b/build_with_docker.py index a6422ca..e56da1d 100644 --- a/build_with_docker.py +++ b/build_with_docker.py @@ -20,7 +20,7 @@ def main(cli_args: List[str]): parser.add_argument("--packaged-src", type=str, help="source code packaged in a JSON file") parser.add_argument("--contract", type=str) parser.add_argument("--output", type=str, default=Path(os.getcwd()) / "output") - parser.add_argument("--package-whole-project-src", type=bool, default=False, help="include all project files in *.source.json (default: %(default)s)") + parser.add_argument("--package-whole-project-src", action="store_true", default=False, help="include all project files in *.source.json (default: %(default)s)") parser.add_argument("--cargo-target-dir", help="deprecated parameter, not used anymore") parser.add_argument("--no-wasm-opt", action="store_true", default=False, help="do not optimize wasm files after the build (default: %(default)s)") parser.add_argument("--build-root", type=str, required=False, help="root path (within container) for the build (default: %(default)s)") From 35c666fb7a5a7f964c7c69f5c31f204e1ac59de8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Thu, 28 Dec 2023 23:50:32 +0200 Subject: [PATCH 02/24] Add extra tests for v4. --- .../workflows/run_long_integration_tests.yml | 2 +- integration_tests/previous_builds.py | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run_long_integration_tests.yml b/.github/workflows/run_long_integration_tests.yml index 13f1198..53580fa 100644 --- a/.github/workflows/run_long_integration_tests.yml +++ b/.github/workflows/run_long_integration_tests.yml @@ -22,7 +22,7 @@ jobs: - name: Build run: | export PYTHONPATH=. - python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" "a.4" + python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" "a.4" "a.5" "a.6" "a.7" "a.8" - name: Save artifacts uses: actions/upload-artifact@v3 diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index 6106521..9404e67 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -75,5 +75,58 @@ def __init__(self, name: str, "safe-price-view": "b5a657445ae74423c60210c88a6fa89b0bd4bdd00d5f06e788e14495bccc34c9" }, docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.5", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.10.4-backwards-comp-proxy-dex.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.10.4-backwards-comp-proxy-dex", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "farm-staking-proxy": "ee61abb8e639df4696900c5efdac6bec747679c149be26476ee7e384e35b1ff2", + "proxy_dex": "8bab3716a1a92bad1b5cb77b97a09cce1ffabd56b954d881b93e1b480984c3d2", + "factory": "b75f481df42c076f51cd7af04b914bc581e51784b31136ae27db368b37bd87b1", + "farm_with_lock": "6b9d9a0f6bba6004c7c1163890ea0794cc61ab16c967e1c5c2cd2b8a7c19ebbf", + }, + docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.6", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v2.1.1-staking-upgrade.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v2.1.1-staking-upgrade", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "farm-staking": "6dc7c587b2cc4b177a192b709c092f3752b3dcf9ce1b484e69fe64dc333a9e0a", + "farm": "931ca233826ff9dacd889967365db1cde9ed8402eb553de2a3b9d58b6ff1098d", + "factory": "df06465b651594605466e817bfe9d8d7c68eef0f87df4a8d3266bcfb1bef6d83", + "pair": "f3f08ebd758fada871c113c18017d9761f157d00b19c4d3beaba530e6c53afc2", + "energy-factory": "241600c055df605cafd85b75d40b21316a6b35713485201b156d695b23c66a2f" + }, + docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.7", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v2.0-rc6-reproducible.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v2.0-rc6-reproducible", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "pair": "23ce1e8910c105410b4a417153e4b38c550ab78b38b899ea786f0c78500caf21", + "simple-lock": "303290b7a08b091c29315dd6979c1f745fc05467467d7de64e252592074890a7", + "farm-staking-proxy": "56468a6ae726693a71edcf96cf44673466dd980412388e1e4b073a0b4ee592d7" + }, + docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.8", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.10.2-legacy-farm-stripdown.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.10.2-legacy-farm-stripdown", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "farm": "bac43c58b865f55f303ae2d4100c5fe2d4492bc50cfb131d8206200039808242" + }, + docker_image="sdk-rust-contract-builder:next" ) ] From da016e7795498b5b383c95722b60d119c5399c3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Fri, 29 Dec 2023 00:08:04 +0200 Subject: [PATCH 03/24] Extra test. --- integration_tests/previous_builds.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index 9404e67..5384c1a 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -128,5 +128,16 @@ def __init__(self, name: str, "farm": "bac43c58b865f55f303ae2d4100c5fe2d4492bc50cfb131d8206200039808242" }, docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.9", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.10.3-backwards-comp-contracts.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.10.3-backwards-comp-contracts", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "factory": "70ef785d7574746cadfb7eec0e52cc68d6807ddbb54cb1365b3942cf903c12d2" + }, + docker_image="sdk-rust-contract-builder:next" ) ] From f337d9662ecb51ab07b7a560ad900e490c801d0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Fri, 29 Dec 2023 15:38:50 +0200 Subject: [PATCH 04/24] Additional tests. --- .../workflows/run_long_integration_tests.yml | 2 +- integration_tests/previous_builds.py | 66 +++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run_long_integration_tests.yml b/.github/workflows/run_long_integration_tests.yml index 53580fa..f7795f0 100644 --- a/.github/workflows/run_long_integration_tests.yml +++ b/.github/workflows/run_long_integration_tests.yml @@ -22,7 +22,7 @@ jobs: - name: Build run: | export PYTHONPATH=. - python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" "a.4" "a.5" "a.6" "a.7" "a.8" + python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" "a.4" "a.5" "a.6" "a.7" "a.8" "a.9" "a.10" "a.11" "a.12" "a.13" "a.14" - name: Save artifacts uses: actions/upload-artifact@v3 diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index 5384c1a..a4b2ed5 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -139,5 +139,71 @@ def __init__(self, name: str, "factory": "70ef785d7574746cadfb7eec0e52cc68d6807ddbb54cb1365b3942cf903c12d2" }, docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.10", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v2.1.3-price-discovery-comp-upgrade.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v2.1.3-price-discovery-comp-upgrade", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "price-discovery": "96b51ec9df3eb7a8e72f297aac2c8e4e609e39ac5a5f6d861c0819d010b87fde" + }, + docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.11", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.9.1-governance-lkmex.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.9.1-governance-lkmex", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "governance-v2": "7c9c92d914542939c611aaabf21f17e9f71a29e196da319bcfdddd33c409f91d" + }, + docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.12", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.5.4-metabonding-unbond.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.5.4-metabonding-unbond", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "metabonding-staking": "4a9b2afa13eca738b1804c48b82a961afd67adcbbf2aa518052fa124ac060bea" + }, + docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.13", + project_archive_url="https://github.com/multiversx/mx-metabonding-sc/archive/refs/heads/reproducible-v1.1.1.zip", + project_relative_path_in_archive="mx-metabonding-sc-reproducible-v1.1.1", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "metabonding": "897b19e1990f7c487c99c12f50722febe1ee4468bcd3a7405641966dfff2791d" + }, + docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.14", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.8.1-simple-lock-role.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.8.1-simple-lock-role", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "simple-lock": "90d7206ba3866d2e17433faead5b76d345d60c4b311f7c030ebddc0fd5677a00" + }, + docker_image="sdk-rust-contract-builder:next" + ), + PreviousBuild( + name="a.15", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.8.2-simple-lock-whitelist-old-farms.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.8.2-simple-lock-whitelist-old-farms", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "simple-lock-whitelist": "c8868cf7599a94191ac327a81803eb9cee6e35ffddb007374a2bbbf6258d378f" + }, + docker_image="sdk-rust-contract-builder:next" ) ] From 9e787316cbbf3e28c63f565947c1a50e5aa60ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Tue, 2 Jan 2024 15:01:27 +0200 Subject: [PATCH 05/24] Use newer Rust. --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1b26fb6..ad87e2a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ FROM ubuntu:22.04 # Constants -ARG BUILDER_NAME="multiversx/sdk-rust-contract-builder:v5.3.0" -ARG VERSION_RUST="nightly-2023-05-26" +ARG BUILDER_NAME="multiversx/sdk-rust-contract-builder:v6.0.0-beta.0" +ARG VERSION_RUST="nightly-2023-12-11" ARG VERSION_BINARYEN="version_112" ARG DOWNLOAD_URL_BINARYEN="https://github.com/WebAssembly/binaryen/releases/download/${VERSION_BINARYEN}/binaryen-${VERSION_BINARYEN}-x86_64-linux.tar.gz" ARG VERSION_WABT="1.0.27-1" @@ -39,7 +39,7 @@ RUN wget -O rustup.sh https://sh.rustup.rs && \ rm -rf /rust/registry # Install sc-tool -RUN PATH="/rust/bin:${PATH}" CARGO_HOME=/rust RUSTUP_HOME=/rust cargo install multiversx-sc-meta --version ${VERSION_SC_META} && \ +RUN PATH="/rust/bin:${PATH}" CARGO_HOME=/rust RUSTUP_HOME=/rust cargo install multiversx-sc-meta --locked --version ${VERSION_SC_META} && \ rm -rf /rust/registry COPY "multiversx_sdk_rust_contract_builder" "/multiversx_sdk_rust_contract_builder" From 64ab3cc24bc6d8e2e6210deca6c9e3ef43d273a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Tue, 2 Jan 2024 15:09:26 +0200 Subject: [PATCH 06/24] Fix integration tests. --- .../workflows/run_long_integration_tests.yml | 2 +- integration_tests/previous_builds.py | 21 ++++--------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/.github/workflows/run_long_integration_tests.yml b/.github/workflows/run_long_integration_tests.yml index 987df35..fc57c54 100644 --- a/.github/workflows/run_long_integration_tests.yml +++ b/.github/workflows/run_long_integration_tests.yml @@ -22,7 +22,7 @@ jobs: - name: Build run: | export PYTHONPATH=. - python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" + python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" - name: Save artifacts uses: actions/upload-artifact@v3 diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index 0b533ea..09ea267 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -22,29 +22,16 @@ def __init__(self, name: str, previous_builds: List[PreviousBuild] = [ PreviousBuild( name="a.1", - project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.0.zip", - project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.4.0", - packaged_src_url=None, - contract_name=None, - expected_code_hashes={ - "adder": "9fd12f88f9474ba115fb75e9d18a8fdbc4f42147de005445048442d49c3aa725", - "multisig": "2101bc2a7a31ea42e5ffaadd86c1640009690e93b1cb46c3566ba5eac2984e36", - "multisig-full": "ef468403354b6d3a728f86101354359fe6864187d216f674d99b31fc05313a39", - "multisig-view": "3690af76be10c0520e3c3545cde8d9ef6a15c2d0af74dbd8704b4909644049c9" - }, - docker_image="multiversx/sdk-rust-contract-builder:v5.1.0" - ), - PreviousBuild( - name="a.2", - project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.3.zip", - project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.4.3", + project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.6.zip", + project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.4.6", packaged_src_url=None, contract_name=None, expected_code_hashes={ "adder": "9fd12f88f9474ba115fb75e9d18a8fdbc4f42147de005445048442d49c3aa725", "multisig": "b73050629c11b1f1a20ca6232abcef07897624195691552e3f2e2fce47822166", "multisig-full": "37c3b90bdaa7d8d203385c91b0b5cb4d3c444ab9ec5263351978046a545854e3", - "multisig-view": "ebaf987b041fcda297da71291d76736e4e98a1e449e5ec37908cdc0198e8be37" + "multisig-view": "ebaf987b041fcda297da71291d76736e4e98a1e449e5ec37908cdc0198e8be37", + "lottery-esdt": "e06b1a5c7fb71181a79e9be6b86d8ad154e5c2def4da6d2f0aa5266163823291" }, docker_image="multiversx/sdk-rust-contract-builder:v5.3.0" ) From 506a80cb4b2d9d2b2f4a4d79b3aacc58c76420b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Tue, 2 Jan 2024 15:18:19 +0200 Subject: [PATCH 07/24] Fix test. --- .../test_project_folder_and_packaged_src_are_equivalent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py index 8d86748..d4d4ffe 100644 --- a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py +++ b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py @@ -9,7 +9,7 @@ def main(cli_args: List[str]): # TODO: when possible, also add multiversx/mx-exchange-sc (as of May 2023, it references mx-sdk-rs < v0.41.0, thus cannot be used for testing reproducible builds v5). - project_path = download_project_repository("https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.0.zip", "mx-exchange-sc-main") + project_path = download_project_repository("https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.6.zip", "mx-exchange-sc-main") parent_output_using_project = PARENT_OUTPUT_FOLDER / "using-project" parent_output_using_packaged_src = PARENT_OUTPUT_FOLDER / "using-packaged-src" From 5e67b78bacae9ead7efa734e0bcb45e487963b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Tue, 2 Jan 2024 20:39:57 +0200 Subject: [PATCH 08/24] Improve / refactor integration test. --- ..._folder_and_packaged_src_are_equivalent.py | 123 ++++++++++-------- 1 file changed, 71 insertions(+), 52 deletions(-) diff --git a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py index d4d4ffe..8a4c6ba 100644 --- a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py +++ b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py @@ -8,64 +8,83 @@ def main(cli_args: List[str]): - # TODO: when possible, also add multiversx/mx-exchange-sc (as of May 2023, it references mx-sdk-rs < v0.41.0, thus cannot be used for testing reproducible builds v5). - project_path = download_project_repository("https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.6.zip", "mx-exchange-sc-main") - parent_output_using_project = PARENT_OUTPUT_FOLDER / "using-project" - parent_output_using_packaged_src = PARENT_OUTPUT_FOLDER / "using-packaged-src" - - shutil.rmtree(parent_output_using_project, ignore_errors=True) - shutil.rmtree(parent_output_using_packaged_src, ignore_errors=True) - - check_project_folder_and_packaged_src_are_equivalent(project_path, parent_output_using_project, parent_output_using_packaged_src, ["adder", "multisig"]) + repository_url = "https://github.com/multiversx/mx-reproducible-contract-build-example-sc" + tag = "0.4.6" + archve_subfolder = f"mx-reproducible-contract-build-example-sc-{tag}" + project_path = download_project_repository(f"{repository_url}/archive/refs/tags/v{tag}.zip", archve_subfolder) + project_path = project_path / archve_subfolder + + check_project_folder_and_packaged_src_are_equivalent( + project_path=project_path, + package_whole_project_src=True, + parent_output_folder=PARENT_OUTPUT_FOLDER, + contracts=["adder", "multisig"], + ) + + check_project_folder_and_packaged_src_are_equivalent( + project_path=project_path, + package_whole_project_src=False, + parent_output_folder=PARENT_OUTPUT_FOLDER, + contracts=["adder", "multisig"], + ) def check_project_folder_and_packaged_src_are_equivalent( project_path: Path, - parent_output_using_project: Path, - parent_output_using_packaged_src: Path, + package_whole_project_src: bool, + parent_output_folder: Path, contracts: List[str]): for contract in contracts: - for package_whole_project_src in [True, False]: - output_using_project = parent_output_using_project / contract / ("whole" if package_whole_project_src else "truncated") - output_using_packaged_src = parent_output_using_packaged_src / contract / ("whole" if package_whole_project_src else "truncated") - - output_using_packaged_src.mkdir(parents=True, exist_ok=True) - output_using_project.mkdir(parents=True, exist_ok=True) - - run_docker( - project_path=project_path, - package_whole_project_src=package_whole_project_src, - packaged_src_path=None, - contract_name=contract, - image="sdk-rust-contract-builder:next", - output_folder=output_using_project - ) - - packaged_src_path = output_using_project / f"{contract}/{contract}-0.0.0.source.json" - - run_docker( - project_path=None, - package_whole_project_src=package_whole_project_src, - packaged_src_path=packaged_src_path, - contract_name=contract, - image="sdk-rust-contract-builder:next", - output_folder=output_using_packaged_src - ) - - # Check that output folders are identical - using_project_output_files = sorted((output_using_project / contract).rglob("*")) - using_packaged_src_output_files = sorted((output_using_packaged_src / contract).rglob("*")) - - assert len(using_project_output_files) == len(using_packaged_src_output_files) - - for index, file in enumerate(using_project_output_files): - if not file.is_file() or file.suffix == ".zip": - continue - using_project_file_content = file.read_bytes() - using_packaged_src_file_content = using_packaged_src_output_files[index].read_bytes() - - if using_project_file_content != using_packaged_src_file_content: - raise Exception(f"Files differ ({contract}): {file.name}") + output_using_project = parent_output_folder / "using-project" / contract / ("whole" if package_whole_project_src else "truncated") + output_using_packaged_src = parent_output_folder / "using-packaged-src" / contract / ("whole" if package_whole_project_src else "truncated") + + shutil.rmtree(output_using_project, ignore_errors=True) + shutil.rmtree(output_using_packaged_src, ignore_errors=True) + + output_using_project.mkdir(parents=True, exist_ok=True) + output_using_packaged_src.mkdir(parents=True, exist_ok=True) + + run_docker( + project_path=project_path, + package_whole_project_src=package_whole_project_src, + packaged_src_path=None, + contract_name=contract, + image="sdk-rust-contract-builder:next", + output_folder=output_using_project + ) + + packaged_src_path = output_using_project / f"{contract}/{contract}-0.0.0.source.json" + + run_docker( + project_path=None, + package_whole_project_src=package_whole_project_src, + packaged_src_path=packaged_src_path, + contract_name=contract, + image="sdk-rust-contract-builder:next", + output_folder=output_using_packaged_src + ) + + # Check that output folders are identical + using_project_output_files = sorted((output_using_project / contract).rglob("*")) + using_packaged_src_output_files = sorted((output_using_packaged_src / contract).rglob("*")) + + assert len(using_project_output_files) == len(using_packaged_src_output_files) + + for index, file_using_project in enumerate(using_project_output_files): + file_using_packaged_src = using_packaged_src_output_files[index] + + if not file_using_project.is_file() or file_using_project.suffix == ".zip": + continue + file_content_using_project = file_using_project.read_bytes() + file_content_using_packaged_src = file_using_packaged_src.read_bytes() + + if file_content_using_project == file_content_using_packaged_src: + print(f"Files are identical ({contract}): {file_using_project.name}") + else: + print(f"Files differ ({contract}):") + print(f" {file_using_project}") + print(f" {file_using_packaged_src}") + raise Exception(f"Files differ ({contract}): {file_using_project.name}") if __name__ == "__main__": From 517ac786504a7b6c3f254d99f3080aa3540e1b70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Tue, 2 Jan 2024 21:31:35 +0200 Subject: [PATCH 09/24] Refactor tests, add some more tests. --- .../workflows/run_long_integration_tests.yml | 2 +- integration_tests/previous_builds.py | 33 +++-- ..._folder_and_packaged_src_are_equivalent.py | 118 ++++++++++-------- 3 files changed, 90 insertions(+), 63 deletions(-) diff --git a/.github/workflows/run_long_integration_tests.yml b/.github/workflows/run_long_integration_tests.yml index 987df35..a230dfc 100644 --- a/.github/workflows/run_long_integration_tests.yml +++ b/.github/workflows/run_long_integration_tests.yml @@ -22,7 +22,7 @@ jobs: - name: Build run: | export PYTHONPATH=. - python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" + python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" - name: Save artifacts uses: actions/upload-artifact@v3 diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index 0b533ea..a26fe24 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -22,29 +22,42 @@ def __init__(self, name: str, previous_builds: List[PreviousBuild] = [ PreviousBuild( name="a.1", - project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.0.zip", - project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.4.0", + project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v2.1.1-staking-upgrade.zip", + project_relative_path_in_archive="mx-exchange-sc-reproducible-v2.1.1-staking-upgrade", packaged_src_url=None, contract_name=None, expected_code_hashes={ - "adder": "9fd12f88f9474ba115fb75e9d18a8fdbc4f42147de005445048442d49c3aa725", - "multisig": "2101bc2a7a31ea42e5ffaadd86c1640009690e93b1cb46c3566ba5eac2984e36", - "multisig-full": "ef468403354b6d3a728f86101354359fe6864187d216f674d99b31fc05313a39", - "multisig-view": "3690af76be10c0520e3c3545cde8d9ef6a15c2d0af74dbd8704b4909644049c9" + "farm-staking": "6dc7c587b2cc4b177a192b709c092f3752b3dcf9ce1b484e69fe64dc333a9e0a", + "farm": "931ca233826ff9dacd889967365db1cde9ed8402eb553de2a3b9d58b6ff1098d", + "factory": "df06465b651594605466e817bfe9d8d7c68eef0f87df4a8d3266bcfb1bef6d83", + "pair": "f3f08ebd758fada871c113c18017d9761f157d00b19c4d3beaba530e6c53afc2", + "energy-factory": "241600c055df605cafd85b75d40b21316a6b35713485201b156d695b23c66a2f" }, - docker_image="multiversx/sdk-rust-contract-builder:v5.1.0" + docker_image="multiversx/sdk-rust-contract-builder:v4.2.1" ), PreviousBuild( name="a.2", - project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.3.zip", - project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.4.3", + project_archive_url="https://github.com/multiversx/mx-metabonding-sc/archive/refs/heads/reproducible-v1.1.1.zip", + project_relative_path_in_archive="mx-metabonding-sc-reproducible-v1.1.1", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "metabonding": "897b19e1990f7c487c99c12f50722febe1ee4468bcd3a7405641966dfff2791d" + }, + docker_image="sdk-rust-contract-builder:v4.2.1" + ), + PreviousBuild( + name="a.3", + project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.6.zip", + project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.4.6", packaged_src_url=None, contract_name=None, expected_code_hashes={ "adder": "9fd12f88f9474ba115fb75e9d18a8fdbc4f42147de005445048442d49c3aa725", "multisig": "b73050629c11b1f1a20ca6232abcef07897624195691552e3f2e2fce47822166", "multisig-full": "37c3b90bdaa7d8d203385c91b0b5cb4d3c444ab9ec5263351978046a545854e3", - "multisig-view": "ebaf987b041fcda297da71291d76736e4e98a1e449e5ec37908cdc0198e8be37" + "multisig-view": "ebaf987b041fcda297da71291d76736e4e98a1e449e5ec37908cdc0198e8be37", + "lottery-esdt": "e06b1a5c7fb71181a79e9be6b86d8ad154e5c2def4da6d2f0aa5266163823291" }, docker_image="multiversx/sdk-rust-contract-builder:v5.3.0" ) diff --git a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py index 8d86748..c3f337c 100644 --- a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py +++ b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py @@ -8,64 +8,78 @@ def main(cli_args: List[str]): - # TODO: when possible, also add multiversx/mx-exchange-sc (as of May 2023, it references mx-sdk-rs < v0.41.0, thus cannot be used for testing reproducible builds v5). - project_path = download_project_repository("https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.0.zip", "mx-exchange-sc-main") - parent_output_using_project = PARENT_OUTPUT_FOLDER / "using-project" - parent_output_using_packaged_src = PARENT_OUTPUT_FOLDER / "using-packaged-src" - - shutil.rmtree(parent_output_using_project, ignore_errors=True) - shutil.rmtree(parent_output_using_packaged_src, ignore_errors=True) - - check_project_folder_and_packaged_src_are_equivalent(project_path, parent_output_using_project, parent_output_using_packaged_src, ["adder", "multisig"]) + repository_url = "https://github.com/multiversx/mx-reproducible-contract-build-example-sc" + tag = "0.4.7-beta.1" + archve_subfolder = f"mx-reproducible-contract-build-example-sc-{tag}" + project_path = download_project_repository(f"{repository_url}/archive/refs/tags/v{tag}.zip", archve_subfolder) + project_path = project_path / archve_subfolder + + # Only package_whole_project_src = True works. + # package_whole_project_src = False does not work, since a missing Cargo.lock at the workspace level leads to build errors. + check_project_folder_and_packaged_src_are_equivalent( + project_path=project_path, + package_whole_project_src=True, + parent_output_folder=PARENT_OUTPUT_FOLDER, + contracts=["adder", "multisig"], + ) def check_project_folder_and_packaged_src_are_equivalent( project_path: Path, - parent_output_using_project: Path, - parent_output_using_packaged_src: Path, + package_whole_project_src: bool, + parent_output_folder: Path, contracts: List[str]): for contract in contracts: - for package_whole_project_src in [True, False]: - output_using_project = parent_output_using_project / contract / ("whole" if package_whole_project_src else "truncated") - output_using_packaged_src = parent_output_using_packaged_src / contract / ("whole" if package_whole_project_src else "truncated") - - output_using_packaged_src.mkdir(parents=True, exist_ok=True) - output_using_project.mkdir(parents=True, exist_ok=True) - - run_docker( - project_path=project_path, - package_whole_project_src=package_whole_project_src, - packaged_src_path=None, - contract_name=contract, - image="sdk-rust-contract-builder:next", - output_folder=output_using_project - ) - - packaged_src_path = output_using_project / f"{contract}/{contract}-0.0.0.source.json" - - run_docker( - project_path=None, - package_whole_project_src=package_whole_project_src, - packaged_src_path=packaged_src_path, - contract_name=contract, - image="sdk-rust-contract-builder:next", - output_folder=output_using_packaged_src - ) - - # Check that output folders are identical - using_project_output_files = sorted((output_using_project / contract).rglob("*")) - using_packaged_src_output_files = sorted((output_using_packaged_src / contract).rglob("*")) - - assert len(using_project_output_files) == len(using_packaged_src_output_files) - - for index, file in enumerate(using_project_output_files): - if not file.is_file() or file.suffix == ".zip": - continue - using_project_file_content = file.read_bytes() - using_packaged_src_file_content = using_packaged_src_output_files[index].read_bytes() - - if using_project_file_content != using_packaged_src_file_content: - raise Exception(f"Files differ ({contract}): {file.name}") + output_using_project = parent_output_folder / "using-project" / contract / ("whole" if package_whole_project_src else "truncated") + output_using_packaged_src = parent_output_folder / "using-packaged-src" / contract / ("whole" if package_whole_project_src else "truncated") + + shutil.rmtree(output_using_project, ignore_errors=True) + shutil.rmtree(output_using_packaged_src, ignore_errors=True) + + output_using_project.mkdir(parents=True, exist_ok=True) + output_using_packaged_src.mkdir(parents=True, exist_ok=True) + + run_docker( + project_path=project_path, + package_whole_project_src=package_whole_project_src, + packaged_src_path=None, + contract_name=contract, + image="sdk-rust-contract-builder:next", + output_folder=output_using_project + ) + + packaged_src_path = output_using_project / f"{contract}/{contract}-0.0.0.source.json" + + run_docker( + project_path=None, + package_whole_project_src=package_whole_project_src, + packaged_src_path=packaged_src_path, + contract_name=contract, + image="sdk-rust-contract-builder:next", + output_folder=output_using_packaged_src + ) + + # Check that output folders are identical + using_project_output_files = sorted((output_using_project / contract).rglob("*")) + using_packaged_src_output_files = sorted((output_using_packaged_src / contract).rglob("*")) + + assert len(using_project_output_files) == len(using_packaged_src_output_files) + + for index, file_using_project in enumerate(using_project_output_files): + file_using_packaged_src = using_packaged_src_output_files[index] + + if not file_using_project.is_file() or file_using_project.suffix == ".zip": + continue + file_content_using_project = file_using_project.read_bytes() + file_content_using_packaged_src = file_using_packaged_src.read_bytes() + + if file_content_using_project == file_content_using_packaged_src: + print(f"Files are identical ({contract}): {file_using_project.name}") + else: + print(f"Files differ ({contract}):") + print(f" {file_using_project}") + print(f" {file_using_packaged_src}") + raise Exception(f"Files differ ({contract}): {file_using_project.name}") if __name__ == "__main__": From 60e8f198ed37a3f8fb4e19f7a55bbf0d5d9f3479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Tue, 2 Jan 2024 21:32:49 +0200 Subject: [PATCH 10/24] Bump version. --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1b26fb6..d088d0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:22.04 # Constants -ARG BUILDER_NAME="multiversx/sdk-rust-contract-builder:v5.3.0" +ARG BUILDER_NAME="multiversx/sdk-rust-contract-builder:v5.4.0" ARG VERSION_RUST="nightly-2023-05-26" ARG VERSION_BINARYEN="version_112" ARG DOWNLOAD_URL_BINARYEN="https://github.com/WebAssembly/binaryen/releases/download/${VERSION_BINARYEN}/binaryen-${VERSION_BINARYEN}-x86_64-linux.tar.gz" From fc5fd47792595b6113d1a003d83c2c85cfac180e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Tue, 2 Jan 2024 21:59:07 +0200 Subject: [PATCH 11/24] Fix installation of sc-meta, use "--locked". --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d088d0f..fd2e3ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,7 +39,7 @@ RUN wget -O rustup.sh https://sh.rustup.rs && \ rm -rf /rust/registry # Install sc-tool -RUN PATH="/rust/bin:${PATH}" CARGO_HOME=/rust RUSTUP_HOME=/rust cargo install multiversx-sc-meta --version ${VERSION_SC_META} && \ +RUN PATH="/rust/bin:${PATH}" CARGO_HOME=/rust RUSTUP_HOME=/rust cargo install multiversx-sc-meta --version ${VERSION_SC_META} --locked && \ rm -rf /rust/registry COPY "multiversx_sdk_rust_contract_builder" "/multiversx_sdk_rust_contract_builder" From 9f9ba585552157c8696bdd25482f7156d75f14bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Tue, 2 Jan 2024 22:06:16 +0200 Subject: [PATCH 12/24] Fix image name for previous builds (tests). --- integration_tests/previous_builds.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index a26fe24..99713a9 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -44,7 +44,7 @@ def __init__(self, name: str, expected_code_hashes={ "metabonding": "897b19e1990f7c487c99c12f50722febe1ee4468bcd3a7405641966dfff2791d" }, - docker_image="sdk-rust-contract-builder:v4.2.1" + docker_image="multiversx/sdk-rust-contract-builder:v4.2.1" ), PreviousBuild( name="a.3", From 5f6ded3474533137f8407764c5fc1474afbd98a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Wed, 3 Jan 2024 12:12:41 +0200 Subject: [PATCH 13/24] Handle sc-config.toml (multicontract.toml is not used anymore). --- integration_tests/previous_builds.py | 12 ++++++------ ...project_folder_and_packaged_src_are_equivalent.py | 2 +- multiversx_sdk_rust_contract_builder/source_code.py | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index 99713a9..757d05c 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -48,17 +48,17 @@ def __init__(self, name: str, ), PreviousBuild( name="a.3", - project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.6.zip", - project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.4.6", + project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.7.zip", + project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.4.7", packaged_src_url=None, contract_name=None, expected_code_hashes={ "adder": "9fd12f88f9474ba115fb75e9d18a8fdbc4f42147de005445048442d49c3aa725", - "multisig": "b73050629c11b1f1a20ca6232abcef07897624195691552e3f2e2fce47822166", - "multisig-full": "37c3b90bdaa7d8d203385c91b0b5cb4d3c444ab9ec5263351978046a545854e3", - "multisig-view": "ebaf987b041fcda297da71291d76736e4e98a1e449e5ec37908cdc0198e8be37", + "multisig": "9600fc699c85fd5a24ecf28f0b8cf01dc281c81399fb018d5ad8405b7d401041", + "multisig-full": "9eed9c35113209fc69631cf29aac6e81f0e331132bf6e46198e679259075ad49", + "multisig-view": "3993cf3fb5cd18102e2b8946ea1997f6f1cc512537f453265ba1afd7378fc0c6", "lottery-esdt": "e06b1a5c7fb71181a79e9be6b86d8ad154e5c2def4da6d2f0aa5266163823291" }, - docker_image="multiversx/sdk-rust-contract-builder:v5.3.0" + docker_image="multiversx/sdk-rust-contract-builder:v5.4.0" ) ] diff --git a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py index c3f337c..9be650a 100644 --- a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py +++ b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py @@ -9,7 +9,7 @@ def main(cli_args: List[str]): repository_url = "https://github.com/multiversx/mx-reproducible-contract-build-example-sc" - tag = "0.4.7-beta.1" + tag = "0.4.7" archve_subfolder = f"mx-reproducible-contract-build-example-sc-{tag}" project_path = download_project_repository(f"{repository_url}/archive/refs/tags/v{tag}.zip", archve_subfolder) project_path = project_path / archve_subfolder diff --git a/multiversx_sdk_rust_contract_builder/source_code.py b/multiversx_sdk_rust_contract_builder/source_code.py index 6157b94..ce21b15 100644 --- a/multiversx_sdk_rust_contract_builder/source_code.py +++ b/multiversx_sdk_rust_contract_builder/source_code.py @@ -63,7 +63,7 @@ def _is_source_code_file(path: Path) -> bool: return True if path.parent.name == "meta" and path.name == "Cargo.lock": return False - if path.name in ["Cargo.toml", "Cargo.lock", "multicontract.toml", CONTRACT_CONFIG_FILENAME]: + if path.name in ["Cargo.toml", "Cargo.lock", "multicontract.toml", "sc-config.toml", CONTRACT_CONFIG_FILENAME]: return True return False From 8c6b21d39dcae6f00a1c7ac17789e17e387e3e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Wed, 3 Jan 2024 12:46:13 +0200 Subject: [PATCH 14/24] Additional tests. --- .github/workflows/run_long_integration_tests.yml | 2 +- integration_tests/previous_builds.py | 15 +++++++++++++++ ...ject_folder_and_packaged_src_are_equivalent.py | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.github/workflows/run_long_integration_tests.yml b/.github/workflows/run_long_integration_tests.yml index a230dfc..13f1198 100644 --- a/.github/workflows/run_long_integration_tests.yml +++ b/.github/workflows/run_long_integration_tests.yml @@ -22,7 +22,7 @@ jobs: - name: Build run: | export PYTHONPATH=. - python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" + python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" "a.4" - name: Save artifacts uses: actions/upload-artifact@v3 diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index 757d05c..6020d14 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -60,5 +60,20 @@ def __init__(self, name: str, "lottery-esdt": "e06b1a5c7fb71181a79e9be6b86d8ad154e5c2def4da6d2f0aa5266163823291" }, docker_image="multiversx/sdk-rust-contract-builder:v5.4.0" + ), + PreviousBuild( + name="a.4", + project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.5.0-beta.0.zip", + project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.5.0-beta.0", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "adder": "384b680df7a95ebceca02ffb3e760a2fc288dea1b802685ef15df22ae88ba15b", + "multisig": "d1453017d1fcac43f3b54c390b112b37af38ae840a2464d8ff68e3981da9972d", + "multisig-full": "e7fd6d118639e4b4381b3a667435948cd70f1f06b6ef39e227bd88349f7e7979", + "multisig-view": "290c9b3e374dffa33649ed46bd0b626c66f933eff9437f11f3559372d7538f85", + "lottery-esdt": "d4d4b6d2d797749435a4127a12d5ea16b911d6783e00cbc9faf4bace7d655c7a" + }, + docker_image="sdk-rust-contract-builder:next" ) ] diff --git a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py index 9be650a..d2dc8f2 100644 --- a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py +++ b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py @@ -9,7 +9,7 @@ def main(cli_args: List[str]): repository_url = "https://github.com/multiversx/mx-reproducible-contract-build-example-sc" - tag = "0.4.7" + tag = "0.5.0-beta.0" archve_subfolder = f"mx-reproducible-contract-build-example-sc-{tag}" project_path = download_project_repository(f"{repository_url}/archive/refs/tags/v{tag}.zip", archve_subfolder) project_path = project_path / archve_subfolder From 99ffc3c609e362e33ee9cf9d138829ef34487648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Wed, 3 Jan 2024 21:21:44 +0200 Subject: [PATCH 15/24] Bump version. --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index fd2e3ac..36a95ec 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:22.04 # Constants -ARG BUILDER_NAME="multiversx/sdk-rust-contract-builder:v5.4.0" +ARG BUILDER_NAME="multiversx/sdk-rust-contract-builder:v5.4.1" ARG VERSION_RUST="nightly-2023-05-26" ARG VERSION_BINARYEN="version_112" ARG DOWNLOAD_URL_BINARYEN="https://github.com/WebAssembly/binaryen/releases/download/${VERSION_BINARYEN}/binaryen-${VERSION_BINARYEN}-x86_64-linux.tar.gz" From 27c7cb1a3747d905d370023efa2d0b03c8e2bf6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Wed, 10 Jan 2024 23:09:37 +0200 Subject: [PATCH 16/24] Do not exclude "meta/Cargo.lock" (important if the project is not a Cargo workspace). --- multiversx_sdk_rust_contract_builder/source_code.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/multiversx_sdk_rust_contract_builder/source_code.py b/multiversx_sdk_rust_contract_builder/source_code.py index ce21b15..cb8ec5c 100644 --- a/multiversx_sdk_rust_contract_builder/source_code.py +++ b/multiversx_sdk_rust_contract_builder/source_code.py @@ -61,8 +61,6 @@ def get_source_code_files( def _is_source_code_file(path: Path) -> bool: if path.suffix == ".rs": return True - if path.parent.name == "meta" and path.name == "Cargo.lock": - return False if path.name in ["Cargo.toml", "Cargo.lock", "multicontract.toml", "sc-config.toml", CONTRACT_CONFIG_FILENAME]: return True return False From ed3e0d6ed11f3485969dcdff9166554ce4a6967d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Wed, 10 Jan 2024 23:10:40 +0200 Subject: [PATCH 17/24] The whole packaged source code is the default one. The partial one now of secondary importance, exotic, less promoted. --- .../build_outcome.py | 1 + multiversx_sdk_rust_contract_builder/builder.py | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/multiversx_sdk_rust_contract_builder/build_outcome.py b/multiversx_sdk_rust_contract_builder/build_outcome.py index 8c7be03..d6cf911 100644 --- a/multiversx_sdk_rust_contract_builder/build_outcome.py +++ b/multiversx_sdk_rust_contract_builder/build_outcome.py @@ -70,6 +70,7 @@ def many_from_folders(cls, build_folder: Path, output_folder: Path) -> Dict[str, entry.codehash = find_file_in_folder(output_folder, f"{contract_name}.codehash.txt").read_text() entry.bytecode_path = BuildArtifact.find_in_output(f"{contract_name}.wasm", output_folder) entry.abi_path = BuildArtifact.find_in_output(f"{contract_name}.abi.json", output_folder) + # This is the whole project source code. The file *.partial.source.json is not listed here - so that it's advertised as little as possible. entry.src_package_path = BuildArtifact.find_in_output("*.source.json", output_folder) result[contract_name] = entry diff --git a/multiversx_sdk_rust_contract_builder/builder.py b/multiversx_sdk_rust_contract_builder/builder.py index 0ff3cc8..01db068 100644 --- a/multiversx_sdk_rust_contract_builder/builder.py +++ b/multiversx_sdk_rust_contract_builder/builder.py @@ -75,13 +75,23 @@ def build_project( # The bundle (packaged source code) is created after build, so that Cargo.lock files are included (if previously missing). create_packaged_source_code( parent_project_folder=project_within_build_folder, - package_whole_project_src=package_whole_project_src, + package_whole_project_src=True, contract_folder=contract_build_subfolder, output_folder=output_subfolder, build_metadata=metadata.to_dict(), build_options=options.to_dict(), + package_filename=f"{contract_name}-{contract_version}.source.json" ) + create_packaged_source_code( + parent_project_folder=project_within_build_folder, + package_whole_project_src=False, + contract_folder=contract_build_subfolder, + output_folder=output_subfolder, + build_metadata=metadata.to_dict(), + build_options=options.to_dict(), + package_filename=f"{contract_name}-{contract_version}.partial.source.json" + ) outcome.gather_artifacts(contract_build_subfolder, output_subfolder) return outcome @@ -168,7 +178,8 @@ def create_packaged_source_code( contract_folder: Path, output_folder: Path, build_metadata: Dict[str, Any], - build_options: Dict[str, Any] + build_options: Dict[str, Any], + package_filename: str ): source_code_files = source_code.get_source_code_files( project_folder=parent_project_folder, @@ -185,7 +196,7 @@ def create_packaged_source_code( ) package = PackagedSourceCode.from_filesystem(metadata, parent_project_folder, source_code_files) - package_path = output_folder / f"{contract_name}-{contract_version}.source.json" + package_path = output_folder / package_filename package.save_to_file(package_path) size_of_file = package_path.stat().st_size From 922f31d3b0a1772dd8d3bc423214d3d5b93b2600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Wed, 10 Jan 2024 23:31:23 +0200 Subject: [PATCH 18/24] Do not use flag anymore - not possible to switch between partial and whole packaged source code anymore. --- build_with_docker.py | 6 +----- integration_tests/shared.py | 4 ---- .../test_previous_builds_are_reproducible.py | 1 - ...t_project_folder_and_packaged_src_are_equivalent.py | 10 ++-------- multiversx_sdk_rust_contract_builder/build_options.py | 5 ++--- multiversx_sdk_rust_contract_builder/builder.py | 6 +----- 6 files changed, 6 insertions(+), 26 deletions(-) diff --git a/build_with_docker.py b/build_with_docker.py index e56da1d..b639fc8 100644 --- a/build_with_docker.py +++ b/build_with_docker.py @@ -20,7 +20,7 @@ def main(cli_args: List[str]): parser.add_argument("--packaged-src", type=str, help="source code packaged in a JSON file") parser.add_argument("--contract", type=str) parser.add_argument("--output", type=str, default=Path(os.getcwd()) / "output") - parser.add_argument("--package-whole-project-src", action="store_true", default=False, help="include all project files in *.source.json (default: %(default)s)") + parser.add_argument("--package-whole-project-src", action="store_true", default=False, help="deprecated parameter, not used anymore") parser.add_argument("--cargo-target-dir", help="deprecated parameter, not used anymore") parser.add_argument("--no-wasm-opt", action="store_true", default=False, help="do not optimize wasm files after the build (default: %(default)s)") parser.add_argument("--build-root", type=str, required=False, help="root path (within container) for the build (default: %(default)s)") @@ -35,7 +35,6 @@ def main(cli_args: List[str]): packaged_src_path = Path(parsed_args.packaged_src).expanduser().resolve() if parsed_args.packaged_src else None contract_path = parsed_args.contract output_path = Path(parsed_args.output).expanduser().resolve() - package_whole_project_src = parsed_args.package_whole_project_src no_wasm_opt = parsed_args.no_wasm_opt build_root = Path(parsed_args.build_root) if parsed_args.build_root else None cargo_verbose = parsed_args.cargo_verbose @@ -97,9 +96,6 @@ def main(cli_args: List[str]): if build_root: entrypoint_args.extend(["--build-root", str(build_root)]) - if package_whole_project_src: - entrypoint_args.append("--package-whole-project-src") - # Run docker container args = docker_general_args + docker_mount_args + docker_env_args + [image] + entrypoint_args logger.info(f"Running docker: {args}") diff --git a/integration_tests/shared.py b/integration_tests/shared.py index 678d143..54dcd0e 100644 --- a/integration_tests/shared.py +++ b/integration_tests/shared.py @@ -31,7 +31,6 @@ def download_packaged_src(json_url: str, name: str) -> Path: def run_docker( project_path: Optional[Path], - package_whole_project_src: bool, packaged_src_path: Optional[Path], contract_name: Optional[str], image: str, @@ -66,9 +65,6 @@ def run_docker( if project_path: entrypoint_args.extend(["--project", "project"]) - if package_whole_project_src: - entrypoint_args.append("--package-whole-project-src") - if packaged_src_path: entrypoint_args.extend(["--packaged-src", "packaged-src.json"]) diff --git a/integration_tests/test_previous_builds_are_reproducible.py b/integration_tests/test_previous_builds_are_reproducible.py index 020b730..5d142a3 100644 --- a/integration_tests/test_previous_builds_are_reproducible.py +++ b/integration_tests/test_previous_builds_are_reproducible.py @@ -41,7 +41,6 @@ def main(cli_args: List[str]): run_docker( project_path=project_path, - package_whole_project_src=False, packaged_src_path=packaged_src_path, contract_name=build.contract_name, image=build.docker_image, diff --git a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py index 9be650a..b35de45 100644 --- a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py +++ b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py @@ -14,11 +14,8 @@ def main(cli_args: List[str]): project_path = download_project_repository(f"{repository_url}/archive/refs/tags/v{tag}.zip", archve_subfolder) project_path = project_path / archve_subfolder - # Only package_whole_project_src = True works. - # package_whole_project_src = False does not work, since a missing Cargo.lock at the workspace level leads to build errors. check_project_folder_and_packaged_src_are_equivalent( project_path=project_path, - package_whole_project_src=True, parent_output_folder=PARENT_OUTPUT_FOLDER, contracts=["adder", "multisig"], ) @@ -26,12 +23,11 @@ def main(cli_args: List[str]): def check_project_folder_and_packaged_src_are_equivalent( project_path: Path, - package_whole_project_src: bool, parent_output_folder: Path, contracts: List[str]): for contract in contracts: - output_using_project = parent_output_folder / "using-project" / contract / ("whole" if package_whole_project_src else "truncated") - output_using_packaged_src = parent_output_folder / "using-packaged-src" / contract / ("whole" if package_whole_project_src else "truncated") + output_using_project = parent_output_folder / "using-project" / contract + output_using_packaged_src = parent_output_folder / "using-packaged-src" / contract shutil.rmtree(output_using_project, ignore_errors=True) shutil.rmtree(output_using_packaged_src, ignore_errors=True) @@ -41,7 +37,6 @@ def check_project_folder_and_packaged_src_are_equivalent( run_docker( project_path=project_path, - package_whole_project_src=package_whole_project_src, packaged_src_path=None, contract_name=contract, image="sdk-rust-contract-builder:next", @@ -52,7 +47,6 @@ def check_project_folder_and_packaged_src_are_equivalent( run_docker( project_path=None, - package_whole_project_src=package_whole_project_src, packaged_src_path=packaged_src_path, contract_name=contract, image="sdk-rust-contract-builder:next", diff --git a/multiversx_sdk_rust_contract_builder/build_options.py b/multiversx_sdk_rust_contract_builder/build_options.py index 8455ef4..63a9624 100644 --- a/multiversx_sdk_rust_contract_builder/build_options.py +++ b/multiversx_sdk_rust_contract_builder/build_options.py @@ -6,13 +6,11 @@ class BuildOptions: def __init__( self, - package_whole_project_src: bool, specific_contract: str, cargo_target_dir: Path, no_wasm_opt: bool, build_root_folder: Path, ) -> None: - self.package_whole_project_src = package_whole_project_src self.specific_contract = specific_contract self.cargo_target_dir = cargo_target_dir self.no_wasm_opt = no_wasm_opt @@ -20,7 +18,8 @@ def __init__( def to_dict(self) -> Dict[str, Any]: return { - "packageWholeProjectSrc": self.package_whole_project_src, + # "packageWholeProjectSrc" is kept due to compatibility reasons. + "packageWholeProjectSrc": True, "specificContract": self.specific_contract, "cargoTargetDir": str(self.cargo_target_dir), "noWasmOpt": self.no_wasm_opt, diff --git a/multiversx_sdk_rust_contract_builder/builder.py b/multiversx_sdk_rust_contract_builder/builder.py index 01db068..48fa7d2 100644 --- a/multiversx_sdk_rust_contract_builder/builder.py +++ b/multiversx_sdk_rust_contract_builder/builder.py @@ -5,7 +5,7 @@ from pathlib import Path from typing import Any, Dict, List, Set -from multiversx_sdk_rust_contract_builder import cargo_toml, source_code +from multiversx_sdk_rust_contract_builder import source_code from multiversx_sdk_rust_contract_builder.build_metadata import BuildMetadata from multiversx_sdk_rust_contract_builder.build_options import BuildOptions from multiversx_sdk_rust_contract_builder.build_outcome import BuildOutcome @@ -31,7 +31,6 @@ def build_project( project_folder = project_folder.expanduser().resolve() parent_output_folder = parent_output_folder.expanduser().resolve() cargo_target_dir = options.cargo_target_dir.expanduser().resolve() - package_whole_project_src = options.package_whole_project_src no_wasm_opt = options.no_wasm_opt specific_contract = options.specific_contract build_root_folder = options.build_root_folder @@ -45,9 +44,6 @@ def build_project( # We copy the whole project folder to the build path, to ensure that all local dependencies are available. project_within_build_folder = copy_project_folder_to_build_folder(project_folder, build_root_folder) - if not package_whole_project_src: - cargo_toml.remove_dev_dependencies_sections_from_all(project_within_build_folder) - for contract_folder in sorted(contracts_folders): contract_name, contract_version = get_contract_name_and_version(contract_folder) logging.info(f"Contract = {contract_name}, version = {contract_version}") From 9089c4be633aea91ef810d537cda58f55913c6e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Wed, 10 Jan 2024 23:31:50 +0200 Subject: [PATCH 19/24] Dev dependencies not removed anymore. --- .../cargo_toml.py | 19 ------------------- multiversx_sdk_rust_contract_builder/main.py | 4 +--- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/multiversx_sdk_rust_contract_builder/cargo_toml.py b/multiversx_sdk_rust_contract_builder/cargo_toml.py index 6cd4f16..27ae161 100644 --- a/multiversx_sdk_rust_contract_builder/cargo_toml.py +++ b/multiversx_sdk_rust_contract_builder/cargo_toml.py @@ -1,12 +1,9 @@ -import logging import shutil from pathlib import Path from typing import Tuple import toml -from multiversx_sdk_rust_contract_builder.filesystem import get_all_files - def get_contract_name_and_version(contract_folder: Path) -> Tuple[str, str]: file = contract_folder / "Cargo.toml" @@ -21,19 +18,3 @@ def promote_cargo_lock_to_contract_folder(build_folder: Path, contract_folder: P from_path = build_folder / "wasm" / "Cargo.lock" to_path = contract_folder / "wasm" / "Cargo.lock" shutil.copy(from_path, to_path) - - -def remove_dev_dependencies_sections_from_all(folder: Path): - logging.info(f"remove_dev_dependencies_sections_from_all({folder})") - - all_files = get_all_files(folder, lambda file: file.name == "Cargo.toml") - for file in all_files: - remove_dev_dependencies_sections(file) - - -def remove_dev_dependencies_sections(file: Path): - data = toml.loads(file.read_text()) - - if "dev-dependencies" in data: - del data["dev-dependencies"] - file.write_text(toml.dumps(data)) diff --git a/multiversx_sdk_rust_contract_builder/main.py b/multiversx_sdk_rust_contract_builder/main.py index ebd7c58..755eefa 100644 --- a/multiversx_sdk_rust_contract_builder/main.py +++ b/multiversx_sdk_rust_contract_builder/main.py @@ -24,7 +24,7 @@ def main(cli_args: List[str]): parser = ArgumentParser() parser.add_argument("--project", type=str, required=False, help="source code folder (project)") - parser.add_argument("--package-whole-project-src", action="store_true", default=False, help="include all project files in *.source.json (default: %(default)s)") + parser.add_argument("--package-whole-project-src", action="store_true", default=False, help="deprecated parameter, not used anymore") parser.add_argument("--packaged-src", type=str, required=False, help="source code packaged in a JSON file") parser.add_argument("--contract", type=str, required=False, help="contract to build from within the source code folder; should be relative to the project path") parser.add_argument("--output", type=str, required=True) @@ -34,7 +34,6 @@ def main(cli_args: List[str]): parsed_args = parser.parse_args(cli_args) project_path = Path(parsed_args.project).expanduser().resolve() if parsed_args.project else None - package_whole_project_src = parsed_args.package_whole_project_src packaged_src_path = Path(parsed_args.packaged_src).expanduser().resolve() if parsed_args.packaged_src else None parent_output_folder = Path(parsed_args.output) specific_contract = parsed_args.contract @@ -55,7 +54,6 @@ def main(cli_args: List[str]): metadata = BuildMetadata.from_env() options = BuildOptions( - package_whole_project_src=package_whole_project_src, specific_contract=specific_contract, cargo_target_dir=cargo_target_dir, no_wasm_opt=no_wasm_opt, From 004503cf7077860b73c524e5fc35c8dc3084e720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Thu, 11 Jan 2024 12:13:46 +0200 Subject: [PATCH 20/24] Fix filenames. --- multiversx_sdk_rust_contract_builder/build_outcome.py | 2 +- multiversx_sdk_rust_contract_builder/builder.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/multiversx_sdk_rust_contract_builder/build_outcome.py b/multiversx_sdk_rust_contract_builder/build_outcome.py index d6cf911..7f7450b 100644 --- a/multiversx_sdk_rust_contract_builder/build_outcome.py +++ b/multiversx_sdk_rust_contract_builder/build_outcome.py @@ -70,7 +70,7 @@ def many_from_folders(cls, build_folder: Path, output_folder: Path) -> Dict[str, entry.codehash = find_file_in_folder(output_folder, f"{contract_name}.codehash.txt").read_text() entry.bytecode_path = BuildArtifact.find_in_output(f"{contract_name}.wasm", output_folder) entry.abi_path = BuildArtifact.find_in_output(f"{contract_name}.abi.json", output_folder) - # This is the whole project source code. The file *.partial.source.json is not listed here - so that it's advertised as little as possible. + # This is the whole project source code. The file *.partial-source.json is not listed here - so that it's advertised as little as possible. entry.src_package_path = BuildArtifact.find_in_output("*.source.json", output_folder) result[contract_name] = entry diff --git a/multiversx_sdk_rust_contract_builder/builder.py b/multiversx_sdk_rust_contract_builder/builder.py index 48fa7d2..6915b32 100644 --- a/multiversx_sdk_rust_contract_builder/builder.py +++ b/multiversx_sdk_rust_contract_builder/builder.py @@ -86,7 +86,7 @@ def build_project( output_folder=output_subfolder, build_metadata=metadata.to_dict(), build_options=options.to_dict(), - package_filename=f"{contract_name}-{contract_version}.partial.source.json" + package_filename=f"{contract_name}-{contract_version}.partial-source.json" ) outcome.gather_artifacts(contract_build_subfolder, output_subfolder) From af04dcac1df1fa30673f7506da83a75519d139dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Thu, 11 Jan 2024 12:14:55 +0200 Subject: [PATCH 21/24] Additional tests. --- .../workflows/run_long_integration_tests.yml | 2 +- integration_tests/previous_builds.py | 20 +++++++++++++++++-- ..._folder_and_packaged_src_are_equivalent.py | 10 +++++----- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/.github/workflows/run_long_integration_tests.yml b/.github/workflows/run_long_integration_tests.yml index a230dfc..13f1198 100644 --- a/.github/workflows/run_long_integration_tests.yml +++ b/.github/workflows/run_long_integration_tests.yml @@ -22,7 +22,7 @@ jobs: - name: Build run: | export PYTHONPATH=. - python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" + python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" "a.4" - name: Save artifacts uses: actions/upload-artifact@v3 diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index 757d05c..2f9c83f 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -59,6 +59,22 @@ def __init__(self, name: str, "multisig-view": "3993cf3fb5cd18102e2b8946ea1997f6f1cc512537f453265ba1afd7378fc0c6", "lottery-esdt": "e06b1a5c7fb71181a79e9be6b86d8ad154e5c2def4da6d2f0aa5266163823291" }, - docker_image="multiversx/sdk-rust-contract-builder:v5.4.0" - ) + docker_image="multiversx/sdk-rust-contract-builder:v5.4.1" + ), + PreviousBuild( + name="a.4", + project_archive_url="https://github.com/multiversx/mx-contracts-rs/archive/refs/tags/v0.45.2.1-reproducible.zip", + project_relative_path_in_archive="mx-contracts-rs-0.45.2.1-reproducible", + packaged_src_url=None, + contract_name=None, + expected_code_hashes={ + "adder": "384b680df7a95ebceca02ffb3e760a2fc288dea1b802685ef15df22ae88ba15b", + "multisig": "b82f074c02e308b80cfb7144d7dc959bfac73e14dc3291837fdd8b042a7739cf", + "multisig-full": "44a0eafb3bedfd671d1df586313f716924e2e4ef00ae7bf26df2c11eb4291389", + "multisig-view": "d3e8328d525fcf196bb5bb4ce0741d9146dccb475461a693c407cdfa02334789", + "lottery-esdt": "e06b1a5c7fb71181a79e9be6b86d8ad154e5c2def4da6d2f0aa5266163823291", + "ping-pong-egld": "9283ca2f077edf2704053f0973fdd1eb90ee871ddcd672f962de4ba4422df84b" + }, + docker_image="sdk-rust-contract-builder:next" + ), ] diff --git a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py index b35de45..70afe6c 100644 --- a/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py +++ b/integration_tests/test_project_folder_and_packaged_src_are_equivalent.py @@ -8,16 +8,16 @@ def main(cli_args: List[str]): - repository_url = "https://github.com/multiversx/mx-reproducible-contract-build-example-sc" - tag = "0.4.7" - archve_subfolder = f"mx-reproducible-contract-build-example-sc-{tag}" + repository_url = "https://github.com/multiversx/mx-contracts-rs" + tag = "0.45.2.1-reproducible" + archve_subfolder = f"mx-contracts-rs-{tag}" project_path = download_project_repository(f"{repository_url}/archive/refs/tags/v{tag}.zip", archve_subfolder) project_path = project_path / archve_subfolder check_project_folder_and_packaged_src_are_equivalent( project_path=project_path, parent_output_folder=PARENT_OUTPUT_FOLDER, - contracts=["adder", "multisig"], + contracts=["adder", "multisig", "lottery-esdt"], ) @@ -43,7 +43,7 @@ def check_project_folder_and_packaged_src_are_equivalent( output_folder=output_using_project ) - packaged_src_path = output_using_project / f"{contract}/{contract}-0.0.0.source.json" + packaged_src_path = next((output_using_project / contract).glob("*.source.json")) run_docker( project_path=None, From bf937dd0c142e5472ece413b049be9ea0c85019e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Thu, 11 Jan 2024 12:21:39 +0200 Subject: [PATCH 22/24] Adjust version. --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 36a95ec..a4b5964 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:22.04 # Constants -ARG BUILDER_NAME="multiversx/sdk-rust-contract-builder:v5.4.1" +ARG BUILDER_NAME="multiversx/sdk-rust-contract-builder:v5.5.0" ARG VERSION_RUST="nightly-2023-05-26" ARG VERSION_BINARYEN="version_112" ARG DOWNLOAD_URL_BINARYEN="https://github.com/WebAssembly/binaryen/releases/download/${VERSION_BINARYEN}/binaryen-${VERSION_BINARYEN}-x86_64-linux.tar.gz" From cb52ffe07ab7322465484c88dc253a86b02176c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Thu, 11 Jan 2024 14:48:15 +0200 Subject: [PATCH 23/24] Fix test. --- integration_tests/previous_builds.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index 82c3bf0..90f09b8 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -74,7 +74,7 @@ def __init__(self, name: str, "multisig-full": "f6b5457682b39ea1bd52fd6fe293257a3d5a5bb931c9e404c9ba24617cd51438", "multisig-view": "1904fe0bfd12cb90fda87e5cf2d2f211d9eed8b48c296e6d858547bfe39bec0c", "lottery-esdt": "a54bd4278b12cc93fedd6ca0addf6aad4043528c33e54ce43cf92d4d2dd755ee", - "ping-pong-egld": "9283ca2f077edf2704053f0973fdd1eb90ee871ddcd672f962de4ba4422df84b" + "ping-pong-egld": "8b107da10aef0d9610a939c4ca07c666674c465d0266fb28d5f981861f084f62" }, docker_image="sdk-rust-contract-builder:next" ), From f45dac03f6442788b088ab691623ded8d0aef9d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20B=C4=83ncioiu?= Date: Thu, 11 Jan 2024 17:29:53 +0200 Subject: [PATCH 24/24] Adjust tests (keep only those related to v4). --- .../workflows/run_long_integration_tests.yml | 2 +- integration_tests/previous_builds.py | 52 +++++-------------- 2 files changed, 13 insertions(+), 41 deletions(-) diff --git a/.github/workflows/run_long_integration_tests.yml b/.github/workflows/run_long_integration_tests.yml index f7795f0..c6ba981 100644 --- a/.github/workflows/run_long_integration_tests.yml +++ b/.github/workflows/run_long_integration_tests.yml @@ -22,7 +22,7 @@ jobs: - name: Build run: | export PYTHONPATH=. - python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" "a.4" "a.5" "a.6" "a.7" "a.8" "a.9" "a.10" "a.11" "a.12" "a.13" "a.14" + python ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" "a.2" "a.3" "a.4" "a.5" "a.6" "a.7" "a.8" "a.9" "a.10" "a.11" "a.12" "a.13" - name: Save artifacts uses: actions/upload-artifact@v3 diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index a4b2ed5..bd9ae70 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -22,34 +22,6 @@ def __init__(self, name: str, previous_builds: List[PreviousBuild] = [ PreviousBuild( name="a.1", - project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.0.zip", - project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.4.0", - packaged_src_url=None, - contract_name=None, - expected_code_hashes={ - "adder": "9fd12f88f9474ba115fb75e9d18a8fdbc4f42147de005445048442d49c3aa725", - "multisig": "2101bc2a7a31ea42e5ffaadd86c1640009690e93b1cb46c3566ba5eac2984e36", - "multisig-full": "ef468403354b6d3a728f86101354359fe6864187d216f674d99b31fc05313a39", - "multisig-view": "3690af76be10c0520e3c3545cde8d9ef6a15c2d0af74dbd8704b4909644049c9" - }, - docker_image="multiversx/sdk-rust-contract-builder:v5.1.0" - ), - PreviousBuild( - name="a.2", - project_archive_url="https://github.com/multiversx/mx-reproducible-contract-build-example-sc/archive/refs/tags/v0.4.3.zip", - project_relative_path_in_archive="mx-reproducible-contract-build-example-sc-0.4.3", - packaged_src_url=None, - contract_name=None, - expected_code_hashes={ - "adder": "9fd12f88f9474ba115fb75e9d18a8fdbc4f42147de005445048442d49c3aa725", - "multisig": "b73050629c11b1f1a20ca6232abcef07897624195691552e3f2e2fce47822166", - "multisig-full": "37c3b90bdaa7d8d203385c91b0b5cb4d3c444ab9ec5263351978046a545854e3", - "multisig-view": "ebaf987b041fcda297da71291d76736e4e98a1e449e5ec37908cdc0198e8be37" - }, - docker_image="multiversx/sdk-rust-contract-builder:v5.3.0" - ), - PreviousBuild( - name="a.3", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v2.4.1-pair-safe-price-v2.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v2.4.1-pair-safe-price-v2", packaged_src_url=None, @@ -62,7 +34,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.4", + name="a.2", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v2.5.2-governance-merkle-tree.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v2.5.2-governance-merkle-tree", packaged_src_url=None, @@ -77,7 +49,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.5", + name="a.3", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.10.4-backwards-comp-proxy-dex.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.10.4-backwards-comp-proxy-dex", packaged_src_url=None, @@ -91,7 +63,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.6", + name="a.4", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v2.1.1-staking-upgrade.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v2.1.1-staking-upgrade", packaged_src_url=None, @@ -106,7 +78,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.7", + name="a.5", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v2.0-rc6-reproducible.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v2.0-rc6-reproducible", packaged_src_url=None, @@ -119,7 +91,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.8", + name="a.6", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.10.2-legacy-farm-stripdown.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.10.2-legacy-farm-stripdown", packaged_src_url=None, @@ -130,7 +102,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.9", + name="a.7", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.10.3-backwards-comp-contracts.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.10.3-backwards-comp-contracts", packaged_src_url=None, @@ -141,7 +113,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.10", + name="a.8", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v2.1.3-price-discovery-comp-upgrade.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v2.1.3-price-discovery-comp-upgrade", packaged_src_url=None, @@ -152,7 +124,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.11", + name="a.9", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.9.1-governance-lkmex.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.9.1-governance-lkmex", packaged_src_url=None, @@ -163,7 +135,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.12", + name="a.10", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.5.4-metabonding-unbond.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.5.4-metabonding-unbond", packaged_src_url=None, @@ -174,7 +146,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.13", + name="a.11", project_archive_url="https://github.com/multiversx/mx-metabonding-sc/archive/refs/heads/reproducible-v1.1.1.zip", project_relative_path_in_archive="mx-metabonding-sc-reproducible-v1.1.1", packaged_src_url=None, @@ -185,7 +157,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.14", + name="a.12", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.8.1-simple-lock-role.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.8.1-simple-lock-role", packaged_src_url=None, @@ -196,7 +168,7 @@ def __init__(self, name: str, docker_image="sdk-rust-contract-builder:next" ), PreviousBuild( - name="a.15", + name="a.13", project_archive_url="https://github.com/multiversx/mx-exchange-sc/archive/refs/heads/reproducible-v1.8.2-simple-lock-whitelist-old-farms.zip", project_relative_path_in_archive="mx-exchange-sc-reproducible-v1.8.2-simple-lock-whitelist-old-farms", packaged_src_url=None,