From 256a9b025cf9653c4cca69680abca71eb1a7402d Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 27 May 2026 19:29:43 +0200 Subject: [PATCH] switch all inlined deps to format=wheel (avoid monorepo/build-system/tag issues) --- packages/nextcloud-mcp-server/package.nix | 244 ++++++---------------- 1 file changed, 67 insertions(+), 177 deletions(-) diff --git a/packages/nextcloud-mcp-server/package.nix b/packages/nextcloud-mcp-server/package.nix index 7be2008..1da8f76 100644 --- a/packages/nextcloud-mcp-server/package.nix +++ b/packages/nextcloud-mcp-server/package.nix @@ -6,285 +6,173 @@ }: let - # ── OpenTelemetry Python monorepo (api, sdk, proto, exporter-otlp-*) ── - otelPythonSrc = fetchFromGitHub { - owner = "open-telemetry"; - repo = "opentelemetry-python"; - rev = "v1.39.1"; - hash = "sha256-GEcGADUdci6W2vfeXt/rjQOL/7r4RBxgyq+vy6tivBc="; - }; + # Helper: fetch a wheel from PyPI (avoids sdist 404s, build-system issues, monorepo complexity) + fetchWheel = { pname, version, hash, propagatedBuildInputs ? [ ], meta ? { } }: + python3Packages.buildPythonPackage { + inherit pname version; + format = "wheel"; + src = fetchPypi { + inherit pname version hash; + format = "wheel"; + dist = "py3"; + python = "py3"; + }; + inherit propagatedBuildInputs; + doCheck = false; + inherit meta; + }; - # ── OpenTelemetry Contrib monorepo (instrumentation-*, util-http) ── - otelContribSrc = fetchFromGitHub { - owner = "open-telemetry"; - repo = "opentelemetry-python-contrib"; - rev = "v0.60b1"; - hash = "sha256-IDTSGsHQ8cCFvgSO7pDbSSHVNV0OIjjoEN9ZfkaPAvk="; - }; - - # ── Tier 1: leaf packages ── - - pythonvcard4 = python3Packages.buildPythonPackage rec { + pythonvcard4 = fetchWheel { pname = "pythonvcard4"; version = "0.2.0"; - pyproject = true; - build-system = [ python3Packages.setuptools python3Packages.wheel ]; - src = fetchPypi { inherit pname version; hash = "sha256-I2u6J2nkWWRc+ndkB/8HhWrO1FtDcRa/QN2zm7zv220="; }; - doCheck = false; + hash = lib.fakeHash; meta = with lib; { description = "vCard parsing library"; homepage = "https://github.com/GNOME/python-vcard4"; license = licenses.gpl3Plus; }; }; - prometheus-client = python3Packages.buildPythonPackage rec { + prometheus-client = fetchWheel { pname = "prometheus_client"; version = "0.25.0"; - pyproject = true; - build-system = [ python3Packages.setuptools python3Packages.wheel ]; - src = fetchPypi { inherit pname version; hash = "sha256-Xjc7dcMa+zyG8aUvoa1HDJqs4YCC057A0vkY0RzJuig="; }; - doCheck = false; + hash = lib.fakeHash; meta = with lib; { description = "Prometheus monitoring system client"; homepage = "https://github.com/prometheus/client_python"; license = licenses.asl20; }; }; - python-json-logger = python3Packages.buildPythonPackage rec { + python-json-logger = fetchWheel { pname = "python-json-logger"; version = "4.1.0"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = fetchFromGitHub { - owner = "nhairs"; - repo = "python-json-logger"; - rev = "v${version}"; - hash = "sha256-hJ29rDP04apLf1zaP1vQrYF5xm4GtKZlvno97b7g+hg="; - }; - doCheck = false; + hash = lib.fakeHash; meta = with lib; { description = "JSON formatter for python logging"; homepage = "https://github.com/nhairs/python-json-logger"; license = licenses.bsd2; }; }; - importlib-metadata = python3Packages.buildPythonPackage rec { + importlib-metadata = fetchWheel { pname = "importlib_metadata"; version = "8.7.1"; - pyproject = true; - build-system = [ python3Packages.setuptools python3Packages.wheel ]; - src = fetchPypi { inherit pname version; hash = "sha256-Sf7xrmRAwYIFL0B8jTSmj3Lvw225ypDcARM5jy/d6Ls="; }; + hash = lib.fakeHash; propagatedBuildInputs = with python3Packages; [ zipp ]; - doCheck = false; meta = with lib; { description = "Read metadata from Python packages"; homepage = "https://github.com/python/importlib_metadata"; license = licenses.asl20; }; }; - googleapis-common-protos = python3Packages.buildPythonPackage rec { + googleapis-common-protos = fetchWheel { pname = "googleapis-common-protos"; version = "1.75.0"; - pyproject = true; - build-system = [ python3Packages.setuptools python3Packages.wheel ]; - src = fetchFromGitHub { - owner = "googleapis"; - repo = "python-api-common-protos"; - rev = "v${version}"; - hash = lib.fakeHash; - }; + hash = lib.fakeHash; propagatedBuildInputs = with python3Packages; [ protobuf ]; - doCheck = false; meta = with lib; { description = "Common protobufs used in Google APIs"; homepage = "https://github.com/googleapis/python-api-common-protos"; license = licenses.asl20; }; }; - opentelemetry-api = python3Packages.buildPythonPackage rec { + opentelemetry-api = fetchWheel { pname = "opentelemetry-api"; version = "1.39.1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = otelPythonSrc; - sourceRoot = "${src.name}/opentelemetry-api"; - propagatedBuildInputs = with python3Packages; [ deprecated importlib-metadata ]; - doCheck = false; + hash = lib.fakeHash; + propagatedBuildInputs = with python3Packages; [ deprecated ]; meta = with lib; { description = "OpenTelemetry Python API"; homepage = "https://github.com/open-telemetry/opentelemetry-python"; license = licenses.asl20; }; }; - opentelemetry-proto = python3Packages.buildPythonPackage rec { + opentelemetry-proto = fetchWheel { pname = "opentelemetry-proto"; version = "1.39.1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = otelPythonSrc; - sourceRoot = "${src.name}/opentelemetry-proto"; + hash = lib.fakeHash; propagatedBuildInputs = with python3Packages; [ protobuf ]; - doCheck = false; meta = with lib; { description = "OpenTelemetry Python Proto"; homepage = "https://github.com/open-telemetry/opentelemetry-python"; license = licenses.asl20; }; }; - # ── Tier 2 ── - - opentelemetry-semantic-conventions = python3Packages.buildPythonPackage rec { + opentelemetry-semantic-conventions = fetchWheel { pname = "opentelemetry-semantic-conventions"; version = "0.60b1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = fetchFromGitHub { - owner = "open-telemetry"; - repo = "semantic-conventions"; - rev = "v${version}"; - hash = lib.fakeHash; - }; - sourceRoot = "${src.name}/model"; - propagatedBuildInputs = [ opentelemetry-api ] ++ (with python3Packages; [ deprecated ]); - doCheck = false; + hash = lib.fakeHash; + propagatedBuildInputs = with python3Packages; [ deprecated ]; meta = with lib; { description = "OpenTelemetry Semantic Conventions"; homepage = "https://github.com/open-telemetry/semantic-conventions"; license = licenses.asl20; }; }; - opentelemetry-sdk = python3Packages.buildPythonPackage rec { + opentelemetry-sdk = fetchWheel { pname = "opentelemetry-sdk"; version = "1.39.1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = otelPythonSrc; - sourceRoot = "${src.name}/opentelemetry-sdk"; - propagatedBuildInputs = [ opentelemetry-api opentelemetry-semantic-conventions ] ++ (with python3Packages; [ typing-extensions ]); - doCheck = false; + hash = lib.fakeHash; + propagatedBuildInputs = with python3Packages; [ typing-extensions ]; meta = with lib; { description = "OpenTelemetry Python SDK"; homepage = "https://github.com/open-telemetry/opentelemetry-python"; license = licenses.asl20; }; }; - x-wr-timezone = python3Packages.buildPythonPackage rec { + x-wr-timezone = fetchWheel { pname = "x_wr_timezone"; version = "2.0.1"; - pyproject = true; - build-system = [ python3Packages.setuptools python3Packages.wheel ]; - src = fetchPypi { inherit pname version; hash = "sha256-kWbEDm/9TA7eurw1ThoeLP/Bu0c/iAB2lHk3V2hcyMM="; }; - propagatedBuildInputs = with python3Packages; [ icalendar ]; - doCheck = false; + hash = lib.fakeHash; + propagatedBuildInputs = with python3Packages; [ icalendar click ]; meta = with lib; { description = "X-WR-TIMEZONE iCalendar property handling"; homepage = "https://github.com/niccokunzmann/x-wr-timezone"; license = licenses.lgpl3Plus; }; }; - opentelemetry-util-http = python3Packages.buildPythonPackage rec { + opentelemetry-util-http = fetchWheel { pname = "opentelemetry-util-http"; version = "0.60b1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = otelContribSrc; - sourceRoot = "${src.name}/util/opentelemetry-util-http"; - doCheck = false; + hash = lib.fakeHash; meta = with lib; { description = "OpenTelemetry HTTP utilities"; homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib"; license = licenses.asl20; }; }; - opentelemetry-exporter-otlp-proto-common = python3Packages.buildPythonPackage rec { + opentelemetry-exporter-otlp-proto-common = fetchWheel { pname = "opentelemetry-exporter-otlp-proto-common"; version = "1.39.1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = otelPythonSrc; - sourceRoot = "${src.name}/exporter/opentelemetry-exporter-otlp-proto-common"; - propagatedBuildInputs = [ opentelemetry-proto ]; - doCheck = false; + hash = lib.fakeHash; meta = with lib; { description = "OpenTelemetry OTLP exporter proto common"; homepage = "https://github.com/open-telemetry/opentelemetry-python"; license = licenses.asl20; }; }; - # ── Tier 3 ── - - opentelemetry-instrumentation = python3Packages.buildPythonPackage rec { + opentelemetry-instrumentation = fetchWheel { pname = "opentelemetry-instrumentation"; version = "0.60b1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = otelContribSrc; - sourceRoot = "${src.name}/opentelemetry-instrumentation"; - propagatedBuildInputs = [ opentelemetry-api opentelemetry-semantic-conventions ] ++ (with python3Packages; [ wrapt packaging ]); - doCheck = false; + hash = lib.fakeHash; + propagatedBuildInputs = with python3Packages; [ wrapt packaging ]; meta = with lib; { description = "OpenTelemetry instrumentation base"; homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib"; license = licenses.asl20; }; }; - recurring-ical-events = python3Packages.buildPythonPackage rec { + recurring-ical-events = fetchWheel { pname = "recurring-ical-events"; version = "3.8.2"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = fetchFromGitHub { - owner = "niccokunzmann"; - repo = "python-recurring-ical-events"; - rev = "v${version}"; - hash = "sha256-/xTv/JovC8IVZz14ygnEL5vg/W8xR4Ie78hTi+gG58M="; - }; - propagatedBuildInputs = [ x-wr-timezone ] ++ (with python3Packages; [ icalendar python-dateutil ]); - doCheck = false; + hash = lib.fakeHash; + propagatedBuildInputs = with python3Packages; [ icalendar python-dateutil ]; meta = with lib; { description = "Recurring iCalendar event expander"; homepage = "https://github.com/niccokunzmann/python-recurring-ical-events"; license = licenses.lgpl3Plus; }; }; - opentelemetry-exporter-otlp-proto-grpc = python3Packages.buildPythonPackage rec { + opentelemetry-exporter-otlp-proto-grpc = fetchWheel { pname = "opentelemetry-exporter-otlp-proto-grpc"; version = "1.39.1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = otelPythonSrc; - sourceRoot = "${src.name}/exporter/opentelemetry-exporter-otlp-proto-grpc"; - propagatedBuildInputs = [ opentelemetry-api opentelemetry-sdk opentelemetry-proto opentelemetry-exporter-otlp-proto-common googleapis-common-protos ] ++ (with python3Packages; [ grpcio deprecated ]); - doCheck = false; + hash = lib.fakeHash; + propagatedBuildInputs = with python3Packages; [ grpcio deprecated ]; meta = with lib; { description = "OpenTelemetry OTLP gRPC exporter"; homepage = "https://github.com/open-telemetry/opentelemetry-python"; license = licenses.asl20; }; }; - qdrant-client = python3Packages.buildPythonPackage rec { + qdrant-client = fetchWheel { pname = "qdrant-client"; version = "1.18.0"; - pyproject = true; - build-system = [ python3Packages.poetry-core ]; - src = fetchFromGitHub { - owner = "qdrant"; - repo = "qdrant-client"; - rev = "v${version}"; - hash = "sha256-ZBP1D67u+KZmBi614nuToauI+xhdH1PKD3g6xRfFQxk="; - }; + hash = lib.fakeHash; propagatedBuildInputs = with python3Packages; [ grpcio httpx numpy portalocker protobuf pydantic urllib3 ]; - doCheck = false; meta = with lib; { description = "Qdrant vector search engine client"; homepage = "https://github.com/qdrant/qdrant-client"; license = licenses.asl20; }; }; - # ── Tier 4 ── - - opentelemetry-instrumentation-asgi = python3Packages.buildPythonPackage rec { + opentelemetry-instrumentation-asgi = fetchWheel { pname = "opentelemetry-instrumentation-asgi"; version = "0.60b1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = otelContribSrc; - sourceRoot = "${src.name}/instrumentation/opentelemetry-instrumentation-asgi"; - propagatedBuildInputs = [ opentelemetry-api opentelemetry-instrumentation opentelemetry-semantic-conventions opentelemetry-util-http ] ++ (with python3Packages; [ asgiref ]); - doCheck = false; + hash = lib.fakeHash; + propagatedBuildInputs = with python3Packages; [ asgiref ]; meta = with lib; { description = "OpenTelemetry ASGI instrumentation"; homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib"; license = licenses.asl20; }; }; - opentelemetry-instrumentation-httpx = python3Packages.buildPythonPackage rec { + opentelemetry-instrumentation-httpx = fetchWheel { pname = "opentelemetry-instrumentation-httpx"; version = "0.60b1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = otelContribSrc; - sourceRoot = "${src.name}/instrumentation/opentelemetry-instrumentation-httpx"; - propagatedBuildInputs = [ opentelemetry-api opentelemetry-instrumentation opentelemetry-semantic-conventions opentelemetry-util-http ] ++ (with python3Packages; [ httpx wrapt ]); - doCheck = false; + hash = lib.fakeHash; + propagatedBuildInputs = with python3Packages; [ httpx wrapt ]; meta = with lib; { description = "OpenTelemetry HTTPX instrumentation"; homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib"; license = licenses.asl20; }; }; - opentelemetry-instrumentation-logging = python3Packages.buildPythonPackage rec { + opentelemetry-instrumentation-logging = fetchWheel { pname = "opentelemetry-instrumentation-logging"; version = "0.60b1"; - pyproject = true; - build-system = [ python3Packages.hatchling ]; - src = otelContribSrc; - sourceRoot = "${src.name}/instrumentation/opentelemetry-instrumentation-logging"; - propagatedBuildInputs = [ opentelemetry-api opentelemetry-instrumentation ]; - doCheck = false; + hash = lib.fakeHash; meta = with lib; { description = "OpenTelemetry logging instrumentation"; homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib"; license = licenses.asl20; }; }; - langchain-text-splitters = python3Packages.buildPythonPackage rec { + langchain-text-splitters = fetchWheel { pname = "langchain-text-splitters"; version = "1.1.2"; - pyproject = true; - build-system = [ python3Packages.poetry-core ]; - src = fetchFromGitHub { - owner = "langchain-ai"; - repo = "langchain"; - rev = "langchain-text-splitters==${version}"; - hash = "sha256-AiRl8N2V2UfYLZfqxM8DHZmT76rH19I1gFyOYc/mpYY="; - }; - sourceRoot = "${src.name}/libs/text-splitters"; + hash = lib.fakeHash; propagatedBuildInputs = with python3Packages; [ langchain-core ]; - doCheck = false; meta = with lib; { description = "LangChain text splitting utilities"; homepage = "https://github.com/langchain-ai/langchain"; license = licenses.mit; }; }; @@ -304,11 +192,13 @@ python3Packages.buildPythonApplication rec { build-system = [ python3Packages.hatchling ]; dependencies = with python3Packages; [ + # ── nixpkgs packages ── mcp httpx pillow icalendar pydantic click caldav pyjwt aiosqlite alembic authlib fastembed anthropic boto3 starlette jinja2 markdownify pymupdf pymupdf4llm openai dynaconf mistralai sqlalchemy + # ── Inlined wheel packages ── pythonvcard4 prometheus-client python-json-logger importlib-metadata googleapis-common-protos opentelemetry-api opentelemetry-proto opentelemetry-semantic-conventions opentelemetry-sdk @@ -326,7 +216,7 @@ python3Packages.buildPythonApplication rec { --replace-fail '"mcp[cli]>=1.27,<1.28"' '"mcp"' \ --replace-fail '"pymupdf4llm>=0.2.2"' '"pymupdf4llm"' \ --replace-fail '"pymupdf>=1.26.6"' '"pymupdf"' \ - --replace-fail '"qrant-client>=1.17.0"' '"qdrant-client"' \ + --replace-fail '"qdrant-client>=1.17.0"' '"qdrant-client"' \ --replace-fail '"opentelemetry-api>=1.28.2"' '"opentelemetry-api"' \ --replace-fail '"opentelemetry-sdk>=1.28.2"' '"opentelemetry-sdk"' \ --replace-fail '"opentelemetry-instrumentation-asgi>=0.49b2"' '"opentelemetry-instrumentation-asgi"' \