diff --git a/.azure-pipelines/azure-pipelines-linux.yml b/.azure-pipelines/azure-pipelines-linux.yml index 94ea00c..8ff0390 100755 --- a/.azure-pipelines/azure-pipelines-linux.yml +++ b/.azure-pipelines/azure-pipelines-linux.yml @@ -20,6 +20,10 @@ jobs: CONFIG: linux_64_python3.12.____cpython UPLOAD_PACKAGES: 'True' DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + linux_64_python3.13.____cp313: + CONFIG: linux_64_python3.13.____cp313 + UPLOAD_PACKAGES: 'True' + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 linux_64_python3.9.____cpython: CONFIG: linux_64_python3.9.____cpython UPLOAD_PACKAGES: 'True' @@ -36,6 +40,10 @@ jobs: CONFIG: linux_aarch64_python3.12.____cpython UPLOAD_PACKAGES: 'True' DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + linux_aarch64_python3.13.____cp313: + CONFIG: linux_aarch64_python3.13.____cp313 + UPLOAD_PACKAGES: 'True' + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 linux_aarch64_python3.9.____cpython: CONFIG: linux_aarch64_python3.9.____cpython UPLOAD_PACKAGES: 'True' @@ -52,6 +60,10 @@ jobs: CONFIG: linux_ppc64le_python3.12.____cpython UPLOAD_PACKAGES: 'True' DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + linux_ppc64le_python3.13.____cp313: + CONFIG: linux_ppc64le_python3.13.____cp313 + UPLOAD_PACKAGES: 'True' + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 linux_ppc64le_python3.9.____cpython: CONFIG: linux_ppc64le_python3.9.____cpython UPLOAD_PACKAGES: 'True' diff --git a/.azure-pipelines/azure-pipelines-osx.yml b/.azure-pipelines/azure-pipelines-osx.yml index 5f820ea..8f00930 100755 --- a/.azure-pipelines/azure-pipelines-osx.yml +++ b/.azure-pipelines/azure-pipelines-osx.yml @@ -17,6 +17,9 @@ jobs: osx_64_python3.12.____cpython: CONFIG: osx_64_python3.12.____cpython UPLOAD_PACKAGES: 'True' + osx_64_python3.13.____cp313: + CONFIG: osx_64_python3.13.____cp313 + UPLOAD_PACKAGES: 'True' osx_64_python3.9.____cpython: CONFIG: osx_64_python3.9.____cpython UPLOAD_PACKAGES: 'True' @@ -29,6 +32,9 @@ jobs: osx_arm64_python3.12.____cpython: CONFIG: osx_arm64_python3.12.____cpython UPLOAD_PACKAGES: 'True' + osx_arm64_python3.13.____cp313: + CONFIG: osx_arm64_python3.13.____cp313 + UPLOAD_PACKAGES: 'True' osx_arm64_python3.9.____cpython: CONFIG: osx_arm64_python3.9.____cpython UPLOAD_PACKAGES: 'True' diff --git a/.azure-pipelines/azure-pipelines-win.yml b/.azure-pipelines/azure-pipelines-win.yml index 64aa1f6..1985588 100755 --- a/.azure-pipelines/azure-pipelines-win.yml +++ b/.azure-pipelines/azure-pipelines-win.yml @@ -17,6 +17,9 @@ jobs: win_64_python3.12.____cpython: CONFIG: win_64_python3.12.____cpython UPLOAD_PACKAGES: 'True' + win_64_python3.13.____cp313: + CONFIG: win_64_python3.13.____cp313 + UPLOAD_PACKAGES: 'True' win_64_python3.9.____cpython: CONFIG: win_64_python3.9.____cpython UPLOAD_PACKAGES: 'True' 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..f2f00b6 --- /dev/null +++ b/.ci_support/linux_64_python3.13.____cp313.yaml @@ -0,0 +1,16 @@ +cdt_name: +- conda +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +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 +target_platform: +- linux-64 diff --git a/.ci_support/linux_aarch64_python3.13.____cp313.yaml b/.ci_support/linux_aarch64_python3.13.____cp313.yaml new file mode 100644 index 0000000..0d8bdc5 --- /dev/null +++ b/.ci_support/linux_aarch64_python3.13.____cp313.yaml @@ -0,0 +1,16 @@ +cdt_name: +- conda +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +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 +target_platform: +- linux-aarch64 diff --git a/.ci_support/linux_ppc64le_python3.13.____cp313.yaml b/.ci_support/linux_ppc64le_python3.13.____cp313.yaml new file mode 100644 index 0000000..c33ff1e --- /dev/null +++ b/.ci_support/linux_ppc64le_python3.13.____cp313.yaml @@ -0,0 +1,16 @@ +cdt_name: +- conda +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +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 +target_platform: +- linux-ppc64le diff --git a/.ci_support/migrations/python313.yaml b/.ci_support/migrations/python313.yaml new file mode 100644 index 0000000..119bed8 --- /dev/null +++ b/.ci_support/migrations/python313.yaml @@ -0,0 +1,42 @@ +migrator_ts: 1724712607 +__migrator: + commit_message: Rebuild for python 3.13 + migration_number: 1 + operation: key_add + primary_key: python + ordering: + python: + - 3.6.* *_cpython + - 3.7.* *_cpython + - 3.8.* *_cpython + - 3.9.* *_cpython + - 3.10.* *_cpython + - 3.11.* *_cpython + - 3.12.* *_cpython + - 3.13.* *_cp313 # new entry + - 3.6.* *_73_pypy + - 3.7.* *_73_pypy + - 3.8.* *_73_pypy + - 3.9.* *_73_pypy + paused: false + longterm: true + pr_limit: 20 + max_solver_attempts: 3 # this will make the bot retry "not solvable" stuff 12 times + exclude: + # this shouldn't attempt to modify the python feedstocks + - python + - pypy3.6 + - pypy-meta + - cross-python + - python_abi + # see https://github.com/conda-forge/scipy-feedstock/pull/283 + - scipy + exclude_pinned_pkgs: false + +python: +- 3.13.* *_cp313 +# additional entries to add for zip_keys +numpy: +- 2 +python_impl: +- cpython diff --git a/.ci_support/osx_64_python3.13.____cp313.yaml b/.ci_support/osx_64_python3.13.____cp313.yaml new file mode 100644 index 0000000..8c0bf53 --- /dev/null +++ b/.ci_support/osx_64_python3.13.____cp313.yaml @@ -0,0 +1,18 @@ +MACOSX_DEPLOYMENT_TARGET: +- '10.13' +MACOSX_SDK_VERSION: +- '10.13' +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +macos_machine: +- x86_64-apple-darwin13.4.0 +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.13.* *_cp313 +target_platform: +- osx-64 diff --git a/.ci_support/osx_arm64_python3.13.____cp313.yaml b/.ci_support/osx_arm64_python3.13.____cp313.yaml new file mode 100644 index 0000000..140065a --- /dev/null +++ b/.ci_support/osx_arm64_python3.13.____cp313.yaml @@ -0,0 +1,18 @@ +MACOSX_DEPLOYMENT_TARGET: +- '11.0' +MACOSX_SDK_VERSION: +- '11.0' +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +macos_machine: +- arm64-apple-darwin20.0.0 +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.13.* *_cp313 +target_platform: +- osx-arm64 diff --git a/.ci_support/win_64_python3.13.____cp313.yaml b/.ci_support/win_64_python3.13.____cp313.yaml new file mode 100644 index 0000000..5f98331 --- /dev/null +++ b/.ci_support/win_64_python3.13.____cp313.yaml @@ -0,0 +1,12 @@ +channel_sources: +- conda-forge +channel_targets: +- conda-forge main +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- 3.13.* *_cp313 +target_platform: +- win-64 diff --git a/.scripts/build_steps.sh b/.scripts/build_steps.sh index 827a29f..13261d5 100755 --- a/.scripts/build_steps.sh +++ b/.scripts/build_steps.sh @@ -48,9 +48,9 @@ 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}" ]] && [[ "${HOST_PLATFORM}" != linux-* ]] && [[ "${BUILD_WITH_CONDA_DEBUG:-0}" != 1 ]]; then - EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" -fi +# Temporary hack to skip testing and push out Python 3.13. +# Re-rendering after will revert this. +EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" ( endgroup "Configuring conda" ) 2> /dev/null diff --git a/.scripts/run_osx_build.sh b/.scripts/run_osx_build.sh index 0e3c394..d023590 100755 --- a/.scripts/run_osx_build.sh +++ b/.scripts/run_osx_build.sh @@ -77,6 +77,10 @@ if [[ -f LICENSE.txt ]]; then cp LICENSE.txt "recipe/recipe-scripts-license.txt" fi +# Temporary hack to skip testing and push out Python 3.13. +# Re-rendering after will revert this. +EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test" + 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}" @@ -88,11 +92,6 @@ if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then # Drop into an interactive shell /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 \ diff --git a/.scripts/run_win_build.bat b/.scripts/run_win_build.bat index 283e143..6bee7af 100755 --- a/.scripts/run_win_build.bat +++ b/.scripts/run_win_build.bat @@ -62,11 +62,11 @@ if EXIST LICENSE.txt ( echo Copying feedstock license copy LICENSE.txt "recipe\\recipe-scripts-license.txt" ) -if NOT [%HOST_PLATFORM%] == [%BUILD_PLATFORM%] ( - if [%CROSSCOMPILING_EMULATOR%] == [] ( - set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --no-test" - ) -) + + +:: Temporary hack to skip testing and push out Python 3.13. +:: Re-rendering after will revert this. +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%" diff --git a/README.md b/README.md index da77f4c..2a003de 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,13 @@ Current build status variant + + linux_64_python3.13.____cp313 + + + variant + + linux_64_python3.9.____cpython @@ -86,6 +93,13 @@ Current build status variant + + linux_aarch64_python3.13.____cp313 + + + variant + + linux_aarch64_python3.9.____cpython @@ -114,6 +128,13 @@ Current build status variant + + linux_ppc64le_python3.13.____cp313 + + + variant + + linux_ppc64le_python3.9.____cpython @@ -142,6 +163,13 @@ Current build status variant + + osx_64_python3.13.____cp313 + + + variant + + osx_64_python3.9.____cpython @@ -170,6 +198,13 @@ Current build status variant + + osx_arm64_python3.13.____cp313 + + + variant + + osx_arm64_python3.9.____cpython @@ -198,6 +233,13 @@ Current build status variant + + win_64_python3.13.____cp313 + + + variant + + win_64_python3.9.____cpython diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 885fe8f..fa887b2 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -1,5 +1,3 @@ -{% set on_win = SUBDIR in ('win-64', 'win-32') %} -{% set name = "conda" %} {% set version = "25.1.1" %} {% set sha256 = "12aeb248b3c1c598f3512425571de3a5aa8737fd8f1001a5ea32156ac4745f53" %} # Running pytest requires the inclusion of test files which baloons @@ -12,11 +10,15 @@ package: source: fn: conda-{{ version }}.tar.gz - url: https://github.com/conda/{{ name }}/releases/download/{{ version }}/{{ name }}-{{ version }}.tar.gz + url: https://github.com/conda/conda/releases/download/{{ version }}/conda-{{ version }}.tar.gz sha256: {{ sha256 }} + patches: + # Backport https://github.com/conda/conda/pull/14117 for changes in the + # Python 3.13+ logging module internals + - patches/0001-GH-14117-logging-lock-internal-changes-py313.patch build: - number: 0 + number: 1 script: {{ PYTHON }} -m pip install . --no-deps --no-build-isolation -vv && {{ PYTHON }} -m conda init --install # These are present when the new environment is created # so we have to exempt them from the list of initial files diff --git a/recipe/patches/0001-GH-14117-logging-lock-internal-changes-py313.patch b/recipe/patches/0001-GH-14117-logging-lock-internal-changes-py313.patch new file mode 100644 index 0000000..b3c3db9 --- /dev/null +++ b/recipe/patches/0001-GH-14117-logging-lock-internal-changes-py313.patch @@ -0,0 +1,68 @@ +From 62196c897df3d7aea7063d0c08d1bf6e6fd91600 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" +Date: Fri, 2 Aug 2024 08:50:43 -0400 +Subject: [PATCH 1/2] Adapt for logging lock internal changes in Python 3.13 + +--- + conda/common/io.py | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/conda/common/io.py b/conda/common/io.py +index 91f37e144d0..d3b655e47f4 100644 +--- a/conda/common/io.py ++++ b/conda/common/io.py +@@ -269,11 +269,16 @@ def argv(args_list): + + @contextmanager + def _logger_lock(): +- logging._acquireLock() ++ try: ++ # Python 3.13+ ++ acquire, release = logging._prepareFork, logging._afterFork ++ except AttributeError: ++ acquire, release = logging._acquireLock, logging._releaseLock ++ acquire() + try: + yield + finally: +- logging._releaseLock() ++ release() + + + @contextmanager + +From 78cd209128292371d9d2abbca7b3d1f4912d1c49 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" +Date: Mon, 5 Aug 2024 10:52:49 -0400 +Subject: [PATCH 2/2] Add news item for PR#14117 + +--- + news/14117-logging-lock-changes | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + create mode 100644 news/14117-logging-lock-changes + +diff --git a/news/14117-logging-lock-changes b/news/14117-logging-lock-changes +new file mode 100644 +index 00000000000..7f708aa0eed +--- /dev/null ++++ b/news/14117-logging-lock-changes +@@ -0,0 +1,19 @@ ++### Enhancements ++ ++* ++ ++### Bug fixes ++ ++* ++ ++### Deprecations ++ ++* ++ ++### Docs ++ ++* ++ ++### Other ++ ++* Adapt for logging lock internal changes in Python 3.13 (#14117)