Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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: |
Expand Down
22 changes: 4 additions & 18 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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

Expand All @@ -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}

Expand All @@ -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}
8 changes: 4 additions & 4 deletions integration_tests/previous_builds.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
),
Expand Down
15 changes: 9 additions & 6 deletions integration_tests/test_basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -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():
Expand Down Expand Up @@ -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():
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"],
)


Expand Down
8 changes: 0 additions & 8 deletions multiversx_sdk_rust_contract_builder/build_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
5 changes: 2 additions & 3 deletions multiversx_sdk_rust_contract_builder/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 [])

Expand All @@ -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}.")

Expand Down