9bcb8501ab
- Introduced `publish-with-sql.ps1` to publish Jellyfin with SQL files. - Added `remove-sqlite.ps1` to facilitate the removal of SQLite dependencies for PostgreSQL-only deployment. - Created `rollback-to-net10.ps1` to revert .NET 11 changes back to .NET 10. - Implemented `test_api.py` for testing API interactions. - Added `verify-migration.ps1` to verify PostgreSQL migration steps. - Updated various `.csproj` files to include `Microsoft.Kiota.Abstractions` package. - Enhanced `JellyfinDbContext` to handle concurrency exceptions during save operations. - Updated tests to include new package references and ensure compatibility with changes.
227 lines
7.8 KiB
PowerShell
227 lines
7.8 KiB
PowerShell
# Remove SQLite from Deployment - Quick Implementation
|
|
# This script removes SQLite dependencies for PostgreSQL-only deployment
|
|
|
|
param(
|
|
[Parameter(Mandatory=$false)]
|
|
[switch]$DryRun,
|
|
|
|
[Parameter(Mandatory=$false)]
|
|
[switch]$RemoveProject
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$SolutionRoot = "E:\Projects\pgsql-jellyfin"
|
|
|
|
Write-Host ""
|
|
Write-Host "================================================================" -ForegroundColor Cyan
|
|
Write-Host " Remove SQLite for PostgreSQL-Only Deployment" -ForegroundColor Cyan
|
|
Write-Host "================================================================" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
|
|
if ($DryRun) {
|
|
Write-Host "DRY RUN MODE - No changes will be made" -ForegroundColor Yellow
|
|
Write-Host ""
|
|
}
|
|
|
|
# Step 1: Backup current state
|
|
Write-Host "Step 1: Creating backup..." -ForegroundColor Cyan
|
|
if (-not $DryRun) {
|
|
Push-Location $SolutionRoot
|
|
git stash push -m "Before SQLite removal"
|
|
Write-Host " Changes stashed" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " Would stash current changes" -ForegroundColor Gray
|
|
}
|
|
|
|
# Step 2: Find SQLite references
|
|
Write-Host ""
|
|
Write-Host "Step 2: Finding SQLite references..." -ForegroundColor Cyan
|
|
|
|
$sqliteReferences = @()
|
|
|
|
# Check Jellyfin.Server.Implementations
|
|
$serverImpl = "$SolutionRoot\Jellyfin.Server.Implementations\Jellyfin.Server.Implementations.csproj"
|
|
if (Test-Path $serverImpl) {
|
|
$content = Get-Content $serverImpl -Raw
|
|
if ($content -match 'Jellyfin\.Database\.Providers\.Sqlite') {
|
|
Write-Host " Found: SQLite reference in Jellyfin.Server.Implementations" -ForegroundColor Yellow
|
|
$sqliteReferences += @{
|
|
File = $serverImpl
|
|
Pattern = '<ProjectReference Include="[^"]*Jellyfin\.Database\.Providers\.Sqlite[^"]*" />'
|
|
}
|
|
}
|
|
}
|
|
|
|
# Check Emby.Server.Implementations
|
|
$embyImpl = "$SolutionRoot\Emby.Server.Implementations\Emby.Server.Implementations.csproj"
|
|
if (Test-Path $embyImpl) {
|
|
$content = Get-Content $embyImpl -Raw
|
|
if ($content -match 'Microsoft\.Data\.Sqlite') {
|
|
Write-Host " Found: SQLite package in Emby.Server.Implementations" -ForegroundColor Yellow
|
|
$sqliteReferences += @{
|
|
File = $embyImpl
|
|
Pattern = '<PackageReference Include="Microsoft\.Data\.Sqlite"[^/]*/>'
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($sqliteReferences.Count -eq 0) {
|
|
Write-Host " No SQLite references found" -ForegroundColor Green
|
|
exit 0
|
|
}
|
|
|
|
# Step 3: Remove references
|
|
Write-Host ""
|
|
Write-Host "Step 3: Removing SQLite references..." -ForegroundColor Cyan
|
|
|
|
foreach ($ref in $sqliteReferences) {
|
|
$fileName = Split-Path $ref.File -Leaf
|
|
Write-Host " Processing: $fileName" -ForegroundColor Gray
|
|
|
|
if (-not $DryRun) {
|
|
$content = Get-Content $ref.File -Raw
|
|
$newContent = $content -replace $ref.Pattern, ''
|
|
$newContent = $newContent -replace '(\r?\n){3,}', "`r`n`r`n"
|
|
Set-Content -Path $ref.File -Value $newContent -NoNewline
|
|
Write-Host " Removed reference" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " Would remove SQLite reference" -ForegroundColor Gray
|
|
}
|
|
}
|
|
|
|
# Step 4: Exclude SQLite project from solution (optional)
|
|
if ($RemoveProject) {
|
|
Write-Host ""
|
|
Write-Host "Step 4: Excluding SQLite project from solution..." -ForegroundColor Cyan
|
|
|
|
$solutionFile = "$SolutionRoot\Jellyfin.sln"
|
|
if (Test-Path $solutionFile) {
|
|
if (-not $DryRun) {
|
|
$slnContent = Get-Content $solutionFile -Raw
|
|
$pattern = '(Project\("[^"]*"\) = "Jellyfin\.Database\.Providers\.Sqlite"[^E]*EndProject)'
|
|
$replacement = "# REMOVED: SQLite Provider`r`n# " + '$1'
|
|
$newSlnContent = $slnContent -replace $pattern, $replacement
|
|
Set-Content -Path $solutionFile -Value $newSlnContent -NoNewline
|
|
Write-Host " SQLite project commented out in solution" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " Would comment out SQLite project" -ForegroundColor Gray
|
|
}
|
|
}
|
|
}
|
|
|
|
# Step 5: Clean build directories
|
|
Write-Host ""
|
|
Write-Host "Step 5: Cleaning build directories..." -ForegroundColor Cyan
|
|
|
|
$buildDirs = @(
|
|
"$SolutionRoot\lib",
|
|
"$SolutionRoot\Jellyfin.Server.Implementations\bin",
|
|
"$SolutionRoot\Jellyfin.Server.Implementations\obj",
|
|
"$SolutionRoot\Emby.Server.Implementations\bin",
|
|
"$SolutionRoot\Emby.Server.Implementations\obj"
|
|
)
|
|
|
|
foreach ($dir in $buildDirs) {
|
|
if (Test-Path $dir) {
|
|
if (-not $DryRun) {
|
|
Remove-Item $dir -Recurse -Force
|
|
$dirName = Split-Path $dir -Leaf
|
|
Write-Host " Cleaned: $dirName" -ForegroundColor Green
|
|
} else {
|
|
$dirName = Split-Path $dir -Leaf
|
|
Write-Host " Would clean: $dirName" -ForegroundColor Gray
|
|
}
|
|
}
|
|
}
|
|
|
|
# Step 6: Test build
|
|
Write-Host ""
|
|
Write-Host "Step 6: Testing build..." -ForegroundColor Cyan
|
|
|
|
if (-not $DryRun) {
|
|
Push-Location $SolutionRoot
|
|
|
|
Write-Host " Building solution..." -ForegroundColor Gray
|
|
$buildOutput = dotnet build --configuration Release 2>&1
|
|
|
|
if ($LASTEXITCODE -eq 0) {
|
|
Write-Host " Build successful" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " Build failed" -ForegroundColor Red
|
|
Write-Host $buildOutput
|
|
|
|
Write-Host ""
|
|
Write-Host "Rolling back changes..." -ForegroundColor Yellow
|
|
git stash pop
|
|
exit 1
|
|
}
|
|
|
|
Pop-Location
|
|
} else {
|
|
Write-Host " Would run: dotnet build --configuration Release" -ForegroundColor Gray
|
|
}
|
|
|
|
# Step 7: Verify no SQLite DLLs
|
|
Write-Host ""
|
|
Write-Host "Step 7: Verifying no SQLite DLLs..." -ForegroundColor Cyan
|
|
|
|
$libFolder = "$SolutionRoot\lib\Release\net11.0"
|
|
if (Test-Path $libFolder) {
|
|
$sqliteDlls = Get-ChildItem $libFolder -Filter "*Sqlite*" -Recurse
|
|
|
|
if ($sqliteDlls.Count -eq 0) {
|
|
Write-Host " No SQLite DLLs found in output" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " Found SQLite DLLs:" -ForegroundColor Yellow
|
|
$sqliteDlls | ForEach-Object {
|
|
Write-Host " - $($_.Name)" -ForegroundColor Gray
|
|
}
|
|
}
|
|
}
|
|
|
|
# Step 8: Calculate size reduction
|
|
Write-Host ""
|
|
Write-Host "Step 8: Calculating deployment size..." -ForegroundColor Cyan
|
|
|
|
if (Test-Path $libFolder) {
|
|
$totalSize = (Get-ChildItem $libFolder -Recurse -File | Measure-Object -Property Length -Sum).Sum
|
|
$sizeMB = [math]::Round($totalSize / 1MB, 2)
|
|
Write-Host " Deployment size: $sizeMB MB" -ForegroundColor White
|
|
}
|
|
|
|
# Summary
|
|
Write-Host ""
|
|
Write-Host "================================================================" -ForegroundColor Green
|
|
Write-Host " SQLite Removal Complete" -ForegroundColor Green
|
|
Write-Host "================================================================" -ForegroundColor Green
|
|
Write-Host ""
|
|
|
|
if (-not $DryRun) {
|
|
Write-Host "Changes made:" -ForegroundColor Cyan
|
|
Write-Host " - Removed SQLite project references" -ForegroundColor Green
|
|
Write-Host " - Removed SQLite package references" -ForegroundColor Green
|
|
if ($RemoveProject) {
|
|
Write-Host " - Excluded SQLite project from solution" -ForegroundColor Green
|
|
}
|
|
Write-Host " - Cleaned build directories" -ForegroundColor Green
|
|
Write-Host " - Verified build" -ForegroundColor Green
|
|
|
|
Write-Host ""
|
|
Write-Host "Next steps:" -ForegroundColor Cyan
|
|
Write-Host " 1. Review changes: git diff" -ForegroundColor Gray
|
|
Write-Host " 2. Test application: dotnet run --project Jellyfin.Server" -ForegroundColor Gray
|
|
Write-Host " 3. Commit changes: git commit -am 'Remove SQLite support'" -ForegroundColor Gray
|
|
|
|
Write-Host ""
|
|
Write-Host "Rollback if needed:" -ForegroundColor Yellow
|
|
Write-Host " git stash pop" -ForegroundColor Gray
|
|
} else {
|
|
Write-Host "Dry run complete - no changes made" -ForegroundColor Yellow
|
|
Write-Host "Run without -DryRun to apply changes" -ForegroundColor Gray
|
|
}
|
|
|
|
if (-not $DryRun) {
|
|
Pop-Location
|
|
}
|
|
|
|
Write-Host "" |