Includes/PwSh.Fw.Build.Electron.psm1
|
<#
.SYNOPSIS Module to give a hand with Eletron building process .DESCRIPTION .NOTES Electron build reference https://www.electron.build/ https://docs.npmjs.com/cli/v11/configuring-npm/package-json #> function ConvertTo-ElectronPackageJson { [CmdletBinding()][OutputType([hashtable])]Param ( [Parameter(Mandatory = $true, ValueFromPipeLine = $true)][object]$Metadata ) Begin { Write-EnterFunction } Process { $PackageJson = @{} if ($Metadata) { if ($Metadata.Architecture) { $PackageJson.arch = $Metadata.Architecture } if ($Metadata.Arch) { $PackageJson.arch = $Metadata.Arch } # translate Arch to correct values @see @url https://docs.microsoft.com/fr-fr/powershell/scripting/developer/module/how-to-write-a-powershell-module-manifest switch ($PackageJson.arch) { 'all' { $PackageJson.arch = 'universal' } 'none' { $PackageJson.arch = 'universal' } 'x64' { $PackageJson.arch = 'x64' } 'arm32' { $PackageJson.arch = 'armv7l' } 'armvl7' { $PackageJson.arch = 'armv7l' } 'arm64' { $PackageJson.arch = 'arm64' } default { $PackageJson.arch = 'universal' } } if ($Metadata.name) { $PackageJson.name = $Metadata.name } if ($Metadata.Version) { $PackageJson.moduleVersion = $Metadata.Version } if ($Metadata.Description) { $PackageJson.description = $Metadata.Description } if ($Metadata.Author) { $PackageJson.author = $Metadata.Author } if ($Metadata.owner) { $PackageJson.author = $Metadata.owner } if ($Metadata.CompanyName) { $PackageJson.companyName = $Metadata.CompanyName } if ($Metadata.Copyright) { $PackageJson.copyright = $Metadata.Copyright } if ($Metadata.extraMetadata) { $PackageJson.extraMetadata = $Metadata.extraMetadata } if ($Metadata.Tags) { $PackageJson.tags = $Metadata.Tags } if ($Metadata.ProjectUri) { $PackageJson.homepage = $Metadata.ProjectUri } if ($Metadata.ProjectUrl) { $PackageJson.homepage = $Metadata.ProjectUrl } if ($Metadata.License) { $PackageJson.license = $Metadata.License } # if ($Metadata.PackageIcon) { $PackageJson.packageIcon = $Metadata.PackageIcon } if ($Metadata.ReleaseNotes) { $PackageJson.releaseNotes = $Metadata.ReleaseNotes } # if we are in a prerelease : # - add '-preview' to name to differentiate 'preview' branches and 'release' branches # - concat Version and Build to get a 4-dotted version number for NSIS if ($Metadata.Prerelease) { # already done at the Get-Project level # $PackageJson.package = "$($PackageJson.package)-preview" # $PackageJson.displayName = "$($PackageJson.displayName) (preview)" $PackageJson.version = "$($Metadata.Version)-alpha" } } return $PackageJson } End { Write-LeaveFunction } } function Out-ElectronPackageJson { [CmdletBinding()][OutputType([String])]Param ( [Parameter(Mandatory = $true, ValueFromPipeLine = $true)][object]$Metadata, [Parameter(Mandatory = $false, ValueFromPipeLine = $false)][string]$Destination, [switch]$PassThru ) Begin { Write-EnterFunction if ($Destination) { if (!(dirExist($Destination))) { $null = New-Item $Destination -Force -ItemType Directory} } } Process { $PackageJson = Get-Content -Raw -Path $Destination/package.json | ConvertFrom-Json |ConvertTo-Hashtable $MetadataJson = ConvertTo-ElectronPackageJson -Metadata $Metadata if ($Destination) { Remove-Item $Destination/package.json -Force Merge-Hashtables $PackageJson $MetadataJson | ConvertTo-Json -Depth 16 | Out-File -Path "$Destination/package.json" -Encoding utf8 -NoNewline } if ($PassThru) { return $MetadataJson } else { return (Resolve-Path -Path "$Destination/package.json").Path } } End { Write-LeaveFunction } } function New-ElectronBuild { [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'Low', DefaultParameterSetName = 'PROJECT')] [OutputType([Boolean], [String])] Param ( # The project object as returned by Get-Project [Parameter(Mandatory = $true, ValueFromPipeLine = $true)][hashtable]$Project, # The source folder of your project. Files and directory structure will be kept as-is [Parameter(Mandatory = $false, ValueFromPipeLine = $false)][string]$Source = "./src", # Destination folder to create resulting package [Parameter(Mandatory = $false, ValueFromPipeLine = $false)][string]$Destination = "./releases", # # Override output package filename. # # It defaults to projectName-Version-Arch.deb # [Parameter(Mandatory = $false, ValueFromPipeLine = $false)][string]$OutputFileName, # Force/override/overwrite things [switch]$Force ) Begin { Write-EnterFunction if (!(Test-DirExist $Destination)) { $null = New-Item -Path $Destination -ItemType Directory -Confirm:$false -Force:$Force } } Process { $PackageJson = $project | Out-ElectronPackageJson -Destination $Source -PassThru # if ([string]::IsNullOrEmpty($OutputFileName)) { # $Filename = "$($project.name)-$($project.Version)$($project.PreRelease)-$($PackageJson.arch).deb" # } else { # $Filename = $OutputFileName # } if ($PSCmdlet.ShouldProcess("$Destination", "Create electron package")) { Push-Location $Source if ($IsLinux) { $rc = Execute-Command -exe npm -args "run build -- --linux --$($PackageJson.arch)" -AsBool } if ($IsWindows) { $rc = Execute-Command -exe npm -args "run build -- --win --$($PackageJson.arch)" -AsBool } if($IsMacOS) { $rc = Execute-Command -exe npm -args "run build -- --mac --$($PackageJson.arch)" -AsBool } Write-Devel "rc = $rc" # if (Test-FileExist "$Destination/$Filename") { # $value = (Resolve-Path "$Destination/$Filename").Path # } else { # $value = $false # } Pop-Location # } else { # $value = "$Destination/$Filename" } # Write-Devel "value = $value" # return $value return $rc } End { Write-LeaveFunction } } |