diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9018c93..30acf5d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -27,6 +27,17 @@ jobs:
- name: Build and run unit tests
run: dotnet test Tests/Unit/Esiur.Tests.Unit.csproj --configuration Release --no-restore --verbosity minimal
+ - name: Build and run CLI tests
+ run: dotnet test Tests/Esiur.CLI.Tests/Esiur.CLI.Tests.csproj --configuration Release --no-restore --verbosity minimal
+
+ - name: Pack and install CLI tool
+ shell: pwsh
+ run: |
+ dotnet pack Tools/Esiur.CLI/Esiur.CLI.csproj --configuration Release --no-build --no-restore --output artifacts/nuget
+ dotnet tool install Esiur.CLI --version 3.0.0 --tool-path artifacts/tool --add-source artifacts/nuget
+ & ./artifacts/tool/esiur.exe version
+ & ./artifacts/tool/esiur.exe --help
+
- name: Build standalone web example
run: dotnet build Examples/StandaloneWebServer/Esiur.Examples.StandaloneWebServer.csproj --configuration Release --no-restore --verbosity minimal
diff --git a/Stores/Esiur.Stores.EntityCore/Esiur.Stores.EntityCore.csproj b/Stores/Esiur.Stores.EntityCore/Esiur.Stores.EntityCore.csproj
index 4ebe22b..f1d5980 100644
--- a/Stores/Esiur.Stores.EntityCore/Esiur.Stores.EntityCore.csproj
+++ b/Stores/Esiur.Stores.EntityCore/Esiur.Stores.EntityCore.csproj
@@ -10,6 +10,7 @@
true
Esiur.Stores.EntityCore
3.0.0
+ README.md
latest
MIT
@@ -20,6 +21,7 @@
+
diff --git a/Stores/Esiur.Stores.EntityCore/README.md b/Stores/Esiur.Stores.EntityCore/README.md
new file mode 100644
index 0000000..00fda42
--- /dev/null
+++ b/Stores/Esiur.Stores.EntityCore/README.md
@@ -0,0 +1,69 @@
+# Esiur Entity Framework Core Store
+
+`Esiur.Stores.EntityCore` integrates Esiur resource materialization and paths
+with Entity Framework Core 10. Version 3.0 targets .NET 10.
+
+## Installation
+
+```shell
+dotnet add package Esiur.Stores.EntityCore --version 3.0.0
+dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 10.0.10
+```
+
+Install the package for the database provider used by your application before
+configuring Esiur.
+
+## Usage
+
+Configure the database provider first, then attach an `EntityStore` using
+`UseEsiur`:
+
+```csharp
+using Esiur.Resource;
+using Esiur.Stores.EntityCore;
+using Microsoft.EntityFrameworkCore;
+
+var warehouse = new Warehouse();
+var store = await warehouse.Put("database", new EntityStore());
+
+DbContextOptions? options = null;
+options = new DbContextOptionsBuilder()
+ .UseSqlite("Data Source=app.db")
+ .UseEsiur(store, () => new AppDbContext(options!))
+ .Options;
+
+await warehouse.Open();
+
+await using var db = new AppDbContext(options);
+await db.Database.EnsureCreatedAsync();
+var device = await db.Devices.AddResourceAsync(
+ new Device { Name = "sensor-1" });
+```
+
+An entity exposed as an Esiur resource can use the source generator:
+
+```csharp
+using System.ComponentModel.DataAnnotations;
+using Esiur.Resource;
+using Microsoft.EntityFrameworkCore;
+
+[Resource]
+public partial class Device
+{
+ [Key, Export]
+ int id;
+
+ [Export]
+ string name = string.Empty;
+}
+
+public sealed class AppDbContext(DbContextOptions options)
+ : DbContext(options)
+{
+ public DbSet Devices => Set();
+}
+```
+
+The `UseEsiur` extension works with any EF Core provider. The Esiur test suite
+covers SQLite persistence and materialization, plus PostgreSQL and MySQL model
+creation and SQL translation.
diff --git a/Tools/Esiur.CLI/Esiur.CLI.csproj b/Tools/Esiur.CLI/Esiur.CLI.csproj
index 3099774..45634f9 100644
--- a/Tools/Esiur.CLI/Esiur.CLI.csproj
+++ b/Tools/Esiur.CLI/Esiur.CLI.csproj
@@ -3,13 +3,12 @@
Esiur command-line tool
Ahmed Kh. Zamil
- http://www.esiur.com
- true
3.0.0
+ Esiur.CLI
Ahmed Kh. Zamil
Esiur Foundation
- http://www.esiur.com
+ https://www.esiur.com/
https://github.com/esiur/esiur-dotnet/
README.md
@@ -19,10 +18,10 @@
net10.0
enable
enable
- Esiur.Cli
+ Esiur.CLI
Esiur.CLI
- true
- true
+ true
+ true
false
false
diff --git a/Tools/Esiur.CLI/README.md b/Tools/Esiur.CLI/README.md
index 9d82324..a7990e5 100644
--- a/Tools/Esiur.CLI/README.md
+++ b/Tools/Esiur.CLI/README.md
@@ -9,10 +9,10 @@ The project targets .NET 10:
```console
dotnet build Tools/Esiur.CLI/Esiur.CLI.csproj
dotnet pack Tools/Esiur.CLI/Esiur.CLI.csproj -c Release
-dotnet tool install --global --add-source Tools/Esiur.CLI/nupkg Esiur.Cli
+dotnet tool install --global --add-source Tools/Esiur.CLI/nupkg Esiur.CLI
```
-The project is configured for self-contained, single-file, non-trimmed publishing. Platform release archives and installers are planned for the packaging phase.
+Runtime-specific publishes are configured as self-contained, single-file, and non-trimmed. The NuGet tool remains framework-dependent and requires .NET 10.
## Login and profiles