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
58 changes: 34 additions & 24 deletions conda_build/_rattler_build/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,12 +306,6 @@ def run_rattler(command: str, parsed_args: argparse.Namespace, config: Config) -
channels: list[str] = []
extra_context: dict[str, str] = {}
show_logs: bool = getattr(parsed_args, "quiet", False) is False
target_platform: str = config.variant.get("host_platform", config.subdir)
build_platform: str = config.variant.get("build_platform", config.subdir)
host_platform: str = config.variant.get("target_platform", config.subdir)
noarch_build_platform: str = config.variant.get(
"noarch_build_platform", config.subdir
)
variant_config: VariantConfig = VariantConfig()

# select list of channels to iterate over:
Expand Down Expand Up @@ -367,18 +361,27 @@ def run_rattler(command: str, parsed_args: argparse.Namespace, config: Config) -
recipe_config_filenames=CONFIG_FILES,
)

if command == "build":
if parsed_args.extra_meta:
extra_context.update(parsed_args.extra_meta)
if parsed_args.output_folder:
output_dir = parsed_args.output_folder
no_build_id = not parsed_args.set_build_id
skip_existing = parsed_args.skip_existing or "none"
no_include_recipe = not parsed_args.include_recipe
if parsed_args.conda_pkg_format == CondaPkgFormat.V2:
package_format = "conda"
else:
package_format = ".tar.bz2"
# configure variant
# merge config files in the order they are stacked
if config_files:
for variant in config_files:
variant_config = variant_config.merge(VariantConfig.from_file(variant))

def get_config_value(name):
value = variant_config.get(name, config.subdir)

if isinstance(value, list):
if len(value) != 1:
raise ValueError(
f"Expected a single value for {name}, got {len(value)} values: {value}"
)
return value[0]
return value

build_platform = get_config_value("build_platform")
host_platform = get_config_value("host_platform")
target_platform = get_config_value("target_platform")
noarch_build_platform = get_config_value("noarch_build_platform")

# common tool / platform / render configuration
tool_config = ToolConfiguration(
Expand All @@ -400,19 +403,26 @@ def run_rattler(command: str, parsed_args: argparse.Namespace, config: Config) -
extra_context=extra_context,
)

if command == "build":
if parsed_args.extra_meta:
extra_context.update(parsed_args.extra_meta)
if parsed_args.output_folder:
output_dir = parsed_args.output_folder
no_build_id = not parsed_args.set_build_id
skip_existing = parsed_args.skip_existing or "none"
no_include_recipe = not parsed_args.include_recipe
if parsed_args.conda_pkg_format == CondaPkgFormat.V2:
package_format = "conda"
else:
package_format = ".tar.bz2"

if command == "render":
recipes = [str(Path(parsed_args.recipe) / "recipe.yaml")]
else:
recipes = [
str(Path(recipe_dir) / "recipe.yaml") for recipe_dir in parsed_args.recipe
]

# configure variant
# merge config files in the order they are stacked
if config_files:
for variant in config_files:
variant_config = variant_config.merge(VariantConfig.from_file(variant))

recipe_results: list[RecipeResult] = []

for recipe_path in recipes:
Expand Down
19 changes: 19 additions & 0 deletions news/6015-v1-recipe-platform-config.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
### Enhancements

* <news item>

### Bug fixes

* Fix platform config settings when building v1 recipes by checking `VariantConfig()` instead of `config.variant` (#6015).

### Deprecations

* <news item>

### Docs

* <news item>

### Other

* <news item>
52 changes: 52 additions & 0 deletions tests/cli/test_main_build.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
from pathlib import Path
from typing import TYPE_CHECKING

import conda_package_handling
import pytest
import yaml
from conda.base.context import context
from conda.exceptions import PackagesNotFoundError

Expand Down Expand Up @@ -593,6 +595,56 @@ def test_build_v1_recipe_multi_output(testing_workdir: str) -> None:
assert len(conda_packages) == 2


@pytest.mark.parametrize(
"target_platform, variant_name",
[
("linux-aarch64", "cbc_aarch64.yml"),
("osx-arm64", "cbc_osx_arm64.yml"),
],
ids=["linux-aarch64", "osx-arm64"],
)
def test_v1_recipe_platform_config(
testing_workdir: str, target_platform: str, variant_name: str
) -> None:
"""Verify platform configuration settings in v1 recipes"""
recipe = os.path.join(metadata_dir, "..", "variants", "33_v1_recipe_multi_output")

out = Path(testing_workdir, "out")
out.mkdir(parents=True)

variant = os.path.join(recipe, "variants", variant_name)
args = [
recipe,
"-m",
variant,
"--output-folder",
str(out),
]
main_build.execute(args)

conda_packages = sorted(out.rglob("*.conda"))

for pkg in conda_packages:
extract_dir = Path(testing_workdir, "extracted", pkg.stem)
extract_dir.mkdir(parents=True, exist_ok=True)

conda_package_handling.api.extract(str(pkg), dest_dir=str(extract_dir))

rendered_recipe = extract_dir / "info" / "recipe" / "rendered_recipe.yaml"

with rendered_recipe.open() as f:
recipe_data = yaml.safe_load(f)

# target_platform is in build_configuration.target_platform
build_config = recipe_data.get("build_configuration", {})
assert build_config, f"missing build_configuration in {pkg}"

assert build_config.get("target_platform") == target_platform, (
f"expected target_platform={target_platform} in build_configuration, "
f"got {build_config.get('target_platform')}"
)


def test_build_v1_recipe_result_report(capsys) -> None:
"""Test for checking build summary report when building multiple recipes"""
recipe1 = os.path.join(metadata_dir, "..", "variants", "32_v1_recipe")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
target_platform:
- linux-aarch64
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
target_platform:
- osx-arm64
Loading