Build/GitHub/Steps/PublishPowerShellGallery.ps1
param( [string] $ModulePath, [string[]] $Exclude = @('*.png', '*.mp4', '*.jpg','*.jpeg', '*.gif', '*[\/]docs[/\]*') ) $gitHubEvent = if ($env:GITHUB_EVENT_PATH) { [IO.File]::ReadAllText($env:GITHUB_EVENT_PATH) | ConvertFrom-Json } else { $null } if (-not $Exclude) { $Exclude = @('*.png', '*.mp4', '*.jpg','*.jpeg', '*.gif','*[\/]docs[/\]*') } @" ::group::GitHubEvent $($gitHubEvent | ConvertTo-Json -Depth 100) ::endgroup:: "@ | Out-Host @" ::group::PSBoundParameters $($PSBoundParameters | ConvertTo-Json -Depth 100) ::endgroup:: "@ | Out-Host if (-not ($gitHubEvent.head_commit.message -match "Merge Pull Request #(?<PRNumber>\d+)") -and (-not $gitHubEvent.psobject.properties['inputs'])) { "::warning::Pull Request has not merged, skipping Gallery Publish" | Out-Host return } $imported = if (-not $ModulePath) { $orgName, $moduleName = $env:GITHUB_REPOSITORY -split "/" Import-Module ".\$moduleName.psd1" -Force -PassThru -Global } else { Import-Module $modulePath -Force -PassThru -Global } if (-not $imported) { return } $foundModule = try { Find-Module -Name $imported.Name -ErrorAction SilentlyContinue} catch {} if ($foundModule -and (([Version]$foundModule.Version) -ge ([Version]$imported.Version))) { "::warning::Gallery Version of $moduleName is more recent ($($foundModule.Version) >= $($imported.Version))" | Out-Host } else { $gk = '${{secrets.GALLERYKEY}}' $rn = Get-Random $moduleTempFolder = Join-Path $pwd "$rn" $moduleTempPath = Join-Path $moduleTempFolder $moduleName New-Item -ItemType Directory -Path $moduleTempPath -Force | Out-Host Write-Host "Staging Directory: $ModuleTempPath" $subModulePaths = if (Test-Path ".\.gitmodules") { "(?>$(@(foreach ($match in [Regex]::Matches((Get-Content ".\.gitmodules" -Raw), "path = (?<p>.+)$", "Multiline,IgnoreCase")) { [Regex]::Escape(((Get-Item -Path ".\$($match.Groups["p"].Value.Trim())").FullName)) }) -join '|'))" } else { '' } $imported | Split-Path | Get-ChildItem -Force | Where-Object Name -NE $rn | Where-Object { (-not $subModulePaths) -or ($_.FullName -notmatch "$($subModulePaths)") }| Copy-Item -Destination $moduleTempPath -Recurse $moduleGitPath = Join-Path $moduleTempPath '.git' Write-Host "Removing .git directory" if (Test-Path $moduleGitPath) { Remove-Item -Recurse -Force $moduleGitPath } if ($Exclude) { "::notice::Attempting to Exlcude $exclude" | Out-Host Get-ChildItem $moduleTempPath -Recurse | Where-Object { foreach ($ex in $exclude) { if ($_.FullName -like $ex) { "::notice::Excluding $($_.FullName)" | Out-Host return $true } } } | Remove-Item -Recurse -Force } Write-Host "Module Files:" Get-ChildItem $moduleTempPath -Recurse Write-Host "Publishing $moduleName [$($imported.Version)] to Gallery" Publish-Module -Path $moduleTempPath -NuGetApiKey $gk if ($?) { Write-Host "Published to Gallery" } else { Write-Host "Gallery Publish Failed" exit 1 } } |