Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
fbd5f75
fix: hide __SheetlyMigrationsHistory__ sheet on creation
muqimjon Feb 27, 2026
1585037
perf: add in-memory sheet metadata cache to eliminate redundant API c…
muqimjon Feb 27, 2026
2b06ab6
perf: replace 5-call ID management with formula-based auto-increment
muqimjon Feb 27, 2026
1c0cf38
perf: batch append rows in single API call instead of N calls
muqimjon Feb 27, 2026
c947393
feat: add automatic change tracking via JSON snapshot comparison
muqimjon Feb 27, 2026
0a2c7bf
perf: optimize FindAsync to scan only PK column instead of all rows
muqimjon Feb 27, 2026
408ef4e
feat: support multiple credentials for round-robin API quota rotation
muqimjon Feb 27, 2026
d51b8bc
feat: add expression-based Include overload for type-safe navigation …
muqimjon Feb 27, 2026
6cf393b
feat: implement IAsyncDisposable and add CancellationToken to SaveCha…
muqimjon Feb 27, 2026
2fb39f2
feat: add SheetsContextOptions<TContext> constructor pattern (EF Core…
muqimjon Feb 27, 2026
91eb05e
ci: add per-package release workflows triggered by version tags
muqimjon Feb 27, 2026
4fd5e7e
refactor: remove inline comments and dead code
muqimjon Feb 27, 2026
387b69d
refactor: add guard clause to SaveChangesAsync
muqimjon Feb 27, 2026
d0380ce
test: add tests for change tracking and expression Include
muqimjon Feb 27, 2026
b6404a9
docs: update README with new features
muqimjon Feb 27, 2026
75569b3
chore: bump version to 1.1.0
muqimjon Feb 27, 2026
8ad3d8f
feat: add Sheetly.Excel provider with ClosedXML
muqimjon Feb 27, 2026
f9e0981
ci: add release workflow for Sheetly.Excel package
muqimjon Feb 27, 2026
9dbf289
refactor: remove dead MigrationBuilder.BuildFromContext duplicate
muqimjon Feb 27, 2026
422f080
fix: prevent OverflowException in round-robin credential rotation
muqimjon Feb 27, 2026
deefb43
refactor: remove redundant comments from release workflows
muqimjon Feb 27, 2026
19b4882
docs: add Excel provider to README
muqimjon Feb 27, 2026
b26ba1e
feat: add Sheetly.Test console sample project
muqimjon Feb 27, 2026
4fecee4
fix: resolve CLI assembly MVID mismatch with ProjectAssemblyLoadContext
muqimjon Feb 27, 2026
c916e54
refactor: adopt EF Core OperationExecutor pattern for CLI
muqimjon Feb 27, 2026
c460bbb
fix: scaffold reads snapshot from assembly + remove ClassName comment…
muqimjon Feb 28, 2026
597b6fa
refactor: remove inline comments, modernize null checks (is null/is n…
muqimjon Feb 28, 2026
38f954c
refactor: clean up CLI code (inline comments, null patterns)
muqimjon Feb 28, 2026
0458beb
refactor: restructure samples - delete Test, update Sample for Excel+…
muqimjon Feb 28, 2026
e40644a
fix: swap UseGoogleSheets params to (spreadsheetId, credentialsPath),…
muqimjon Feb 28, 2026
01acb0c
fix: non-numeric PK auto-increment, ProductVersion uses real assembly…
muqimjon Feb 28, 2026
cc8909a
fix: PK required/nullable rules, user-assigned PK validation, string …
muqimjon Feb 28, 2026
e8b2827
feat: schema-based ID generation with batch reservation, release 1.1.0
muqimjon Feb 28, 2026
094dcac
fix: GetAndIncrementIdAsync - bool.TryParse for IsPrimaryKey, GetValu…
muqimjon Feb 28, 2026
7a28946
refactor: primary constructors + update RELEASE_NOTES for v1.1.0
muqimjon Feb 28, 2026
51f56c3
Update Excel provider usage in release notes
muqimjon Feb 28, 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
49 changes: 49 additions & 0 deletions .github/workflows/release-cli.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Release Sheetly.CLI (dotnet-sheetly)

on:
push:
tags:
- 'cli-v*'

jobs:
release:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.x'

- name: Extract version from tag
id: version
run: |
TAG="${{ github.ref_name }}"
VERSION="${TAG#cli-v}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Releasing dotnet-sheetly (CLI) v$VERSION"

- name: Build
run: dotnet build Sheetly.sln -c Release --no-incremental

- name: Test
run: dotnet test tests/Sheetly.Core.Tests/ -c Release --no-build --verbosity normal

- name: Pack dotnet-sheetly CLI tool
run: dotnet pack src/Sheetly.CLI/Sheetly.CLI.csproj -c Release --no-build -o ./nupkg

- name: Push to NuGet
run: |
dotnet nuget push nupkg/dotnet-sheetly.${{ steps.version.outputs.version }}.nupkg \
-k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json --skip-duplicate

- name: Create GitHub Release
uses: ncipollo/release-action@v1
with:
tag: ${{ github.ref_name }}
name: "dotnet-sheetly (CLI) v${{ steps.version.outputs.version }}"
artifacts: nupkg/dotnet-sheetly.${{ steps.version.outputs.version }}.nupkg
token: ${{ secrets.GITHUB_TOKEN }}
skipIfReleaseExists: true
49 changes: 49 additions & 0 deletions .github/workflows/release-core.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Release Sheetly.Core

on:
push:
tags:
- 'core-v*'

jobs:
release:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.x'

- name: Extract version from tag
id: version
run: |
TAG="${{ github.ref_name }}"
VERSION="${TAG#core-v}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Releasing Sheetly.Core v$VERSION"

- name: Build
run: dotnet build Sheetly.sln -c Release --no-incremental

- name: Test
run: dotnet test tests/Sheetly.Core.Tests/ -c Release --no-build --verbosity normal

- name: Pack Sheetly.Core
run: dotnet pack src/Sheetly.Core/Sheetly.Core.csproj -c Release --no-build -o ./nupkg

- name: Push to NuGet
run: |
dotnet nuget push nupkg/Sheetly.Core.${{ steps.version.outputs.version }}.nupkg \
-k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json --skip-duplicate

- name: Create GitHub Release
uses: ncipollo/release-action@v1
with:
tag: ${{ github.ref_name }}
name: "Sheetly.Core v${{ steps.version.outputs.version }}"
artifacts: nupkg/Sheetly.Core.${{ steps.version.outputs.version }}.nupkg
token: ${{ secrets.GITHUB_TOKEN }}
skipIfReleaseExists: true
49 changes: 49 additions & 0 deletions .github/workflows/release-di.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Release Sheetly.DependencyInjection

on:
push:
tags:
- 'di-v*'

jobs:
release:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.x'

- name: Extract version from tag
id: version
run: |
TAG="${{ github.ref_name }}"
VERSION="${TAG#di-v}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Releasing Sheetly.DependencyInjection v$VERSION"

- name: Build
run: dotnet build Sheetly.sln -c Release --no-incremental

- name: Test
run: dotnet test tests/Sheetly.Core.Tests/ -c Release --no-build --verbosity normal

- name: Pack Sheetly.DependencyInjection
run: dotnet pack src/Sheetly.DependencyInjection/Sheetly.DependencyInjection.csproj -c Release --no-build -o ./nupkg

- name: Push to NuGet
run: |
dotnet nuget push nupkg/Sheetly.DependencyInjection.${{ steps.version.outputs.version }}.nupkg \
-k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json --skip-duplicate

- name: Create GitHub Release
uses: ncipollo/release-action@v1
with:
tag: ${{ github.ref_name }}
name: "Sheetly.DependencyInjection v${{ steps.version.outputs.version }}"
artifacts: nupkg/Sheetly.DependencyInjection.${{ steps.version.outputs.version }}.nupkg
token: ${{ secrets.GITHUB_TOKEN }}
skipIfReleaseExists: true
49 changes: 49 additions & 0 deletions .github/workflows/release-excel.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Release Sheetly.Excel

on:
push:
tags:
- 'excel-v*'

jobs:
release:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.x'

- name: Extract version from tag
id: version
run: |
TAG="${{ github.ref_name }}"
VERSION="${TAG#excel-v}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Releasing Sheetly.Excel v$VERSION"

- name: Build
run: dotnet build Sheetly.sln -c Release --no-incremental

- name: Test
run: dotnet test tests/Sheetly.Core.Tests/ -c Release --no-build --verbosity normal

- name: Pack Sheetly.Excel
run: dotnet pack src/Sheetly.Excel/Sheetly.Excel.csproj -c Release --no-build -o ./nupkg

- name: Push to NuGet
run: |
dotnet nuget push nupkg/Sheetly.Excel.${{ steps.version.outputs.version }}.nupkg \
-k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json --skip-duplicate

- name: Create GitHub Release
uses: ncipollo/release-action@v1
with:
tag: ${{ github.ref_name }}
name: "Sheetly.Excel v${{ steps.version.outputs.version }}"
artifacts: nupkg/Sheetly.Excel.${{ steps.version.outputs.version }}.nupkg
token: ${{ secrets.GITHUB_TOKEN }}
skipIfReleaseExists: true
49 changes: 49 additions & 0 deletions .github/workflows/release-google.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Release Sheetly.Google

on:
push:
tags:
- 'google-v*'

jobs:
release:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.x'

- name: Extract version from tag
id: version
run: |
TAG="${{ github.ref_name }}"
VERSION="${TAG#google-v}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Releasing Sheetly.Google v$VERSION"

- name: Build
run: dotnet build Sheetly.sln -c Release --no-incremental

- name: Test
run: dotnet test tests/Sheetly.Core.Tests/ -c Release --no-build --verbosity normal

- name: Pack Sheetly.Google
run: dotnet pack src/Sheetly.Google/Sheetly.Google.csproj -c Release --no-build -o ./nupkg

- name: Push to NuGet
run: |
dotnet nuget push nupkg/Sheetly.Google.${{ steps.version.outputs.version }}.nupkg \
-k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json --skip-duplicate

- name: Create GitHub Release
uses: ncipollo/release-action@v1
with:
tag: ${{ github.ref_name }}
name: "Sheetly.Google v${{ steps.version.outputs.version }}"
artifacts: nupkg/Sheetly.Google.${{ steps.version.outputs.version }}.nupkg
token: ${{ secrets.GITHUB_TOKEN }}
skipIfReleaseExists: true
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -449,3 +449,6 @@ nupkg/
build.log

nupkg/

# Sheetly Excel data files
*.xlsx
Loading