Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
46471ea
docs(sdd): define generated materialization architecture
rodri-oliveira-dev Jul 27, 2026
130b950
perf(benchmarks): establish materialization baseline
rodri-oliveira-dev Jul 27, 2026
ebfde92
feat(materialization): introduce generated materializer contracts
rodri-oliveira-dev Jul 28, 2026
200c7af
feat(generator): generate flat entity materializers
rodri-oliveira-dev Jul 28, 2026
bef1c46
feat(generator): support complex generated materialization
rodri-oliveira-dev Jul 28, 2026
a3c1c73
feat(materialization): integrate generated query materializers
rodri-oliveira-dev Jul 28, 2026
d7b872a
perf(materialization): harden generated materialization path
rodri-oliveira-dev Jul 28, 2026
664d74a
docs(sdd): define persistence semantics architecture
rodri-oliveira-dev Jul 28, 2026
12a6d98
feat(mapping): add property persistence metadata
rodri-oliveira-dev Jul 28, 2026
cf1fcce
fix(materialization): preserve read and ignore semantics
rodri-oliveira-dev Jul 28, 2026
9061d3e
feat(dommel): honor property persistence semantics
rodri-oliveira-dev Jul 28, 2026
eb57d8d
feat(diagnostics): validate persistence mapping behavior
rodri-oliveira-dev Jul 28, 2026
09a6f9e
test(regression): cover historical FluentMap issues
rodri-oliveira-dev Jul 28, 2026
d19eac2
fix(mapping): harden persistence behavior compatibility
rodri-oliveira-dev Jul 28, 2026
23b7411
docs(sdd): define advanced query materialization architecture
rodri-oliveira-dev Jul 28, 2026
1d67263
feat(query): add mapped multiple-result infrastructure
rodri-oliveira-dev Jul 28, 2026
1d707cc
feat(query): support mapped multiple-result reads
rodri-oliveira-dev Jul 28, 2026
80d1aba
feat(query): add unbuffered mapped materialization
rodri-oliveira-dev Jul 28, 2026
3a70146
feat(query): add async mapped streaming
rodri-oliveira-dev Jul 28, 2026
095bdc1
test(query): harden advanced materialization scenarios
rodri-oliveira-dev Jul 28, 2026
3d36d17
docs(query): finalize advanced materialization support
rodri-oliveira-dev Jul 28, 2026
295ee1e
docs(sdd): define property conversion architecture
rodri-oliveira-dev Jul 28, 2026
24bc34f
feat(mapping): add property converter metadata
rodri-oliveira-dev Jul 28, 2026
99f89dc
feat(materialization): apply property read converters
rodri-oliveira-dev Jul 28, 2026
074d74f
feat(generator): generate property conversion paths
rodri-oliveira-dev Jul 28, 2026
05cf319
docs(sdd): document dommel write conversion boundary
rodri-oliveira-dev Jul 28, 2026
7ecd095
feat(diagnostics): validate property converter configuration
rodri-oliveira-dev Jul 29, 2026
ee55098
docs(conversion): finalize property converter support
rodri-oliveira-dev Jul 29, 2026
a6b2362
docs(sdd): define isolated configuration architecture
rodri-oliveira-dev Jul 29, 2026
07e6b96
feat(configuration): add immutable configuration model
rodri-oliveira-dev Jul 29, 2026
11028d5
refactor(runtime): isolate mapping configuration state
rodri-oliveira-dev Jul 29, 2026
b2a47bc
refactor(configuration): bridge static API to isolated runtime
rodri-oliveira-dev Jul 29, 2026
d7d2c05
feat(di): add FluentMap dependency injection integration
rodri-oliveira-dev Jul 29, 2026
a84b990
test(configuration): harden isolation and concurrency
rodri-oliveira-dev Jul 29, 2026
10492c0
docs(configuration): finalize isolation and DI support
rodri-oliveira-dev Jul 29, 2026
baf4d2f
docs(sdd): define release readiness criteria
rodri-oliveira-dev Jul 29, 2026
c5364f3
ci(compat): validate supported Dapper versions
rodri-oliveira-dev Jul 29, 2026
61db3b3
test(providers): validate database compatibility
rodri-oliveira-dev Jul 29, 2026
7b6ac29
build(packaging): harden NuGet package validation
rodri-oliveira-dev Jul 29, 2026
77ee77a
ci(release): harden build and release workflows
rodri-oliveira-dev Jul 29, 2026
432705c
docs: prepare FluentMap for stable adoption
rodri-oliveira-dev Jul 29, 2026
15e926c
chore(release): complete FluentMap readiness audit
rodri-oliveira-dev Jul 29, 2026
a71d021
chore(release): prepare versioning for 3.0.0-rc.1
rodri-oliveira-dev Jul 29, 2026
e6e4627
ci(release): qualify 3.0.0-rc.1 artifacts
rodri-oliveira-dev Jul 29, 2026
44f6901
fix(release): allow remote qualification on release branch
rodri-oliveira-dev Jul 29, 2026
5fc4b7c
docs(release): record remote rc qualification
rodri-oliveira-dev Jul 29, 2026
9443f7a
test(packages): validate rc package consumption
rodri-oliveira-dev Jul 29, 2026
b4e0323
chore(release): finalize 3.0.0-rc.1 candidate
rodri-oliveira-dev Jul 29, 2026
2315d89
docs(release): record 3.0.0-rc.1 publication block
rodri-oliveira-dev Jul 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
timezone: "America/Sao_Paulo"
open-pull-requests-limit: 5

- package-ecosystem: "nuget"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "09:30"
timezone: "America/Sao_Paulo"
open-pull-requests-limit: 5
groups:
dotnet-minor-patch:
update-types:
- "minor"
- "patch"
180 changes: 168 additions & 12 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
push:
branches:
- master
- chore/net10-migration
- feature/etapa-3
pull_request:

env:
Expand All @@ -15,39 +15,195 @@ env:
permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: Build, test and pack
compatibility:
name: Compatibility (${{ matrix.dapper-lane }}, Dapper ${{ matrix.dapper-version }})
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include:
- dapper-lane: minimum-and-latest-stable
dapper-version: 2.1.79

steps:
- name: Checkout
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 1
persist-credentials: false
show-progress: false

- name: Setup .NET
uses: actions/setup-dotnet@v6
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6
with:
dotnet-version: 10.0.x
dotnet-quality: ga
global-json-file: global.json

- name: Show .NET info
run: dotnet --info

- name: Restore
run: dotnet restore ./Dapper.FluentMap.sln -p:DapperPackageVersion=${{ matrix.dapper-version }}

- name: Audit NuGet dependencies
run: dotnet list ./Dapper.FluentMap.sln package --vulnerable --include-transitive

- name: Build Release
run: dotnet build ./Dapper.FluentMap.sln --configuration Release --no-restore -p:DapperPackageVersion=${{ matrix.dapper-version }}

- name: Test core compatibility
run: dotnet test ./test/Dapper.FluentMap.Tests/Dapper.FluentMap.Tests.csproj --configuration Release --no-build

- name: Test generated registration compatibility
run: dotnet test ./test/Dapper.FluentMap.GeneratedRegistration.Tests/Dapper.FluentMap.GeneratedRegistration.Tests.csproj --configuration Release --no-build

- name: Test dependency injection compatibility
run: dotnet test ./test/Dapper.FluentMap.DependencyInjection.Tests/Dapper.FluentMap.DependencyInjection.Tests.csproj --configuration Release --no-build

- name: Test Dommel compatibility
run: dotnet test ./test/Dapper.FluentMap.Dommel.Tests/Dapper.FluentMap.Dommel.Tests.csproj --configuration Release --no-build

- name: Test provider compatibility
run: dotnet test ./test/Dapper.FluentMap.ProviderCompatibility.Tests/Dapper.FluentMap.ProviderCompatibility.Tests.csproj --configuration Release --no-build

roslyn-components:
name: Analyzer and generator compatibility
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 1
persist-credentials: false
show-progress: false

- name: Setup .NET
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6
with:
global-json-file: global.json

- name: Restore
run: dotnet restore ./Dapper.FluentMap.sln

- name: Audit NuGet dependencies
run: dotnet list ./Dapper.FluentMap.sln package --vulnerable --include-transitive

- name: Build analyzers
run: dotnet build ./src/Dapper.FluentMap.Analyzers/Dapper.FluentMap.Analyzers.csproj --configuration Release --no-restore

- name: Build generators
run: dotnet build ./src/Dapper.FluentMap.Generators/Dapper.FluentMap.Generators.csproj --configuration Release --no-restore

- name: Test analyzers
run: dotnet test ./test/Dapper.FluentMap.Analyzers.Tests/Dapper.FluentMap.Analyzers.Tests.csproj --configuration Release

- name: Test generators
run: dotnet test ./test/Dapper.FluentMap.Generators.Tests/Dapper.FluentMap.Generators.Tests.csproj --configuration Release

pack:
name: Pack
runs-on: ubuntu-latest
timeout-minutes: 20
needs:
- compatibility
- roslyn-components

steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 1
persist-credentials: false
show-progress: false

- name: Setup .NET
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6
with:
global-json-file: global.json

- name: Restore
run: dotnet restore ./Dapper.FluentMap.sln

- name: Build Release
run: dotnet build ./Dapper.FluentMap.sln --configuration Release --no-restore

- name: Test Release
run: dotnet test ./Dapper.FluentMap.sln --configuration Release --no-build

- name: Pack Release
run: dotnet pack ./Dapper.FluentMap.sln --configuration Release --no-build --output ./artifacts/packages

- name: Validate package artifact set
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$packageDir = './artifacts/packages'
$nupkgs = @(Get-ChildItem -Path $packageDir -Filter '*.nupkg' -File)
$snupkgs = @(Get-ChildItem -Path $packageDir -Filter '*.snupkg' -File)
$unexpected = @($nupkgs + $snupkgs | Where-Object { $_.Name -match '(Tests|Benchmarks|AotSmoke)' })

if ($nupkgs.Count -ne 5) {
throw "Expected 5 .nupkg files, found $($nupkgs.Count)."
}

if ($snupkgs.Count -ne 3) {
throw "Expected 3 .snupkg files, found $($snupkgs.Count)."
}

if ($unexpected.Count -gt 0) {
throw "Unexpected test/benchmark artifacts: $($unexpected.Name -join ', ')"
}

$unsafe = @($nupkgs + $snupkgs | Where-Object { $_.Name -match '\.(2\.0\.0|3\.0\.0)\.(nupkg|snupkg)$' })
if ($unsafe.Count -gt 0) {
throw "Unsafe package versions produced by default CI pack: $($unsafe.Name -join ', ')"
}

- name: Write release metadata
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
New-Item -ItemType Directory -Force -Path './artifacts/release-metadata' | Out-Null
dotnet list ./Dapper.FluentMap.sln package --include-transitive --format json |
Set-Content -Encoding utf8NoBOM -Path './artifacts/release-metadata/dependencies.json'

$packageFiles = @(
Get-ChildItem -Path './artifacts/packages' -Filter '*.nupkg' -File
Get-ChildItem -Path './artifacts/packages' -Filter '*.snupkg' -File
) |
Sort-Object Name |
ForEach-Object {
[ordered]@{
name = $_.Name
sha256 = (Get-FileHash -LiteralPath $_.FullName -Algorithm SHA256).Hash.ToLowerInvariant()
size = $_.Length
}
}

[ordered]@{
schemaVersion = '1.0'
repository = '${{ github.repository }}'
ref = '${{ github.ref }}'
sha = '${{ github.sha }}'
runId = '${{ github.run_id }}'
runAttempt = '${{ github.run_attempt }}'
dotnetSdk = (dotnet --version)
packageFiles = @($packageFiles)
} |
ConvertTo-Json -Depth 5 |
Set-Content -Encoding utf8NoBOM -Path './artifacts/release-metadata/release-metadata.json'

- name: Upload NuGet packages
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: nuget-packages
path: ./artifacts/packages/*.nupkg
path: |
./artifacts/packages/*.nupkg
./artifacts/packages/*.snupkg
./artifacts/release-metadata/*.json
if-no-files-found: error
retention-days: 14
Loading
Loading