mirror of
https://github.com/Grace-Solutions/PSMinIO.git
synced 2026-07-26 06:48:13 +00:00
90c64d3237
- Reorganized project structure with proper directory separation: * All scripts moved to scripts/ directory (including examples) * All documentation moved to docs/ directory (except README.md) * Centralized version management in Version.ps1 - Implemented centralized version management system: * Version.ps1 provides single source of truth for version information * Automatic yyyy.MM.dd.HHmm versioning based on build time * scripts/Update-Version.ps1 updates all version references * src/Properties/AssemblyInfo.cs for assembly version information - Enhanced build system: * scripts/Build.ps1 - Full build with validation and packaging * scripts/Quick-Build.ps1 - Fast build handling file locking issues * Removed automatic copy from project file to avoid locking * Integrated version updates into build process - Updated PowerShell Gallery publishing: * scripts/Publish-PSMinIOToGallery.ps1 updated for new structure * docs/POWERSHELL-GALLERY-RELEASE.md comprehensive publishing guide * Module manifest updated with proper metadata and release notes - Updated all documentation and examples: * README.md updated with PowerShell Gallery installation * All example scripts updated with correct import paths * scripts/examples/README.md updated for new location * docs/PROJECT-STRUCTURE.md documents new organization - Version updated to 2025.07.11.1151 with centralized management - All import paths corrected for new structure - Professional project organization following PowerShell best practices
179 lines
7.4 KiB
PowerShell
179 lines
7.4 KiB
PowerShell
# Update-Version.ps1
|
|
# Updates version information across all PSMinIO project files
|
|
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$WhatIf
|
|
)
|
|
|
|
# Import version configuration
|
|
. "$PSScriptRoot\..\Version.ps1"
|
|
|
|
$ProjectRoot = Split-Path $PSScriptRoot -Parent
|
|
$VersionInfo = Get-PSMinIOVersion
|
|
|
|
Write-Host "PSMinIO Version Update Script" -ForegroundColor Cyan
|
|
Write-Host "=============================" -ForegroundColor Cyan
|
|
Write-Host "Current Version: $($VersionInfo.Version)" -ForegroundColor Green
|
|
Write-Host "Build Date: $($VersionInfo.BuildDateString)" -ForegroundColor Green
|
|
Write-Host "Semantic Version: $($VersionInfo.SemanticVersion)" -ForegroundColor Green
|
|
Write-Host ""
|
|
|
|
# Define file paths
|
|
$FilesToUpdate = @{
|
|
"Module Manifest" = @{
|
|
Path = Join-Path $ProjectRoot "Module\PSMinIO\PSMinIO.psd1"
|
|
Type = "ModuleManifest"
|
|
}
|
|
"Assembly Info" = @{
|
|
Path = Join-Path $ProjectRoot "src\Properties\AssemblyInfo.cs"
|
|
Type = "AssemblyInfo"
|
|
}
|
|
"Project File" = @{
|
|
Path = Join-Path $ProjectRoot "PSMinIO.csproj"
|
|
Type = "ProjectFile"
|
|
}
|
|
}
|
|
|
|
function Update-ModuleManifest {
|
|
param($FilePath, $VersionInfo)
|
|
|
|
if (-not (Test-Path $FilePath)) {
|
|
Write-Warning "Module manifest not found: $FilePath"
|
|
return
|
|
}
|
|
|
|
Write-Host "Updating Module Manifest: $FilePath" -ForegroundColor Yellow
|
|
|
|
if ($WhatIf) {
|
|
Write-Host " [WhatIf] Would update ModuleVersion to: $($VersionInfo.Version)" -ForegroundColor Magenta
|
|
Write-Host " [WhatIf] Would update Copyright to: $($VersionInfo.Copyright)" -ForegroundColor Magenta
|
|
Write-Host " [WhatIf] Would update Description" -ForegroundColor Magenta
|
|
Write-Host " [WhatIf] Would update ReleaseNotes" -ForegroundColor Magenta
|
|
return
|
|
}
|
|
|
|
$content = Get-Content $FilePath -Raw
|
|
|
|
# Update version
|
|
$content = $content -replace "ModuleVersion\s*=\s*'[^']*'", "ModuleVersion = '$($VersionInfo.Version)'"
|
|
|
|
# Update copyright
|
|
$content = $content -replace "Copyright\s*=\s*'[^']*'", "Copyright = '$($VersionInfo.Copyright)'"
|
|
|
|
# Update description
|
|
$escapedDescription = $VersionInfo.Description -replace "'", "''"
|
|
$content = $content -replace "Description\s*=\s*'[^']*'", "Description = '$escapedDescription'"
|
|
|
|
# Update author and company
|
|
$content = $content -replace "Author\s*=\s*'[^']*'", "Author = '$($VersionInfo.Author)'"
|
|
$content = $content -replace "CompanyName\s*=\s*'[^']*'", "CompanyName = '$($VersionInfo.CompanyName)'"
|
|
|
|
# Update URLs
|
|
$content = $content -replace "ProjectUri\s*=\s*'[^']*'", "ProjectUri = '$($VersionInfo.ProjectUri)'"
|
|
$content = $content -replace "LicenseUri\s*=\s*'[^']*'", "LicenseUri = '$($VersionInfo.LicenseUri)'"
|
|
|
|
# Update release notes (this is more complex due to multiline)
|
|
$escapedReleaseNotes = $VersionInfo.ReleaseNotes -replace "'", "''" -replace "`r`n", "`n" -replace "`n", "``n"
|
|
$content = $content -replace "ReleaseNotes\s*=\s*@'[^']*'@", "ReleaseNotes = @'`n$($VersionInfo.ReleaseNotes)`n'@"
|
|
|
|
$content | Set-Content $FilePath -Encoding UTF8
|
|
Write-Host " ✅ Module manifest updated" -ForegroundColor Green
|
|
}
|
|
|
|
function Update-AssemblyInfo {
|
|
param($FilePath, $VersionInfo)
|
|
|
|
if (-not (Test-Path $FilePath)) {
|
|
Write-Warning "Assembly info not found: $FilePath"
|
|
return
|
|
}
|
|
|
|
Write-Host "Updating Assembly Info: $FilePath" -ForegroundColor Yellow
|
|
|
|
if ($WhatIf) {
|
|
Write-Host " [WhatIf] Would update AssemblyVersion to: $($VersionInfo.Version)" -ForegroundColor Magenta
|
|
Write-Host " [WhatIf] Would update AssemblyFileVersion to: $($VersionInfo.Version)" -ForegroundColor Magenta
|
|
Write-Host " [WhatIf] Would update AssemblyInformationalVersion to: $($VersionInfo.Version)" -ForegroundColor Magenta
|
|
Write-Host " [WhatIf] Would update AssemblyCopyright to: $($VersionInfo.Copyright)" -ForegroundColor Magenta
|
|
return
|
|
}
|
|
|
|
$content = Get-Content $FilePath -Raw
|
|
|
|
# Update version attributes
|
|
$content = $content -replace '\[assembly:\s*AssemblyVersion\("[^"]*"\)\]', "[assembly: AssemblyVersion(`"$($VersionInfo.Version)`")]"
|
|
$content = $content -replace '\[assembly:\s*AssemblyFileVersion\("[^"]*"\)\]', "[assembly: AssemblyFileVersion(`"$($VersionInfo.Version)`")]"
|
|
$content = $content -replace '\[assembly:\s*AssemblyInformationalVersion\("[^"]*"\)\]', "[assembly: AssemblyInformationalVersion(`"$($VersionInfo.Version)`")]"
|
|
|
|
# Update other attributes
|
|
$content = $content -replace '\[assembly:\s*AssemblyCopyright\("[^"]*"\)\]', "[assembly: AssemblyCopyright(`"$($VersionInfo.Copyright)`")]"
|
|
$content = $content -replace '\[assembly:\s*AssemblyCompany\("[^"]*"\)\]', "[assembly: AssemblyCompany(`"$($VersionInfo.CompanyName)`")]"
|
|
$content = $content -replace '\[assembly:\s*AssemblyDescription\("[^"]*"\)\]', "[assembly: AssemblyDescription(`"$($VersionInfo.Description)`")]"
|
|
|
|
$content | Set-Content $FilePath -Encoding UTF8
|
|
Write-Host " ✅ Assembly info updated" -ForegroundColor Green
|
|
}
|
|
|
|
function Update-ProjectFile {
|
|
param($FilePath, $VersionInfo)
|
|
|
|
if (-not (Test-Path $FilePath)) {
|
|
Write-Warning "Project file not found: $FilePath"
|
|
return
|
|
}
|
|
|
|
Write-Host "Updating Project File: $FilePath" -ForegroundColor Yellow
|
|
|
|
if ($WhatIf) {
|
|
Write-Host " [WhatIf] Project file uses AssemblyInfo.cs for version information" -ForegroundColor Magenta
|
|
return
|
|
}
|
|
|
|
# Project file now uses AssemblyInfo.cs, so no direct updates needed
|
|
Write-Host " ✅ Project file uses AssemblyInfo.cs for version information" -ForegroundColor Green
|
|
}
|
|
|
|
# Process each file
|
|
foreach ($fileInfo in $FilesToUpdate.GetEnumerator()) {
|
|
$fileName = $fileInfo.Key
|
|
$fileData = $fileInfo.Value
|
|
|
|
Write-Host ""
|
|
Write-Host "Processing: $fileName" -ForegroundColor Cyan
|
|
|
|
switch ($fileData.Type) {
|
|
"ModuleManifest" {
|
|
Update-ModuleManifest -FilePath $fileData.Path -VersionInfo $VersionInfo
|
|
}
|
|
"AssemblyInfo" {
|
|
Update-AssemblyInfo -FilePath $fileData.Path -VersionInfo $VersionInfo
|
|
}
|
|
"ProjectFile" {
|
|
Update-ProjectFile -FilePath $fileData.Path -VersionInfo $VersionInfo
|
|
}
|
|
}
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "Version Update Summary" -ForegroundColor Cyan
|
|
Write-Host "=====================" -ForegroundColor Cyan
|
|
Write-Host "Version: $($VersionInfo.Version)" -ForegroundColor Green
|
|
Write-Host "Build Date: $($VersionInfo.BuildDateString)" -ForegroundColor Green
|
|
Write-Host "Author: $($VersionInfo.Author)" -ForegroundColor Green
|
|
Write-Host "Company: $($VersionInfo.CompanyName)" -ForegroundColor Green
|
|
|
|
if ($WhatIf) {
|
|
Write-Host ""
|
|
Write-Host "This was a WhatIf run - no files were actually modified" -ForegroundColor Yellow
|
|
Write-Host "Run without -WhatIf to apply changes" -ForegroundColor Yellow
|
|
} else {
|
|
Write-Host ""
|
|
Write-Host "✅ Version update completed successfully!" -ForegroundColor Green
|
|
Write-Host "Next steps:" -ForegroundColor Yellow
|
|
Write-Host " 1. Build the project: dotnet build --configuration Release" -ForegroundColor White
|
|
Write-Host " 2. Test the module: Import-Module .\Module\PSMinIO\PSMinIO.psd1" -ForegroundColor White
|
|
Write-Host " 3. Commit changes: git add . && git commit -m 'Update version to $($VersionInfo.Version)'" -ForegroundColor White
|
|
}
|