From 6c91281727ae11f0d7f80e77c14b36e53c680ff2 Mon Sep 17 00:00:00 2001 From: Bas Zalmstra <4995967+baszalmstra@users.noreply.github.com> Date: Thu, 31 Jul 2025 22:45:15 +0200 Subject: [PATCH] feat: add channels to the build-v1 apis --- .../src/procedures/conda_build_v1.rs | 9 ++++++++- .../src/procedures/conda_outputs.rs | 9 ++++++++- .../src/backend_source_build/mod.rs | 13 +++++++++---- .../src/build_backend_metadata/mod.rs | 1 + .../pixi_command_dispatcher/src/source_build/mod.rs | 4 +++- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/crates/pixi_build_types/src/procedures/conda_build_v1.rs b/crates/pixi_build_types/src/procedures/conda_build_v1.rs index ea65fb88cd..410b708830 100644 --- a/crates/pixi_build_types/src/procedures/conda_build_v1.rs +++ b/crates/pixi_build_types/src/procedures/conda_build_v1.rs @@ -10,7 +10,7 @@ use std::{ path::PathBuf, }; -use rattler_conda_types::{PackageName, Platform, VersionWithSource}; +use rattler_conda_types::{ChannelUrl, PackageName, Platform, VersionWithSource}; use serde::{Deserialize, Serialize}; pub const METHOD_NAME: &str = "conda/build_v1"; @@ -19,6 +19,13 @@ pub const METHOD_NAME: &str = "conda/build_v1"; #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct CondaBuildV1Params { + /// The canonical channel URLs that define where dependencies will be + /// fetched from. Although this information is not immediately useful for + /// the backend, the backend may choose to generate a different recipe based + /// on the channels. + #[serde(default)] + pub channels: Vec, + /// The path to the build prefix, or `None` if no build prefix is created. pub build_prefix: Option, diff --git a/crates/pixi_build_types/src/procedures/conda_outputs.rs b/crates/pixi_build_types/src/procedures/conda_outputs.rs index 99bdf5b313..754ae45701 100644 --- a/crates/pixi_build_types/src/procedures/conda_outputs.rs +++ b/crates/pixi_build_types/src/procedures/conda_outputs.rs @@ -12,7 +12,7 @@ use std::{ }; use ordermap::OrderSet; -use rattler_conda_types::{NoArchType, PackageName, Platform, VersionWithSource}; +use rattler_conda_types::{ChannelUrl, NoArchType, PackageName, Platform, VersionWithSource}; use serde::{Deserialize, Serialize}; use serde_with::serde_as; @@ -27,6 +27,13 @@ pub const METHOD_NAME: &str = "conda/outputs"; #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct CondaOutputsParams { + /// The canonical channel URLs that define where dependencies will be + /// fetched from. Although this information is not immediately useful for + /// the backend, the backend may choose to generate a different recipe based + /// on the channels. + #[serde(default)] + pub channels: Vec, + /// The native platform for which the outputs should be computed. /// /// This is usually the same platform as the platform on which the backend diff --git a/crates/pixi_command_dispatcher/src/backend_source_build/mod.rs b/crates/pixi_command_dispatcher/src/backend_source_build/mod.rs index 924a6442b9..2813feb2fc 100644 --- a/crates/pixi_command_dispatcher/src/backend_source_build/mod.rs +++ b/crates/pixi_command_dispatcher/src/backend_source_build/mod.rs @@ -48,6 +48,9 @@ pub struct BackendSourceBuildSpec { /// The method to use for building the source package. pub method: BackendSourceBuildMethod, + /// The channels to use for solving. + pub channels: Vec, + /// The working directory to use for the build. pub work_directory: PathBuf, } @@ -63,9 +66,6 @@ pub struct BackendSourceBuildV0Method { /// The channel configuration to use when resolving metadata pub channel_config: ChannelConfig, - /// The channels to use for solving. - pub channels: Vec, - /// Information about the platform to install build tools for and the /// platform to target. pub build_environment: BuildEnvironment, @@ -140,6 +140,7 @@ impl BackendSourceBuildSpec { self.source, params, self.work_directory, + self.channels, log_sink, ) .await @@ -150,6 +151,7 @@ impl BackendSourceBuildSpec { self.package, params, self.work_directory, + self.channels, log_sink, ) .await @@ -163,6 +165,7 @@ impl BackendSourceBuildSpec { source: PinnedSourceSpec, params: BackendSourceBuildV0Method, work_directory: PathBuf, + channels: Vec, mut log_sink: UnboundedSender, ) -> Result> { // Use the backend to build the source package. @@ -172,7 +175,7 @@ impl BackendSourceBuildSpec { build_platform_virtual_packages: Some( params.build_environment.build_virtual_packages, ), - channel_base_urls: Some(params.channels.into_iter().map(Into::into).collect()), + channel_base_urls: Some(channels.into_iter().map(Into::into).collect()), channel_configuration: ChannelConfiguration { base_url: params.channel_config.channel_alias.clone(), }, @@ -262,11 +265,13 @@ impl BackendSourceBuildSpec { record: PackageIdentifier, params: BackendSourceBuildV1Method, work_directory: PathBuf, + channels: Vec, mut log_sink: UnboundedSender, ) -> Result> { let built_package = backend .conda_build_v1( CondaBuildV1Params { + channels, build_prefix: Some(CondaBuildV1Prefix { prefix: params.build_prefix.prefix, platform: params.build_prefix.platform, diff --git a/crates/pixi_command_dispatcher/src/build_backend_metadata/mod.rs b/crates/pixi_command_dispatcher/src/build_backend_metadata/mod.rs index 0c5c8c50db..cde0b4f549 100644 --- a/crates/pixi_command_dispatcher/src/build_backend_metadata/mod.rs +++ b/crates/pixi_command_dispatcher/src/build_backend_metadata/mod.rs @@ -230,6 +230,7 @@ impl BuildBackendMetadataSpec { project_model_hash: Option>, ) -> Result> { let params = CondaOutputsParams { + channels: self.channels, host_platform: self.build_environment.host_platform, build_platform: self.build_environment.build_platform, variant_configuration: self.variants.map(|variants| variants.into_iter().collect()), diff --git a/crates/pixi_command_dispatcher/src/source_build/mod.rs b/crates/pixi_command_dispatcher/src/source_build/mod.rs index 6648103176..a6d3e6f2ee 100644 --- a/crates/pixi_command_dispatcher/src/source_build/mod.rs +++ b/crates/pixi_command_dispatcher/src/source_build/mod.rs @@ -306,7 +306,6 @@ impl SourceBuildSpec { method: BackendSourceBuildMethod::BuildV0(BackendSourceBuildV0Method { editable: self.editable(), channel_config: self.channel_config, - channels: self.channels, build_environment: self.build_environment, variants: self.variants, output_directory: self.output_directory, @@ -315,6 +314,7 @@ impl SourceBuildSpec { package: self.package, source: self.source, work_directory, + channels: self.channels, }) .await .map_err_with(SourceBuildError::from)?; @@ -347,6 +347,7 @@ impl SourceBuildSpec { build_platform, variant_configuration: self.variants.clone(), work_directory: work_directory.clone(), + channels: self.channels.clone(), }) .await .map_err(BackendSourceBuildError::BuildError) @@ -497,6 +498,7 @@ impl SourceBuildSpec { package: self.package, source: self.source, work_directory, + channels: self.channels, }) .await .map_err_with(SourceBuildError::from)?;