build/publish.ps1

param  (
  [string] $PSGalleryApiKey
)

# Purpose: Cleans the module directory to prepare for publication to PowerShell Gallery
$ErrorActionPreference = 'stop'
$ModulePath = "$PSScriptRoot/../"

# Build directory should work on Windows or Linux
$BuildDirectory = $env:TEMP ? "$env:TEMP/YouTube" : "/tmp/YouTube"

# These project paths will be excluded from the module during publishing
$Exclude = @(
  'README.md'
  'tests'
  '.github'
  'BuildNumber'
)

# Copy project to temporary build directory
if (Test-Path -Path $BuildDirectory) {
  Remove-Item -Path $BuildDirectory -Recurse -Force
}
$null = New-Item -ItemType Directory -Path $BuildDirectory
Write-Host -Object 'Created build directory'
Copy-Item -Exclude $Exclude -Path $ModulePath/* -Destination $BuildDirectory -Recurse
Write-Host -Object 'Copied all items to build directory'

# Replace module version with build number
$ManifestPath = "$BuildDirectory/youtube.psd1"
(Get-Content -Path $ManifestPath -Raw) -replace 'ModuleVersion = ''(?<version>.*?)''', ('ModuleVersion = ''${{version}}.{0}''' -f (Get-Content -Path $ModulePath/BuildNumber)) | Set-Content -Path $ManifestPath

Publish-Module -Path $BuildDirectory -NuGetApiKey $PSGalleryApiKey