diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c82d1ac..06ae83e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out the repo - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 @@ -32,7 +32,7 @@ jobs: 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 + uses: actions/upload-artifact@v4 with: name: testdata_output path: | diff --git a/Dockerfile b/Dockerfile index 5bf1d89..af6b576 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,8 @@ FROM ubuntu:22.04 # Constants -ARG BUILDER_NAME="multiversx/sdk-rust-contract-builder:v8.0.1" -ARG VERSION_RUST="1.78.0" -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_SC_META="0.50.3" +ARG VERSION_RUST="1.85.0" +ARG VERSION_SC_META="0.57.0" ARG TARGETPLATFORM # Install system dependencies @@ -17,14 +14,6 @@ RUN apt-get update --fix-missing && apt-get install -y \ pkg-config \ libssl-dev -# Install binaryen -RUN wget -O binaryen.tar.gz ${DOWNLOAD_URL_BINARYEN} && \ - tar -xf binaryen.tar.gz && \ - mkdir -p /binaryen && \ - cp binaryen-${VERSION_BINARYEN}/bin/wasm-opt /binaryen && \ - rm -rf binaryen.tar.gz binaryen-${VERSION_BINARYEN} && \ - chmod -R 777 /binaryen - # Install Python dependencies RUN pip3 install toml==0.10.2 semver==3.0.0-dev.4 @@ -36,19 +25,17 @@ RUN wget -O rustup.sh https://sh.rustup.rs && \ chmod -R 777 /rust && \ rm -rf /rust/registry -# Install sc-tool +# Install sc-meta tool 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" -ENV PATH="/rust/bin:/binaryen:${PATH}" +ENV PATH="/rust/bin:${PATH}" ENV CARGO_HOME="/rust" ENV RUSTUP_HOME="/rust" ENV PYTHONPATH=/ -ENV BUILD_METADATA_BUILDER_NAME=${BUILDER_NAME} ENV BUILD_METADATA_VERSION_RUST=${VERSION_RUST} -ENV BUILD_METADATA_VERSION_BINARYEN=${VERSION_BINARYEN} ENV BUILD_METADATA_VERSION_SC_META=${VERSION_SC_META} ENV BUILD_METADATA_TARGETPLATFORM=${TARGETPLATFORM} @@ -62,5 +49,4 @@ ENTRYPOINT ["python", "/multiversx_sdk_rust_contract_builder/main.py", \ LABEL frozen="yes" LABEL rust=${VERSION_RUST} -LABEL wasm-opt-binaryen=${VERSION_BINARYEN} LABEL sc_meta=${VERSION_SC_META} diff --git a/integration_tests/previous_builds.py b/integration_tests/previous_builds.py index 1380712..6acee46 100644 --- a/integration_tests/previous_builds.py +++ b/integration_tests/previous_builds.py @@ -54,13 +54,13 @@ def __init__(self, name: str, ), PreviousBuild( name="a.3", - project_archive_url="https://github.com/multiversx/mx-sovereign-sc/archive/80599388b9358842b50ea216a622d514e15df374.zip", - project_relative_path_in_archive="mx-sovereign-sc-80599388b9358842b50ea216a622d514e15df374", + project_archive_url="https://github.com/multiversx/mx-sovereign-sc/archive/e9a4f1fc8d963d48cbce0fb0cf673621cc0832ac.zip", + project_relative_path_in_archive="mx-sovereign-sc-e9a4f1fc8d963d48cbce0fb0cf673621cc0832ac", packaged_src_url=None, contract_name=None, expected_code_hashes={ - "esdt-safe": "08d0ba0f0931b9aa71946a543efc29da6e66d5247e911ce6595bea6a13a62cb4", - "fee-market": "e6efffc7723e1b38c9cdc41f3c2827acbcaed86c73795d09635d78b685c45576" + "sov-esdt-safe": "34f6479356b2621328bbfac0f0e0833a55a8bd1948b5a0e2500fd66291f0ad88", + "fee-market": "0b81078e61efd692ebb3f83b437da9cf83ffff7843aeb0a66a71b5ddff3b2fb2" }, docker_image="sdk-rust-contract-builder:next" ), diff --git a/integration_tests/test_basic.py b/integration_tests/test_basic.py index d2e3c67..190eb7b 100644 --- a/integration_tests/test_basic.py +++ b/integration_tests/test_basic.py @@ -6,9 +6,10 @@ from multiversx_sdk_rust_contract_builder.packaged_source_code import \ PackagedSourceCode -DEFAULT_PROJECT_ARCHIVE_URL = "https://github.com/multiversx/mx-sovereign-sc/archive/80599388b9358842b50ea216a622d514e15df374.zip" -DEFAULT_PROJECT_ARCHIVE_PAYLOAD = "mx-sovereign-sc-80599388b9358842b50ea216a622d514e15df374" -DEFAULT_CONTRACT_NAME = "esdt-safe" +DEFAULT_PROJECT_ARCHIVE_URL = "https://github.com/multiversx/mx-sovereign-sc/archive/068151049f75aafa3e92aa87bbb69a95bf009316.zip" +DEFAULT_PROJECT_ARCHIVE_PAYLOAD = "mx-sovereign-sc-068151049f75aafa3e92aa87bbb69a95bf009316" +DEFAULT_CONTRACT_NAME = "sov-esdt-safe" +DEFAULT_CONTRACT_VERSION = "0.1.0" def test_with_symlinks(): @@ -58,11 +59,13 @@ def test_has_correct_packaged_source(): assert code == 0 - packaged_source_code = PackagedSourceCode.from_file(output_folder / DEFAULT_CONTRACT_NAME / f"{DEFAULT_CONTRACT_NAME}-0.0.0.source.json") + packaged_source_code = PackagedSourceCode.from_file(output_folder / DEFAULT_CONTRACT_NAME / f"{DEFAULT_CONTRACT_NAME}-{DEFAULT_CONTRACT_VERSION}.source.json") for entry in packaged_source_code.entries: assert not str(entry.path).startswith("target"), f"Unexpected file: {entry.path}" - assert entry.is_test_file == ("test" in str(entry.path)), f"Unexpected is_test_file marker for: {entry.path}" + + is_test_file = ("tests" in str(entry.path)) or ("test_" in str(entry.path)) or ("_test" in str(entry.path)) + assert entry.is_test_file == is_test_file, f"Unexpected is_test_file marker for: {entry.path}" def test_fail_if_contract_cargo_lock_is_missing(): @@ -74,7 +77,7 @@ def test_fail_if_contract_cargo_lock_is_missing(): output_folder.mkdir(parents=True, exist_ok=True) # Remove a (required) Cargo.lock file - (workspace / DEFAULT_CONTRACT_NAME / "wasm" / "Cargo.lock").unlink() + (workspace / DEFAULT_CONTRACT_NAME / f"wasm-{DEFAULT_CONTRACT_NAME}" / "Cargo.lock").unlink() (code, _, stderr) = run_docker( project_path=workspace, 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 6e1a73b..a763a7b 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,15 +9,15 @@ def main(cli_args: List[str]): repository_url = "https://github.com/multiversx/mx-sovereign-sc" - commit = "80599388b9358842b50ea216a622d514e15df374" - archve_subfolder = f"mx-sovereign-sc-{commit}" - project_path = download_project_repository(f"{repository_url}/archive/{commit}.zip", archve_subfolder) - project_path = project_path / archve_subfolder + commit = "e9a4f1fc8d963d48cbce0fb0cf673621cc0832ac" + archive_subfolder = f"mx-sovereign-sc-{commit}" + project_path = download_project_repository(f"{repository_url}/archive/{commit}.zip", archive_subfolder) + project_path = project_path / archive_subfolder check_project_folder_and_packaged_src_are_equivalent( project_path=project_path, parent_output_folder=PARENT_OUTPUT_FOLDER, - contracts=["esdt-safe", "fee-market"], + contracts=["sov-esdt-safe", "fee-market"], ) diff --git a/multiversx_sdk_rust_contract_builder/build_metadata.py b/multiversx_sdk_rust_contract_builder/build_metadata.py index f526fe9..42c23d1 100644 --- a/multiversx_sdk_rust_contract_builder/build_metadata.py +++ b/multiversx_sdk_rust_contract_builder/build_metadata.py @@ -5,33 +5,25 @@ class BuildMetadata: def __init__( self, - builder_name: str, version_rust: str, - version_binaryen: str, version_sc_meta: str, target_platform: str, ): - self.builder_name = builder_name self.version_rust = version_rust - self.version_binaryen = version_binaryen self.version_sc_meta = version_sc_meta self.target_platform = target_platform @classmethod def from_env(cls) -> 'BuildMetadata': return BuildMetadata( - builder_name=os.environ["BUILD_METADATA_BUILDER_NAME"], version_rust=os.environ["BUILD_METADATA_VERSION_RUST"], - version_binaryen=os.environ["BUILD_METADATA_VERSION_BINARYEN"], version_sc_meta=os.environ["BUILD_METADATA_VERSION_SC_META"], target_platform=os.environ["BUILD_METADATA_TARGETPLATFORM"], ) def to_dict(self) -> Dict[str, str]: return { - "builderName": self.builder_name, "versionRust": self.version_rust, - "versionBinaryen": self.version_binaryen, "versionScTool": self.version_sc_meta, "targetPlatform": self.target_platform, } diff --git a/multiversx_sdk_rust_contract_builder/builder.py b/multiversx_sdk_rust_contract_builder/builder.py index 621d2d6..96b0a3c 100644 --- a/multiversx_sdk_rust_contract_builder/builder.py +++ b/multiversx_sdk_rust_contract_builder/builder.py @@ -138,9 +138,8 @@ def clean_contract(folder: Path, clean_output: bool = True): def build_contract(build_folder: Path, output_folder: Path, cargo_target_dir: Path, no_wasm_opt: bool): cargo_output_folder = build_folder / "output" - meta_folder = build_folder / "meta" - args = ["cargo", "run", "build"] + args = ["sc-meta", "all", "build"] args.extend(["--target-dir", str(cargo_target_dir)]) args.extend(["--no-wasm-opt"] if no_wasm_opt else []) @@ -156,7 +155,7 @@ def build_contract(build_folder: Path, output_folder: Path, cargo_target_dir: Pa custom_env["CARGO_NET_GIT_FETCH_WITH_CLI"] = "true" logging.info(f"Building: {args}") - return_code = subprocess.run(args, cwd=meta_folder, env=custom_env).returncode + return_code = subprocess.run(args, cwd=build_folder, env=custom_env).returncode if return_code != 0: raise ErrKnown(f"Failed to build contract {build_folder}. Return code: {return_code}.")