From 789fe330f0dbdba8fa8b1fead1340852be880d09 Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Fri, 25 Jul 2025 18:35:13 -0600 Subject: [PATCH 01/16] MNT: Re-rendered with conda-build 25.5.0, conda-smithy 3.51.1, and conda-forge-pinning 2025.07.25.22.53.01 --- .azure-pipelines/azure-pipelines-linux.yml | 39 +++--- .ci_support/README | 7 +- .../linux_64_boost_cpp1.74.0mpimpich.yaml | 35 ----- .../linux_64_boost_cpp1.74.0mpiopenmpi.yaml | 35 ----- ....0mpimpich.yaml => linux_64_mpimpich.yaml} | 29 ++-- ...iopenmpi.yaml => linux_64_mpiopenmpi.yaml} | 29 ++-- .ci_support/migrations/boost_cpp1740.yaml | 11 -- .../osx_64_boost_cpp1.72.0mpimpich.yaml | 37 ----- .../osx_64_boost_cpp1.74.0mpiopenmpi.yaml | 37 ----- ...74.0mpimpich.yaml => osx_64_mpimpich.yaml} | 29 ++-- ...mpiopenmpi.yaml => osx_64_mpiopenmpi.yaml} | 29 ++-- .circleci/config.yml | 76 ++++------- .circleci/fast_finish_ci_pr_build.sh | 2 +- .gitattributes | 7 +- .gitignore | 28 +++- .scripts/build_steps.sh | 84 ++++++++++-- .scripts/logging_utils.sh | 35 +++++ .scripts/run_docker_build.sh | 49 +++++-- .scripts/run_osx_build.sh | 127 +++++++++++++----- LICENSE.txt | 32 +++-- README.md | 115 ++++++++-------- azure-pipelines.yml | 29 +++- build-locally.py | 86 ++++++++++-- recipe/meta.yaml | 1 + 24 files changed, 571 insertions(+), 417 deletions(-) delete mode 100644 .ci_support/linux_64_boost_cpp1.74.0mpimpich.yaml delete mode 100644 .ci_support/linux_64_boost_cpp1.74.0mpiopenmpi.yaml rename .ci_support/{linux_64_boost_cpp1.72.0mpimpich.yaml => linux_64_mpimpich.yaml} (56%) rename .ci_support/{linux_64_boost_cpp1.72.0mpiopenmpi.yaml => linux_64_mpiopenmpi.yaml} (57%) delete mode 100644 .ci_support/migrations/boost_cpp1740.yaml delete mode 100644 .ci_support/osx_64_boost_cpp1.72.0mpimpich.yaml delete mode 100644 .ci_support/osx_64_boost_cpp1.74.0mpiopenmpi.yaml rename .ci_support/{osx_64_boost_cpp1.74.0mpimpich.yaml => osx_64_mpimpich.yaml} (64%) rename .ci_support/{osx_64_boost_cpp1.72.0mpiopenmpi.yaml => osx_64_mpiopenmpi.yaml} (64%) create mode 100644 .scripts/logging_utils.sh diff --git a/.azure-pipelines/azure-pipelines-linux.yml b/.azure-pipelines/azure-pipelines-linux.yml index 59e7535..99ee484 100755 --- a/.azure-pipelines/azure-pipelines-linux.yml +++ b/.azure-pipelines/azure-pipelines-linux.yml @@ -5,34 +5,21 @@ jobs: - job: linux pool: - vmImage: ubuntu-16.04 + vmImage: ubuntu-latest strategy: matrix: - linux_64_boost_cpp1.72.0mpimpich: - CONFIG: linux_64_boost_cpp1.72.0mpimpich + linux_64_mpimpich: + CONFIG: linux_64_mpimpich UPLOAD_PACKAGES: 'True' - DOCKER_IMAGE: condaforge/linux-anvil-comp7 - linux_64_boost_cpp1.72.0mpiopenmpi: - CONFIG: linux_64_boost_cpp1.72.0mpiopenmpi + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + linux_64_mpiopenmpi: + CONFIG: linux_64_mpiopenmpi UPLOAD_PACKAGES: 'True' - DOCKER_IMAGE: condaforge/linux-anvil-comp7 - linux_64_boost_cpp1.74.0mpimpich: - CONFIG: linux_64_boost_cpp1.74.0mpimpich - UPLOAD_PACKAGES: 'True' - DOCKER_IMAGE: condaforge/linux-anvil-comp7 - linux_64_boost_cpp1.74.0mpiopenmpi: - CONFIG: linux_64_boost_cpp1.74.0mpiopenmpi - UPLOAD_PACKAGES: 'True' - DOCKER_IMAGE: condaforge/linux-anvil-comp7 - maxParallel: 8 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 timeoutInMinutes: 360 + variables: {} steps: - - script: | - rm -rf /opt/ghc - df -h - displayName: Manage disk space - # configure qemu binfmt-misc running. This allows us to run docker containers # embedded qemu-static - script: | @@ -43,11 +30,19 @@ jobs: - script: | export CI=azure + export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) + export remote_url=$(Build.Repository.Uri) + export sha=$(Build.SourceVersion) export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) + if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then + export IS_PR_BUILD="True" + else + export IS_PR_BUILD="False" + fi .scripts/run_docker_build.sh displayName: Run docker build env: BINSTAR_TOKEN: $(BINSTAR_TOKEN) FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) - STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) \ No newline at end of file + STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) diff --git a/.ci_support/README b/.ci_support/README index e4e2dce..a47316b 100644 --- a/.ci_support/README +++ b/.ci_support/README @@ -1 +1,6 @@ -This file is automatically generated by conda-smithy. To change any matrix elements, you should change conda-smithy's input conda_build_config.yaml and re-render the recipe, rather than editing these files directly. \ No newline at end of file +This file is automatically generated by conda-smithy. If any +particular build configuration is expected, but it is not found, +please make sure all dependencies are satisfiable. To add/modify any +matrix elements, you should create/change conda-smithy's input +recipe/conda_build_config.yaml and re-render the recipe, rather than +editing these files directly. diff --git a/.ci_support/linux_64_boost_cpp1.74.0mpimpich.yaml b/.ci_support/linux_64_boost_cpp1.74.0mpimpich.yaml deleted file mode 100644 index 44274db..0000000 --- a/.ci_support/linux_64_boost_cpp1.74.0mpimpich.yaml +++ /dev/null @@ -1,35 +0,0 @@ -boost_cpp: -- 1.74.0 -c_compiler: -- gcc -c_compiler_version: -- '7' -channel_sources: -- conda-forge,defaults -channel_targets: -- conda-forge main -cxx_compiler: -- gxx -cxx_compiler_version: -- '7' -docker_image: -- condaforge/linux-anvil-comp7 -libblas: -- 3.8 *netlib -liblapack: -- 3.8.0 *netlib -libmatio: -- '1.5' -mpi: -- mpich -netcdf_cxx4: -- '4.3' -pin_run_as_build: - boost-cpp: - max_pin: x.x.x - libmatio: - max_pin: x.x - netcdf-cxx4: - max_pin: x.x -target_platform: -- linux-64 diff --git a/.ci_support/linux_64_boost_cpp1.74.0mpiopenmpi.yaml b/.ci_support/linux_64_boost_cpp1.74.0mpiopenmpi.yaml deleted file mode 100644 index 7344e1e..0000000 --- a/.ci_support/linux_64_boost_cpp1.74.0mpiopenmpi.yaml +++ /dev/null @@ -1,35 +0,0 @@ -boost_cpp: -- 1.74.0 -c_compiler: -- gcc -c_compiler_version: -- '7' -channel_sources: -- conda-forge,defaults -channel_targets: -- conda-forge main -cxx_compiler: -- gxx -cxx_compiler_version: -- '7' -docker_image: -- condaforge/linux-anvil-comp7 -libblas: -- 3.8 *netlib -liblapack: -- 3.8.0 *netlib -libmatio: -- '1.5' -mpi: -- openmpi -netcdf_cxx4: -- '4.3' -pin_run_as_build: - boost-cpp: - max_pin: x.x.x - libmatio: - max_pin: x.x - netcdf-cxx4: - max_pin: x.x -target_platform: -- linux-64 diff --git a/.ci_support/linux_64_boost_cpp1.72.0mpimpich.yaml b/.ci_support/linux_64_mpimpich.yaml similarity index 56% rename from .ci_support/linux_64_boost_cpp1.72.0mpimpich.yaml rename to .ci_support/linux_64_mpimpich.yaml index bb1267c..368dbea 100644 --- a/.ci_support/linux_64_boost_cpp1.72.0mpimpich.yaml +++ b/.ci_support/linux_64_mpimpich.yaml @@ -1,35 +1,38 @@ -boost_cpp: -- 1.72.0 c_compiler: - gcc c_compiler_version: -- '7' +- '14' +cdt_name: +- conda channel_sources: -- conda-forge,defaults +- conda-forge channel_targets: - conda-forge main cxx_compiler: - gxx cxx_compiler_version: -- '7' +- '14' docker_image: -- condaforge/linux-anvil-comp7 +- quay.io/condaforge/linux-anvil-x86_64:alma9 libblas: -- 3.8 *netlib +- 3.9.* *netlib liblapack: -- 3.8.0 *netlib +- 3.9.* *netlib libmatio: -- '1.5' +- 1.5.28 mpi: - mpich +mpich: +- '4' netcdf_cxx4: - '4.3' +openmpi: +- '4' pin_run_as_build: - boost-cpp: - max_pin: x.x.x - libmatio: - max_pin: x.x netcdf-cxx4: max_pin: x.x target_platform: - linux-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version diff --git a/.ci_support/linux_64_boost_cpp1.72.0mpiopenmpi.yaml b/.ci_support/linux_64_mpiopenmpi.yaml similarity index 57% rename from .ci_support/linux_64_boost_cpp1.72.0mpiopenmpi.yaml rename to .ci_support/linux_64_mpiopenmpi.yaml index e146e28..e1e1b0c 100644 --- a/.ci_support/linux_64_boost_cpp1.72.0mpiopenmpi.yaml +++ b/.ci_support/linux_64_mpiopenmpi.yaml @@ -1,35 +1,38 @@ -boost_cpp: -- 1.72.0 c_compiler: - gcc c_compiler_version: -- '7' +- '14' +cdt_name: +- conda channel_sources: -- conda-forge,defaults +- conda-forge channel_targets: - conda-forge main cxx_compiler: - gxx cxx_compiler_version: -- '7' +- '14' docker_image: -- condaforge/linux-anvil-comp7 +- quay.io/condaforge/linux-anvil-x86_64:alma9 libblas: -- 3.8 *netlib +- 3.9.* *netlib liblapack: -- 3.8.0 *netlib +- 3.9.* *netlib libmatio: -- '1.5' +- 1.5.28 mpi: - openmpi +mpich: +- '4' netcdf_cxx4: - '4.3' +openmpi: +- '4' pin_run_as_build: - boost-cpp: - max_pin: x.x.x - libmatio: - max_pin: x.x netcdf-cxx4: max_pin: x.x target_platform: - linux-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version diff --git a/.ci_support/migrations/boost_cpp1740.yaml b/.ci_support/migrations/boost_cpp1740.yaml deleted file mode 100644 index 8bdcff1..0000000 --- a/.ci_support/migrations/boost_cpp1740.yaml +++ /dev/null @@ -1,11 +0,0 @@ -__migrator: - build_number: 1 - kind: version - migration_number: 1 -boost_cpp: -- 1.74.0 -- 1.72.0 # [not (osx and arm64)] -boost: -- 1.74.0 -- 1.72.0 # [not (osx and arm64)] -migrator_ts: 1599847606.929981 diff --git a/.ci_support/osx_64_boost_cpp1.72.0mpimpich.yaml b/.ci_support/osx_64_boost_cpp1.72.0mpimpich.yaml deleted file mode 100644 index c3a1156..0000000 --- a/.ci_support/osx_64_boost_cpp1.72.0mpimpich.yaml +++ /dev/null @@ -1,37 +0,0 @@ -MACOSX_DEPLOYMENT_TARGET: -- '10.9' -boost_cpp: -- 1.72.0 -c_compiler: -- clang -c_compiler_version: -- '10' -channel_sources: -- conda-forge,defaults -channel_targets: -- conda-forge main -cxx_compiler: -- clangxx -cxx_compiler_version: -- '10' -libblas: -- 3.8 *netlib -liblapack: -- 3.8.0 *netlib -libmatio: -- '1.5' -macos_machine: -- x86_64-apple-darwin13.4.0 -mpi: -- mpich -netcdf_cxx4: -- '4.3' -pin_run_as_build: - boost-cpp: - max_pin: x.x.x - libmatio: - max_pin: x.x - netcdf-cxx4: - max_pin: x.x -target_platform: -- osx-64 diff --git a/.ci_support/osx_64_boost_cpp1.74.0mpiopenmpi.yaml b/.ci_support/osx_64_boost_cpp1.74.0mpiopenmpi.yaml deleted file mode 100644 index 69ba684..0000000 --- a/.ci_support/osx_64_boost_cpp1.74.0mpiopenmpi.yaml +++ /dev/null @@ -1,37 +0,0 @@ -MACOSX_DEPLOYMENT_TARGET: -- '10.9' -boost_cpp: -- 1.74.0 -c_compiler: -- clang -c_compiler_version: -- '10' -channel_sources: -- conda-forge,defaults -channel_targets: -- conda-forge main -cxx_compiler: -- clangxx -cxx_compiler_version: -- '10' -libblas: -- 3.8 *netlib -liblapack: -- 3.8.0 *netlib -libmatio: -- '1.5' -macos_machine: -- x86_64-apple-darwin13.4.0 -mpi: -- openmpi -netcdf_cxx4: -- '4.3' -pin_run_as_build: - boost-cpp: - max_pin: x.x.x - libmatio: - max_pin: x.x - netcdf-cxx4: - max_pin: x.x -target_platform: -- osx-64 diff --git a/.ci_support/osx_64_boost_cpp1.74.0mpimpich.yaml b/.ci_support/osx_64_mpimpich.yaml similarity index 64% rename from .ci_support/osx_64_boost_cpp1.74.0mpimpich.yaml rename to .ci_support/osx_64_mpimpich.yaml index f000597..595e081 100644 --- a/.ci_support/osx_64_boost_cpp1.74.0mpimpich.yaml +++ b/.ci_support/osx_64_mpimpich.yaml @@ -1,37 +1,40 @@ MACOSX_DEPLOYMENT_TARGET: -- '10.9' -boost_cpp: -- 1.74.0 +- '10.13' +MACOSX_SDK_VERSION: +- '10.13' c_compiler: - clang c_compiler_version: -- '10' +- '19' channel_sources: -- conda-forge,defaults +- conda-forge channel_targets: - conda-forge main cxx_compiler: - clangxx cxx_compiler_version: -- '10' +- '19' libblas: -- 3.8 *netlib +- 3.9.* *netlib liblapack: -- 3.8.0 *netlib +- 3.9.* *netlib libmatio: -- '1.5' +- 1.5.28 macos_machine: - x86_64-apple-darwin13.4.0 mpi: - mpich +mpich: +- '4' netcdf_cxx4: - '4.3' +openmpi: +- '4' pin_run_as_build: - boost-cpp: - max_pin: x.x.x - libmatio: - max_pin: x.x netcdf-cxx4: max_pin: x.x target_platform: - osx-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version diff --git a/.ci_support/osx_64_boost_cpp1.72.0mpiopenmpi.yaml b/.ci_support/osx_64_mpiopenmpi.yaml similarity index 64% rename from .ci_support/osx_64_boost_cpp1.72.0mpiopenmpi.yaml rename to .ci_support/osx_64_mpiopenmpi.yaml index 7021f23..c8de53b 100644 --- a/.ci_support/osx_64_boost_cpp1.72.0mpiopenmpi.yaml +++ b/.ci_support/osx_64_mpiopenmpi.yaml @@ -1,37 +1,40 @@ MACOSX_DEPLOYMENT_TARGET: -- '10.9' -boost_cpp: -- 1.72.0 +- '10.13' +MACOSX_SDK_VERSION: +- '10.13' c_compiler: - clang c_compiler_version: -- '10' +- '19' channel_sources: -- conda-forge,defaults +- conda-forge channel_targets: - conda-forge main cxx_compiler: - clangxx cxx_compiler_version: -- '10' +- '19' libblas: -- 3.8 *netlib +- 3.9.* *netlib liblapack: -- 3.8.0 *netlib +- 3.9.* *netlib libmatio: -- '1.5' +- 1.5.28 macos_machine: - x86_64-apple-darwin13.4.0 mpi: - openmpi +mpich: +- '4' netcdf_cxx4: - '4.3' +openmpi: +- '4' pin_run_as_build: - boost-cpp: - max_pin: x.x.x - libmatio: - max_pin: x.x netcdf-cxx4: max_pin: x.x target_platform: - osx-64 +zip_keys: +- - c_compiler_version + - cxx_compiler_version diff --git a/.circleci/config.yml b/.circleci/config.yml index aaceb35..9bbbe45 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,16 +1,16 @@ # This file was generated automatically from conda-smithy. To update this configuration, # update the conda-forge.yml and/or the recipe/meta.yaml. -# -*- mode: yaml -*- +# -*- mode: jinja-yaml -*- version: 2 jobs: - build_osx_64_boost_cpp1.72.0mpimpich: + build_osx_64_mpimpich: working_directory: ~/test macos: - xcode: "9.0" + xcode: "13.0.0" environment: - - CONFIG: "osx_64_boost_cpp1.72.0mpimpich" + - CONFIG: "osx_64_mpimpich" - UPLOAD_PACKAGES: "True" steps: - checkout @@ -23,54 +23,22 @@ jobs: # Run, test and (if we have a BINSTAR_TOKEN) upload the distributions. command: | export CI=circle + export flow_run_id="circle_$CIRCLE_WORKFLOW_ID" + export remote_url="$CIRCLE_REPOSITORY_URL" + export sha="$CIRCLE_SHA1" export FEEDSTOCK_NAME=$(basename ${CIRCLE_PROJECT_REPONAME}) + if [[ "${CIRCLE_PR_NUMBER:-}" == "" ]]; then + export IS_PR_BUILD="False" + else + export IS_PR_BUILD="True" + fi ./.scripts/run_osx_build.sh - build_osx_64_boost_cpp1.72.0mpiopenmpi: + build_osx_64_mpiopenmpi: working_directory: ~/test macos: - xcode: "9.0" + xcode: "13.0.0" environment: - - CONFIG: "osx_64_boost_cpp1.72.0mpiopenmpi" - - UPLOAD_PACKAGES: "True" - steps: - - checkout - - run: - name: Fast finish outdated PRs and merge PRs - command: | - ./.circleci/fast_finish_ci_pr_build.sh - ./.circleci/checkout_merge_commit.sh - - run: - # Run, test and (if we have a BINSTAR_TOKEN) upload the distributions. - command: | - export CI=circle - export FEEDSTOCK_NAME=$(basename ${CIRCLE_PROJECT_REPONAME}) - ./.scripts/run_osx_build.sh - build_osx_64_boost_cpp1.74.0mpimpich: - working_directory: ~/test - macos: - xcode: "9.0" - environment: - - CONFIG: "osx_64_boost_cpp1.74.0mpimpich" - - UPLOAD_PACKAGES: "True" - steps: - - checkout - - run: - name: Fast finish outdated PRs and merge PRs - command: | - ./.circleci/fast_finish_ci_pr_build.sh - ./.circleci/checkout_merge_commit.sh - - run: - # Run, test and (if we have a BINSTAR_TOKEN) upload the distributions. - command: | - export CI=circle - export FEEDSTOCK_NAME=$(basename ${CIRCLE_PROJECT_REPONAME}) - ./.scripts/run_osx_build.sh - build_osx_64_boost_cpp1.74.0mpiopenmpi: - working_directory: ~/test - macos: - xcode: "9.0" - environment: - - CONFIG: "osx_64_boost_cpp1.74.0mpiopenmpi" + - CONFIG: "osx_64_mpiopenmpi" - UPLOAD_PACKAGES: "True" steps: - checkout @@ -83,14 +51,20 @@ jobs: # Run, test and (if we have a BINSTAR_TOKEN) upload the distributions. command: | export CI=circle + export flow_run_id="circle_$CIRCLE_WORKFLOW_ID" + export remote_url="$CIRCLE_REPOSITORY_URL" + export sha="$CIRCLE_SHA1" export FEEDSTOCK_NAME=$(basename ${CIRCLE_PROJECT_REPONAME}) + if [[ "${CIRCLE_PR_NUMBER:-}" == "" ]]; then + export IS_PR_BUILD="False" + else + export IS_PR_BUILD="True" + fi ./.scripts/run_osx_build.sh workflows: version: 2 build_and_test: jobs: - - build_osx_64_boost_cpp1.72.0mpimpich - - build_osx_64_boost_cpp1.72.0mpiopenmpi - - build_osx_64_boost_cpp1.74.0mpimpich - - build_osx_64_boost_cpp1.74.0mpiopenmpi + - build_osx_64_mpimpich + - build_osx_64_mpiopenmpi diff --git a/.circleci/fast_finish_ci_pr_build.sh b/.circleci/fast_finish_ci_pr_build.sh index 4c0b560..756fd8e 100755 --- a/.circleci/fast_finish_ci_pr_build.sh +++ b/.circleci/fast_finish_ci_pr_build.sh @@ -1,4 +1,4 @@ #!/bin/bash -curl https://raw.githubusercontent.com/conda-forge/conda-forge-ci-setup-feedstock/master/recipe/conda_forge_ci_setup/ff_ci_pr_build.py | \ +curl https://raw.githubusercontent.com/conda-forge/conda-forge-ci-setup-feedstock/main/recipe/conda_forge_ci_setup/ff_ci_pr_build.py | \ python - -v --ci "circle" "${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}" "${CIRCLE_BUILD_NUM}" "${CIRCLE_PR_NUMBER}" diff --git a/.gitattributes b/.gitattributes index 9060b27..85ccb8f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9,6 +9,7 @@ bld.bat text eol=crlf # github helper pieces to make some files not show up in diffs automatically .azure-pipelines/* linguist-generated=true .circleci/* linguist-generated=true +.ci_support/README linguist-generated=true .drone/* linguist-generated=true .drone.yml linguist-generated=true .github/* linguist-generated=true @@ -18,8 +19,10 @@ bld.bat text eol=crlf .gitignore linguist-generated=true .travis.yml linguist-generated=true .scripts/* linguist-generated=true -LICENSE.txt linguist-generated=true -README.md linguist-generated=true +.woodpecker.yml 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 +pixi.toml linguist-generated=true shippable.yml linguist-generated=true diff --git a/.gitignore b/.gitignore index c89ecb7..47b5408 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,29 @@ +# User content belongs under recipe/. +# Feedstock configuration goes in `conda-forge.yml` +# Everything else is managed by the conda-smithy rerender process. +# Please do not modify + +# Ignore all files and folders in root +* +!/conda-forge.yml + +# Don't ignore any files/folders if the parent folder is 'un-ignored' +# This also avoids warnings when adding an already-checked file with an ignored parent. +!/**/ +# Don't ignore any files/folders recursively in the following folders +!/recipe/** +!/.ci_support/** + +# Since we ignore files/folders recursively, any folders inside +# build_artifacts gets ignored which trips some build systems. +# To avoid that we 'un-ignore' all files/folders recursively +# and only ignore the root build_artifacts folder. +!/build_artifacts/** +/build_artifacts + *.pyc -build_artifacts +# Rattler-build's artifacts are in `output` when not specifying anything. +/output +# Pixi's configuration +.pixi diff --git a/.scripts/build_steps.sh b/.scripts/build_steps.sh index eede105..fbcb0e2 100755 --- a/.scripts/build_steps.sh +++ b/.scripts/build_steps.sh @@ -5,9 +5,18 @@ # changes to this script, consider a proposal to conda-smithy so that other feedstocks can also # benefit from the improvement. +# -*- mode: jinja-shell -*- + set -xeuo pipefail -export PYTHONUNBUFFERED=1 export FEEDSTOCK_ROOT="${FEEDSTOCK_ROOT:-/home/conda/feedstock_root}" +source ${FEEDSTOCK_ROOT}/.scripts/logging_utils.sh + + +( endgroup "Start Docker" ) 2> /dev/null + +( startgroup "Configuring conda" ) 2> /dev/null + +export PYTHONUNBUFFERED=1 export RECIPE_ROOT="${RECIPE_ROOT:-/home/conda/recipe_root}" export CI_SUPPORT="${FEEDSTOCK_ROOT}/.ci_support" export CONFIG_FILE="${CI_SUPPORT}/${CONFIG}.yaml" @@ -15,35 +24,86 @@ export CONFIG_FILE="${CI_SUPPORT}/${CONFIG}.yaml" cat >~/.condarc < /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 # set up the condarc setup_conda_rc "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" source run_conda_forge_build_setup +( +# Due to https://bugzilla.redhat.com/show_bug.cgi?id=1537564 old versions of rpm +# are drastically slowed down when the number of file descriptors is very high. +# This can be visible during a `yum install` step of a feedstock build. +# => Set a lower limit in a subshell for the `yum install`s only. +ulimit -n 1024 # Install the yum requirements defined canonically in the # "recipe/yum_requirements.txt" file. After updating that file, # run "conda smithy rerender" and this line will be updated # automatically. /usr/bin/sudo -n yum install -y openssh-clients - +) # make the build number clobber make_build_number "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" -conda build "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ - --suppress-variables ${EXTRA_CB_OPTIONS:-} \ - --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" -validate_recipe_outputs "${FEEDSTOCK_NAME}" -if [[ "${UPLOAD_PACKAGES}" != "False" ]]; then - upload_package --validate --feedstock-name="${FEEDSTOCK_NAME}" "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" + +( endgroup "Configuring conda" ) 2> /dev/null + +if [[ -f "${FEEDSTOCK_ROOT}/LICENSE.txt" ]]; then + cp "${FEEDSTOCK_ROOT}/LICENSE.txt" "${RECIPE_ROOT}/recipe-scripts-license.txt" fi -touch "${FEEDSTOCK_ROOT}/build_artifacts/conda-forge-build-done-${CONFIG}" \ No newline at end of file +if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then + if [[ "x${BUILD_OUTPUT_ID:-}" != "x" ]]; then + EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --output-id ${BUILD_OUTPUT_ID}" + fi + conda debug "${RECIPE_ROOT}" -m "${CI_SUPPORT}/${CONFIG}.yaml" \ + ${EXTRA_CB_OPTIONS:-} \ + --clobber-file "${CI_SUPPORT}/clobber_${CONFIG}.yaml" + + # Drop into an interactive shell + /bin/bash +else + conda-build "${RECIPE_ROOT}" -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_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}" + + ( endgroup "Validating outputs" ) 2> /dev/null + + ( startgroup "Uploading packages" ) 2> /dev/null + + if [[ "${UPLOAD_PACKAGES}" != "False" ]] && [[ "${IS_PR_BUILD}" == "False" ]]; then + upload_package --validate --feedstock-name="${FEEDSTOCK_NAME}" "${FEEDSTOCK_ROOT}" "${RECIPE_ROOT}" "${CONFIG_FILE}" + fi + + ( endgroup "Uploading packages" ) 2> /dev/null +fi + +( startgroup "Final checks" ) 2> /dev/null + +touch "${FEEDSTOCK_ROOT}/build_artifacts/conda-forge-build-done-${CONFIG}" diff --git a/.scripts/logging_utils.sh b/.scripts/logging_utils.sh new file mode 100644 index 0000000..aff009f --- /dev/null +++ b/.scripts/logging_utils.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# Provide a unified interface for the different logging +# utilities CI providers offer. If unavailable, provide +# a compatible fallback (e.g. bare `echo xxxxxx`). + +function startgroup { + # Start a foldable group of log lines + # Pass a single argument, quoted + case ${CI:-} in + azure ) + echo "##[group]$1";; + travis ) + echo "$1" + echo -en 'travis_fold:start:'"${1// /}"'\r';; + github_actions ) + echo "::group::$1";; + * ) + echo "$1";; + esac +} 2> /dev/null + +function endgroup { + # End a foldable group of log lines + # Pass a single argument, quoted + + case ${CI:-} in + azure ) + echo "##[endgroup]";; + travis ) + echo -en 'travis_fold:end:'"${1// /}"'\r';; + github_actions ) + echo "::endgroup::";; + esac +} 2> /dev/null diff --git a/.scripts/run_docker_build.sh b/.scripts/run_docker_build.sh index e4d5bab..b63b5a0 100755 --- a/.scripts/run_docker_build.sh +++ b/.scripts/run_docker_build.sh @@ -5,18 +5,28 @@ # changes to this script, consider a proposal to conda-smithy so that other feedstocks can also # benefit from the improvement. +source .scripts/logging_utils.sh + +( startgroup "Configure Docker" ) 2> /dev/null + set -xeo pipefail THISDIR="$( cd "$( dirname "$0" )" >/dev/null && pwd )" -PROVIDER_DIR="$(basename $THISDIR)" +PROVIDER_DIR="$(basename "$THISDIR")" -FEEDSTOCK_ROOT=$(cd "$(dirname "$0")/.."; pwd;) +FEEDSTOCK_ROOT="$( cd "$( dirname "$0" )/.." >/dev/null && pwd )" RECIPE_ROOT="${FEEDSTOCK_ROOT}/recipe" if [ -z ${FEEDSTOCK_NAME} ]; then export FEEDSTOCK_NAME=$(basename ${FEEDSTOCK_ROOT}) fi +if [[ "${sha:-}" == "" ]]; then + pushd "${FEEDSTOCK_ROOT}" + sha=$(git rev-parse HEAD) + popd +fi + docker info # In order for the conda-build process in the container to write to the mounted @@ -45,10 +55,14 @@ fi if [ -z "${DOCKER_IMAGE}" ]; then SHYAML_INSTALLED="$(shyaml -h || echo NO)" if [ "${SHYAML_INSTALLED}" == "NO" ]; then - echo "WARNING: DOCKER_IMAGE variable not set and shyaml not installed. Falling back to condaforge/linux-anvil-comp7" - DOCKER_IMAGE="condaforge/linux-anvil-comp7" + echo "WARNING: DOCKER_IMAGE variable not set and shyaml not installed. Trying to parse with coreutils" + DOCKER_IMAGE=$(cat .ci_support/${CONFIG}.yaml | grep '^docker_image:$' -A 1 | tail -n 1 | cut -b 3-) + if [ "${DOCKER_IMAGE}" = "" ]; then + echo "No docker_image entry found in ${CONFIG}. Falling back to quay.io/condaforge/linux-anvil-comp7" + DOCKER_IMAGE="quay.io/condaforge/linux-anvil-comp7" + fi else - DOCKER_IMAGE="$(cat "${FEEDSTOCK_ROOT}/.ci_support/${CONFIG}.yaml" | shyaml get-value docker_image.0 condaforge/linux-anvil-comp7 )" + DOCKER_IMAGE="$(cat "${FEEDSTOCK_ROOT}/.ci_support/${CONFIG}.yaml" | shyaml get-value docker_image.0 quay.io/condaforge/linux-anvil-comp7 )" fi fi @@ -62,24 +76,39 @@ if [ -z "${CI}" ]; then DOCKER_RUN_ARGS="-it ${DOCKER_RUN_ARGS}" fi +( endgroup "Configure Docker" ) 2> /dev/null + +( startgroup "Start Docker" ) 2> /dev/null + export UPLOAD_PACKAGES="${UPLOAD_PACKAGES:-True}" +export IS_PR_BUILD="${IS_PR_BUILD:-False}" +docker pull "${DOCKER_IMAGE}" docker run ${DOCKER_RUN_ARGS} \ - -v "${RECIPE_ROOT}":/home/conda/recipe_root:rw,z \ - -v "${FEEDSTOCK_ROOT}":/home/conda/feedstock_root:rw,z \ + -v "${RECIPE_ROOT}":/home/conda/recipe_root:rw,z,delegated \ + -v "${FEEDSTOCK_ROOT}":/home/conda/feedstock_root:rw,z,delegated \ -e CONFIG \ -e HOST_USER_ID \ -e UPLOAD_PACKAGES \ + -e IS_PR_BUILD \ -e GIT_BRANCH \ -e UPLOAD_ON_BRANCH \ -e CI \ -e FEEDSTOCK_NAME \ -e CPU_COUNT \ + -e BUILD_WITH_CONDA_DEBUG \ + -e BUILD_OUTPUT_ID \ + -e flow_run_id \ + -e remote_url \ + -e sha \ -e BINSTAR_TOKEN \ -e FEEDSTOCK_TOKEN \ -e STAGING_BINSTAR_TOKEN \ - $DOCKER_IMAGE \ + "${DOCKER_IMAGE}" \ bash \ - /home/conda/feedstock_root/${PROVIDER_DIR}/build_steps.sh + "/home/conda/feedstock_root/${PROVIDER_DIR}/build_steps.sh" # verify that the end of the script was reached -test -f "$DONE_CANARY" \ No newline at end of file +test -f "$DONE_CANARY" + +# This closes the last group opened in `build_steps.sh` +( endgroup "Final checks" ) 2> /dev/null diff --git a/.scripts/run_osx_build.sh b/.scripts/run_osx_build.sh index 982eae9..e6b374e 100755 --- a/.scripts/run_osx_build.sh +++ b/.scripts/run_osx_build.sh @@ -1,57 +1,116 @@ #!/usr/bin/env bash -set -x +# -*- mode: jinja-shell -*- -echo -e "\n\nInstalling a fresh version of Miniforge." -if [[ ${CI} == "travis" ]]; then - echo -en 'travis_fold:start:install_miniforge\\r' -fi -MINIFORGE_URL="https://github.com/conda-forge/miniforge/releases/latest/download" -MINIFORGE_FILE="Miniforge3-MacOSX-x86_64.sh" -curl -L -O "${MINIFORGE_URL}/${MINIFORGE_FILE}" -bash $MINIFORGE_FILE -b -if [[ ${CI} == "travis" ]]; then - echo -en 'travis_fold:end:install_miniforge\\r' -fi +source .scripts/logging_utils.sh -echo -e "\n\nConfiguring conda." -if [[ ${CI} == "travis" ]]; then - echo -en 'travis_fold:start:configure_conda\\r' -fi +set -xe -source ${HOME}/miniforge3/etc/profile.d/conda.sh +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 +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 + -echo -e "\n\nInstalling conda-forge-ci-setup=3 and conda-build." -conda install -n base --quiet --yes conda-forge-ci-setup=3 conda-build pip echo -e "\n\nSetting up the condarc and mangling the compiler." setup_conda_rc ./ ./recipe ./.ci_support/${CONFIG}.yaml -mangle_compiler ./ ./recipe .ci_support/${CONFIG}.yaml -echo -e "\n\nMangling homebrew in the CI to avoid conflicts." -/usr/bin/sudo mangle_homebrew -/usr/bin/sudo -k +if [[ "${CI:-}" != "" ]]; then + mangle_compiler ./ ./recipe .ci_support/${CONFIG}.yaml +fi + +if [[ "${CI:-}" != "" ]]; then + echo -e "\n\nMangling homebrew in the CI to avoid conflicts." + /usr/bin/sudo mangle_homebrew + /usr/bin/sudo -k +else + echo -e "\n\nNot mangling homebrew as we are not running in CI" +fi + +if [[ "${sha:-}" == "" ]]; then + sha=$(git rev-parse HEAD) +fi echo -e "\n\nRunning the build setup script." source run_conda_forge_build_setup -if [[ ${CI} == "travis" ]]; then - echo -en 'travis_fold:end:configure_conda\\r' -fi -set -e +( endgroup "Configuring conda" ) 2> /dev/null -echo -e "\n\nMaking the build clobber file and running the build." +echo -e "\n\nMaking the build clobber file" make_build_number ./ ./recipe ./.ci_support/${CONFIG}.yaml -conda build ./recipe -m ./.ci_support/${CONFIG}.yaml --suppress-variables --clobber-file ./.ci_support/clobber_${CONFIG}.yaml ${EXTRA_CB_OPTIONS:-} -validate_recipe_outputs "${FEEDSTOCK_NAME}" +if [[ -f LICENSE.txt ]]; then + cp LICENSE.txt "recipe/recipe-scripts-license.txt" +fi + +if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then + if [[ "x${BUILD_OUTPUT_ID:-}" != "x" ]]; then + EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --output-id ${BUILD_OUTPUT_ID}" + fi + conda debug ./recipe -m ./.ci_support/${CONFIG}.yaml \ + ${EXTRA_CB_OPTIONS:-} \ + --clobber-file ./.ci_support/clobber_${CONFIG}.yaml + + # Drop into an interactive shell + /bin/bash +else + + 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" -if [[ "${UPLOAD_PACKAGES}" != "False" ]]; then - echo -e "\n\nUploading the packages." - upload_package --validate --feedstock-name="${FEEDSTOCK_NAME}" ./ ./recipe ./.ci_support/${CONFIG}.yaml -fi \ No newline at end of file + ( endgroup "Inspecting artifacts" ) 2> /dev/null + ( startgroup "Validating outputs" ) 2> /dev/null + + validate_recipe_outputs "${FEEDSTOCK_NAME}" + + ( endgroup "Validating outputs" ) 2> /dev/null + + ( startgroup "Uploading packages" ) 2> /dev/null + + if [[ "${UPLOAD_PACKAGES}" != "False" ]] && [[ "${IS_PR_BUILD}" == "False" ]]; then + upload_package --validate --feedstock-name="${FEEDSTOCK_NAME}" ./ ./recipe ./.ci_support/${CONFIG}.yaml + fi + + ( endgroup "Uploading packages" ) 2> /dev/null +fi diff --git a/LICENSE.txt b/LICENSE.txt index 5f30279..2ec51d7 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,13 +1,27 @@ -BSD 3-clause license -Copyright (c) 2015-2020, conda-forge contributors +BSD-3-Clause license +Copyright (c) 2015-2022, conda-forge contributors All rights reserved. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff --git a/README.md b/README.md index 170f516..9264f20 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,16 @@ -About trilinos -============== +About trilinos-feedstock +======================== + +Feedstock license: [BSD-3-Clause](https://github.com/conda-forge/trilinos-feedstock/blob/main/LICENSE.txt) Home: https://trilinos.org Package license: BSD-3-Clause -Feedstock license: BSD-3-Clause - Summary: Sandia's suite of HPC solvers and enabling technologies +Development: https://github.com/trilinos/Trilinos + Fast, compiled object-oriented algorithms and enabling technologies that support the solution of large-scale, complex multi-physics engineering and scientific problems. Current build status @@ -19,7 +21,7 @@ Current build status CircleCI - OSX + OSX @@ -29,66 +31,38 @@ Current build status
- - + + - + - + - + - + - - - - - - - - - - - - @@ -113,25 +87,52 @@ Installing `trilinos` from the `conda-forge` channel can be achieved by adding ` ``` conda config --add channels conda-forge +conda config --set channel_priority strict ``` -Once the `conda-forge` channel has been enabled, `trilinos` can be installed with: +Once the `conda-forge` channel has been enabled, `trilinos` can be installed with `conda`: ``` conda install trilinos ``` -It is possible to list all of the versions of `trilinos` available on your platform with: +or with `mamba`: + +``` +mamba install trilinos +``` + +It is possible to list all of the versions of `trilinos` available on your platform with `conda`: ``` conda search trilinos --channel conda-forge ``` +or with `mamba`: + +``` +mamba search trilinos --channel conda-forge +``` + +Alternatively, `mamba repoquery` may provide more information: + +``` +# Search all versions available on your platform: +mamba repoquery search trilinos --channel conda-forge + +# List packages depending on `trilinos`: +mamba repoquery whoneeds trilinos --channel conda-forge + +# List dependencies of `trilinos`: +mamba repoquery depends trilinos --channel conda-forge +``` + About conda-forge ================= -[![Powered by NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](http://numfocus.org) +[![Powered by +NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://numfocus.org) conda-forge is a community-led conda channel of installable packages. In order to provide high-quality builds, the process has been automated into the @@ -141,10 +142,12 @@ for each of the installable packages. Such a repository is known as a *feedstock A feedstock is made up of a conda recipe (the instructions on what and how to build the package) and the necessary configurations for automatic building using freely available continuous integration services. Thanks to the awesome service provided by -[CircleCI](https://circleci.com/), [AppVeyor](https://www.appveyor.com/) -and [TravisCI](https://travis-ci.com/) it is possible to build and upload installable -packages to the [conda-forge](https://anaconda.org/conda-forge) -[Anaconda-Cloud](https://anaconda.org/) channel for Linux, Windows and OSX respectively. +[Azure](https://azure.microsoft.com/en-us/services/devops/), [GitHub](https://github.com/), +[CircleCI](https://circleci.com/), [AppVeyor](https://www.appveyor.com/), +[Drone](https://cloud.drone.io/welcome), and [TravisCI](https://travis-ci.com/) +it is possible to build and upload installable packages to the +[conda-forge](https://anaconda.org/conda-forge) [anaconda.org](https://anaconda.org/) +channel for Linux, Windows and OSX respectively. To manage the continuous integration and simplify feedstock maintenance [conda-smithy](https://github.com/conda-forge/conda-smithy) has been developed. @@ -183,9 +186,9 @@ build distinct package versions. In order to produce a uniquely identifiable distribution: * If the version of a package **is not** being increased, please add or increase - the [``build/number``](https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html#build-number-and-string). + the [``build/number``](https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#build-number-and-string). * If the version of a package **is** being increased, please remember to return - the [``build/number``](https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html#build-number-and-string) + the [``build/number``](https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#build-number-and-string) back to 0. Feedstock Maintainers diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ad85a2c..d309e84 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -2,5 +2,30 @@ # update the conda-forge.yml and/or the recipe/meta.yaml. # -*- mode: yaml -*- -jobs: - - template: ./.azure-pipelines/azure-pipelines-linux.yml \ No newline at end of file +stages: +- stage: Check + jobs: + - job: Skip + pool: + vmImage: 'ubuntu-22.04' + variables: + DECODE_PERCENTS: 'false' + RET: 'true' + steps: + - checkout: self + fetchDepth: '2' + - bash: | + git_log=`git log --max-count=1 --skip=1 --pretty=format:"%B" | tr "\n" " "` + echo "##vso[task.setvariable variable=log]$git_log" + displayName: Obtain commit message + - bash: echo "##vso[task.setvariable variable=RET]false" + condition: and(eq(variables['Build.Reason'], 'PullRequest'), or(contains(variables.log, '[skip azp]'), contains(variables.log, '[azp skip]'), contains(variables.log, '[skip ci]'), contains(variables.log, '[ci skip]'))) + displayName: Skip build? + - bash: echo "##vso[task.setvariable variable=start_main;isOutput=true]$RET" + name: result + displayName: Export result +- stage: Build + condition: and(succeeded(), eq(dependencies.Check.outputs['Skip.result.start_main'], 'true')) + dependsOn: Check + jobs: + - template: ./.azure-pipelines/azure-pipelines-linux.yml \ No newline at end of file diff --git a/build-locally.py b/build-locally.py index 8f7ecca..9dfe440 100755 --- a/build-locally.py +++ b/build-locally.py @@ -1,17 +1,38 @@ -#!/usr/bin/env python3 +#!/bin/sh +"""exec" "python3" "$0" "$@" #""" # fmt: off # fmt: on # # This file has been generated by conda-smithy in order to build the recipe # locally. # -import os +# The line above this comment is a bash / sh / zsh guard +# to stop people from running it with the wrong interpreter import glob +import os +import platform import subprocess +import sys from argparse import ArgumentParser def setup_environment(ns): os.environ["CONFIG"] = ns.config os.environ["UPLOAD_PACKAGES"] = "False" + os.environ["IS_PR_BUILD"] = "True" + if ns.debug: + os.environ["BUILD_WITH_CONDA_DEBUG"] = "1" + if ns.output_id: + os.environ["BUILD_OUTPUT_ID"] = ns.output_id + if "MINIFORGE_HOME" not in os.environ: + os.environ["MINIFORGE_HOME"] = os.path.join( + os.path.dirname(__file__), "miniforge3" + ) + + # The default cache location might not be writable using docker on macOS. + if ns.config.startswith("linux") and platform.system() == "Darwin": + os.environ["CONDA_FORGE_DOCKER_RUN_ARGS"] = ( + os.environ.get("CONDA_FORGE_DOCKER_RUN_ARGS", "") + + " -e RATTLER_CACHE_DIR=/tmp/rattler_cache" + ) def run_docker_build(ns): @@ -19,10 +40,24 @@ def run_docker_build(ns): subprocess.check_call([script]) +def run_osx_build(ns): + script = ".scripts/run_osx_build.sh" + subprocess.check_call([script]) + + +def run_win_build(ns): + script = ".scripts/run_win_build.bat" + subprocess.check_call(["cmd", "/D", "/Q", "/C", f"CALL {script}"]) + + def verify_config(ns): + choices_filter = ns.filter or "*" valid_configs = { - os.path.basename(f)[:-5] for f in glob.glob(".ci_support/*.yaml") + os.path.basename(f)[:-5] + for f in glob.glob(f".ci_support/{choices_filter}.yaml") } + if choices_filter != "*": + print(f"filtering for '{choices_filter}.yaml' configs") print(f"valid configs are {valid_configs}") if ns.config in valid_configs: print("Using " + ns.config + " configuration") @@ -35,28 +70,61 @@ def verify_config(ns): selections = list(enumerate(sorted(valid_configs), 1)) for i, c in selections: print(f"{i}. {c}") - s = input("\n> ") + try: + s = input("\n> ") + except KeyboardInterrupt: + print("\nno option selected, bye!", file=sys.stderr) + sys.exit(1) idx = int(s) - 1 ns.config = selections[idx][1] print(f"selected {ns.config}") else: raise ValueError("config " + ns.config + " is not valid") - # Remove the following, as implemented - if not ns.config.startswith("linux"): - raise ValueError( - f"only Linux configs currently supported, got {ns.config}" + if ( + ns.config.startswith("osx") + and platform.system() == "Darwin" + and not os.environ.get("OSX_SDK_DIR") + ): + raise RuntimeError( + "Need OSX_SDK_DIR env variable set. Run 'export OSX_SDK_DIR=$PWD/SDKs' " + "to download the SDK automatically to '$PWD/SDKs/MacOSX.sdk'. " + "Note: OSX_SDK_DIR must be set to an absolute path. " + "Setting this variable implies agreement to the licensing terms of the SDK by Apple." ) def main(args=None): p = ArgumentParser("build-locally") p.add_argument("config", default=None, nargs="?") + p.add_argument( + "--filter", + default=None, + help="Glob string to filter which build choices are presented in interactive mode.", + ) + p.add_argument( + "--debug", + action="store_true", + help="Setup debug environment using `conda debug`", + ) + p.add_argument("--output-id", help="If running debug, specify the output to setup.") ns = p.parse_args(args=args) verify_config(ns) setup_environment(ns) - run_docker_build(ns) + try: + if ns.config.startswith("linux") or ( + ns.config.startswith("osx") and platform.system() == "Linux" + ): + run_docker_build(ns) + elif ns.config.startswith("osx"): + run_osx_build(ns) + elif ns.config.startswith("win"): + run_win_build(ns) + finally: + recipe_license_file = os.path.join("recipe", "recipe-scripts-license.txt") + if os.path.exists(recipe_license_file): + os.remove(recipe_license_file) if __name__ == "__main__": diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 34393e2..3dd1440 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -57,4 +57,5 @@ about: extra: recipe-maintainers: + - rfiorella - pyt-viper From 5d6458e8fac11702ae178cb4e885c806eccc9e4d Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Fri, 25 Jul 2025 18:37:22 -0600 Subject: [PATCH 02/16] switch to azure --- conda-forge.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conda-forge.yml b/conda-forge.yml index a6941d3..161be59 100644 --- a/conda-forge.yml +++ b/conda-forge.yml @@ -1,4 +1,4 @@ -provider: {osx: circle, win: azure} +provider: {osx: azure, win: azure} conda_forge_output_validation: true github: branch_name: main From 0fc476fb048b3e6b305f79cc64451fd931ae87a2 Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Fri, 25 Jul 2025 18:40:34 -0600 Subject: [PATCH 03/16] address linter concerns --- recipe/meta.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 3dd1440..2b89d86 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -17,11 +17,12 @@ requirements: - cmake >=3.10.0 - {{ compiler('c') }} - {{ compiler('cxx') }} + - {{ stdlib("c") }} host: - libblas - liblapack - {{ mpi }} # [unix] - - boost-cpp + - libboost-devel - scikit-umfpack - netcdf-cxx4 - libmatio @@ -29,7 +30,7 @@ requirements: - hdf5 * mpi_{{ mpi }}_* run: - {{ mpi }} # [unix] - - boost-cpp + - libboost-devel - scikit-umfpack run_constrained: - pytrilinos ==999999999 From d474c5c1764b087462417c6a8879110f4bd9b43c Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Fri, 25 Jul 2025 18:43:06 -0600 Subject: [PATCH 04/16] MNT: Re-rendered with conda-build 25.5.0, conda-smithy 3.51.1, and conda-forge-pinning 2025.07.25.22.53.01 --- .azure-pipelines/azure-pipelines-osx.yml | 40 +++++++++++++++ .ci_support/linux_64_mpimpich.yaml | 6 +++ .ci_support/linux_64_mpiopenmpi.yaml | 6 +++ .ci_support/osx_64_mpimpich.yaml | 6 +++ .ci_support/osx_64_mpiopenmpi.yaml | 6 +++ .circleci/checkout_merge_commit.sh | 27 ---------- .circleci/config.yml | 65 ++++-------------------- .circleci/fast_finish_ci_pr_build.sh | 4 -- .github/CODEOWNERS | 2 +- README.md | 10 +--- azure-pipelines.yml | 3 +- recipe/recipe-scripts-license.txt | 27 ++++++++++ 12 files changed, 106 insertions(+), 96 deletions(-) create mode 100755 .azure-pipelines/azure-pipelines-osx.yml delete mode 100755 .circleci/checkout_merge_commit.sh delete mode 100755 .circleci/fast_finish_ci_pr_build.sh create mode 100644 recipe/recipe-scripts-license.txt diff --git a/.azure-pipelines/azure-pipelines-osx.yml b/.azure-pipelines/azure-pipelines-osx.yml new file mode 100755 index 0000000..1f6d3b0 --- /dev/null +++ b/.azure-pipelines/azure-pipelines-osx.yml @@ -0,0 +1,40 @@ +# This file was generated automatically from conda-smithy. To update this configuration, +# update the conda-forge.yml and/or the recipe/meta.yaml. +# -*- mode: yaml -*- + +jobs: +- job: osx + pool: + vmImage: macOS-13 + strategy: + matrix: + osx_64_mpimpich: + CONFIG: osx_64_mpimpich + UPLOAD_PACKAGES: 'True' + osx_64_mpiopenmpi: + CONFIG: osx_64_mpiopenmpi + UPLOAD_PACKAGES: 'True' + timeoutInMinutes: 360 + variables: {} + + steps: + # TODO: Fast finish on azure pipelines? + - script: | + export CI=azure + export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt) + export remote_url=$(Build.Repository.Uri) + export sha=$(Build.SourceVersion) + export OSX_FORCE_SDK_DOWNLOAD="1" + export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME + export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME}) + if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then + export IS_PR_BUILD="True" + else + export IS_PR_BUILD="False" + fi + ./.scripts/run_osx_build.sh + displayName: Run OSX build + env: + BINSTAR_TOKEN: $(BINSTAR_TOKEN) + FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) + STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) diff --git a/.ci_support/linux_64_mpimpich.yaml b/.ci_support/linux_64_mpimpich.yaml index 368dbea..b7926d4 100644 --- a/.ci_support/linux_64_mpimpich.yaml +++ b/.ci_support/linux_64_mpimpich.yaml @@ -2,6 +2,10 @@ c_compiler: - gcc c_compiler_version: - '14' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_name: - conda channel_sources: @@ -16,6 +20,8 @@ docker_image: - quay.io/condaforge/linux-anvil-x86_64:alma9 libblas: - 3.9.* *netlib +libboost_devel: +- '1.86' liblapack: - 3.9.* *netlib libmatio: diff --git a/.ci_support/linux_64_mpiopenmpi.yaml b/.ci_support/linux_64_mpiopenmpi.yaml index e1e1b0c..0ecbce1 100644 --- a/.ci_support/linux_64_mpiopenmpi.yaml +++ b/.ci_support/linux_64_mpiopenmpi.yaml @@ -2,6 +2,10 @@ c_compiler: - gcc c_compiler_version: - '14' +c_stdlib: +- sysroot +c_stdlib_version: +- '2.17' cdt_name: - conda channel_sources: @@ -16,6 +20,8 @@ docker_image: - quay.io/condaforge/linux-anvil-x86_64:alma9 libblas: - 3.9.* *netlib +libboost_devel: +- '1.86' liblapack: - 3.9.* *netlib libmatio: diff --git a/.ci_support/osx_64_mpimpich.yaml b/.ci_support/osx_64_mpimpich.yaml index 595e081..0087fe0 100644 --- a/.ci_support/osx_64_mpimpich.yaml +++ b/.ci_support/osx_64_mpimpich.yaml @@ -6,6 +6,10 @@ c_compiler: - clang c_compiler_version: - '19' +c_stdlib: +- macosx_deployment_target +c_stdlib_version: +- '10.13' channel_sources: - conda-forge channel_targets: @@ -16,6 +20,8 @@ cxx_compiler_version: - '19' libblas: - 3.9.* *netlib +libboost_devel: +- '1.86' liblapack: - 3.9.* *netlib libmatio: diff --git a/.ci_support/osx_64_mpiopenmpi.yaml b/.ci_support/osx_64_mpiopenmpi.yaml index c8de53b..2ccf9ec 100644 --- a/.ci_support/osx_64_mpiopenmpi.yaml +++ b/.ci_support/osx_64_mpiopenmpi.yaml @@ -6,6 +6,10 @@ c_compiler: - clang c_compiler_version: - '19' +c_stdlib: +- macosx_deployment_target +c_stdlib_version: +- '10.13' channel_sources: - conda-forge channel_targets: @@ -16,6 +20,8 @@ cxx_compiler_version: - '19' libblas: - 3.9.* *netlib +libboost_devel: +- '1.86' liblapack: - 3.9.* *netlib libmatio: diff --git a/.circleci/checkout_merge_commit.sh b/.circleci/checkout_merge_commit.sh deleted file mode 100755 index 9528e4b..0000000 --- a/.circleci/checkout_merge_commit.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - - -# Update PR refs for testing. -if [[ -n "${CIRCLE_PR_NUMBER}" ]] -then - FETCH_REFS="${FETCH_REFS} +refs/pull/${CIRCLE_PR_NUMBER}/head:pr/${CIRCLE_PR_NUMBER}/head" - FETCH_REFS="${FETCH_REFS} +refs/pull/${CIRCLE_PR_NUMBER}/merge:pr/${CIRCLE_PR_NUMBER}/merge" -fi - -# Retrieve the refs. -if [[ -n "${CIRCLE_PR_NUMBER}" ]] -then - git fetch -u origin ${FETCH_REFS} -fi - -# Checkout the PR merge ref. -if [[ -n "${CIRCLE_PR_NUMBER}" ]] -then - git checkout -qf "pr/${CIRCLE_PR_NUMBER}/merge" -fi - -# Check for merge conflicts. -if [[ -n "${CIRCLE_PR_NUMBER}" ]] -then - git branch --merged | grep "pr/${CIRCLE_PR_NUMBER}/head" > /dev/null -fi diff --git a/.circleci/config.yml b/.circleci/config.yml index 9bbbe45..8b4ef2f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,66 +5,21 @@ version: 2 jobs: - build_osx_64_mpimpich: + build: working_directory: ~/test - macos: - xcode: "13.0.0" - environment: - - CONFIG: "osx_64_mpimpich" - - UPLOAD_PACKAGES: "True" + machine: + image: ubuntu-2004:current steps: - - checkout - run: - name: Fast finish outdated PRs and merge PRs - command: | - ./.circleci/fast_finish_ci_pr_build.sh - ./.circleci/checkout_merge_commit.sh - - run: - # Run, test and (if we have a BINSTAR_TOKEN) upload the distributions. - command: | - export CI=circle - export flow_run_id="circle_$CIRCLE_WORKFLOW_ID" - export remote_url="$CIRCLE_REPOSITORY_URL" - export sha="$CIRCLE_SHA1" - export FEEDSTOCK_NAME=$(basename ${CIRCLE_PROJECT_REPONAME}) - if [[ "${CIRCLE_PR_NUMBER:-}" == "" ]]; then - export IS_PR_BUILD="False" - else - export IS_PR_BUILD="True" - fi - ./.scripts/run_osx_build.sh - build_osx_64_mpiopenmpi: - working_directory: ~/test - macos: - xcode: "13.0.0" - environment: - - CONFIG: "osx_64_mpiopenmpi" - - UPLOAD_PACKAGES: "True" - steps: - - checkout - - run: - name: Fast finish outdated PRs and merge PRs - command: | - ./.circleci/fast_finish_ci_pr_build.sh - ./.circleci/checkout_merge_commit.sh - - run: - # Run, test and (if we have a BINSTAR_TOKEN) upload the distributions. - command: | - export CI=circle - export flow_run_id="circle_$CIRCLE_WORKFLOW_ID" - export remote_url="$CIRCLE_REPOSITORY_URL" - export sha="$CIRCLE_SHA1" - export FEEDSTOCK_NAME=$(basename ${CIRCLE_PROJECT_REPONAME}) - if [[ "${CIRCLE_PR_NUMBER:-}" == "" ]]; then - export IS_PR_BUILD="False" - else - export IS_PR_BUILD="True" - fi - ./.scripts/run_osx_build.sh + # The Circle-CI build should not be active, but if this is not true for some reason, do a fast finish. + command: exit 0 workflows: version: 2 build_and_test: jobs: - - build_osx_64_mpimpich - - build_osx_64_mpiopenmpi + - build: + filters: + branches: + ignore: + - /.*/ diff --git a/.circleci/fast_finish_ci_pr_build.sh b/.circleci/fast_finish_ci_pr_build.sh deleted file mode 100755 index 756fd8e..0000000 --- a/.circleci/fast_finish_ci_pr_build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -curl https://raw.githubusercontent.com/conda-forge/conda-forge-ci-setup-feedstock/main/recipe/conda_forge_ci_setup/ff_ci_pr_build.py | \ - python - -v --ci "circle" "${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}" "${CIRCLE_BUILD_NUM}" "${CIRCLE_PR_NUMBER}" diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4fb6d35..35b110d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @pyt-viper \ No newline at end of file +* @pyt-viper @rfiorella \ No newline at end of file diff --git a/README.md b/README.md index 9264f20..db6a37a 100644 --- a/README.md +++ b/README.md @@ -17,14 +17,7 @@ Current build status ==================== -
VariantStatus
linux_64_boost_cpp1.72.0mpimpichlinux_64_mpimpich - - variant + + variant
linux_64_boost_cpp1.72.0mpiopenmpilinux_64_mpiopenmpi - - variant + + variant
linux_64_boost_cpp1.74.0mpimpichosx_64_mpimpich - - variant + + variant
linux_64_boost_cpp1.74.0mpiopenmpiosx_64_mpiopenmpi - - variant - -
osx_64_boost_cpp1.72.0mpimpich - - variant - -
osx_64_boost_cpp1.72.0mpiopenmpi - - variant - -
osx_64_boost_cpp1.74.0mpimpich - - variant - -
osx_64_boost_cpp1.74.0mpiopenmpi - - variant + + variant
- - - +
CircleCI - - OSX - -
@@ -195,4 +188,5 @@ Feedstock Maintainers ===================== * [@pyt-viper](https://github.com/pyt-viper/) +* [@rfiorella](https://github.com/rfiorella/) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d309e84..013bdc1 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -28,4 +28,5 @@ stages: condition: and(succeeded(), eq(dependencies.Check.outputs['Skip.result.start_main'], 'true')) dependsOn: Check jobs: - - template: ./.azure-pipelines/azure-pipelines-linux.yml \ No newline at end of file + - template: ./.azure-pipelines/azure-pipelines-linux.yml + - template: ./.azure-pipelines/azure-pipelines-osx.yml \ No newline at end of file diff --git a/recipe/recipe-scripts-license.txt b/recipe/recipe-scripts-license.txt new file mode 100644 index 0000000..2ec51d7 --- /dev/null +++ b/recipe/recipe-scripts-license.txt @@ -0,0 +1,27 @@ +BSD-3-Clause license +Copyright (c) 2015-2022, conda-forge contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. From 9325d5327c2f0ce60e390327ddcaa7d324368a0e Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Fri, 25 Jul 2025 19:20:46 -0600 Subject: [PATCH 05/16] Update meta.yaml Add make --- recipe/meta.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 2b89d86..24eaaa8 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -15,6 +15,7 @@ build: requirements: build: - cmake >=3.10.0 + - make - {{ compiler('c') }} - {{ compiler('cxx') }} - {{ stdlib("c") }} From 9a96f6e35e5f9e8e38ff8c501b8be513666c9fb6 Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Fri, 25 Jul 2025 20:49:28 -0600 Subject: [PATCH 06/16] bump trilinos ver to 15.1.1 --- recipe/meta.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 24eaaa8..05a9c6d 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -1,4 +1,4 @@ -{% set version = "12.18.1" %} +{% set version = "15.1.1" %} package: name: trilinos @@ -6,10 +6,11 @@ package: source: url: https://github.com/trilinos/Trilinos/archive/trilinos-release-{{ version | replace('.', '-') }}.tar.gz - sha256: 7d2e1a1a3e2d2ce78bb248c63411fed5007c827b87cadee3d13c1a45c09a89cf + sha256: 2108d633d2208ed261d09b2d6b2fbae7a9cdc455dd963c9c94412d38d8aaefe4 + build: - number: 4 + number: 0 skip: true # [win] requirements: From 18844281b0b7c638f4184083ac04f0e1a805e2cb Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Sat, 26 Jul 2025 08:48:59 -0600 Subject: [PATCH 07/16] AztecOO requires implicit function declarations with newer compilers --- recipe/build.sh | 1 + recipe/recipe-scripts-license.txt | 27 --------------------------- 2 files changed, 1 insertion(+), 27 deletions(-) delete mode 100644 recipe/recipe-scripts-license.txt diff --git a/recipe/build.sh b/recipe/build.sh index 2d4cdfe..f7a8b14 100644 --- a/recipe/build.sh +++ b/recipe/build.sh @@ -19,6 +19,7 @@ cmake \ -D MPI_BASE_DIR:PATH=$PREFIX \ -D MPI_EXEC:FILEPATH=$PREFIX/bin/mpiexec \ -D PYTHON_EXECUTABLE:FILEPATH=$PYTHON \ + -D CMAKE_C_FLAGS="-Wno-implicit-function-declaration" \ -D Trilinos_ENABLE_Fortran:BOOL=OFF \ -D Trilinos_ENABLE_ALL_PACKAGES:BOOL=OFF \ -D Trilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=OFF \ diff --git a/recipe/recipe-scripts-license.txt b/recipe/recipe-scripts-license.txt deleted file mode 100644 index 2ec51d7..0000000 --- a/recipe/recipe-scripts-license.txt +++ /dev/null @@ -1,27 +0,0 @@ -BSD-3-Clause license -Copyright (c) 2015-2022, conda-forge contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. From c09fb5466da50ae17a20e0ccbf0d5746ce827575 Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Mon, 4 Aug 2025 08:18:45 -0600 Subject: [PATCH 08/16] Add kokkos to host and run Add kokkos and kokkos-kernels to host and run to grab newer versions --- recipe/meta.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 05a9c6d..9047982 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -30,10 +30,14 @@ requirements: - libmatio - xorg-libx11 - hdf5 * mpi_{{ mpi }}_* + - kokkos # [osx] + - kokkos-kernels # [osx] run: - {{ mpi }} # [unix] - libboost-devel - scikit-umfpack + - kokkos # [osx] + - kokkos-kernels # [osx] run_constrained: - pytrilinos ==999999999 From 06edf1a46c2e74a0c82d5d62f3798cd79a34ebb3 Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Mon, 4 Aug 2025 14:21:43 -0600 Subject: [PATCH 09/16] enable ninja and conda-forge kokkos --- recipe/build.sh | 7 +++++-- recipe/meta.yaml | 5 +++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/recipe/build.sh b/recipe/build.sh index f7a8b14..344d2a5 100644 --- a/recipe/build.sh +++ b/recipe/build.sh @@ -1,6 +1,8 @@ mkdir -p build cd build +export CMAKE_GENERATOR="Ninja" + if [ $(uname) == Darwin ]; then export CXXFLAGS="$CXXFLAGS -stdlib=libc++" fi @@ -11,7 +13,7 @@ if [ $(uname) == Linux ]; then export MPI_FLAGS="$MPI_FLAGS;-mca;plm;isolated" fi -cmake \ +cmake -G Ninja \ -D CMAKE_BUILD_TYPE:STRING=RELEASE \ -D CMAKE_INSTALL_PREFIX:PATH=$PREFIX \ -D BUILD_SHARED_LIBS:BOOL=ON \ @@ -75,4 +77,5 @@ cmake \ -D Trilinos_ENABLE_Pike:BOOL=ON \ $SRC_DIR -make -j $CPU_COUNT install +ninja -j $CPU_COUNT +ninja install diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 9047982..65e64b8 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -7,7 +7,7 @@ package: source: url: https://github.com/trilinos/Trilinos/archive/trilinos-release-{{ version | replace('.', '-') }}.tar.gz sha256: 2108d633d2208ed261d09b2d6b2fbae7a9cdc455dd963c9c94412d38d8aaefe4 - + build: number: 0 @@ -15,7 +15,8 @@ build: requirements: build: - - cmake >=3.10.0 + - cmake >=3.23.0 + - ninja - make - {{ compiler('c') }} - {{ compiler('cxx') }} From 170ee5b20150e36a64582bbfaaf7e16ec652561d Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Mon, 4 Aug 2025 16:49:50 -0600 Subject: [PATCH 10/16] Add more flags to force external kokkos --- recipe/build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/recipe/build.sh b/recipe/build.sh index 344d2a5..f685136 100644 --- a/recipe/build.sh +++ b/recipe/build.sh @@ -22,6 +22,8 @@ cmake -G Ninja \ -D MPI_EXEC:FILEPATH=$PREFIX/bin/mpiexec \ -D PYTHON_EXECUTABLE:FILEPATH=$PYTHON \ -D CMAKE_C_FLAGS="-Wno-implicit-function-declaration" \ + -D Trilinos_ENABLE_Kokkos:BOOL=ON \ + -D Kokkos_DIR:PATH="${PREFIX}/lib/cmake/Kokkos" \ -D Trilinos_ENABLE_Fortran:BOOL=OFF \ -D Trilinos_ENABLE_ALL_PACKAGES:BOOL=OFF \ -D Trilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=OFF \ From f15ce7c8ab3f585e478456c424374dd18b12140c Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Tue, 5 Aug 2025 07:55:49 -0600 Subject: [PATCH 11/16] manual kokkoskernels as well --- recipe/build.sh | 5 ++++- recipe/meta.yaml | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/recipe/build.sh b/recipe/build.sh index f685136..c41f0e6 100644 --- a/recipe/build.sh +++ b/recipe/build.sh @@ -16,14 +16,17 @@ fi cmake -G Ninja \ -D CMAKE_BUILD_TYPE:STRING=RELEASE \ -D CMAKE_INSTALL_PREFIX:PATH=$PREFIX \ + -D CMAKE_PREFIX_PATH:PATH=$PREFIX \ -D BUILD_SHARED_LIBS:BOOL=ON \ -D TPL_ENABLE_MPI:BOOL=ON \ -D MPI_BASE_DIR:PATH=$PREFIX \ -D MPI_EXEC:FILEPATH=$PREFIX/bin/mpiexec \ -D PYTHON_EXECUTABLE:FILEPATH=$PYTHON \ -D CMAKE_C_FLAGS="-Wno-implicit-function-declaration" \ - -D Trilinos_ENABLE_Kokkos:BOOL=ON \ + -D TPL_ENABLE_Kokkos:BOOL=ON \ + -D TPL_ENABLE_KokkosKernels:BOOL=ON \ -D Kokkos_DIR:PATH="${PREFIX}/lib/cmake/Kokkos" \ + -D KokkosKernels_DIR:PATH="${PREFIX}/lib/cmake/KokkosKernels" \ -D Trilinos_ENABLE_Fortran:BOOL=OFF \ -D Trilinos_ENABLE_ALL_PACKAGES:BOOL=OFF \ -D Trilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=OFF \ diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 65e64b8..c69aadb 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -31,14 +31,14 @@ requirements: - libmatio - xorg-libx11 - hdf5 * mpi_{{ mpi }}_* - - kokkos # [osx] - - kokkos-kernels # [osx] + - kokkos + - kokkos-kernels run: - {{ mpi }} # [unix] - libboost-devel - scikit-umfpack - - kokkos # [osx] - - kokkos-kernels # [osx] + - kokkos + - kokkos-kernels run_constrained: - pytrilinos ==999999999 From 5358483bb560e5300e39eaa9d75b575bc4aa7883 Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Mon, 11 Aug 2025 07:18:13 -0600 Subject: [PATCH 12/16] Constrain external kokkos versions --- recipe/meta.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index c69aadb..8b15604 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -31,14 +31,14 @@ requirements: - libmatio - xorg-libx11 - hdf5 * mpi_{{ mpi }}_* - - kokkos - - kokkos-kernels + - kokkos == 4.2.01 + - kokkos-kernels == 4.2.01 run: - {{ mpi }} # [unix] - libboost-devel - scikit-umfpack - - kokkos - - kokkos-kernels + - kokkos == 4.2.01 + - kokkos-kernels == 4.2.01 run_constrained: - pytrilinos ==999999999 From 0c0fdc63573e749c80a7158e17da647fb53be6f7 Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Mon, 11 Aug 2025 07:42:15 -0600 Subject: [PATCH 13/16] fix linter issues --- recipe/meta.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 8b15604..410adca 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -31,14 +31,14 @@ requirements: - libmatio - xorg-libx11 - hdf5 * mpi_{{ mpi }}_* - - kokkos == 4.2.01 - - kokkos-kernels == 4.2.01 + - kokkos ==4.2.01 + - kokkos-kernels ==4.2.01 run: - {{ mpi }} # [unix] - libboost-devel - scikit-umfpack - - kokkos == 4.2.01 - - kokkos-kernels == 4.2.01 + - kokkos ==4.2.01 + - kokkos-kernels ==4.2.01 run_constrained: - pytrilinos ==999999999 From e395741751d45654350cd768d540f8bf9be0905a Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Mon, 11 Aug 2025 08:04:52 -0600 Subject: [PATCH 14/16] adjust trilinos cmake to enable openmp --- recipe/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/recipe/build.sh b/recipe/build.sh index c41f0e6..0208968 100644 --- a/recipe/build.sh +++ b/recipe/build.sh @@ -27,6 +27,7 @@ cmake -G Ninja \ -D TPL_ENABLE_KokkosKernels:BOOL=ON \ -D Kokkos_DIR:PATH="${PREFIX}/lib/cmake/Kokkos" \ -D KokkosKernels_DIR:PATH="${PREFIX}/lib/cmake/KokkosKernels" \ + -D Trilinos_ENABLE_OpenMP:BOOL=ON \ -D Trilinos_ENABLE_Fortran:BOOL=OFF \ -D Trilinos_ENABLE_ALL_PACKAGES:BOOL=OFF \ -D Trilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=OFF \ From 864ad946a82e75ea7b92d2c3eaf0eacefb527a5d Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Mon, 11 Aug 2025 15:40:59 -0600 Subject: [PATCH 15/16] Update build.sh Add maintainer documentation flag regarding newer SDKs --- recipe/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/recipe/build.sh b/recipe/build.sh index 0208968..9b36e6b 100644 --- a/recipe/build.sh +++ b/recipe/build.sh @@ -3,8 +3,8 @@ cd build export CMAKE_GENERATOR="Ninja" -if [ $(uname) == Darwin ]; then - export CXXFLAGS="$CXXFLAGS -stdlib=libc++" +if [[ "${target_platform}" == osx-* ]]; then + export CXXFLAGS="${CXXFLAGS} -stdlib=libc++ -D_LIBCPP_DISABLE_AVAILABILITY" fi export MPI_FLAGS="--allow-run-as-root" From 840cd9ea2be0a919c71de885e821b3193b2854d1 Mon Sep 17 00:00:00 2001 From: Rich Fiorella Date: Tue, 12 Aug 2025 08:00:39 -0600 Subject: [PATCH 16/16] add comment on why kokkos(-kernels) are pinned so tightly --- recipe/meta.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 410adca..98d56ce 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -31,12 +31,14 @@ requirements: - libmatio - xorg-libx11 - hdf5 * mpi_{{ mpi }}_* + # trilinos cmake expects specific kokkos/kokkos-kernels versions - kokkos ==4.2.01 - kokkos-kernels ==4.2.01 run: - {{ mpi }} # [unix] - libboost-devel - scikit-umfpack + # trilinos cmake expects specific kokkos/kokkos-kernels versions - kokkos ==4.2.01 - kokkos-kernels ==4.2.01 run_constrained:
Azure