diff --git a/Cargo.lock b/Cargo.lock index a9ff0ae2c..6e860e611 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2037,33 +2037,6 @@ dependencies = [ "zip", ] -[[package]] -name = "puffin-build-cli" -version = "0.0.1" -dependencies = [ - "anyhow", - "clap", - "colored", - "directories", - "fs-err", - "futures", - "gourgeist", - "itertools", - "pep508_rs", - "platform-host", - "platform-tags", - "puffin-build", - "puffin-client", - "puffin-dispatch", - "puffin-interpreter", - "puffin-package", - "tempfile", - "tokio", - "tracing", - "tracing-subscriber", - "which", -] - [[package]] name = "puffin-cli" version = "0.0.1" @@ -2128,6 +2101,33 @@ dependencies = [ "url", ] +[[package]] +name = "puffin-dev" +version = "0.0.1" +dependencies = [ + "anyhow", + "clap", + "colored", + "directories", + "fs-err", + "futures", + "gourgeist", + "itertools", + "pep508_rs", + "platform-host", + "platform-tags", + "puffin-build", + "puffin-client", + "puffin-dispatch", + "puffin-interpreter", + "puffin-package", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", + "which", +] + [[package]] name = "puffin-dispatch" version = "0.1.0" diff --git a/crates/puffin-build-cli/.gitignore b/crates/puffin-dev/.gitignore similarity index 100% rename from crates/puffin-build-cli/.gitignore rename to crates/puffin-dev/.gitignore diff --git a/crates/puffin-build-cli/Cargo.toml b/crates/puffin-dev/Cargo.toml similarity index 97% rename from crates/puffin-build-cli/Cargo.toml rename to crates/puffin-dev/Cargo.toml index 4ab525777..99ed7963f 100644 --- a/crates/puffin-build-cli/Cargo.toml +++ b/crates/puffin-dev/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "puffin-build-cli" +name = "puffin-dev" version = "0.0.1" description = "Build wheels from source distributions" edition = { workspace = true } diff --git a/crates/puffin-build-cli/src/main.rs b/crates/puffin-dev/src/build.rs similarity index 56% rename from crates/puffin-build-cli/src/main.rs rename to crates/puffin-dev/src/build.rs index d89d736ce..50041c8d7 100644 --- a/crates/puffin-build-cli/src/main.rs +++ b/crates/puffin-dev/src/build.rs @@ -1,29 +1,17 @@ -#![allow(clippy::print_stdout, clippy::print_stderr)] - -use std::env; -use std::path::PathBuf; -use std::process::ExitCode; -use std::time::Instant; - -use anyhow::{Context, Result}; +use anyhow::Context; use clap::Parser; -use colored::Colorize; use directories::ProjectDirs; use fs_err as fs; -use tracing::debug; -use tracing_subscriber::fmt::format::FmtSpan; -use tracing_subscriber::layer::SubscriberExt; -use tracing_subscriber::util::SubscriberInitExt; -use tracing_subscriber::{fmt, EnvFilter}; - use platform_host::Platform; use puffin_build::SourceDistributionBuilder; use puffin_client::RegistryClientBuilder; use puffin_dispatch::BuildDispatch; use puffin_interpreter::Virtualenv; +use std::env; +use std::path::PathBuf; #[derive(Parser)] -struct Args { +pub struct BuildArgs { /// Base python in a way that can be found with `which` /// TODO(konstin): Also use proper python parsing here #[clap(short, long)] @@ -34,8 +22,8 @@ struct Args { sdist: PathBuf, } -async fn run() -> Result<()> { - let args = Args::parse(); +/// Build a source distribution to a wheel +pub async fn build(args: BuildArgs) -> anyhow::Result { let wheel_dir = if let Some(wheel_dir) = args.wheels { fs::create_dir_all(&wheel_dir).context("Invalid wheel directory")?; wheel_dir @@ -61,27 +49,5 @@ async fn run() -> Result<()> { SourceDistributionBuilder::setup(&args.sdist, venv.interpreter_info(), &build_dispatch) .await?; let wheel = builder.build(&wheel_dir)?; - println!("Wheel built to {}", wheel_dir.join(wheel).display()); - Ok(()) -} - -#[tokio::main] -async fn main() -> ExitCode { - tracing_subscriber::registry() - .with(fmt::layer().with_span_events(FmtSpan::CLOSE)) - .with(EnvFilter::from_default_env()) - .init(); - - let start = Instant::now(); - let result = run().await; - debug!("Took {}ms", start.elapsed().as_millis()); - if let Err(err) = result { - eprintln!("{}", "puffin-build failed".red().bold()); - for err in err.chain() { - eprintln!(" {}: {}", "Caused by".red().bold(), err); - } - ExitCode::FAILURE - } else { - ExitCode::SUCCESS - } + Ok(wheel_dir.join(wheel)) } diff --git a/crates/puffin-dev/src/lib.rs b/crates/puffin-dev/src/lib.rs new file mode 100644 index 000000000..a83e9d7af --- /dev/null +++ b/crates/puffin-dev/src/lib.rs @@ -0,0 +1,3 @@ +pub use build::{build, BuildArgs}; + +mod build; diff --git a/crates/puffin-dev/src/main.rs b/crates/puffin-dev/src/main.rs new file mode 100644 index 000000000..6e02270c5 --- /dev/null +++ b/crates/puffin-dev/src/main.rs @@ -0,0 +1,53 @@ +#![allow(clippy::print_stdout, clippy::print_stderr)] + +use std::process::ExitCode; +use std::time::Instant; + +use anyhow::Result; +use clap::Parser; +use colored::Colorize; +use tracing::debug; +use tracing_subscriber::fmt::format::FmtSpan; +use tracing_subscriber::layer::SubscriberExt; +use tracing_subscriber::util::SubscriberInitExt; +use tracing_subscriber::{fmt, EnvFilter}; + +use puffin_dev::{build, BuildArgs}; + +#[derive(Parser)] +enum Cli { + /// Build a source distribution into a wheel + Build(BuildArgs), +} + +async fn run() -> Result<()> { + let cli = Cli::parse(); + match cli { + Cli::Build(args) => { + let target = build(args).await?; + println!("Wheel built to {}", target.display()); + } + } + Ok(()) +} + +#[tokio::main] +async fn main() -> ExitCode { + tracing_subscriber::registry() + .with(fmt::layer().with_span_events(FmtSpan::CLOSE)) + .with(EnvFilter::from_default_env()) + .init(); + + let start = Instant::now(); + let result = run().await; + debug!("Took {}ms", start.elapsed().as_millis()); + if let Err(err) = result { + eprintln!("{}", "puffin-dev failed".red().bold()); + for err in err.chain() { + eprintln!(" {}: {}", "Caused by".red().bold(), err); + } + ExitCode::FAILURE + } else { + ExitCode::SUCCESS + } +} diff --git a/crates/puffin-build-cli/test_sdist_building.sh b/crates/puffin-dev/test_sdist_building.sh similarity index 76% rename from crates/puffin-build-cli/test_sdist_building.sh rename to crates/puffin-dev/test_sdist_building.sh index c521fdaa1..897c3aaa8 100644 --- a/crates/puffin-build-cli/test_sdist_building.sh +++ b/crates/puffin-dev/test_sdist_building.sh @@ -12,8 +12,8 @@ if [ ! -f sdist_building_test_data/sdist/geoextract-0.3.1.tar.gz ]; then wget https://files.pythonhosted.org/packages/c4/00/9d9826a6e1c9139cc7183647f47f6b7acb290fa4c572140aa84a12728e60/geoextract-0.3.1.tar.gz -O sdist_building_test_data/sdist/geoextract-0.3.1.tar.gz fi rm -rf sdist_building_test_data/wheels -RUST_LOG=puffin_build=debug cargo run -p puffin-build-cli --bin puffin-build-cli -- --wheels sdist_building_test_data/wheels sdist_building_test_data/sdist/tqdm-4.66.1.tar.gz -RUST_LOG=puffin_build=debug cargo run -p puffin-build-cli --bin puffin-build-cli -- --wheels sdist_building_test_data/wheels sdist_building_test_data/sdist/geoextract-0.3.1.tar.gz +RUST_LOG=puffin_build=debug cargo run --bin puffin-dev -- build --wheels sdist_building_test_data/wheels sdist_building_test_data/sdist/tqdm-4.66.1.tar.gz +RUST_LOG=puffin_build=debug cargo run --bin puffin-dev -- build --wheels sdist_building_test_data/wheels sdist_building_test_data/sdist/geoextract-0.3.1.tar.gz # Check that pip accepts the wheels. It would be better to do functional checks virtualenv -p 3.8 -q --clear sdist_building_test_data/.venv