From 5c0d8d5be8a03399415504cccc82c3657ff5af9c Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Tue, 3 Mar 2026 23:44:09 +0000 Subject: [PATCH 1/6] =?UTF-8?q?clickhouse:=2026.1.3.52-stable=20=E2=86=92?= =?UTF-8?q?=2026.2.3.2-stable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkgs/by-name/cl/clickhouse/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/cl/clickhouse/package.nix b/pkgs/by-name/cl/clickhouse/package.nix index f02241164921..e842b99ebbe9 100644 --- a/pkgs/by-name/cl/clickhouse/package.nix +++ b/pkgs/by-name/cl/clickhouse/package.nix @@ -1,6 +1,6 @@ import ./generic.nix { - version = "26.1.3.52-stable"; - rev = "5549f2acae95c6d627654f50e212a85d059a55f9"; - hash = "sha256-7Ww7vQNjvR65Ycw2jnetyy6s8KkHOylzFey+K2xBLjM="; + version = "26.2.3.2-stable"; + rev = "ba231782911b5f53713dc4a9ad6a7fcf5ac4bf89"; + hash = "sha256-252cNixB1ca8m4AvtB2097+OhlSmG7Diz0MMyqxvExc="; lts = false; } From 6370a06665999321a18a1b33d2b70b137a52d808 Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Tue, 3 Mar 2026 23:46:34 +0000 Subject: [PATCH 2/6] clickhouse: generic: Use LLVM 21 for `26.x` Disable `libcxxhardeningfast` hardening and X-Ray CMake option --- pkgs/by-name/cl/clickhouse/generic.nix | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/cl/clickhouse/generic.nix b/pkgs/by-name/cl/clickhouse/generic.nix index 9f99eb11325a..cac17f4fc466 100644 --- a/pkgs/by-name/cl/clickhouse/generic.nix +++ b/pkgs/by-name/cl/clickhouse/generic.nix @@ -9,6 +9,7 @@ lib, stdenv, llvmPackages_19, + llvmPackages_21, fetchFromGitHub, fetchpatch, cmake, @@ -30,7 +31,8 @@ versionCheckHook, }: let - llvmStdenv = llvmPackages_19.stdenv; + llvmPackages = if lib.versionAtLeast version "26" then llvmPackages_21 else llvmPackages_19; + llvmStdenv = llvmPackages.stdenv; in llvmStdenv.mkDerivation (finalAttrs: { pname = "clickhouse"; @@ -99,7 +101,7 @@ llvmStdenv.mkDerivation (finalAttrs: { ninja python3 perl - llvmPackages_19.lld + llvmPackages.lld removeReferencesTo ] ++ lib.optionals stdenv.hostPlatform.isx86_64 [ @@ -107,7 +109,7 @@ llvmStdenv.mkDerivation (finalAttrs: { yasm ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ - llvmPackages_19.bintools + llvmPackages.bintools findutils darwin.bootstrap_cmds ] @@ -193,6 +195,7 @@ llvmStdenv.mkDerivation (finalAttrs: { "-DENABLE_CHDIG=OFF" "-DENABLE_TESTS=OFF" "-DENABLE_DELTA_KERNEL_RS=0" + "-DENABLE_XRAY=OFF" "-DCOMPILER_CACHE=disabled" ] ++ lib.optional ( @@ -212,7 +215,10 @@ llvmStdenv.mkDerivation (finalAttrs: { }; # https://github.com/ClickHouse/ClickHouse/issues/49988 - hardeningDisable = [ "fortify" ]; + hardeningDisable = [ + "fortify" + "libcxxhardeningfast" + ]; nativeInstallCheckInputs = [ versionCheckHook ]; doInstallCheck = true; From bfcea2b238a1fd8dc161b6f0f6919734dc2b6dcd Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Tue, 3 Mar 2026 23:59:39 +0000 Subject: [PATCH 3/6] clickhouse: update.sh: Paginate GitHub tags API to find LTS releases --- pkgs/by-name/cl/clickhouse/update.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/cl/clickhouse/update.sh b/pkgs/by-name/cl/clickhouse/update.sh index 7ca2b419d322..6aed2d646818 100755 --- a/pkgs/by-name/cl/clickhouse/update.sh +++ b/pkgs/by-name/cl/clickhouse/update.sh @@ -15,9 +15,11 @@ echoerr "Working on $fname" shift # Fetch latest tags from the repo, leave only stable and lts, use version sort in reverse order. -all_tags=$(curl -L -s ${GITHUB_TOKEN:+-u ":${GITHUB_TOKEN}"} https://api.github.com/repos/ClickHouse/ClickHouse/tags \ +all_tags=$({ for page in 1 2 3; do + curl -L -s ${GITHUB_TOKEN:+-u ":${GITHUB_TOKEN}"} "https://api.github.com/repos/ClickHouse/ClickHouse/tags?per_page=100&page=$page" + done; } \ | jq -r '.[].name | select(test("-(stable|lts)$"))' \ - | sort -Vr) + | sort -Vr | uniq) # Fail if no tags found if [[ -z "$all_tags" ]]; then From 00cf947564bd015aac62e68038af1c11ea95810f Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Wed, 4 Mar 2026 00:01:42 +0000 Subject: [PATCH 4/6] clickhouse: update.sh: Handle missing -lts tags gracefully --- pkgs/by-name/cl/clickhouse/update.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/cl/clickhouse/update.sh b/pkgs/by-name/cl/clickhouse/update.sh index 6aed2d646818..9f55634789b5 100755 --- a/pkgs/by-name/cl/clickhouse/update.sh +++ b/pkgs/by-name/cl/clickhouse/update.sh @@ -29,7 +29,11 @@ fi pname="clickhouse" if [[ "$fname" == *lts.nix ]]; then - all_tags=$(echo "$all_tags" | grep -- "-lts$") + all_tags=$(echo "$all_tags" | grep -- "-lts$" || true) + if [[ -z "$all_tags" ]]; then + echoerr "Error: no LTS tags found in fetched tags" + exit 1 + fi pname="clickhouse-lts" fi From 90d418b652c815328520337fc7e67de5022568ae Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Wed, 4 Mar 2026 01:21:03 +0000 Subject: [PATCH 5/6] =?UTF-8?q?clickhouse-lts:=2025.8.15.35-lts=20?= =?UTF-8?q?=E2=86=92=2025.8.18.1-lts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkgs/by-name/cl/clickhouse/lts.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/cl/clickhouse/lts.nix b/pkgs/by-name/cl/clickhouse/lts.nix index fcc816d71fb9..1cbd1eca961f 100644 --- a/pkgs/by-name/cl/clickhouse/lts.nix +++ b/pkgs/by-name/cl/clickhouse/lts.nix @@ -1,6 +1,6 @@ import ./generic.nix { - version = "25.8.15.35-lts"; - rev = "7a0b36cf8934881236312e9fea094baaf5c709a4"; - hash = "sha256-zCMqZaw+QO/MAdJhgyrZYvdFPO8o11EXbuGHS5++dZw="; + version = "25.8.18.1-lts"; + rev = "557fdf60f81c4370867dff464de7f4b1064d39a7"; + hash = "sha256-6QBejA0GdhjHVcqHVqjZkiJ1tmPglvIaFffBWyseYX8="; lts = true; } From 62a5851deefd52e7c1384cf140c67bbc9ac3ef76 Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Thu, 5 Mar 2026 10:45:09 +0000 Subject: [PATCH 6/6] nixos/clickhouse: tests: ui: fix race conditions in Selenium assertions Use explicit WebDriverWait conditions instead of immediate assertions for elements whose content is populated asynchronously by JavaScript. The server_info text and query result elements may not be ready immediately after page load or button click, causing flaky failures Also handle shadow DOM found in newer ClickHouse versions --- nixos/tests/clickhouse/ui.nix | 51 ++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/nixos/tests/clickhouse/ui.nix b/nixos/tests/clickhouse/ui.nix index f6a645272856..73050910d25b 100644 --- a/nixos/tests/clickhouse/ui.nix +++ b/nixos/tests/clickhouse/ui.nix @@ -29,6 +29,7 @@ from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options + from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait options = Options() @@ -41,33 +42,53 @@ wait = WebDriverWait(driver, 60) - assert len(driver.find_elements( - By.ID, "query_div")) == 1 + wait.until(EC.presence_of_element_located( + (By.ID, "query_div"))) + + version = "${lib.strings.replaceStrings [ "-stable" "-lts" ] [ "" "" ] package.version}" + wait.until(EC.text_to_be_present_in_element( + (By.XPATH, "//span[@id='server_info']"), version)) + + # Determine if a shadow DOM is used for query-result and + # query-progress + result_els = driver.find_elements(By.ID, "query-result") + uses_shadow = len(result_els) > 0 + if uses_shadow: + result_shadow = result_els[0].shadow_root + progress_shadow = driver.find_element( + By.ID, "query-progress").shadow_root + + + def find_rows(): + root = result_shadow if uses_shadow else driver + return root.find_elements( + By.CSS_SELECTOR, ".row-number") + + + def find_check_mark(): + root = progress_shadow if uses_shadow else driver + return root.find_elements( + By.CSS_SELECTOR, "#check-mark") - server_info_element = driver.find_element( - By.XPATH, "//span[@id='server_info']") - assert "${ - lib.strings.replaceStrings [ "-stable" "-lts" ] [ "" "" ] package.version - }" in server_info_element.text # Shouldn't show before query done - assert len(driver.find_elements( - By.CSS_SELECTOR, ".row-number")) == 0 + assert len(find_rows()) == 0 query_box = driver.find_element( By.XPATH, "//textarea[@id='query']") query_box.click() query_box.send_keys("SELECT 1") - query_run_button = driver.find_element( + driver.find_element( By.XPATH, "//button[@id='run']").click() - # Now verify results shown - assert len(driver.find_elements( - By.XPATH, "//div[@id='check-mark']")) == 1 + # Wait for query to complete + WebDriverWait(driver, 60).until( + lambda d: len(find_check_mark()) > 0) - assert len(driver.find_elements( - By.CSS_SELECTOR, ".row-number")) == 2 + # Wait for results to render + WebDriverWait(driver, 60).until( + lambda d: len(find_rows()) > 0) driver.close() '';