Files
PSMinIO/scripts/Update-Version.ps1
PSMinIO Developer 90c64d3237 Major project reorganization: Centralized version management and improved structure
- 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
2025-07-11 11:53:08 -04:00

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
}