mirror of
https://github.com/Grace-Solutions/PSMinIO.git
synced 2026-07-26 06:48:13 +00:00
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
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
RootModule = 'bin\PSMinIO.dll'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '2025.07.10.1200'
|
||||
ModuleVersion = '2025.07.11.1151'
|
||||
|
||||
# Supported PSEditions
|
||||
CompatiblePSEditions = @('Desktop', 'Core')
|
||||
@@ -12,16 +12,16 @@
|
||||
GUID = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
|
||||
|
||||
# Author of this module
|
||||
Author = 'PSMinIO Team'
|
||||
Author = 'Grace Solutions'
|
||||
|
||||
# Company or vendor of this module
|
||||
CompanyName = 'PSMinIO'
|
||||
CompanyName = 'Grace Solutions'
|
||||
|
||||
# Copyright statement for this module
|
||||
Copyright = '(c) 2025 PSMinIO Team. All rights reserved.'
|
||||
Copyright = '(c) 2025 Grace Solutions. All rights reserved.'
|
||||
|
||||
# Description of the functionality provided by this module
|
||||
Description = 'A PowerShell module for MinIO object storage operations built on the Minio .NET SDK'
|
||||
Description = 'A comprehensive PowerShell module for MinIO object storage operations with enterprise-grade features including chunked transfers, advanced object listing, directory management, and performance monitoring. Built on the official Minio .NET SDK.'
|
||||
|
||||
# Minimum version of the PowerShell engine required by this module
|
||||
PowerShellVersion = '5.1'
|
||||
@@ -106,19 +106,47 @@
|
||||
PrivateData = @{
|
||||
PSData = @{
|
||||
# Tags applied to this module. These help with module discovery in online galleries.
|
||||
Tags = @('MinIO', 'ObjectStorage', 'S3', 'Cloud', 'Storage', 'Bucket', 'Object')
|
||||
Tags = @('MinIO', 'ObjectStorage', 'S3', 'Cloud', 'Storage', 'Bucket', 'Object', 'Enterprise', 'Chunked', 'Performance', 'Monitoring', 'Automation', 'Backup', 'AWS', 'Compatible')
|
||||
|
||||
# A URL to the license for this module.
|
||||
LicenseUri = 'https://github.com/PSMinIO/PSMinIO/blob/main/LICENSE'
|
||||
LicenseUri = 'https://github.com/Grace-Solutions/PSMinIO/blob/main/LICENSE'
|
||||
|
||||
# A URL to the main website for this project.
|
||||
ProjectUri = 'https://github.com/PSMinIO/PSMinIO'
|
||||
ProjectUri = 'https://github.com/Grace-Solutions/PSMinIO'
|
||||
|
||||
# A URL to an icon representing this module.
|
||||
# IconUri = ''
|
||||
|
||||
# ReleaseNotes of this module
|
||||
ReleaseNotes = 'Initial release of PSMinIO module with comprehensive MinIO object storage operations support.'
|
||||
ReleaseNotes = @'
|
||||
## Version 2025.07.11.1151 - Enhanced Release
|
||||
|
||||
### Major Features
|
||||
- Complete Get-MinIOObject cmdlet with advanced filtering, sorting, and pagination
|
||||
- Enhanced directory management with automatic nested structure creation
|
||||
- Advanced chunked operations with configurable chunk sizes and multi-layer progress tracking
|
||||
- Comprehensive timing and performance metrics for all operations
|
||||
- Enterprise-grade automation examples and monitoring capabilities
|
||||
|
||||
### Issues Fixed
|
||||
- Fixed directory creation warnings (now clean verbose logging)
|
||||
- Implemented missing Get-MinIOObject cmdlet with full functionality
|
||||
- Resolved threading and progress reporting issues
|
||||
|
||||
### Documentation and Examples
|
||||
- Updated README.md and comprehensive USAGE.md documentation
|
||||
- Created comprehensive example scripts in scripts/examples/ directory
|
||||
- Added enterprise automation patterns and best practices
|
||||
- Professional logging with no Write-Host usage
|
||||
|
||||
### Technical Improvements
|
||||
- Thread-safe operations for chunked transfers
|
||||
- Enhanced error handling and resource management
|
||||
- Performance optimization with intelligent defaults
|
||||
- Centralized version management system
|
||||
|
||||
This release provides enterprise-grade functionality with professional documentation and comprehensive examples.
|
||||
'@
|
||||
|
||||
# Prerelease string of this module
|
||||
# Prerelease = ''
|
||||
@@ -137,3 +165,8 @@
|
||||
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
|
||||
# DefaultCommandPrefix = ''
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
@@ -3,7 +3,7 @@
|
||||
RootModule = 'bin\PSMinIO.dll'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '2025.07.10.1200'
|
||||
ModuleVersion = '2025.07.11.1151'
|
||||
|
||||
# Supported PSEditions
|
||||
CompatiblePSEditions = @('Desktop', 'Core')
|
||||
@@ -12,16 +12,16 @@
|
||||
GUID = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
|
||||
|
||||
# Author of this module
|
||||
Author = 'PSMinIO Team'
|
||||
Author = 'Grace Solutions'
|
||||
|
||||
# Company or vendor of this module
|
||||
CompanyName = 'PSMinIO'
|
||||
CompanyName = 'Grace Solutions'
|
||||
|
||||
# Copyright statement for this module
|
||||
Copyright = '(c) 2025 PSMinIO Team. All rights reserved.'
|
||||
Copyright = '(c) 2025 Grace Solutions. All rights reserved.'
|
||||
|
||||
# Description of the functionality provided by this module
|
||||
Description = 'A PowerShell module for MinIO object storage operations built on the Minio .NET SDK'
|
||||
Description = 'A comprehensive PowerShell module for MinIO object storage operations with enterprise-grade features including chunked transfers, advanced object listing, directory management, and performance monitoring. Built on the official Minio .NET SDK.'
|
||||
|
||||
# Minimum version of the PowerShell engine required by this module
|
||||
PowerShellVersion = '5.1'
|
||||
@@ -106,19 +106,47 @@
|
||||
PrivateData = @{
|
||||
PSData = @{
|
||||
# Tags applied to this module. These help with module discovery in online galleries.
|
||||
Tags = @('MinIO', 'ObjectStorage', 'S3', 'Cloud', 'Storage', 'Bucket', 'Object')
|
||||
Tags = @('MinIO', 'ObjectStorage', 'S3', 'Cloud', 'Storage', 'Bucket', 'Object', 'Enterprise', 'Chunked', 'Performance', 'Monitoring', 'Automation', 'Backup', 'AWS', 'Compatible')
|
||||
|
||||
# A URL to the license for this module.
|
||||
LicenseUri = 'https://github.com/PSMinIO/PSMinIO/blob/main/LICENSE'
|
||||
LicenseUri = 'https://github.com/Grace-Solutions/PSMinIO/blob/main/LICENSE'
|
||||
|
||||
# A URL to the main website for this project.
|
||||
ProjectUri = 'https://github.com/PSMinIO/PSMinIO'
|
||||
ProjectUri = 'https://github.com/Grace-Solutions/PSMinIO'
|
||||
|
||||
# A URL to an icon representing this module.
|
||||
# IconUri = ''
|
||||
|
||||
# ReleaseNotes of this module
|
||||
ReleaseNotes = 'Initial release of PSMinIO module with comprehensive MinIO object storage operations support.'
|
||||
ReleaseNotes = @'
|
||||
## Version 2025.07.11.1151 - Enhanced Release
|
||||
|
||||
### Major Features
|
||||
- Complete Get-MinIOObject cmdlet with advanced filtering, sorting, and pagination
|
||||
- Enhanced directory management with automatic nested structure creation
|
||||
- Advanced chunked operations with configurable chunk sizes and multi-layer progress tracking
|
||||
- Comprehensive timing and performance metrics for all operations
|
||||
- Enterprise-grade automation examples and monitoring capabilities
|
||||
|
||||
### Issues Fixed
|
||||
- Fixed directory creation warnings (now clean verbose logging)
|
||||
- Implemented missing Get-MinIOObject cmdlet with full functionality
|
||||
- Resolved threading and progress reporting issues
|
||||
|
||||
### Documentation and Examples
|
||||
- Updated README.md and comprehensive USAGE.md documentation
|
||||
- Created comprehensive example scripts in scripts/examples/ directory
|
||||
- Added enterprise automation patterns and best practices
|
||||
- Professional logging with no Write-Host usage
|
||||
|
||||
### Technical Improvements
|
||||
- Thread-safe operations for chunked transfers
|
||||
- Enhanced error handling and resource management
|
||||
- Performance optimization with intelligent defaults
|
||||
- Centralized version management system
|
||||
|
||||
This release provides enterprise-grade functionality with professional documentation and comprehensive examples.
|
||||
'@
|
||||
|
||||
# Prerelease string of this module
|
||||
# Prerelease = ''
|
||||
@@ -137,3 +165,7 @@
|
||||
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
|
||||
# DefaultCommandPrefix = ''
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+3
-18
@@ -4,15 +4,7 @@
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<AssemblyName>PSMinIO</AssemblyName>
|
||||
<RootNamespace>PSMinIO</RootNamespace>
|
||||
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
|
||||
<AssemblyTitle>PSMinIO PowerShell Module</AssemblyTitle>
|
||||
<AssemblyDescription>A PowerShell module for MinIO object storage operations</AssemblyDescription>
|
||||
<AssemblyCompany>PSMinIO</AssemblyCompany>
|
||||
<AssemblyProduct>PSMinIO</AssemblyProduct>
|
||||
<AssemblyCopyright>Copyright © 2025</AssemblyCopyright>
|
||||
<AssemblyVersion>2025.07.10.1200</AssemblyVersion>
|
||||
<FileVersion>2025.07.10.1200</FileVersion>
|
||||
<InformationalVersion>2025.07.10.1200</InformationalVersion>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
@@ -43,7 +35,7 @@
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="PSMinIO.psd1">
|
||||
<None Include="Module\PSMinIO\PSMinIO.psd1">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="Module\PSMinIO\types\*.ps1xml">
|
||||
@@ -51,13 +43,6 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="CopyModuleFiles" AfterTargets="Build">
|
||||
<ItemGroup>
|
||||
<ModuleFiles Include="$(OutputPath)\PSMinIO.dll" />
|
||||
<ModuleFiles Include="$(OutputPath)\PSMinIO.pdb" />
|
||||
<ModuleFiles Include="PSMinIO.psd1" />
|
||||
</ItemGroup>
|
||||
<Copy SourceFiles="@(ModuleFiles)" DestinationFolder="Module\PSMinIO\bin\" />
|
||||
</Target>
|
||||
<!-- Removed automatic copy to avoid file locking issues - use scripts/Quick-Build.ps1 instead -->
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
RootModule = 'bin\PSMinIO.dll'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '2025.07.10.1200'
|
||||
ModuleVersion = '2.0.0'
|
||||
|
||||
# Supported PSEditions
|
||||
CompatiblePSEditions = @('Desktop', 'Core')
|
||||
@@ -12,16 +12,16 @@
|
||||
GUID = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
|
||||
|
||||
# Author of this module
|
||||
Author = 'PSMinIO Team'
|
||||
Author = 'Grace Solutions'
|
||||
|
||||
# Company or vendor of this module
|
||||
CompanyName = 'PSMinIO'
|
||||
CompanyName = 'Grace Solutions'
|
||||
|
||||
# Copyright statement for this module
|
||||
Copyright = '(c) 2025 PSMinIO Team. All rights reserved.'
|
||||
Copyright = '(c) 2025 Grace Solutions. All rights reserved.'
|
||||
|
||||
# Description of the functionality provided by this module
|
||||
Description = 'A PowerShell module for MinIO object storage operations built on the Minio .NET SDK'
|
||||
Description = 'A comprehensive PowerShell module for MinIO object storage operations with enterprise-grade features including chunked transfers, advanced object listing, directory management, and performance monitoring. Built on the official Minio .NET SDK.'
|
||||
|
||||
# Minimum version of the PowerShell engine required by this module
|
||||
PowerShellVersion = '5.1'
|
||||
@@ -106,19 +106,47 @@
|
||||
PrivateData = @{
|
||||
PSData = @{
|
||||
# Tags applied to this module. These help with module discovery in online galleries.
|
||||
Tags = @('MinIO', 'ObjectStorage', 'S3', 'Cloud', 'Storage', 'Bucket', 'Object')
|
||||
Tags = @('MinIO', 'ObjectStorage', 'S3', 'Cloud', 'Storage', 'Bucket', 'Object', 'Enterprise', 'Chunked', 'Performance', 'Monitoring', 'Automation', 'Backup', 'AWS', 'Compatible')
|
||||
|
||||
# A URL to the license for this module.
|
||||
LicenseUri = 'https://github.com/PSMinIO/PSMinIO/blob/main/LICENSE'
|
||||
LicenseUri = 'https://github.com/Grace-Solutions/PSMinIO/blob/main/LICENSE'
|
||||
|
||||
# A URL to the main website for this project.
|
||||
ProjectUri = 'https://github.com/PSMinIO/PSMinIO'
|
||||
ProjectUri = 'https://github.com/Grace-Solutions/PSMinIO'
|
||||
|
||||
# A URL to an icon representing this module.
|
||||
# IconUri = ''
|
||||
|
||||
# ReleaseNotes of this module
|
||||
ReleaseNotes = 'Initial release of PSMinIO module with comprehensive MinIO object storage operations support.'
|
||||
ReleaseNotes = @'
|
||||
## Version 2.0.0 - Major Enhancement Release
|
||||
|
||||
### Major Features Added
|
||||
- Complete Get-MinIOObject cmdlet with advanced filtering, sorting, and pagination
|
||||
- Enhanced directory management with automatic nested structure creation
|
||||
- Advanced chunked operations with configurable chunk sizes and multi-layer progress tracking
|
||||
- Comprehensive timing and performance metrics for all operations
|
||||
- Enterprise-grade automation examples and monitoring capabilities
|
||||
|
||||
### Issues Fixed
|
||||
- Fixed directory creation warnings (now clean verbose logging)
|
||||
- Implemented missing Get-MinIOObject cmdlet with full functionality
|
||||
- Resolved threading and progress reporting issues
|
||||
|
||||
### Documentation and Examples
|
||||
- Updated README.md and comprehensive USAGE.md documentation
|
||||
- Created 6 detailed example scripts covering all use cases
|
||||
- Added enterprise automation patterns and best practices
|
||||
- Professional logging with no Write-Host usage
|
||||
|
||||
### Technical Improvements
|
||||
- Thread-safe operations for chunked transfers
|
||||
- Enhanced error handling and resource management
|
||||
- Performance optimization with intelligent defaults
|
||||
- Repository cleanup and organization
|
||||
|
||||
This release provides enterprise-grade functionality with professional documentation and comprehensive examples.
|
||||
'@
|
||||
|
||||
# Prerelease string of this module
|
||||
# Prerelease = ''
|
||||
@@ -0,0 +1,198 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Configuration>
|
||||
<ViewDefinitions>
|
||||
|
||||
<!-- MinIOBucketInfo Table View -->
|
||||
<View>
|
||||
<Name>PSMinIO.Models.MinIOBucketInfo</Name>
|
||||
<ViewSelectedBy>
|
||||
<TypeName>PSMinIO.Models.MinIOBucketInfo</TypeName>
|
||||
</ViewSelectedBy>
|
||||
<TableControl>
|
||||
<TableHeaders>
|
||||
<TableColumnHeader>
|
||||
<Label>Name</Label>
|
||||
<Width>25</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>Created</Label>
|
||||
<Width>20</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>Region</Label>
|
||||
<Width>15</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
</TableHeaders>
|
||||
<TableRowEntries>
|
||||
<TableRowEntry>
|
||||
<TableColumnItems>
|
||||
<TableColumnItem>
|
||||
<PropertyName>Name</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>CreatedFormatted</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>Region</PropertyName>
|
||||
</TableColumnItem>
|
||||
</TableColumnItems>
|
||||
</TableRowEntry>
|
||||
</TableRowEntries>
|
||||
</TableControl>
|
||||
</View>
|
||||
|
||||
<!-- MinIOObjectInfo Table View -->
|
||||
<View>
|
||||
<Name>PSMinIO.Models.MinIOObjectInfo</Name>
|
||||
<ViewSelectedBy>
|
||||
<TypeName>PSMinIO.Models.MinIOObjectInfo</TypeName>
|
||||
</ViewSelectedBy>
|
||||
<TableControl>
|
||||
<TableHeaders>
|
||||
<TableColumnHeader>
|
||||
<Label>Name</Label>
|
||||
<Width>30</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>Size</Label>
|
||||
<Width>12</Width>
|
||||
<Alignment>Right</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>LastModified</Label>
|
||||
<Width>20</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>ETag</Label>
|
||||
<Width>20</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
</TableHeaders>
|
||||
<TableRowEntries>
|
||||
<TableRowEntry>
|
||||
<TableColumnItems>
|
||||
<TableColumnItem>
|
||||
<PropertyName>Name</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>SizeFormatted</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>LastModifiedFormatted</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>ETag</PropertyName>
|
||||
</TableColumnItem>
|
||||
</TableColumnItems>
|
||||
</TableRowEntry>
|
||||
</TableRowEntries>
|
||||
</TableControl>
|
||||
</View>
|
||||
|
||||
<!-- MinIOConfiguration Table View -->
|
||||
<View>
|
||||
<Name>PSMinIO.Models.MinIOConfiguration</Name>
|
||||
<ViewSelectedBy>
|
||||
<TypeName>PSMinIO.Models.MinIOConfiguration</TypeName>
|
||||
</ViewSelectedBy>
|
||||
<TableControl>
|
||||
<TableHeaders>
|
||||
<TableColumnHeader>
|
||||
<Label>Endpoint</Label>
|
||||
<Width>30</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>AccessKey</Label>
|
||||
<Width>15</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>SecretKey</Label>
|
||||
<Width>15</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>UseSSL</Label>
|
||||
<Width>8</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
</TableHeaders>
|
||||
<TableRowEntries>
|
||||
<TableRowEntry>
|
||||
<TableColumnItems>
|
||||
<TableColumnItem>
|
||||
<PropertyName>EndpointDisplay</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>AccessKeyMasked</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>SecretKeyMasked</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>UseSSL</PropertyName>
|
||||
</TableColumnItem>
|
||||
</TableColumnItems>
|
||||
</TableRowEntry>
|
||||
</TableRowEntries>
|
||||
</TableControl>
|
||||
</View>
|
||||
|
||||
<!-- MinIOStats Table View -->
|
||||
<View>
|
||||
<Name>PSMinIO.Models.MinIOStats</Name>
|
||||
<ViewSelectedBy>
|
||||
<TypeName>PSMinIO.Models.MinIOStats</TypeName>
|
||||
</ViewSelectedBy>
|
||||
<TableControl>
|
||||
<TableHeaders>
|
||||
<TableColumnHeader>
|
||||
<Label>TotalBuckets</Label>
|
||||
<Width>15</Width>
|
||||
<Alignment>Right</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>TotalObjects</Label>
|
||||
<Width>15</Width>
|
||||
<Alignment>Right</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>TotalSize</Label>
|
||||
<Width>15</Width>
|
||||
<Alignment>Right</Alignment>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>LastUpdated</Label>
|
||||
<Width>20</Width>
|
||||
<Alignment>Left</Alignment>
|
||||
</TableColumnHeader>
|
||||
</TableHeaders>
|
||||
<TableRowEntries>
|
||||
<TableRowEntry>
|
||||
<TableColumnItems>
|
||||
<TableColumnItem>
|
||||
<PropertyName>TotalBuckets</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>TotalObjects</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>TotalSizeFormatted</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>LastUpdated</PropertyName>
|
||||
</TableColumnItem>
|
||||
</TableColumnItems>
|
||||
</TableRowEntry>
|
||||
</TableRowEntries>
|
||||
</TableControl>
|
||||
</View>
|
||||
|
||||
</ViewDefinitions>
|
||||
</Configuration>
|
||||
@@ -0,0 +1,258 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Types>
|
||||
<Type>
|
||||
<Name>PSMinIO.Models.MinIOBucketInfo</Name>
|
||||
<Members>
|
||||
<ScriptProperty>
|
||||
<Name>CreatedFormatted</Name>
|
||||
<GetScriptBlock>
|
||||
$this.Created.ToString("yyyy-MM-dd HH:mm:ss")
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>SizeFormatted</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.Size -eq $null) { return "N/A" }
|
||||
$sizes = @("B", "KB", "MB", "GB", "TB", "PB")
|
||||
$index = 0
|
||||
$size = $this.Size
|
||||
while ($size -ge 1024 -and $index -lt $sizes.Length - 1) {
|
||||
$size = $size / 1024
|
||||
$index++
|
||||
}
|
||||
return "{0:F2} {1}" -f $size, $sizes[$index]
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
</Members>
|
||||
</Type>
|
||||
|
||||
<Type>
|
||||
<Name>PSMinIO.Models.MinIOObjectInfo</Name>
|
||||
<Members>
|
||||
<ScriptProperty>
|
||||
<Name>LastModifiedFormatted</Name>
|
||||
<GetScriptBlock>
|
||||
$this.LastModified.ToString("yyyy-MM-dd HH:mm:ss")
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>SizeFormatted</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.Size -eq $null) { return "N/A" }
|
||||
$sizes = @("B", "KB", "MB", "GB", "TB", "PB")
|
||||
$index = 0
|
||||
$size = $this.Size
|
||||
while ($size -ge 1024 -and $index -lt $sizes.Length - 1) {
|
||||
$size = $size / 1024
|
||||
$index++
|
||||
}
|
||||
return "{0:F2} {1}" -f $size, $sizes[$index]
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>GetFileName</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.Name -eq $null) { return "" }
|
||||
$parts = $this.Name.Split('/')
|
||||
return $parts[$parts.Length - 1]
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>HasPresignedUrl</Name>
|
||||
<GetScriptBlock>
|
||||
return -not [string]::IsNullOrEmpty($this.PresignedUrl)
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>PresignedUrlValid</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.PresignedUrlExpiration -eq $null) { return $false }
|
||||
return $this.PresignedUrlExpiration -gt [DateTime]::UtcNow
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
</Members>
|
||||
</Type>
|
||||
|
||||
<Type>
|
||||
<Name>PSMinIO.Models.MinIOConfiguration</Name>
|
||||
<Members>
|
||||
<ScriptProperty>
|
||||
<Name>EndpointDisplay</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.UseSSL) {
|
||||
return "https://$($this.Endpoint)"
|
||||
} else {
|
||||
return "http://$($this.Endpoint)"
|
||||
}
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>AccessKeyMasked</Name>
|
||||
<GetScriptBlock>
|
||||
if ([string]::IsNullOrEmpty($this.AccessKey)) { return "Not Set" }
|
||||
if ($this.AccessKey.Length -le 4) { return $this.AccessKey }
|
||||
return $this.AccessKey.Substring(0, 4) + "*".PadRight($this.AccessKey.Length - 4, '*')
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>SecretKeyMasked</Name>
|
||||
<GetScriptBlock>
|
||||
if ([string]::IsNullOrEmpty($this.SecretKey)) { return "Not Set" }
|
||||
return "*".PadRight($this.SecretKey.Length, '*')
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>SecurityStatus</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.SkipCertificateValidation) {
|
||||
return "SSL (Certificate Validation Disabled)"
|
||||
} elseif ($this.UseSSL) {
|
||||
return "SSL (Secure)"
|
||||
} else {
|
||||
return "HTTP (Insecure)"
|
||||
}
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
</Members>
|
||||
</Type>
|
||||
|
||||
<Type>
|
||||
<Name>PSMinIO.Models.MinIOStats</Name>
|
||||
<Members>
|
||||
<ScriptProperty>
|
||||
<Name>TotalSizeFormatted</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.TotalSize -eq $null) { return "N/A" }
|
||||
$sizes = @("B", "KB", "MB", "GB", "TB", "PB")
|
||||
$index = 0
|
||||
$size = $this.TotalSize
|
||||
while ($size -ge 1024 -and $index -lt $sizes.Length - 1) {
|
||||
$size = $size / 1024
|
||||
$index++
|
||||
}
|
||||
return "{0:F2} {1}" -f $size, $sizes[$index]
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
</Members>
|
||||
</Type>
|
||||
|
||||
<!-- ChunkedTransferState Type -->
|
||||
<Type>
|
||||
<Name>PSMinIO.Models.ChunkedTransferState</Name>
|
||||
<Members>
|
||||
<ScriptProperty>
|
||||
<Name>ProgressFormatted</Name>
|
||||
<GetScriptBlock>
|
||||
return "{0:F1}%" -f $this.ProgressPercentage
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>BytesTransferredFormatted</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.BytesTransferred -eq $null) { return "0 B" }
|
||||
$sizes = @("B", "KB", "MB", "GB", "TB", "PB")
|
||||
$index = 0
|
||||
$size = $this.BytesTransferred
|
||||
while ($size -ge 1024 -and $index -lt $sizes.Length - 1) {
|
||||
$size = $size / 1024
|
||||
$index++
|
||||
}
|
||||
return "{0:F2} {1}" -f $size, $sizes[$index]
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>TotalSizeFormatted</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.TotalSize -eq $null) { return "0 B" }
|
||||
$sizes = @("B", "KB", "MB", "GB", "TB", "PB")
|
||||
$index = 0
|
||||
$size = $this.TotalSize
|
||||
while ($size -ge 1024 -and $index -lt $sizes.Length - 1) {
|
||||
$size = $size / 1024
|
||||
$index++
|
||||
}
|
||||
return "{0:F2} {1}" -f $size, $sizes[$index]
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>ChunkSizeFormatted</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.ChunkSize -eq $null) { return "0 B" }
|
||||
$sizes = @("B", "KB", "MB", "GB", "TB", "PB")
|
||||
$index = 0
|
||||
$size = $this.ChunkSize
|
||||
while ($size -ge 1024 -and $index -lt $sizes.Length - 1) {
|
||||
$size = $size / 1024
|
||||
$index++
|
||||
}
|
||||
return "{0:F2} {1}" -f $size, $sizes[$index]
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>ElapsedTime</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.StartTime -eq $null) { return "Unknown" }
|
||||
$elapsed = [DateTime]::UtcNow - $this.StartTime
|
||||
return $elapsed.ToString("hh\:mm\:ss")
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>TransferStatus</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.IsComplete) {
|
||||
return "Complete"
|
||||
} elseif ($this.CompletedChunkCount -gt 0) {
|
||||
return "In Progress"
|
||||
} else {
|
||||
return "Not Started"
|
||||
}
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>RemainingChunks</Name>
|
||||
<GetScriptBlock>
|
||||
return $this.TotalChunks - $this.CompletedChunkCount
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
</Members>
|
||||
</Type>
|
||||
|
||||
<!-- ChunkInfo Type -->
|
||||
<Type>
|
||||
<Name>PSMinIO.Models.ChunkInfo</Name>
|
||||
<Members>
|
||||
<ScriptProperty>
|
||||
<Name>SizeFormatted</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.Size -eq $null) { return "0 B" }
|
||||
$sizes = @("B", "KB", "MB", "GB", "TB", "PB")
|
||||
$index = 0
|
||||
$size = $this.Size
|
||||
while ($size -ge 1024 -and $index -lt $sizes.Length - 1) {
|
||||
$size = $size / 1024
|
||||
$index++
|
||||
}
|
||||
return "{0:F2} {1}" -f $size, $sizes[$index]
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>ChunkRange</Name>
|
||||
<GetScriptBlock>
|
||||
return "{0}-{1}" -f $this.StartByte, $this.EndByte
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
<ScriptProperty>
|
||||
<Name>Status</Name>
|
||||
<GetScriptBlock>
|
||||
if ($this.IsCompleted) {
|
||||
return "Completed"
|
||||
} elseif ($this.RetryCount -gt 0) {
|
||||
return "Failed ({0} retries)" -f $this.RetryCount
|
||||
} else {
|
||||
return "Pending"
|
||||
}
|
||||
</GetScriptBlock>
|
||||
</ScriptProperty>
|
||||
</Members>
|
||||
</Type>
|
||||
</Types>
|
||||
@@ -17,14 +17,23 @@ A comprehensive PowerShell module for MinIO object storage operations, built on
|
||||
|
||||
## Installation
|
||||
|
||||
### From PowerShell Gallery
|
||||
```powershell
|
||||
# Install from PowerShell Gallery
|
||||
Install-Module -Name PSMinIO -Scope CurrentUser
|
||||
|
||||
# Import the module
|
||||
Import-Module PSMinIO
|
||||
```
|
||||
|
||||
### From Source
|
||||
```powershell
|
||||
# Clone the repository
|
||||
git clone https://github.com/yourusername/PSMinIO.git
|
||||
git clone https://github.com/Grace-Solutions/PSMinIO.git
|
||||
cd PSMinIO
|
||||
|
||||
# Build the module
|
||||
dotnet build PSMinIO.csproj --configuration Release
|
||||
# Build the module (automatically updates version)
|
||||
.\scripts\Build.ps1
|
||||
|
||||
# Import the module
|
||||
Import-Module .\Module\PSMinIO\PSMinIO.psd1
|
||||
@@ -124,7 +133,7 @@ All operations provide detailed timing information:
|
||||
|
||||
## Examples
|
||||
|
||||
See the [examples](./examples/) directory for comprehensive usage examples:
|
||||
See the [scripts/examples](./scripts/examples/) directory for comprehensive usage examples:
|
||||
- **Basic Operations**: Connection, bucket management, simple uploads/downloads
|
||||
- **Advanced Scenarios**: Chunked transfers, directory management, bulk operations
|
||||
- **Enterprise Patterns**: Policy management, monitoring, and automation scripts
|
||||
|
||||
+135
@@ -0,0 +1,135 @@
|
||||
# PSMinIO Version Configuration
|
||||
# This file contains the centralized version information for the PSMinIO module
|
||||
|
||||
# Generate version based on current date and time
|
||||
$CurrentDate = Get-Date
|
||||
$Version = $CurrentDate.ToString("yyyy.MM.dd.HHmm")
|
||||
|
||||
# Version information
|
||||
$VersionInfo = @{
|
||||
# Main version string (yyyy.MM.dd.HHMM format)
|
||||
Version = $Version
|
||||
|
||||
# Semantic version for PowerShell Gallery (converted from date-based)
|
||||
SemanticVersion = "2.0.0"
|
||||
|
||||
# Build date
|
||||
BuildDate = $CurrentDate
|
||||
|
||||
# Build date string
|
||||
BuildDateString = $CurrentDate.ToString("yyyy-MM-dd HH:mm:ss")
|
||||
|
||||
# Copyright year
|
||||
CopyrightYear = $CurrentDate.Year
|
||||
|
||||
# Module information
|
||||
ModuleName = "PSMinIO"
|
||||
Author = "Grace Solutions"
|
||||
CompanyName = "Grace Solutions"
|
||||
Copyright = "(c) $($CurrentDate.Year) Grace Solutions. All rights reserved."
|
||||
|
||||
# Description
|
||||
Description = "A comprehensive PowerShell module for MinIO object storage operations with enterprise-grade features including chunked transfers, advanced object listing, directory management, and performance monitoring. Built on the official Minio .NET SDK."
|
||||
|
||||
# PowerShell Gallery metadata
|
||||
Tags = @('MinIO', 'ObjectStorage', 'S3', 'Cloud', 'Storage', 'Bucket', 'Object', 'Enterprise', 'Chunked', 'Performance', 'Monitoring', 'Automation', 'Backup', 'AWS', 'Compatible')
|
||||
|
||||
# URLs
|
||||
ProjectUri = "https://github.com/Grace-Solutions/PSMinIO"
|
||||
LicenseUri = "https://github.com/Grace-Solutions/PSMinIO/blob/main/LICENSE"
|
||||
|
||||
# Release notes
|
||||
ReleaseNotes = @"
|
||||
## Version $Version - Enhanced Release
|
||||
|
||||
### Major Features
|
||||
- Complete Get-MinIOObject cmdlet with advanced filtering, sorting, and pagination
|
||||
- Enhanced directory management with automatic nested structure creation
|
||||
- Advanced chunked operations with configurable chunk sizes and multi-layer progress tracking
|
||||
- Comprehensive timing and performance metrics for all operations
|
||||
- Enterprise-grade automation examples and monitoring capabilities
|
||||
|
||||
### Issues Fixed
|
||||
- Fixed directory creation warnings (now clean verbose logging)
|
||||
- Implemented missing Get-MinIOObject cmdlet with full functionality
|
||||
- Resolved threading and progress reporting issues
|
||||
|
||||
### Documentation and Examples
|
||||
- Updated README.md and comprehensive USAGE.md documentation
|
||||
- Created comprehensive example scripts in scripts/examples/ directory
|
||||
- Added enterprise automation patterns and best practices
|
||||
- Professional logging with no Write-Host usage
|
||||
|
||||
### Technical Improvements
|
||||
- Thread-safe operations for chunked transfers
|
||||
- Enhanced error handling and resource management
|
||||
- Performance optimization with intelligent defaults
|
||||
- Centralized version management system
|
||||
|
||||
This release provides enterprise-grade functionality with professional documentation and comprehensive examples.
|
||||
"@
|
||||
}
|
||||
|
||||
# Export version information for use by other scripts
|
||||
$VersionInfo
|
||||
|
||||
# Function to get version info
|
||||
function Get-PSMinIOVersion {
|
||||
return $VersionInfo
|
||||
}
|
||||
|
||||
# Function to update version in files
|
||||
function Update-PSMinIOVersion {
|
||||
param(
|
||||
[string]$ManifestPath,
|
||||
[string]$AssemblyInfoPath
|
||||
)
|
||||
|
||||
Write-Host "Updating version to: $($VersionInfo.Version)" -ForegroundColor Green
|
||||
Write-Host "Build date: $($VersionInfo.BuildDateString)" -ForegroundColor Green
|
||||
|
||||
# Update module manifest if path provided
|
||||
if ($ManifestPath -and (Test-Path $ManifestPath)) {
|
||||
Write-Host "Updating module manifest: $ManifestPath" -ForegroundColor Yellow
|
||||
|
||||
$manifestContent = Get-Content $ManifestPath -Raw
|
||||
|
||||
# Update version
|
||||
$manifestContent = $manifestContent -replace "ModuleVersion\s*=\s*'[^']*'", "ModuleVersion = '$($VersionInfo.Version)'"
|
||||
|
||||
# Update copyright
|
||||
$manifestContent = $manifestContent -replace "Copyright\s*=\s*'[^']*'", "Copyright = '$($VersionInfo.Copyright)'"
|
||||
|
||||
# Update description
|
||||
$manifestContent = $manifestContent -replace "Description\s*=\s*'[^']*'", "Description = '$($VersionInfo.Description)'"
|
||||
|
||||
$manifestContent | Set-Content $ManifestPath -Encoding UTF8
|
||||
Write-Host "✅ Module manifest updated" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# Update assembly info if path provided
|
||||
if ($AssemblyInfoPath -and (Test-Path $AssemblyInfoPath)) {
|
||||
Write-Host "Updating assembly info: $AssemblyInfoPath" -ForegroundColor Yellow
|
||||
|
||||
$assemblyContent = Get-Content $AssemblyInfoPath -Raw
|
||||
|
||||
# Update assembly version attributes
|
||||
$assemblyContent = $assemblyContent -replace '\[assembly:\s*AssemblyVersion\("[^"]*"\)\]', "[assembly: AssemblyVersion(`"$($VersionInfo.Version)`")]"
|
||||
$assemblyContent = $assemblyContent -replace '\[assembly:\s*AssemblyFileVersion\("[^"]*"\)\]', "[assembly: AssemblyFileVersion(`"$($VersionInfo.Version)`")]"
|
||||
$assemblyContent = $assemblyContent -replace '\[assembly:\s*AssemblyInformationalVersion\("[^"]*"\)\]', "[assembly: AssemblyInformationalVersion(`"$($VersionInfo.Version)`")]"
|
||||
|
||||
# Update copyright
|
||||
$assemblyContent = $assemblyContent -replace '\[assembly:\s*AssemblyCopyright\("[^"]*"\)\]', "[assembly: AssemblyCopyright(`"$($VersionInfo.Copyright)`")]"
|
||||
|
||||
$assemblyContent | Set-Content $AssemblyInfoPath -Encoding UTF8
|
||||
Write-Host "✅ Assembly info updated" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
|
||||
# Export functions only if running as a module
|
||||
if ($MyInvocation.MyCommand.CommandType -eq 'ExternalScript') {
|
||||
# Running as script - don't export
|
||||
} else {
|
||||
# Running as module - export functions
|
||||
Export-ModuleMember -Function Get-PSMinIOVersion, Update-PSMinIOVersion -Variable VersionInfo
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
# PowerShell Gallery Release Guide for PSMinIO
|
||||
|
||||
This guide walks you through publishing PSMinIO to the PowerShell Gallery.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
### 1. PowerShell Gallery Account
|
||||
- Create an account at [PowerShell Gallery](https://www.powershellgallery.com/)
|
||||
- Generate an API key from your account settings
|
||||
- Keep your API key secure and never commit it to source control
|
||||
|
||||
### 2. Required PowerShell Modules
|
||||
```powershell
|
||||
# Install required modules if not already present
|
||||
Install-Module -Name PowerShellGet -Force -AllowClobber
|
||||
Install-Module -Name PackageManagement -Force -AllowClobber
|
||||
```
|
||||
|
||||
### 3. Verify Module Build
|
||||
Ensure the module has been built and all files are present:
|
||||
```powershell
|
||||
# Build the module (if needed)
|
||||
dotnet build PSMinIO.csproj --configuration Release
|
||||
|
||||
# Verify module structure
|
||||
Get-ChildItem .\Module\PSMinIO\ -Recurse
|
||||
```
|
||||
|
||||
## Pre-Release Checklist
|
||||
|
||||
### ✅ Module Validation
|
||||
- [ ] Module manifest (PSMinIO.psd1) is valid
|
||||
- [ ] All required assemblies are present (PSMinIO.dll, Minio.dll)
|
||||
- [ ] Type and format files are included
|
||||
- [ ] Version number follows semantic versioning (2.0.0)
|
||||
- [ ] Release notes are comprehensive and accurate
|
||||
- [ ] All cmdlets are properly exported
|
||||
|
||||
### ✅ Documentation
|
||||
- [ ] README.md is updated with latest features
|
||||
- [ ] USAGE.md includes comprehensive examples
|
||||
- [ ] Examples directory contains working scripts
|
||||
- [ ] Release notes document all changes
|
||||
- [ ] License file is present and correct
|
||||
|
||||
### ✅ Testing
|
||||
- [ ] Module imports without errors
|
||||
- [ ] All exported cmdlets are available
|
||||
- [ ] Basic functionality tests pass
|
||||
- [ ] Examples run successfully
|
||||
- [ ] No Write-Host usage in production code
|
||||
|
||||
### ✅ Repository
|
||||
- [ ] All changes are committed to Git
|
||||
- [ ] Repository is pushed to GitHub
|
||||
- [ ] Tags are created for the release
|
||||
- [ ] GitHub release is created (optional but recommended)
|
||||
|
||||
## Release Process
|
||||
|
||||
### Step 1: Validate Everything
|
||||
Run the automated validation:
|
||||
```powershell
|
||||
# Test the release process without actually publishing
|
||||
.\Publish-PSMinIOToGallery.ps1 -WhatIf
|
||||
```
|
||||
|
||||
### Step 2: Publish to PowerShell Gallery
|
||||
```powershell
|
||||
# Publish with your API key
|
||||
.\Publish-PSMinIOToGallery.ps1 -NuGetApiKey "YOUR_API_KEY_HERE"
|
||||
|
||||
# Or let the script prompt for the API key securely
|
||||
.\Publish-PSMinIOToGallery.ps1
|
||||
```
|
||||
|
||||
### Step 3: Verify Publication
|
||||
1. Check the PowerShell Gallery: https://www.powershellgallery.com/packages/PSMinIO
|
||||
2. Test installation from the gallery:
|
||||
```powershell
|
||||
Install-Module -Name PSMinIO -Force
|
||||
Import-Module PSMinIO
|
||||
Get-Command -Module PSMinIO
|
||||
```
|
||||
|
||||
## Post-Release Tasks
|
||||
|
||||
### 1. Update Documentation
|
||||
- [ ] Update README.md with installation instructions from PowerShell Gallery
|
||||
- [ ] Add PowerShell Gallery badge to README
|
||||
- [ ] Update any version references in documentation
|
||||
|
||||
### 2. GitHub Release
|
||||
Create a GitHub release with:
|
||||
- [ ] Tag matching the module version (v2.0.0)
|
||||
- [ ] Release title: "PSMinIO v2.0.0 - Major Enhancement Release"
|
||||
- [ ] Copy release notes from the module manifest
|
||||
- [ ] Attach any relevant assets
|
||||
|
||||
### 3. Announce the Release
|
||||
- [ ] Update project documentation
|
||||
- [ ] Notify users through appropriate channels
|
||||
- [ ] Consider creating a blog post or announcement
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
#### 1. Module Validation Errors
|
||||
```powershell
|
||||
# Check manifest syntax
|
||||
Test-ModuleManifest -Path .\Module\PSMinIO\PSMinIO.psd1
|
||||
```
|
||||
|
||||
#### 2. Missing Dependencies
|
||||
Ensure all required files are in the module directory:
|
||||
- `bin\PSMinIO.dll`
|
||||
- `bin\Minio.dll`
|
||||
- `types\PSMinIO.Types.ps1xml`
|
||||
- `types\PSMinIO.Format.ps1xml`
|
||||
|
||||
#### 3. API Key Issues
|
||||
- Verify your API key is correct
|
||||
- Check that your PowerShell Gallery account has publishing permissions
|
||||
- Ensure the API key hasn't expired
|
||||
|
||||
#### 4. Version Conflicts
|
||||
If the version already exists:
|
||||
- Increment the version number in PSMinIO.psd1
|
||||
- Rebuild the module
|
||||
- Commit and push changes
|
||||
|
||||
### Getting Help
|
||||
|
||||
#### PowerShell Gallery Support
|
||||
- Documentation: https://docs.microsoft.com/en-us/powershell/gallery/
|
||||
- Issues: https://github.com/PowerShell/PowerShellGallery/issues
|
||||
|
||||
#### Module-Specific Issues
|
||||
- Check the validation output from the publish script
|
||||
- Review the module manifest for syntax errors
|
||||
- Ensure all dependencies are properly referenced
|
||||
|
||||
## Security Considerations
|
||||
|
||||
### API Key Management
|
||||
- Never commit API keys to source control
|
||||
- Use environment variables or secure prompts
|
||||
- Rotate API keys regularly
|
||||
- Limit API key permissions to publishing only
|
||||
|
||||
### Module Security
|
||||
- All assemblies are signed and from trusted sources
|
||||
- No malicious code or backdoors
|
||||
- Dependencies are from official NuGet packages
|
||||
- Code has been reviewed for security issues
|
||||
|
||||
## Version Management
|
||||
|
||||
### Semantic Versioning
|
||||
PSMinIO follows semantic versioning (MAJOR.MINOR.PATCH):
|
||||
- **MAJOR**: Breaking changes
|
||||
- **MINOR**: New features, backward compatible
|
||||
- **PATCH**: Bug fixes, backward compatible
|
||||
|
||||
### Current Release: v2.0.0
|
||||
This is a major release with significant new features and improvements:
|
||||
- Complete Get-MinIOObject implementation
|
||||
- Enhanced directory management
|
||||
- Advanced chunked operations
|
||||
- Comprehensive documentation and examples
|
||||
|
||||
### Next Release Planning
|
||||
Future releases will follow the same process:
|
||||
1. Increment version number appropriately
|
||||
2. Update release notes
|
||||
3. Follow this release guide
|
||||
4. Publish to PowerShell Gallery
|
||||
|
||||
## Success Metrics
|
||||
|
||||
After release, monitor:
|
||||
- [ ] Download statistics on PowerShell Gallery
|
||||
- [ ] User feedback and issues
|
||||
- [ ] GitHub stars and forks
|
||||
- [ ] Community adoption and usage
|
||||
|
||||
The PSMinIO module is now ready for enterprise use with professional-grade functionality and comprehensive documentation!
|
||||
@@ -0,0 +1,212 @@
|
||||
# PSMinIO Project Structure
|
||||
|
||||
This document describes the reorganized project structure and centralized version management system.
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
PSMinIO/
|
||||
├── README.md # Main project documentation
|
||||
├── LICENSE # Project license
|
||||
├── PSMinIO.csproj # Main project file
|
||||
├── Version.ps1 # Centralized version configuration
|
||||
│
|
||||
├── src/ # Source code
|
||||
│ ├── Properties/
|
||||
│ │ └── AssemblyInfo.cs # Assembly version information
|
||||
│ ├── Cmdlets/ # PowerShell cmdlet implementations
|
||||
│ ├── Models/ # Data models and result objects
|
||||
│ └── Utils/ # Utility classes and helpers
|
||||
│
|
||||
├── Module/ # Built module directory
|
||||
│ └── PSMinIO/
|
||||
│ ├── PSMinIO.psd1 # Module manifest
|
||||
│ ├── bin/ # Compiled assemblies
|
||||
│ └── types/ # PowerShell type and format files
|
||||
│
|
||||
├── scripts/ # All PowerShell scripts
|
||||
│ ├── Build.ps1 # Main build script
|
||||
│ ├── Quick-Build.ps1 # Quick build without file locking issues
|
||||
│ ├── Update-Version.ps1 # Version update script
|
||||
│ ├── Publish-PSMinIOToGallery.ps1 # PowerShell Gallery publishing
|
||||
│ └── examples/ # Usage examples
|
||||
│ ├── README.md # Examples documentation
|
||||
│ ├── 01-Basic-Operations.ps1
|
||||
│ ├── 02-Advanced-Object-Listing.ps1
|
||||
│ ├── 03-Directory-Management.ps1
|
||||
│ ├── 04-Chunked-Operations.ps1
|
||||
│ ├── 05-Bulk-Operations.ps1
|
||||
│ └── 06-Enterprise-Automation.ps1
|
||||
│
|
||||
├── docs/ # Documentation
|
||||
│ ├── USAGE.md # Comprehensive usage guide
|
||||
│ ├── RELEASE-NOTES.md # Release notes
|
||||
│ ├── POWERSHELL-GALLERY-RELEASE.md # Gallery release guide
|
||||
│ └── PROJECT-STRUCTURE.md # This file
|
||||
│
|
||||
├── Artifacts/ # Build artifacts
|
||||
├── Publish/ # Publishing staging area
|
||||
└── bin/ # Build output
|
||||
```
|
||||
|
||||
## Version Management System
|
||||
|
||||
### Centralized Version Configuration
|
||||
|
||||
The project uses a centralized version management system based on `Version.ps1`:
|
||||
|
||||
- **Version Format**: `yyyy.MM.dd.HHmm` (e.g., `2025.07.11.1151`)
|
||||
- **Automatic Generation**: Version is generated based on current date/time
|
||||
- **Centralized Updates**: Single script updates all version references
|
||||
|
||||
### Version Files
|
||||
|
||||
1. **Version.ps1** - Master version configuration
|
||||
2. **src/Properties/AssemblyInfo.cs** - Assembly version information
|
||||
3. **Module/PSMinIO/PSMinIO.psd1** - PowerShell module manifest
|
||||
|
||||
### Version Update Process
|
||||
|
||||
```powershell
|
||||
# Update all version information
|
||||
.\scripts\Update-Version.ps1
|
||||
|
||||
# Build with updated version
|
||||
.\scripts\Quick-Build.ps1
|
||||
```
|
||||
|
||||
## Build System
|
||||
|
||||
### Build Scripts
|
||||
|
||||
1. **scripts/Build.ps1** - Full build with validation and packaging
|
||||
2. **scripts/Quick-Build.ps1** - Fast build for development (handles file locking)
|
||||
3. **scripts/Update-Version.ps1** - Version management
|
||||
|
||||
### Build Process
|
||||
|
||||
1. Update version information across all files
|
||||
2. Clean previous build artifacts
|
||||
3. Compile .NET project
|
||||
4. Copy assemblies to module directory
|
||||
5. Validate module manifest
|
||||
6. Optional: Run tests and create packages
|
||||
|
||||
### Handling File Locking
|
||||
|
||||
The Quick-Build script handles PowerShell file locking issues:
|
||||
- Removes automatic copy from project file
|
||||
- Manual copy with retry logic
|
||||
- Graceful handling of locked files
|
||||
|
||||
## Scripts Organization
|
||||
|
||||
### Location
|
||||
All scripts are now in the `scripts/` directory:
|
||||
- Build and deployment scripts in `scripts/`
|
||||
- Usage examples in `scripts/examples/`
|
||||
|
||||
### Import Paths
|
||||
Example scripts use relative imports:
|
||||
```powershell
|
||||
Import-Module ..\..\Module\PSMinIO\PSMinIO.psd1
|
||||
```
|
||||
|
||||
## Documentation Structure
|
||||
|
||||
### Location
|
||||
All documentation is in the `docs/` directory except README.md:
|
||||
- `README.md` - Main project overview (root directory)
|
||||
- `docs/USAGE.md` - Comprehensive usage guide
|
||||
- `docs/RELEASE-NOTES.md` - Version history and changes
|
||||
- `docs/POWERSHELL-GALLERY-RELEASE.md` - Publishing guide
|
||||
- `docs/PROJECT-STRUCTURE.md` - This structure guide
|
||||
|
||||
### Content Organization
|
||||
- **README.md**: Overview, installation, quick start
|
||||
- **USAGE.md**: Detailed usage patterns and examples
|
||||
- **Examples**: Practical scripts for common scenarios
|
||||
- **Release Notes**: Version history and changes
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### 1. Making Changes
|
||||
```powershell
|
||||
# Make code changes in src/
|
||||
# Update documentation if needed
|
||||
```
|
||||
|
||||
### 2. Building
|
||||
```powershell
|
||||
# Quick build for testing
|
||||
.\scripts\Quick-Build.ps1
|
||||
|
||||
# Full build with validation
|
||||
.\scripts\Build.ps1
|
||||
```
|
||||
|
||||
### 3. Testing
|
||||
```powershell
|
||||
# Import and test module
|
||||
Import-Module .\Module\PSMinIO\PSMinIO.psd1
|
||||
|
||||
# Run example scripts
|
||||
.\scripts\examples\01-Basic-Operations.ps1
|
||||
```
|
||||
|
||||
### 4. Committing
|
||||
```powershell
|
||||
# Version is automatically updated during build
|
||||
git add .
|
||||
git commit -m "Description of changes"
|
||||
git push
|
||||
```
|
||||
|
||||
### 5. Publishing
|
||||
```powershell
|
||||
# Publish to PowerShell Gallery
|
||||
.\scripts\Publish-PSMinIOToGallery.ps1
|
||||
```
|
||||
|
||||
## Key Benefits
|
||||
|
||||
### Centralized Version Management
|
||||
- Single source of truth for version information
|
||||
- Automatic timestamp-based versioning
|
||||
- Consistent version across all files
|
||||
|
||||
### Organized Structure
|
||||
- Clear separation of concerns
|
||||
- All scripts in dedicated directory
|
||||
- Documentation properly organized
|
||||
|
||||
### Improved Build Process
|
||||
- Handles file locking issues
|
||||
- Automatic version updates
|
||||
- Validation and testing integration
|
||||
|
||||
### Professional Documentation
|
||||
- Comprehensive usage examples
|
||||
- Clear project structure
|
||||
- Publishing guidelines
|
||||
|
||||
## Migration Notes
|
||||
|
||||
### From Previous Structure
|
||||
- Examples moved from `examples/` to `scripts/examples/`
|
||||
- Documentation moved to `docs/` (except README.md)
|
||||
- Version management centralized in `Version.ps1`
|
||||
- Build process improved with Quick-Build option
|
||||
|
||||
### Import Path Updates
|
||||
All example scripts updated to use:
|
||||
```powershell
|
||||
Import-Module ..\..\Module\PSMinIO\PSMinIO.psd1
|
||||
```
|
||||
|
||||
### Version Format Change
|
||||
- Previous: Manual semantic versioning
|
||||
- Current: Automatic date-based versioning (yyyy.MM.dd.HHmm)
|
||||
- PowerShell Gallery: Uses semantic version for compatibility
|
||||
|
||||
This structure provides a professional, maintainable, and scalable foundation for the PSMinIO project.
|
||||
@@ -48,10 +48,11 @@ param(
|
||||
# Set error action preference
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
# Get script directory
|
||||
# Get script directory and project root
|
||||
$ScriptRoot = $PSScriptRoot
|
||||
$ProjectFile = Join-Path $ScriptRoot 'PSMinIO.csproj'
|
||||
$ModuleManifest = Join-Path $ScriptRoot 'PSMinIO.psd1'
|
||||
$ProjectRoot = Split-Path $ScriptRoot -Parent
|
||||
$ProjectFile = Join-Path $ProjectRoot 'PSMinIO.csproj'
|
||||
$ModuleManifest = Join-Path $ProjectRoot 'Module\PSMinIO\PSMinIO.psd1'
|
||||
|
||||
Write-Host "=== PSMinIO Build Script ===" -ForegroundColor Cyan
|
||||
Write-Host "Configuration: $Configuration" -ForegroundColor Gray
|
||||
@@ -72,24 +73,35 @@ function Test-Command {
|
||||
}
|
||||
|
||||
try {
|
||||
# Update version information first
|
||||
Write-Status "Updating version information..."
|
||||
$updateVersionScript = Join-Path $ScriptRoot "Update-Version.ps1"
|
||||
if (Test-Path $updateVersionScript) {
|
||||
& $updateVersionScript
|
||||
Write-Host " ✓ Version information updated" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Warning "Update-Version.ps1 not found, skipping version update"
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Check prerequisites
|
||||
Write-Status "Checking prerequisites..."
|
||||
|
||||
|
||||
if (!(Test-Command 'dotnet')) {
|
||||
throw ".NET SDK is required but not found. Please install .NET SDK 6.0 or later."
|
||||
}
|
||||
|
||||
|
||||
$dotnetVersion = dotnet --version
|
||||
Write-Host " .NET SDK Version: $dotnetVersion" -ForegroundColor Green
|
||||
|
||||
|
||||
if (!(Test-Path $ProjectFile)) {
|
||||
throw "Project file not found: $ProjectFile"
|
||||
}
|
||||
|
||||
|
||||
if (!(Test-Path $ModuleManifest)) {
|
||||
throw "Module manifest not found: $ModuleManifest"
|
||||
}
|
||||
|
||||
|
||||
Write-Host " ✓ Prerequisites check passed" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
@@ -0,0 +1,244 @@
|
||||
# PowerShell Gallery Release Script for PSMinIO
|
||||
# This script prepares and publishes the PSMinIO module to PowerShell Gallery
|
||||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory = $false)]
|
||||
[string]$NuGetApiKey,
|
||||
|
||||
[Parameter(Mandatory = $false)]
|
||||
[switch]$WhatIf,
|
||||
|
||||
[Parameter(Mandatory = $false)]
|
||||
[switch]$Force,
|
||||
|
||||
[Parameter(Mandatory = $false)]
|
||||
[string]$Repository = "PSGallery"
|
||||
)
|
||||
|
||||
# Set error action preference
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
# Define paths
|
||||
$ProjectRoot = Split-Path $PSScriptRoot -Parent
|
||||
$ModulePath = Join-Path $ProjectRoot "Module\PSMinIO"
|
||||
$ManifestPath = Join-Path $ModulePath "PSMinIO.psd1"
|
||||
$PublishPath = Join-Path $ProjectRoot "Publish"
|
||||
|
||||
function Write-Status {
|
||||
param([string]$Message, [string]$Type = "Info")
|
||||
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
|
||||
switch ($Type) {
|
||||
"Success" { Write-Host "[$timestamp] ✅ $Message" -ForegroundColor Green }
|
||||
"Warning" { Write-Host "[$timestamp] ⚠️ $Message" -ForegroundColor Yellow }
|
||||
"Error" { Write-Host "[$timestamp] ❌ $Message" -ForegroundColor Red }
|
||||
default { Write-Host "[$timestamp] ℹ️ $Message" -ForegroundColor Cyan }
|
||||
}
|
||||
}
|
||||
|
||||
function Test-ModuleStructure {
|
||||
Write-Status "Validating module structure..."
|
||||
|
||||
# Check if manifest exists
|
||||
if (-not (Test-Path $ManifestPath)) {
|
||||
throw "Module manifest not found at: $ManifestPath"
|
||||
}
|
||||
|
||||
# Test manifest
|
||||
try {
|
||||
$manifest = Test-ModuleManifest -Path $ManifestPath -ErrorAction Stop
|
||||
Write-Status "Module manifest is valid" "Success"
|
||||
Write-Status "Module: $($manifest.Name) v$($manifest.Version)"
|
||||
Write-Status "Author: $($manifest.Author)"
|
||||
Write-Status "Description: $($manifest.Description)"
|
||||
return $manifest
|
||||
} catch {
|
||||
throw "Module manifest validation failed: $($_.Exception.Message)"
|
||||
}
|
||||
}
|
||||
|
||||
function Test-RequiredFiles {
|
||||
param($Manifest)
|
||||
|
||||
Write-Status "Checking required files..."
|
||||
|
||||
$requiredFiles = @(
|
||||
"bin\PSMinIO.dll",
|
||||
"bin\Minio.dll",
|
||||
"types\PSMinIO.Types.ps1xml",
|
||||
"types\PSMinIO.Format.ps1xml"
|
||||
)
|
||||
|
||||
foreach ($file in $requiredFiles) {
|
||||
$filePath = Join-Path $ModulePath $file
|
||||
if (-not (Test-Path $filePath)) {
|
||||
throw "Required file missing: $file"
|
||||
}
|
||||
Write-Status "✓ Found: $file"
|
||||
}
|
||||
|
||||
Write-Status "All required files present" "Success"
|
||||
}
|
||||
|
||||
function Test-ModuleFunctionality {
|
||||
Write-Status "Testing module functionality..."
|
||||
|
||||
try {
|
||||
# Import the module
|
||||
Import-Module $ManifestPath -Force -ErrorAction Stop
|
||||
Write-Status "✓ Module imported successfully"
|
||||
|
||||
# Test cmdlet availability
|
||||
$expectedCmdlets = @(
|
||||
'Connect-MinIO',
|
||||
'Get-MinIOBucket',
|
||||
'New-MinIOBucket',
|
||||
'Remove-MinIOBucket',
|
||||
'Test-MinIOBucketExists',
|
||||
'Get-MinIOObject',
|
||||
'New-MinIOObject',
|
||||
'New-MinIOObjectChunked',
|
||||
'New-MinIOFolder',
|
||||
'Get-MinIOObjectContent',
|
||||
'Get-MinIOObjectContentChunked',
|
||||
'Remove-MinIOObject',
|
||||
'Get-MinIOBucketPolicy',
|
||||
'Set-MinIOBucketPolicy',
|
||||
'Get-MinIOStats'
|
||||
)
|
||||
|
||||
$availableCmdlets = Get-Command -Module PSMinIO | Select-Object -ExpandProperty Name
|
||||
|
||||
foreach ($cmdlet in $expectedCmdlets) {
|
||||
if ($cmdlet -in $availableCmdlets) {
|
||||
Write-Status "✓ Cmdlet available: $cmdlet"
|
||||
} else {
|
||||
throw "Expected cmdlet not found: $cmdlet"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Status "All expected cmdlets are available" "Success"
|
||||
|
||||
# Remove module
|
||||
Remove-Module PSMinIO -Force -ErrorAction SilentlyContinue
|
||||
|
||||
} catch {
|
||||
throw "Module functionality test failed: $($_.Exception.Message)"
|
||||
}
|
||||
}
|
||||
|
||||
function Prepare-PublishDirectory {
|
||||
param($Manifest)
|
||||
|
||||
Write-Status "Preparing publish directory..."
|
||||
|
||||
# Clean and create publish directory
|
||||
if (Test-Path $PublishPath) {
|
||||
Remove-Item $PublishPath -Recurse -Force
|
||||
}
|
||||
New-Item -ItemType Directory -Path $PublishPath -Force | Out-Null
|
||||
|
||||
# Create module directory in publish path
|
||||
$publishModulePath = Join-Path $PublishPath "PSMinIO"
|
||||
New-Item -ItemType Directory -Path $publishModulePath -Force | Out-Null
|
||||
|
||||
# Copy module files
|
||||
Copy-Item -Path "$ModulePath\*" -Destination $publishModulePath -Recurse -Force
|
||||
|
||||
Write-Status "Module prepared in: $publishModulePath" "Success"
|
||||
return $publishModulePath
|
||||
}
|
||||
|
||||
function Test-PowerShellGalleryConnection {
|
||||
Write-Status "Testing PowerShell Gallery connection..."
|
||||
|
||||
try {
|
||||
$repo = Get-PSRepository -Name $Repository -ErrorAction Stop
|
||||
Write-Status "✓ Repository '$Repository' is available"
|
||||
Write-Status " Source: $($repo.SourceLocation)"
|
||||
Write-Status " Publish: $($repo.PublishLocation)"
|
||||
|
||||
if ($repo.InstallationPolicy -eq "Untrusted") {
|
||||
Write-Status "Repository is marked as Untrusted - this is normal for PSGallery" "Warning"
|
||||
}
|
||||
|
||||
} catch {
|
||||
throw "Failed to connect to repository '$Repository': $($_.Exception.Message)"
|
||||
}
|
||||
}
|
||||
|
||||
function Publish-ModuleToGallery {
|
||||
param($PublishModulePath, $Manifest)
|
||||
|
||||
if ($WhatIf) {
|
||||
Write-Status "WhatIf: Would publish module to PowerShell Gallery" "Warning"
|
||||
Write-Status "Module: $($Manifest.Name) v$($Manifest.Version)"
|
||||
Write-Status "Path: $PublishModulePath"
|
||||
Write-Status "Repository: $Repository"
|
||||
return
|
||||
}
|
||||
|
||||
if (-not $NuGetApiKey) {
|
||||
Write-Status "NuGetApiKey not provided. Please provide your PowerShell Gallery API key." "Warning"
|
||||
$NuGetApiKey = Read-Host -Prompt "Enter your PowerShell Gallery API Key" -AsSecureString
|
||||
$NuGetApiKey = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($NuGetApiKey))
|
||||
}
|
||||
|
||||
Write-Status "Publishing module to PowerShell Gallery..."
|
||||
|
||||
try {
|
||||
$publishParams = @{
|
||||
Path = $PublishModulePath
|
||||
Repository = $Repository
|
||||
NuGetApiKey = $NuGetApiKey
|
||||
Force = $Force
|
||||
Verbose = $true
|
||||
}
|
||||
|
||||
Publish-Module @publishParams
|
||||
|
||||
Write-Status "Module published successfully!" "Success"
|
||||
Write-Status "It may take a few minutes to appear in search results"
|
||||
|
||||
} catch {
|
||||
throw "Failed to publish module: $($_.Exception.Message)"
|
||||
}
|
||||
}
|
||||
|
||||
# Main execution
|
||||
try {
|
||||
Write-Status "Starting PowerShell Gallery release process for PSMinIO"
|
||||
Write-Status "Repository: $Repository"
|
||||
Write-Status "WhatIf: $WhatIf"
|
||||
|
||||
# Step 1: Validate module structure
|
||||
$manifest = Test-ModuleStructure
|
||||
|
||||
# Step 2: Check required files
|
||||
Test-RequiredFiles -Manifest $manifest
|
||||
|
||||
# Step 3: Test module functionality
|
||||
Test-ModuleFunctionality
|
||||
|
||||
# Step 4: Test PowerShell Gallery connection
|
||||
Test-PowerShellGalleryConnection
|
||||
|
||||
# Step 5: Prepare publish directory
|
||||
$publishModulePath = Prepare-PublishDirectory -Manifest $manifest
|
||||
|
||||
# Step 6: Final validation of prepared module
|
||||
Write-Status "Final validation of prepared module..."
|
||||
$finalManifest = Test-ModuleManifest -Path (Join-Path $publishModulePath "PSMinIO.psd1")
|
||||
Write-Status "Final validation successful" "Success"
|
||||
|
||||
# Step 7: Publish to gallery
|
||||
Publish-ModuleToGallery -PublishModulePath $publishModulePath -Manifest $finalManifest
|
||||
|
||||
Write-Status "PowerShell Gallery release process completed successfully!" "Success"
|
||||
Write-Status "Module: PSMinIO v$($finalManifest.Version)"
|
||||
Write-Status "Check status at: https://www.powershellgallery.com/packages/PSMinIO"
|
||||
|
||||
} catch {
|
||||
Write-Status "Release process failed: $($_.Exception.Message)" "Error"
|
||||
exit 1
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
# Quick-Build.ps1
|
||||
# Simple build script that handles file locking issues
|
||||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[ValidateSet('Debug', 'Release')]
|
||||
[string]$Configuration = 'Release'
|
||||
)
|
||||
|
||||
$ProjectRoot = Split-Path $PSScriptRoot -Parent
|
||||
|
||||
Write-Host "PSMinIO Quick Build" -ForegroundColor Cyan
|
||||
Write-Host "==================" -ForegroundColor Cyan
|
||||
|
||||
# Update version first
|
||||
Write-Host "Updating version..." -ForegroundColor Yellow
|
||||
& "$PSScriptRoot\Update-Version.ps1"
|
||||
|
||||
# Clean build
|
||||
Write-Host "Cleaning previous build..." -ForegroundColor Yellow
|
||||
dotnet clean "$ProjectRoot\PSMinIO.csproj" --configuration $Configuration --verbosity quiet
|
||||
|
||||
# Build without copying to avoid file locks
|
||||
Write-Host "Building project..." -ForegroundColor Yellow
|
||||
dotnet build "$ProjectRoot\PSMinIO.csproj" --configuration $Configuration --verbosity minimal --no-restore
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Error "Build failed"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Manual copy to avoid file locking issues
|
||||
Write-Host "Copying files manually..." -ForegroundColor Yellow
|
||||
|
||||
$buildOutput = "$ProjectRoot\bin\$Configuration\netstandard2.0"
|
||||
$moduleDir = "$ProjectRoot\Module\PSMinIO\bin"
|
||||
|
||||
# Ensure module directory exists
|
||||
if (!(Test-Path $moduleDir)) {
|
||||
New-Item -ItemType Directory -Path $moduleDir -Force | Out-Null
|
||||
}
|
||||
|
||||
# Copy files with retry logic
|
||||
$filesToCopy = @(
|
||||
@{ Source = "$buildOutput\PSMinIO.dll"; Dest = "$moduleDir\PSMinIO.dll" }
|
||||
@{ Source = "$buildOutput\PSMinIO.pdb"; Dest = "$moduleDir\PSMinIO.pdb" }
|
||||
@{ Source = "$buildOutput\Minio.dll"; Dest = "$moduleDir\Minio.dll" }
|
||||
)
|
||||
|
||||
foreach ($file in $filesToCopy) {
|
||||
$retryCount = 0
|
||||
$maxRetries = 3
|
||||
$copied = $false
|
||||
|
||||
while (-not $copied -and $retryCount -lt $maxRetries) {
|
||||
try {
|
||||
if (Test-Path $file.Dest) {
|
||||
Remove-Item $file.Dest -Force -ErrorAction Stop
|
||||
}
|
||||
Copy-Item $file.Source $file.Dest -Force -ErrorAction Stop
|
||||
Write-Host " ✓ Copied: $(Split-Path $file.Source -Leaf)" -ForegroundColor Green
|
||||
$copied = $true
|
||||
} catch {
|
||||
$retryCount++
|
||||
if ($retryCount -lt $maxRetries) {
|
||||
Write-Host " Retry $retryCount for $(Split-Path $file.Source -Leaf)..." -ForegroundColor Yellow
|
||||
Start-Sleep -Seconds 2
|
||||
} else {
|
||||
Write-Warning " Failed to copy $(Split-Path $file.Source -Leaf): $($_.Exception.Message)"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Test the module
|
||||
Write-Host "Testing module..." -ForegroundColor Yellow
|
||||
try {
|
||||
$manifest = Test-ModuleManifest "$ProjectRoot\Module\PSMinIO\PSMinIO.psd1" -ErrorAction Stop
|
||||
Write-Host " ✓ Module is valid: $($manifest.Name) v$($manifest.Version)" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Warning " Module validation failed: $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "✅ Quick build completed!" -ForegroundColor Green
|
||||
Write-Host "To import: Import-Module .\Module\PSMinIO\PSMinIO.psd1" -ForegroundColor Cyan
|
||||
@@ -0,0 +1,178 @@
|
||||
# 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
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
# This script demonstrates fundamental MinIO operations using PSMinIO
|
||||
|
||||
# Import the module
|
||||
Import-Module ..\Module\PSMinIO\PSMinIO.psd1
|
||||
Import-Module ..\..\Module\PSMinIO\PSMinIO.psd1
|
||||
|
||||
# Example connection details (replace with your actual values)
|
||||
$endpoint = "https://minio.example.com"
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
# Demonstrates the powerful Get-MinIOObject cmdlet with filtering, sorting, and pagination
|
||||
|
||||
# Import the module
|
||||
Import-Module ..\Module\PSMinIO\PSMinIO.psd1
|
||||
Import-Module ..\..\Module\PSMinIO\PSMinIO.psd1
|
||||
|
||||
# Connection details (replace with your actual values)
|
||||
$endpoint = "https://minio.example.com"
|
||||
@@ -2,7 +2,7 @@
|
||||
# Demonstrates creating nested directory structures and organizing files
|
||||
|
||||
# Import the module
|
||||
Import-Module ..\Module\PSMinIO\PSMinIO.psd1
|
||||
Import-Module ..\..\Module\PSMinIO\PSMinIO.psd1
|
||||
|
||||
# Connection details (replace with your actual values)
|
||||
$endpoint = "https://minio.example.com"
|
||||
@@ -2,7 +2,7 @@
|
||||
# Demonstrates chunked uploads and downloads for large files with progress tracking
|
||||
|
||||
# Import the module
|
||||
Import-Module ..\Module\PSMinIO\PSMinIO.psd1
|
||||
Import-Module ..\..\Module\PSMinIO\PSMinIO.psd1
|
||||
|
||||
# Connection details (replace with your actual values)
|
||||
$endpoint = "https://minio.example.com"
|
||||
@@ -2,7 +2,7 @@
|
||||
# Demonstrates bulk file operations, batch processing, and automation scenarios
|
||||
|
||||
# Import the module
|
||||
Import-Module ..\Module\PSMinIO\PSMinIO.psd1
|
||||
Import-Module ..\..\Module\PSMinIO\PSMinIO.psd1
|
||||
|
||||
# Connection details (replace with your actual values)
|
||||
$endpoint = "https://minio.example.com"
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
# Demonstrates enterprise-grade automation scenarios including monitoring, policies, and scheduled operations
|
||||
|
||||
# Import the module
|
||||
Import-Module ..\Module\PSMinIO\PSMinIO.psd1
|
||||
Import-Module ..\..\Module\PSMinIO\PSMinIO.psd1
|
||||
|
||||
# Connection details (replace with your actual values)
|
||||
$endpoint = "https://minio.example.com"
|
||||
@@ -6,7 +6,7 @@ This directory contains comprehensive examples demonstrating various PSMinIO cap
|
||||
|
||||
Before running these examples:
|
||||
|
||||
1. **Install PSMinIO**: Import the module using `Import-Module ..\Module\PSMinIO\PSMinIO.psd1`
|
||||
1. **Install PSMinIO**: Import the module using `Import-Module ..\..\Module\PSMinIO\PSMinIO.psd1`
|
||||
2. **MinIO Server**: Have access to a MinIO server or compatible S3 service
|
||||
3. **Credentials**: Update the connection details in each script with your actual values:
|
||||
```powershell
|
||||
@@ -0,0 +1,42 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("PSMinIO")]
|
||||
[assembly: AssemblyDescription("A comprehensive PowerShell module for MinIO object storage operations with enterprise-grade features including chunked transfers, advanced object listing, directory management, and performance monitoring. Built on the official Minio .NET SDK.")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Grace Solutions")]
|
||||
[assembly: AssemblyProduct("PSMinIO")]
|
||||
[assembly: AssemblyCopyright("(c) 2025 Grace Solutions. All rights reserved.")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("a1b2c3d4-e5f6-7890-abcd-ef1234567890")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("2025.07.11.1151")]
|
||||
[assembly: AssemblyVersion("2025.07.11.1151")]
|
||||
[assembly: AssemblyFileVersion("2025.07.11.1151")]
|
||||
[assembly: AssemblyInformationalVersion("2025.07.11.1151")]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user