diff --git a/README.md b/README.md index 4a7bf501..157d2eb0 100644 --- a/README.md +++ b/README.md @@ -33,9 +33,6 @@ git clone git@github.com:kinode-dao/kinode.git cd kinode cargo install wasm-tools rustup install nightly -rustup target add wasm32-wasi -rustup target add wasm32-wasi --toolchain nightly -rustup target add wasm32-wasip1 rustup target add wasm32-wasip1 --toolchain nightly cargo install cargo-wasi @@ -43,11 +40,14 @@ cargo install cargo-wasi # https://docs.npmjs.com/downloading-and-installing-node-js-and-npm # If you want to skip this step, run cargo build with the environment variable SKIP_BUILD_FRONTEND=true -# Build the runtime, along with a number of "distro" Wasm modules. -# The compiled binary will be at `kinode/target/debug/kinode` -# OPTIONAL: --release flag (slower build; faster runtime; binary at `kinode/target/release/kinode`) +# Build the "distro" Wasm modules. +# Then, build the runtime. +# The compiled packages will be at `kinode/target/packages.zip`. +# The compiled binary will be at `kinode/target/debug/kinode`. +# OPTIONAL: --release flag (slower build; faster runtime; binary at `kinode/target/release/kinode`). -cargo +nightly build -p kinode +cargo run -p build_packages +cargo build -p kinode ``` ## Security Status diff --git a/scripts/build-release.py b/scripts/build-release.py index 4fd9fa09..8170dc05 100755 --- a/scripts/build-release.py +++ b/scripts/build-release.py @@ -27,14 +27,39 @@ def build_and_move(feature, tmp_dir, architecture, os_name): zip_prefix = f"kinode-{architecture}-{os_name}" release_env = os.environ.copy() - release_env["CARGO_PROFILE_RELEASE_LTO"] = f"fat" - release_env["CARGO_PROFILE_RELEASE_CODEGEN_UNITS"] = f"1" - release_env["CARGO_PROFILE_RELEASE_STRIP"] = f"symbols" + release_env["CARGO_PROFILE_RELEASE_LTO"] = "fat" + release_env["CARGO_PROFILE_RELEASE_CODEGEN_UNITS"] = "1" + release_env["CARGO_PROFILE_RELEASE_STRIP"] = "symbols" if feature: - subprocess.run(["cargo", "+nightly", "build", "--release", "-p", "kinode", "--features", feature], check=True, env=release_env) + release_env["PATH_TO_PACKAGES_ZIP"] = f"../target/packages-{feature}.zip" + subprocess.run( + ["cargo", "run", "-p", "build_packages", "--", "--features", feature], + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + subprocess.run( + ["cargo", "build", "--release", "-p", "kinode", "--features", feature], + check=True, + env=release_env, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) zip_name = f"{zip_prefix}-{feature}.zip" else: - subprocess.run(["cargo", "+nightly", "build", "--release", "-p", "kinode"], check=True, env=release_env) + subprocess.run( + ["cargo", "run", "-p", "build_packages"], + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + subprocess.run( + ["cargo", "build", "--release", "-p", "kinode"], + check=True, + env=release_env, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) zip_name = f"{zip_prefix}.zip" # Move and rename the binary @@ -74,4 +99,3 @@ def main(): if __name__ == "__main__": main() - diff --git a/scripts/build_packages/src/main.rs b/scripts/build_packages/src/main.rs index bf0c8974..c5edbc3d 100644 --- a/scripts/build_packages/src/main.rs +++ b/scripts/build_packages/src/main.rs @@ -84,6 +84,12 @@ fn main() -> anyhow::Result<()> { .help("Skip building the frontend") .action(clap::ArgAction::SetTrue), ) + .arg( + Arg::new("OUTPUT_FILENAME") + .long("output-filename") + .help("Set output filename (default: packages-{features}.zip)") + .action(clap::ArgAction::Set), + ) .get_matches(); // kinode/target/debug/build_package @@ -126,12 +132,13 @@ fn main() -> anyhow::Result<()> { } } - let features = matches + let mut features = matches .get_many::("FEATURES") .unwrap_or_default() .map(|s| s.to_owned()) - .collect::>() - .join(","); + .collect::>(); + features.sort(); + let features = features.join(","); let results: Vec)>> = fs::read_dir(&packages_dir)? .filter_map(|entry| { @@ -182,7 +189,17 @@ fn main() -> anyhow::Result<()> { let file_to_metadata_path = target_packages_dir.join("file_to_metadata.json"); fs::write(&file_to_metadata_path, file_to_metadata)?; - let package_zip_path = target_dir.join("packages.zip"); + let package_zip_file_name = match matches.get_one::("OUTPUT_FILENAME") { + Some(filename) => filename.to_string(), + None => { + if features.is_empty() { + "packages.zip".to_string() + } else { + format!("packages-{features}.zip") + } + } + }; + let package_zip_path = target_dir.join(package_zip_file_name); let package_zip_contents = zip_directory(&target_packages_dir)?; fs::write(package_zip_path, package_zip_contents)?;