Merge pull request #297147 from a-n-n-a-l-e-e/duckdb-update

duckdb,python311Packages.duckdb: 0.10.0 -> 0.10.1, add update script

authored by a-n-n-a-l-e-e and committed by GitHub 13dd6827 e8ebea1f

+82 -94
+28 -35
pkgs/development/libraries/duckdb/default.nix
··· 15 16 let 17 enableFeature = yes: if yes then "ON" else "OFF"; 18 in 19 - stdenv.mkDerivation rec { 20 pname = "duckdb"; 21 - version = "0.10.0"; 22 23 src = fetchFromGitHub { 24 - owner = pname; 25 - repo = pname; 26 - rev = "refs/tags/v${version}"; 27 - hash = "sha256-qGUq0iYTaLNHKqbXNLRmvqHMqunvIlP991IKb4qdSt4="; 28 }; 29 30 - patches = [ 31 - # remove calls to git and set DUCKDB_VERSION to version 32 - (substituteAll { 33 - src = ./version.patch; 34 - version = "v${version}"; 35 - }) 36 - # add missing file needed for httpfs compile 37 - # remove on next update 38 - (fetchpatch { 39 - name = "missing-httpfs-file.patch"; 40 - url = "https://github.com/duckdb/duckdb/commit/3d7aa3ed46ecf5f18122559e385b75f1f5e9aba8.patch"; 41 - hash = "sha256-Q4IHCpMpxn86OquUZdEF7P0nHEPOcWS0TQijTkvBYbQ="; 42 - }) 43 - ]; 44 45 nativeBuildInputs = [ cmake ninja python3 ]; 46 buildInputs = [ openssl ] ··· 48 ++ lib.optionals withOdbc [ unixODBC ]; 49 50 cmakeFlags = [ 51 - "-DDUCKDB_EXTENSION_CONFIGS=${src}/.github/config/in_tree_extensions.cmake" 52 "-DBUILD_ODBC_DRIVER=${enableFeature withOdbc}" 53 "-DJDBC_DRIVER=${enableFeature withJdbc}" 54 - ] ++ lib.optionals doInstallCheck [ 55 # development settings 56 "-DBUILD_UNITTESTS=ON" 57 ]; 58 59 - doInstallCheck = true; 60 - 61 - preInstallCheck = '' 62 - export HOME="$(mktemp -d)" 63 - '' + lib.optionalString stdenv.isDarwin '' 64 - export DYLD_LIBRARY_PATH="$out/lib''${DYLD_LIBRARY_PATH:+:}''${DYLD_LIBRARY_PATH}" 65 ''; 66 67 installCheckPhase = 68 let ··· 105 "test/sql/copy/csv/auto/test_csv_auto.test" 106 # test expects installed file timestamp to be > 2024 107 "test/sql/table_function/read_text_and_blob.test" 108 - # can re-enable next update (broken for 0.10.0) 109 - "test/sql/secrets/create_secret_non_writable_persistent_dir.test" 110 - # https://github.com/duckdb/duckdb/issues/10722 111 - "test/sql/types/nested/list/list_aggregate_dict.test" 112 ] ++ lib.optionals stdenv.isAarch64 [ 113 "test/sql/aggregate/aggregates/test_kurtosis.test" 114 "test/sql/aggregate/aggregates/test_skewness.test" 115 "test/sql/function/list/aggregates/skewness.test" 116 ]); 117 in 118 '' 119 runHook preInstallCheck 120 121 - ./test/unittest ${toString excludes} 122 123 runHook postInstallCheck 124 ''; 125 126 meta = with lib; { 127 - changelog = "https://github.com/duckdb/duckdb/releases/tag/v${version}"; 128 description = "Embeddable SQL OLAP Database Management System"; 129 homepage = "https://duckdb.org/"; 130 license = licenses.mit; ··· 132 maintainers = with maintainers; [ costrouc cpcloud ]; 133 platforms = platforms.all; 134 }; 135 - }
··· 15 16 let 17 enableFeature = yes: if yes then "ON" else "OFF"; 18 + versions = lib.importJSON ./versions.json; 19 in 20 + stdenv.mkDerivation (finalAttrs: { 21 pname = "duckdb"; 22 + inherit (versions) rev version; 23 24 src = fetchFromGitHub { 25 + # to update run: 26 + # nix-shell maintainers/scripts/update.nix --argstr path duckdb 27 + inherit (versions) hash; 28 + owner = "duckdb"; 29 + repo = "duckdb"; 30 + rev = "refs/tags/v${finalAttrs.version}"; 31 }; 32 33 + outputs = [ "out" "lib" "dev" ]; 34 35 nativeBuildInputs = [ cmake ninja python3 ]; 36 buildInputs = [ openssl ] ··· 38 ++ lib.optionals withOdbc [ unixODBC ]; 39 40 cmakeFlags = [ 41 + "-DDUCKDB_EXTENSION_CONFIGS=${finalAttrs.src}/.github/config/in_tree_extensions.cmake" 42 "-DBUILD_ODBC_DRIVER=${enableFeature withOdbc}" 43 "-DJDBC_DRIVER=${enableFeature withJdbc}" 44 + "-DOVERRIDE_GIT_DESCRIBE=v${finalAttrs.version}-0-g${finalAttrs.rev}" 45 + ] ++ lib.optionals finalAttrs.doInstallCheck [ 46 # development settings 47 "-DBUILD_UNITTESTS=ON" 48 ]; 49 50 + postInstall = '' 51 + mkdir -p $lib 52 + mv $out/lib $lib 53 ''; 54 + 55 + doInstallCheck = true; 56 57 installCheckPhase = 58 let ··· 95 "test/sql/copy/csv/auto/test_csv_auto.test" 96 # test expects installed file timestamp to be > 2024 97 "test/sql/table_function/read_text_and_blob.test" 98 + # fails with Out of Memory Error 99 + "test/sql/copy/parquet/batched_write/batch_memory_usage.test" 100 + # wants http connection 101 + "test/sql/copy/csv/test_mixed_lines.test" 102 ] ++ lib.optionals stdenv.isAarch64 [ 103 "test/sql/aggregate/aggregates/test_kurtosis.test" 104 "test/sql/aggregate/aggregates/test_skewness.test" 105 "test/sql/function/list/aggregates/skewness.test" 106 ]); 107 + LD_LIBRARY_PATH = lib.optionalString stdenv.isDarwin "DY" + "LD_LIBRARY_PATH"; 108 in 109 '' 110 runHook preInstallCheck 111 112 + HOME="$(mktemp -d)" ${LD_LIBRARY_PATH}="$lib/lib" ./test/unittest ${toString excludes} 113 114 runHook postInstallCheck 115 ''; 116 117 + passthru.updateScript = ./update.sh; 118 + 119 meta = with lib; { 120 + changelog = "https://github.com/duckdb/duckdb/releases/tag/v${finalAttrs.version}"; 121 description = "Embeddable SQL OLAP Database Management System"; 122 homepage = "https://duckdb.org/"; 123 license = licenses.mit; ··· 125 maintainers = with maintainers; [ costrouc cpcloud ]; 126 platforms = platforms.all; 127 }; 128 + })
+45
pkgs/development/libraries/duckdb/update.sh
···
··· 1 + #!/usr/bin/env nix-shell 2 + #!nix-shell --pure -i bash -p cacert curl jq moreutils nix-prefetch 3 + # shellcheck shell=bash 4 + 5 + set -euo pipefail 6 + cd "$(dirname "${BASH_SOURCE[0]}")" 7 + 8 + nixpkgs=$(while [[ ! -e .git ]]; do [[ ${PWD} != / ]] || exit 1; cd ..; done; echo "${PWD}") 9 + 10 + repo=duckdb 11 + owner=duckdb 12 + 13 + msg() { 14 + echo "$*" >&2 15 + } 16 + 17 + json_get() { 18 + jq -r "$1" < 'versions.json' 19 + } 20 + 21 + json_set() { 22 + jq --arg x "$2" "$1 = \$x" < 'versions.json' | sponge 'versions.json' 23 + } 24 + 25 + get_latest() { 26 + curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s \ 27 + "https://api.github.com/repos/${owner}/${repo}/releases/latest" | jq -r .tag_name 28 + } 29 + 30 + get_sha() { 31 + curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s \ 32 + "https://api.github.com/repos/${owner}/${repo}/git/ref/tags/$1" | jq -r .object.sha 33 + } 34 + 35 + tag=$(get_latest) 36 + version=${tag/v/} 37 + 38 + [[ ${version} = $(json_get .version) ]] && { msg "${version} is up to date"; exit 0; } 39 + 40 + sha=$(get_sha "${tag}") 41 + sri=$(nix-prefetch -I nixpkgs="${nixpkgs}" -E "duckdb.overrideAttrs { version = \"${version}\"; }") 42 + 43 + json_set ".version" "${version}" 44 + json_set ".rev" "${sha}" 45 + json_set ".hash" "${sri}"
-58
pkgs/development/libraries/duckdb/version.patch
··· 1 - diff --git a/CMakeLists.txt b/CMakeLists.txt 2 - index 2b49e11288..0a4a69b9a0 100644 3 - --- a/CMakeLists.txt 4 - +++ b/CMakeLists.txt 5 - @@ -244,52 +244,7 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") 6 - set(SUN TRUE) 7 - endif() 8 - 9 - -find_package(Git) 10 - -if(Git_FOUND) 11 - - if (NOT DEFINED GIT_COMMIT_HASH) 12 - - execute_process( 13 - - COMMAND ${GIT_EXECUTABLE} log -1 --format=%h 14 - - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 15 - - RESULT_VARIABLE GIT_RESULT 16 - - OUTPUT_VARIABLE GIT_COMMIT_HASH 17 - - OUTPUT_STRIP_TRAILING_WHITESPACE) 18 - - endif() 19 - - execute_process( 20 - - COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0 21 - - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 22 - - OUTPUT_VARIABLE GIT_LAST_TAG 23 - - OUTPUT_STRIP_TRAILING_WHITESPACE) 24 - - execute_process( 25 - - COMMAND ${GIT_EXECUTABLE} describe --tags --long 26 - - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 27 - - OUTPUT_VARIABLE GIT_ITERATION 28 - - OUTPUT_STRIP_TRAILING_WHITESPACE) 29 - -else() 30 - - message("Git NOT FOUND") 31 - -endif() 32 - - 33 - -if(GIT_RESULT EQUAL "0") 34 - - string(REGEX REPLACE "v([0-9]+).[0-9]+.[0-9]+" "\\1" DUCKDB_MAJOR_VERSION "${GIT_LAST_TAG}") 35 - - string(REGEX REPLACE "v[0-9]+.([0-9]+).[0-9]+" "\\1" DUCKDB_MINOR_VERSION "${GIT_LAST_TAG}") 36 - - string(REGEX REPLACE "v[0-9]+.[0-9]+.([0-9]+)" "\\1" DUCKDB_PATCH_VERSION "${GIT_LAST_TAG}") 37 - - string(REGEX REPLACE ".*-([0-9]+)-.*" "\\1" DUCKDB_DEV_ITERATION "${GIT_ITERATION}") 38 - - 39 - - if(DUCKDB_DEV_ITERATION EQUAL 0) 40 - - # on a tag; directly use the version 41 - - set(DUCKDB_VERSION "${GIT_LAST_TAG}") 42 - - else() 43 - - # not on a tag, increment the patch version by one and add a -devX suffix 44 - - math(EXPR DUCKDB_PATCH_VERSION "${DUCKDB_PATCH_VERSION}+1") 45 - - set(DUCKDB_VERSION "v${DUCKDB_MAJOR_VERSION}.${DUCKDB_MINOR_VERSION}.${DUCKDB_PATCH_VERSION}-dev${DUCKDB_DEV_ITERATION}") 46 - - endif() 47 - -else() 48 - - # fallback for when building from tarball 49 - - set(DUCKDB_MAJOR_VERSION 0) 50 - - set(DUCKDB_MINOR_VERSION 0) 51 - - set(DUCKDB_PATCH_VERSION 1) 52 - - set(DUCKDB_DEV_ITERATION 0) 53 - - set(DUCKDB_VERSION "v${DUCKDB_MAJOR_VERSION}.${DUCKDB_MINOR_VERSION}.${DUCKDB_PATCH_VERSION}-dev${DUCKDB_DEV_ITERATION}") 54 - -endif() 55 - +set(DUCKDB_VERSION "@version@") 56 - 57 - message(STATUS "git hash ${GIT_COMMIT_HASH}, version ${DUCKDB_VERSION}") 58 -
···
+5
pkgs/development/libraries/duckdb/versions.json
···
··· 1 + { 2 + "version": "0.10.1", 3 + "rev": "4a89d97db8a5a23a15f3025c8d2d2885337c2637", 4 + "hash": "sha256-/j/DaUzsfACI5Izr4lblkYmIEmKsOXr760UTwC0l/qg=" 5 + }
+4 -1
pkgs/development/python-modules/duckdb/default.nix
··· 14 }: 15 16 buildPythonPackage rec { 17 - inherit (duckdb) patches pname src version; 18 pyproject = true; 19 20 postPatch = (duckdb.postPatch or "") + '' ··· 31 env = { 32 BUILD_HTTPFS = 1; 33 DUCKDB_BUILD_UNITY = 1; 34 }; 35 36 nativeBuildInputs = [ 37 pybind11
··· 14 }: 15 16 buildPythonPackage rec { 17 + inherit (duckdb) patches pname rev src version; 18 pyproject = true; 19 20 postPatch = (duckdb.postPatch or "") + '' ··· 31 env = { 32 BUILD_HTTPFS = 1; 33 DUCKDB_BUILD_UNITY = 1; 34 + OVERRIDE_GIT_DESCRIBE="v${version}-0-g${rev}"; 35 }; 36 + 37 + dontPretendSetuptoolsSCMVersion = true; 38 39 nativeBuildInputs = [ 40 pybind11