diff --git a/.azure-pipelines/azure-pipelines-linux.yml b/.azure-pipelines/azure-pipelines-linux.yml
index 875d996..b1513b8 100755
--- a/.azure-pipelines/azure-pipelines-linux.yml
+++ b/.azure-pipelines/azure-pipelines-linux.yml
@@ -11,7 +11,15 @@ jobs:
linux_64_:
CONFIG: linux_64_
UPLOAD_PACKAGES: 'True'
- DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64
+ DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9
+ linux_aarch64_:
+ CONFIG: linux_aarch64_
+ UPLOAD_PACKAGES: 'True'
+ DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9
+ linux_ppc64le_:
+ CONFIG: linux_ppc64le_
+ UPLOAD_PACKAGES: 'True'
+ DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9
timeoutInMinutes: 360
variables: {}
diff --git a/.azure-pipelines/azure-pipelines-osx.yml b/.azure-pipelines/azure-pipelines-osx.yml
index ae4e0e7..ac0bf38 100755
--- a/.azure-pipelines/azure-pipelines-osx.yml
+++ b/.azure-pipelines/azure-pipelines-osx.yml
@@ -5,12 +5,15 @@
jobs:
- job: osx
pool:
- vmImage: macOS-11
+ vmImage: macOS-13
strategy:
matrix:
osx_64_:
CONFIG: osx_64_
UPLOAD_PACKAGES: 'True'
+ osx_arm64_:
+ CONFIG: osx_arm64_
+ UPLOAD_PACKAGES: 'True'
timeoutInMinutes: 360
variables: {}
diff --git a/.azure-pipelines/azure-pipelines-win.yml b/.azure-pipelines/azure-pipelines-win.yml
index d609fcd..13022dd 100755
--- a/.azure-pipelines/azure-pipelines-win.yml
+++ b/.azure-pipelines/azure-pipelines-win.yml
@@ -14,31 +14,17 @@ jobs:
timeoutInMinutes: 360
variables:
CONDA_BLD_PATH: D:\\bld\\
+ MINIFORGE_HOME: D:\Miniforge
UPLOAD_TEMP: D:\\tmp
steps:
- - task: PythonScript@0
- displayName: 'Download Miniforge'
- inputs:
- scriptSource: inline
- script: |
- import urllib.request
- url = 'https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Windows-x86_64.exe'
- path = r"$(Build.ArtifactStagingDirectory)/Miniforge.exe"
- urllib.request.urlretrieve(url, path)
-
- - script: |
- start /wait "" %BUILD_ARTIFACTSTAGINGDIRECTORY%\Miniforge.exe /InstallationType=JustMe /RegisterPython=0 /S /D=C:\Miniforge
- displayName: Install Miniforge
-
- - powershell: Write-Host "##vso[task.prependpath]C:\Miniforge\Scripts"
- displayName: Add conda to PATH
-
- script: |
call ".scripts\run_win_build.bat"
displayName: Run Windows build
env:
+ MINIFORGE_HOME: $(MINIFORGE_HOME)
+ CONDA_BLD_PATH: $(CONDA_BLD_PATH)
PYTHONUNBUFFERED: 1
CONFIG: $(CONFIG)
CI: azure
diff --git a/.ci_support/linux_64_.yaml b/.ci_support/linux_64_.yaml
index fbe6292..e609b71 100644
--- a/.ci_support/linux_64_.yaml
+++ b/.ci_support/linux_64_.yaml
@@ -1,15 +1,19 @@
c_compiler:
- gcc
c_compiler_version:
-- '12'
+- '13'
+c_stdlib:
+- sysroot
+c_stdlib_version:
+- '2.17'
cdt_name:
-- cos6
+- conda
channel_sources:
- conda-forge
channel_targets:
- conda-forge main
docker_image:
-- quay.io/condaforge/linux-anvil-cos7-x86_64
+- quay.io/condaforge/linux-anvil-x86_64:alma9
rust_compiler:
- rust
target_platform:
diff --git a/.ci_support/linux_aarch64_.yaml b/.ci_support/linux_aarch64_.yaml
new file mode 100644
index 0000000..3ca0f40
--- /dev/null
+++ b/.ci_support/linux_aarch64_.yaml
@@ -0,0 +1,20 @@
+c_compiler:
+- gcc
+c_compiler_version:
+- '13'
+c_stdlib:
+- sysroot
+c_stdlib_version:
+- '2.17'
+cdt_name:
+- conda
+channel_sources:
+- conda-forge
+channel_targets:
+- conda-forge main
+docker_image:
+- quay.io/condaforge/linux-anvil-x86_64:alma9
+rust_compiler:
+- rust
+target_platform:
+- linux-aarch64
diff --git a/.ci_support/linux_ppc64le_.yaml b/.ci_support/linux_ppc64le_.yaml
new file mode 100644
index 0000000..1caf6bd
--- /dev/null
+++ b/.ci_support/linux_ppc64le_.yaml
@@ -0,0 +1,20 @@
+c_compiler:
+- gcc
+c_compiler_version:
+- '13'
+c_stdlib:
+- sysroot
+c_stdlib_version:
+- '2.17'
+cdt_name:
+- conda
+channel_sources:
+- conda-forge
+channel_targets:
+- conda-forge main
+docker_image:
+- quay.io/condaforge/linux-anvil-x86_64:alma9
+rust_compiler:
+- rust
+target_platform:
+- linux-ppc64le
diff --git a/.ci_support/migrations/r-base44_and_m2w64-ucrt.yaml b/.ci_support/migrations/r-base44_and_m2w64-ucrt.yaml
new file mode 100644
index 0000000..f25611f
--- /dev/null
+++ b/.ci_support/migrations/r-base44_and_m2w64-ucrt.yaml
@@ -0,0 +1,53 @@
+migrator_ts: 1718391654
+__migrator:
+ kind: version
+ migration_number: 1
+ bump_number: 1
+ commit_message: "Rebuild for r-base 4.4 and UCRT mingw toolchain"
+ primary_key: r_base
+ automerge: True
+ longterm: True
+ include_noarch: True
+ include_build: True
+ pr_limit: 40
+ override_cbc_keys:
+ - r-base
+ - r_base
+ - m2w64_c_compiler_stub
+ - m2w64_cxx_compiler_stub
+ - m2w64_fortran_compiler_stub
+ ordering:
+ m2w64_c_compiler:
+ - m2w64-toolchain
+ - gcc
+ m2w64_cxx_compiler:
+ - m2w64-toolchain
+ - gxx
+ m2w64_fortran_compiler:
+ - m2w64-toolchain
+ - gfortran
+ m2w64_c_stdlib:
+ - m2w64-toolchain
+ - m2w64-sysroot
+
+r_base:
+ - 4.3
+ - 4.4
+m2w64_c_compiler: # [win]
+ - gcc # [win]
+m2w64_c_compiler_version: # [win]
+ - 13 # [win]
+m2w64_cxx_compiler: # [win]
+ - gxx # [win]
+m2w64_cxx_compiler_version: # [win]
+ - 13 # [win]
+m2w64_fortran_compiler: # [win]
+ - gfortran # [win]
+m2w64_fortran_compiler_version: # [win]
+ - 13 # [win]
+m2w64_c_stdlib: # [win]
+ - m2w64-sysroot # [win]
+m2w64_c_stdlib_version: # [win]
+ - 12 # [win]
+m2w64_toolchain: # [win]
+ - disabled # [win]
diff --git a/.ci_support/osx_64_.yaml b/.ci_support/osx_64_.yaml
index 6818ae7..55d7f0c 100644
--- a/.ci_support/osx_64_.yaml
+++ b/.ci_support/osx_64_.yaml
@@ -1,9 +1,15 @@
MACOSX_DEPLOYMENT_TARGET:
-- '10.9'
+- '10.13'
+MACOSX_SDK_VERSION:
+- '10.13'
c_compiler:
- clang
c_compiler_version:
-- '16'
+- '18'
+c_stdlib:
+- macosx_deployment_target
+c_stdlib_version:
+- '10.13'
channel_sources:
- conda-forge
channel_targets:
diff --git a/.ci_support/osx_arm64_.yaml b/.ci_support/osx_arm64_.yaml
new file mode 100644
index 0000000..935d7ca
--- /dev/null
+++ b/.ci_support/osx_arm64_.yaml
@@ -0,0 +1,22 @@
+MACOSX_DEPLOYMENT_TARGET:
+- '11.0'
+MACOSX_SDK_VERSION:
+- '11.0'
+c_compiler:
+- clang
+c_compiler_version:
+- '18'
+c_stdlib:
+- macosx_deployment_target
+c_stdlib_version:
+- '11.0'
+channel_sources:
+- conda-forge
+channel_targets:
+- conda-forge main
+macos_machine:
+- arm64-apple-darwin20.0.0
+rust_compiler:
+- rust
+target_platform:
+- osx-arm64
diff --git a/.ci_support/win_64_.yaml b/.ci_support/win_64_.yaml
index 07b5a7e..4d896df 100644
--- a/.ci_support/win_64_.yaml
+++ b/.ci_support/win_64_.yaml
@@ -1,9 +1,11 @@
+c_compiler:
+- vs2019
+c_stdlib:
+- vs
channel_sources:
- conda-forge
channel_targets:
- conda-forge main
-m2w64_c_compiler:
-- m2w64-toolchain
rust_compiler:
- rust
target_platform:
diff --git a/.gitattributes b/.gitattributes
index 7f32763..18f114a 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -20,8 +20,8 @@ bld.bat text eol=crlf
.travis.yml linguist-generated=true
.scripts/* linguist-generated=true
.woodpecker.yml linguist-generated=true
-LICENSE.txt linguist-generated=true
-README.md linguist-generated=true
+/LICENSE.txt linguist-generated=true
+/README.md linguist-generated=true
azure-pipelines.yml linguist-generated=true
build-locally.py linguist-generated=true
shippable.yml linguist-generated=true
diff --git a/.gitignore b/.gitignore
index 179afe5..bb38536 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,6 @@
/build_artifacts
*.pyc
+
+# Rattler-build's artifacts are in `output` when not specifying anything.
+/output
diff --git a/.scripts/build_steps.sh b/.scripts/build_steps.sh
index 2f3df6c..f2f6924 100755
--- a/.scripts/build_steps.sh
+++ b/.scripts/build_steps.sh
@@ -31,22 +31,26 @@ pkgs_dirs:
solver: libmamba
CONDARC
+mv /opt/conda/conda-meta/history /opt/conda/conda-meta/history.$(date +%Y-%m-%d-%H-%M-%S)
+echo > /opt/conda/conda-meta/history
+micromamba install --root-prefix ~/.conda --prefix /opt/conda \
+ --yes --override-channels --channel conda-forge --strict-channel-priority \
+ pip python=3.12 conda-build conda-forge-ci-setup=4 "conda-build>=24.1"
export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1
-mamba install --update-specs --yes --quiet --channel conda-forge --strict-channel-priority \
- pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1"
-mamba update --update-specs --yes --quiet --channel conda-forge --strict-channel-priority \
- pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1"
-
# set up the condarc
setup_conda_rc "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}"
source run_conda_forge_build_setup
+
+
# make the build number clobber
make_build_number "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}"
-
+if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]] && [[ "${BUILD_WITH_CONDA_DEBUG:-0}" != 1 ]]; then
+ EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test"
+fi
( endgroup "Configuring conda" ) 2> /dev/null
@@ -69,6 +73,12 @@ else
--suppress-variables ${EXTRA_CB_OPTIONS:-} \
--clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" \
--extra-meta flow_run_id="${flow_run_id:-}" remote_url="${remote_url:-}" sha="${sha:-}"
+ ( startgroup "Inspecting artifacts" ) 2> /dev/null
+
+ # inspect_artifacts was only added in conda-forge-ci-setup 4.9.4
+ command -v inspect_artifacts >/dev/null 2>&1 && inspect_artifacts --recipe-dir "${RECIPE_ROOT}" -m "${CONFIG_FILE}" || echo "inspect_artifacts needs conda-forge-ci-setup >=4.9.4"
+
+ ( endgroup "Inspecting artifacts" ) 2> /dev/null
( startgroup "Validating outputs" ) 2> /dev/null
validate_recipe_outputs "${FEEDSTOCK_NAME}"
diff --git a/.scripts/run_osx_build.sh b/.scripts/run_osx_build.sh
index 165fa51..0e3c394 100755
--- a/.scripts/run_osx_build.sh
+++ b/.scripts/run_osx_build.sh
@@ -6,29 +6,41 @@ source .scripts/logging_utils.sh
set -xe
-MINIFORGE_HOME=${MINIFORGE_HOME:-${HOME}/miniforge3}
-
-( startgroup "Installing a fresh version of Miniforge" ) 2> /dev/null
-
-MINIFORGE_URL="https://github.com/conda-forge/miniforge/releases/latest/download"
-MINIFORGE_FILE="Mambaforge-MacOSX-$(uname -m).sh"
-curl -L -O "${MINIFORGE_URL}/${MINIFORGE_FILE}"
-rm -rf ${MINIFORGE_HOME}
-bash $MINIFORGE_FILE -b -p ${MINIFORGE_HOME}
-
-( endgroup "Installing a fresh version of Miniforge" ) 2> /dev/null
+MINIFORGE_HOME="${MINIFORGE_HOME:-${HOME}/miniforge3}"
+MINIFORGE_HOME="${MINIFORGE_HOME%/}" # remove trailing slash
+export CONDA_BLD_PATH="${CONDA_BLD_PATH:-${MINIFORGE_HOME}/conda-bld}"
+
+( startgroup "Provisioning base env with micromamba" ) 2> /dev/null
+MICROMAMBA_VERSION="1.5.10-0"
+if [[ "$(uname -m)" == "arm64" ]]; then
+ osx_arch="osx-arm64"
+else
+ osx_arch="osx-64"
+fi
+MICROMAMBA_URL="https://github.com/mamba-org/micromamba-releases/releases/download/${MICROMAMBA_VERSION}/micromamba-${osx_arch}"
+MAMBA_ROOT_PREFIX="${MINIFORGE_HOME}-micromamba-$(date +%s)"
+echo "Downloading micromamba ${MICROMAMBA_VERSION}"
+micromamba_exe="$(mktemp -d)/micromamba"
+curl -L -o "${micromamba_exe}" "${MICROMAMBA_URL}"
+chmod +x "${micromamba_exe}"
+echo "Creating environment"
+"${micromamba_exe}" create --yes --root-prefix "${MAMBA_ROOT_PREFIX}" --prefix "${MINIFORGE_HOME}" \
+ --channel conda-forge \
+ pip python=3.12 conda-build conda-forge-ci-setup=4 "conda-build>=24.1"
+echo "Moving pkgs cache from ${MAMBA_ROOT_PREFIX} to ${MINIFORGE_HOME}"
+mv "${MAMBA_ROOT_PREFIX}/pkgs" "${MINIFORGE_HOME}"
+echo "Cleaning up micromamba"
+rm -rf "${MAMBA_ROOT_PREFIX}" "${micromamba_exe}" || true
+( endgroup "Provisioning base env with micromamba" ) 2> /dev/null
( startgroup "Configuring conda" ) 2> /dev/null
-
-source ${MINIFORGE_HOME}/etc/profile.d/conda.sh
+echo "Activating environment"
+source "${MINIFORGE_HOME}/etc/profile.d/conda.sh"
conda activate base
export CONDA_SOLVER="libmamba"
export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1
-mamba install --update-specs --quiet --yes --channel conda-forge --strict-channel-priority \
- pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1"
-mamba update --update-specs --yes --quiet --channel conda-forge --strict-channel-priority \
- pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1"
+
@@ -77,10 +89,21 @@ if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then
/bin/bash
else
+ if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]]; then
+ EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test"
+ fi
+
conda-build ./recipe -m ./.ci_support/${CONFIG}.yaml \
--suppress-variables ${EXTRA_CB_OPTIONS:-} \
--clobber-file ./.ci_support/clobber_${CONFIG}.yaml \
--extra-meta flow_run_id="$flow_run_id" remote_url="$remote_url" sha="$sha"
+
+ ( startgroup "Inspecting artifacts" ) 2> /dev/null
+
+ # inspect_artifacts was only added in conda-forge-ci-setup 4.9.4
+ command -v inspect_artifacts >/dev/null 2>&1 && inspect_artifacts --recipe-dir ./recipe -m ./.ci_support/${CONFIG}.yaml || echo "inspect_artifacts needs conda-forge-ci-setup >=4.9.4"
+
+ ( endgroup "Inspecting artifacts" ) 2> /dev/null
( startgroup "Validating outputs" ) 2> /dev/null
validate_recipe_outputs "${FEEDSTOCK_NAME}"
diff --git a/.scripts/run_win_build.bat b/.scripts/run_win_build.bat
index 7491838..f0ead3d 100755
--- a/.scripts/run_win_build.bat
+++ b/.scripts/run_win_build.bat
@@ -3,30 +3,51 @@
:: changes to this script, consider a proposal to conda-smithy so that other feedstocks can also
:: benefit from the improvement.
-:: Note: we assume a Miniforge installation is available
-
:: INPUTS (required environment variables)
:: CONFIG: name of the .ci_support/*.yaml file for this job
:: CI: azure, github_actions, or unset
+:: MINIFORGE_HOME: where to install the base conda environment
:: UPLOAD_PACKAGES: true or false
:: UPLOAD_ON_BRANCH: true or false
setlocal enableextensions enabledelayedexpansion
+FOR %%A IN ("%~dp0.") DO SET "REPO_ROOT=%%~dpA"
+if "%MINIFORGE_HOME%"=="" set "MINIFORGE_HOME=%USERPROFILE%\Miniforge3"
+:: Remove trailing backslash, if present
+if "%MINIFORGE_HOME:~-1%"=="\" set "MINIFORGE_HOME=%MINIFORGE_HOME:~0,-1%"
+call :start_group "Provisioning base env with micromamba"
+set "MAMBA_ROOT_PREFIX=%MINIFORGE_HOME%-micromamba-%RANDOM%"
+set "MICROMAMBA_VERSION=1.5.10-0"
+set "MICROMAMBA_URL=https://github.com/mamba-org/micromamba-releases/releases/download/%MICROMAMBA_VERSION%/micromamba-win-64"
+set "MICROMAMBA_TMPDIR=%TMP%\micromamba-%RANDOM%"
+set "MICROMAMBA_EXE=%MICROMAMBA_TMPDIR%\micromamba.exe"
+
+echo Downloading micromamba %MICROMAMBA_VERSION%
+if not exist "%MICROMAMBA_TMPDIR%" mkdir "%MICROMAMBA_TMPDIR%"
+certutil -urlcache -split -f "%MICROMAMBA_URL%" "%MICROMAMBA_EXE%"
+if !errorlevel! neq 0 exit /b !errorlevel!
+
+echo Creating environment
+call "%MICROMAMBA_EXE%" create --yes --root-prefix "%MAMBA_ROOT_PREFIX%" --prefix "%MINIFORGE_HOME%" ^
+ --channel conda-forge ^
+ pip python=3.12 conda-build conda-forge-ci-setup=4 "conda-build>=24.1"
+if !errorlevel! neq 0 exit /b !errorlevel!
+echo Removing %MAMBA_ROOT_PREFIX%
+del /S /Q "%MAMBA_ROOT_PREFIX%" >nul
+del /S /Q "%MICROMAMBA_TMPDIR%" >nul
+call :end_group
+
call :start_group "Configuring conda"
:: Activate the base conda environment
-call activate base
+echo Activating environment
+call "%MINIFORGE_HOME%\Scripts\activate.bat"
:: Configure the solver
set "CONDA_SOLVER=libmamba"
if !errorlevel! neq 0 exit /b !errorlevel!
set "CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1"
-:: Provision the necessary dependencies to build the recipe later
-echo Installing dependencies
-mamba.exe install "python=3.10" pip mamba conda-build conda-forge-ci-setup=4 "conda-build>=24.1" -c conda-forge --strict-channel-priority --yes
-if !errorlevel! neq 0 exit /b !errorlevel!
-
:: Set basic configuration
echo Setting up configuration
setup_conda_rc .\ ".\recipe" .\.ci_support\%CONFIG%.yaml
@@ -41,9 +62,12 @@ if EXIST LICENSE.txt (
echo Copying feedstock license
copy LICENSE.txt "recipe\\recipe-scripts-license.txt"
)
+if NOT [%HOST_PLATFORM%] == [%BUILD_PLATFORM%] (
+ set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --no-test"
+)
if NOT [%flow_run_id%] == [] (
- set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --extra-meta flow_run_id=%flow_run_id% remote_url=%remote_url% sha=%sha%"
+ set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --extra-meta flow_run_id=%flow_run_id% remote_url=%remote_url% sha=%sha%"
)
call :end_group
@@ -53,6 +77,11 @@ echo Building recipe
conda-build.exe "recipe" -m .ci_support\%CONFIG%.yaml --suppress-variables %EXTRA_CB_OPTIONS%
if !errorlevel! neq 0 exit /b !errorlevel!
+call :start_group "Inspecting artifacts"
+:: inspect_artifacts was only added in conda-forge-ci-setup 4.9.4
+WHERE inspect_artifacts >nul 2>nul && inspect_artifacts --recipe-dir ".\recipe" -m .ci_support\%CONFIG%.yaml || echo "inspect_artifacts needs conda-forge-ci-setup >=4.9.4"
+call :end_group
+
:: Prepare some environment variables for the upload step
if /i "%CI%" == "github_actions" (
set "FEEDSTOCK_NAME=%GITHUB_REPOSITORY:*/=%"
diff --git a/README.md b/README.md
index 148d17d..e5546cb 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,20 @@ Current build status
+