diff --git a/.ci_support/linux_64_.yaml b/.ci_support/linux_64_python3.10.____cpython.yaml similarity index 83% rename from .ci_support/linux_64_.yaml rename to .ci_support/linux_64_python3.10.____cpython.yaml index afd31dd..e239c51 100644 --- a/.ci_support/linux_64_.yaml +++ b/.ci_support/linux_64_python3.10.____cpython.yaml @@ -22,11 +22,6 @@ pin_run_as_build: max_pin: x.x python: - 3.10.* *_cpython -- 3.11.* *_cpython -- 3.12.* *_cpython -- 3.13.* *_cp313 -- 3.14.* *_cp314 -- 3.14.* *_cp314t python_min: - '3.10' target_platform: diff --git a/.ci_support/linux_64_python3.11.____cpython.yaml b/.ci_support/linux_64_python3.11.____cpython.yaml new file mode 100644 index 0000000..4a7fc29 --- /dev/null +++ b/.ci_support/linux_64_python3.11.____cpython.yaml @@ -0,0 +1,31 @@ +c_compiler: +- gcc +c_compiler_version: +- '14' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +cxx_compiler: +- gxx +cxx_compiler_version: +- '14' +docker_image: +- quay.io/condaforge/linux-anvil-x86_64:alma9 +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.11.* *_cpython +python_min: +- '3.10' +target_platform: +- linux-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version diff --git a/.ci_support/linux_64_python3.12.____cpython.yaml b/.ci_support/linux_64_python3.12.____cpython.yaml new file mode 100644 index 0000000..b0efb49 --- /dev/null +++ b/.ci_support/linux_64_python3.12.____cpython.yaml @@ -0,0 +1,31 @@ +c_compiler: +- gcc +c_compiler_version: +- '14' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +cxx_compiler: +- gxx +cxx_compiler_version: +- '14' +docker_image: +- quay.io/condaforge/linux-anvil-x86_64:alma9 +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.12.* *_cpython +python_min: +- '3.10' +target_platform: +- linux-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version diff --git a/.ci_support/linux_64_python3.13.____cp313.yaml b/.ci_support/linux_64_python3.13.____cp313.yaml new file mode 100644 index 0000000..d94236b --- /dev/null +++ b/.ci_support/linux_64_python3.13.____cp313.yaml @@ -0,0 +1,31 @@ +c_compiler: +- gcc +c_compiler_version: +- '14' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +cxx_compiler: +- gxx +cxx_compiler_version: +- '14' +docker_image: +- quay.io/condaforge/linux-anvil-x86_64:alma9 +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.13.* *_cp313 +python_min: +- '3.10' +target_platform: +- linux-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version diff --git a/.ci_support/linux_64_python3.14.____cp314.yaml b/.ci_support/linux_64_python3.14.____cp314.yaml new file mode 100644 index 0000000..7fc5866 --- /dev/null +++ b/.ci_support/linux_64_python3.14.____cp314.yaml @@ -0,0 +1,31 @@ +c_compiler: +- gcc +c_compiler_version: +- '14' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +cxx_compiler: +- gxx +cxx_compiler_version: +- '14' +docker_image: +- quay.io/condaforge/linux-anvil-x86_64:alma9 +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.14.* *_cp314 +python_min: +- '3.10' +target_platform: +- linux-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version diff --git a/.ci_support/linux_64_python3.14.____cp314t.yaml b/.ci_support/linux_64_python3.14.____cp314t.yaml new file mode 100644 index 0000000..82b9791 --- /dev/null +++ b/.ci_support/linux_64_python3.14.____cp314t.yaml @@ -0,0 +1,31 @@ +c_compiler: +- gcc +c_compiler_version: +- '14' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +cxx_compiler: +- gxx +cxx_compiler_version: +- '14' +docker_image: +- quay.io/condaforge/linux-anvil-x86_64:alma9 +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.14.* *_cp314t +python_min: +- '3.10' +target_platform: +- linux-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version diff --git a/.github/workflows/conda-build.yml b/.github/workflows/conda-build.yml index 5a7ed27..fc7647e 100644 --- a/.github/workflows/conda-build.yml +++ b/.github/workflows/conda-build.yml @@ -22,7 +22,52 @@ jobs: max-parallel: 50 matrix: include: - - CONFIG: linux_64_ + - CONFIG: linux_64_python3.10.____cpython + STORE_BUILD_ARTIFACTS: False + UPLOAD_PACKAGES: True + os: ubuntu + runs_on: ['ubuntu-latest'] + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + tools_install_dir: ~/miniforge3 + build_workspace_dir: build_artifacts + docker_run_args: + - CONFIG: linux_64_python3.11.____cpython + STORE_BUILD_ARTIFACTS: False + UPLOAD_PACKAGES: True + os: ubuntu + runs_on: ['ubuntu-latest'] + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + tools_install_dir: ~/miniforge3 + build_workspace_dir: build_artifacts + docker_run_args: + - CONFIG: linux_64_python3.12.____cpython + STORE_BUILD_ARTIFACTS: False + UPLOAD_PACKAGES: True + os: ubuntu + runs_on: ['ubuntu-latest'] + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + tools_install_dir: ~/miniforge3 + build_workspace_dir: build_artifacts + docker_run_args: + - CONFIG: linux_64_python3.13.____cp313 + STORE_BUILD_ARTIFACTS: False + UPLOAD_PACKAGES: True + os: ubuntu + runs_on: ['ubuntu-latest'] + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + tools_install_dir: ~/miniforge3 + build_workspace_dir: build_artifacts + docker_run_args: + - CONFIG: linux_64_python3.14.____cp314 + STORE_BUILD_ARTIFACTS: False + UPLOAD_PACKAGES: True + os: ubuntu + runs_on: ['ubuntu-latest'] + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + tools_install_dir: ~/miniforge3 + build_workspace_dir: build_artifacts + docker_run_args: + - CONFIG: linux_64_python3.14.____cp314t STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True os: ubuntu diff --git a/pixi.toml b/pixi.toml index 04fccdd..c8c585a 100644 --- a/pixi.toml +++ b/pixi.toml @@ -23,12 +23,42 @@ description = "List contents of all packages found in rattler-build build direct [tasks.build] cmd = "rattler-build build --recipe recipe" description = "Build cuda-python-feedstock directly (without setup scripts), no particular variant specified" -[tasks."build-linux_64_"] -cmd = "rattler-build build --recipe recipe -m .ci_support/linux_64_.yaml" -description = "Build cuda-python-feedstock with variant linux_64_ directly (without setup scripts)" -[tasks."inspect-linux_64_"] -cmd = "inspect_artifacts --recipe-dir recipe -m .ci_support/linux_64_.yaml" -description = "List contents of cuda-python-feedstock packages built for variant linux_64_" +[tasks."build-linux_64_python3.10.____cpython"] +cmd = "rattler-build build --recipe recipe -m .ci_support/linux_64_python3.10.____cpython.yaml" +description = "Build cuda-python-feedstock with variant linux_64_python3.10.____cpython directly (without setup scripts)" +[tasks."inspect-linux_64_python3.10.____cpython"] +cmd = "inspect_artifacts --recipe-dir recipe -m .ci_support/linux_64_python3.10.____cpython.yaml" +description = "List contents of cuda-python-feedstock packages built for variant linux_64_python3.10.____cpython" +[tasks."build-linux_64_python3.11.____cpython"] +cmd = "rattler-build build --recipe recipe -m .ci_support/linux_64_python3.11.____cpython.yaml" +description = "Build cuda-python-feedstock with variant linux_64_python3.11.____cpython directly (without setup scripts)" +[tasks."inspect-linux_64_python3.11.____cpython"] +cmd = "inspect_artifacts --recipe-dir recipe -m .ci_support/linux_64_python3.11.____cpython.yaml" +description = "List contents of cuda-python-feedstock packages built for variant linux_64_python3.11.____cpython" +[tasks."build-linux_64_python3.12.____cpython"] +cmd = "rattler-build build --recipe recipe -m .ci_support/linux_64_python3.12.____cpython.yaml" +description = "Build cuda-python-feedstock with variant linux_64_python3.12.____cpython directly (without setup scripts)" +[tasks."inspect-linux_64_python3.12.____cpython"] +cmd = "inspect_artifacts --recipe-dir recipe -m .ci_support/linux_64_python3.12.____cpython.yaml" +description = "List contents of cuda-python-feedstock packages built for variant linux_64_python3.12.____cpython" +[tasks."build-linux_64_python3.13.____cp313"] +cmd = "rattler-build build --recipe recipe -m .ci_support/linux_64_python3.13.____cp313.yaml" +description = "Build cuda-python-feedstock with variant linux_64_python3.13.____cp313 directly (without setup scripts)" +[tasks."inspect-linux_64_python3.13.____cp313"] +cmd = "inspect_artifacts --recipe-dir recipe -m .ci_support/linux_64_python3.13.____cp313.yaml" +description = "List contents of cuda-python-feedstock packages built for variant linux_64_python3.13.____cp313" +[tasks."build-linux_64_python3.14.____cp314"] +cmd = "rattler-build build --recipe recipe -m .ci_support/linux_64_python3.14.____cp314.yaml" +description = "Build cuda-python-feedstock with variant linux_64_python3.14.____cp314 directly (without setup scripts)" +[tasks."inspect-linux_64_python3.14.____cp314"] +cmd = "inspect_artifacts --recipe-dir recipe -m .ci_support/linux_64_python3.14.____cp314.yaml" +description = "List contents of cuda-python-feedstock packages built for variant linux_64_python3.14.____cp314" +[tasks."build-linux_64_python3.14.____cp314t"] +cmd = "rattler-build build --recipe recipe -m .ci_support/linux_64_python3.14.____cp314t.yaml" +description = "Build cuda-python-feedstock with variant linux_64_python3.14.____cp314t directly (without setup scripts)" +[tasks."inspect-linux_64_python3.14.____cp314t"] +cmd = "inspect_artifacts --recipe-dir recipe -m .ci_support/linux_64_python3.14.____cp314t.yaml" +description = "List contents of cuda-python-feedstock packages built for variant linux_64_python3.14.____cp314t" [tasks."build-linux_aarch64_python3.10.____cpython"] cmd = "rattler-build build --recipe recipe -m .ci_support/linux_aarch64_python3.10.____cpython.yaml" description = "Build cuda-python-feedstock with variant linux_aarch64_python3.10.____cpython directly (without setup scripts)" diff --git a/recipe/recipe.yaml b/recipe/recipe.yaml index a89fcda..ea9b666 100644 --- a/recipe/recipe.yaml +++ b/recipe/recipe.yaml @@ -2,7 +2,7 @@ schema_version: 1 context: - number: 0 + number: 1 version: "13.3.1" sha256: 5d21c94fb373c9dc5c71f922a4356bb0e292b85c1a3c04930a37834f5201a00d bindings_major_version: ${{ (version | split("."))[0] | int }} @@ -31,6 +31,19 @@ outputs: number: ${{ number }} skip: not linux64 noarch: python + # Deterministic build string so all variant.use_keys: [python] builds + # produce the same artifact filename — required for upload-time dedupe + # via hash collision (see `variant.use_keys` note below). + string: py_min_${{ python_min | replace(".", "") }}_${{ number }} + variant: + # Ensures conda-smithy splits CI jobs per Python version. Without + # this, the noarch output drops `python` from the intersection of + # used loop vars (since CFEP-25 uses `python_min`), collapsing all + # Python variants into a single serialized job. The redundant noarch + # builds dedupe on upload via hash collision (the explicit `string` + # above keeps the filename identical across variants). + use_keys: + - python script: env: SUBDIR: ${{ subdir }} @@ -58,7 +71,9 @@ outputs: then: python -c "import cuda.bindings.cudla" requirements: run: - - python ${{ python_min }}.* + # Range (not pinned to python_min) so the test env can use the + # variant's Python, matching the locally-built cuda-bindings ABI. + - python >=${{ python_min }} - numpy - python: imports: