Skip to content

RavenDB-27069: make the .NET requirement explicit + support running without system .NET#35

Open
poissoncorp wants to merge 16 commits into
ravendb:v7.2from
poissoncorp:rdbc-27069-embedded
Open

RavenDB-27069: make the .NET requirement explicit + support running without system .NET#35
poissoncorp wants to merge 16 commits into
ravendb:v7.2from
poissoncorp:rdbc-27069-embedded

Conversation

@poissoncorp

@poissoncorp poissoncorp commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Why

The bundled server is a .NET application, and the required runtime changed from .NET 8 (7.1.x)
to .NET 10 (7.2.x). That requirement was not stated anywhere, and the "run without .NET"
(self-contained) path did not actually work: a self-contained build was misclassified and run
through dotnet anyway, and on Windows the apphost name was wrong.

Changes

  • README rewritten around usage cases, with an explicit .NET version table (7.1 -> .NET 8,
    7.2 -> .NET 10) and how to check the installed runtime. Users see what they need before
    installing.
  • python_requires>=3.10 - the ravendb client uses a PEP 604 union at runtime and cannot
    be imported on 3.9, so an install on 3.9 would fail at import. This stops it up front.
  • Self-contained detection fix in ExternalServerProvider: a self-contained build is now
    recognized via includedFrameworks in the server runtime config and launched through its
    native apphost (Raven.Server[.exe]) instead of falling back to dotnet. The Windows apphost
    name is corrected to Raven.Server.exe. This is what makes the no-.NET path work.
  • CI: net10-only matrix (ubuntu + windows, Python 3.13); a step that reads the bundled
    server's runtime config and fails if a matching .NET major is not installed; a separate job
    that runs the self-contained path with no .NET installed. CI now exercises both the documented
    requirement and the no-.NET path.
  • Dead code removed: the no-op CommandLineArgumentEscaper (args are passed to Popen as a
    list, so there is no shell to escape for) and the unused pin_framework_version test helper.
  • Labs (labs/): runnable guides, one per usage case - embedded zero-config (01), external
    self-contained, no .NET (02), and on-demand cached download (04, exploration only).

The test-driver imports from this package; its RavenDB-27069 PR should be released together with
this one.

… (run apphost, no dotnet)

Read Raven.Server.runtimeconfig.json: an includedFrameworks build bundles the runtime, so run
the native apphost (Raven.Server[.exe]) directly instead of 'dotnet Raven.Server.dll'. Fixes the
no-.NET path, which previously fell back to a system dotnet because a self-contained dir also
contains Raven.Server.dll. Also pick the platform apphost (.exe on Windows).
…+ self-contained path

The 7.2 server targets net10.0, so the old .NET 8 matrix cell was fake (green only because
runners preinstall .NET 10). Now: OS {ubuntu,windows} x Python 3.13 x .NET 10; a derive+enforce
step (scripts/check_dotnet_requirement.py) fails if the installed runtime does not match the
bundled server; Lab 01 runs on the .NET job; a separate job proves the self-contained (no-.NET)
path via Lab 02.
…e Python >=3.10

The .NET-matrix pin machinery is unused now that CI is net10-only. Bump python_requires to
>=3.10 (the ravendb client uses PEP 604 unions at runtime and cannot import on 3.9).
…loration)

Fetches a self-contained build for the current platform on first use, caches
it, and reuses the cached copy afterwards (no re-download, no system .NET).
Marked as exploration; not wired into the package default. Updates the labs
index (Lab 03 attach lives in the test-driver repo) and ignores the local
RavenDB data dir created by test runs.
…d was shadowing README.rst on GitHub); drop redundant requirements.txt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant