mirror of
https://github.com/MAKS-IT-COM/maksit-certs-ui.git
synced 2026-06-13 09:46:41 +02:00
100 lines
3.7 KiB
PowerShell
100 lines
3.7 KiB
PowerShell
#requires -Version 7.0
|
|
#requires -PSEdition Core
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Loads npm workspace release version into shared context.
|
|
|
|
.DESCRIPTION
|
|
Reads semver from the configured workspace package.json and writes it to
|
|
shared context version. Optionally synchronizes version fields across
|
|
workspace package manifests before build/publish.
|
|
#>
|
|
|
|
if (-not (Get-Command Import-PluginDependency -ErrorAction SilentlyContinue)) {
|
|
$srcDir = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
|
|
$pluginSupportModulePath = Join-Path $srcDir "modules/Engine/PluginSupport.psm1"
|
|
if (Test-Path $pluginSupportModulePath -PathType Leaf) {
|
|
Import-Module $pluginSupportModulePath -Force -Global -ErrorAction Stop
|
|
}
|
|
}
|
|
|
|
function Get-PackageJsonVersionInternal {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$PackageJsonPath
|
|
)
|
|
|
|
if (-not (Test-Path $PackageJsonPath -PathType Leaf)) {
|
|
throw "NpmReleaseVersion: package.json not found at '$PackageJsonPath'."
|
|
}
|
|
|
|
$json = Get-Content -Path $PackageJsonPath -Raw -Encoding UTF8 | ConvertFrom-Json
|
|
$version = [string]$json.version
|
|
if ([string]::IsNullOrWhiteSpace($version)) {
|
|
throw "NpmReleaseVersion: 'version' is missing in '$PackageJsonPath'."
|
|
}
|
|
|
|
if ($version -notmatch '^\d+\.\d+\.\d+') {
|
|
throw "NpmReleaseVersion: version '$version' in '$PackageJsonPath' is not a valid semver."
|
|
}
|
|
|
|
return $version
|
|
}
|
|
|
|
function Set-PackageJsonVersionInternal {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$PackageJsonPath,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Version
|
|
)
|
|
|
|
$raw = Get-Content -Path $PackageJsonPath -Raw -Encoding UTF8
|
|
$json = $raw | ConvertFrom-Json
|
|
$json.version = $Version
|
|
($json | ConvertTo-Json -Depth 100) + [Environment]::NewLine | Set-Content -Path $PackageJsonPath -Encoding UTF8 -NoNewline
|
|
}
|
|
|
|
function Invoke-Plugin {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
$Settings
|
|
)
|
|
|
|
Import-PluginDependency -ModuleName "Logging" -RequiredCommand "Write-Log"
|
|
Import-PluginDependency -ModuleName "EngineContext" -RequiredCommand "Resolve-RelativePaths"
|
|
|
|
$pluginSettings = $Settings
|
|
$shared = $Settings.context
|
|
|
|
$packageJsonPaths = @(Resolve-RelativePaths -Value $pluginSettings.packageJsonPath -BasePath $shared.scriptDir)
|
|
if ($packageJsonPaths.Count -eq 0) {
|
|
throw "NpmReleaseVersion plugin requires 'packageJsonPath' in scriptSettings.json."
|
|
}
|
|
$packageJsonPath = $packageJsonPaths[0]
|
|
|
|
$version = Get-PackageJsonVersionInternal -PackageJsonPath $packageJsonPath
|
|
$syncWorkspaceVersions = $false
|
|
if ($null -ne $pluginSettings.syncWorkspaceVersions) {
|
|
$syncWorkspaceVersions = [bool]$pluginSettings.syncWorkspaceVersions
|
|
}
|
|
|
|
if ($syncWorkspaceVersions) {
|
|
$workspaceRoot = Split-Path -Parent $packageJsonPath
|
|
$packageManifests = Get-ChildItem -Path (Join-Path $workspaceRoot 'packages') -Recurse -Filter package.json -File -ErrorAction SilentlyContinue
|
|
foreach ($manifest in $packageManifests) {
|
|
Set-PackageJsonVersionInternal -PackageJsonPath $manifest.FullName -Version $version
|
|
}
|
|
Write-Log -Level "OK" -Message " Synchronized workspace package versions to $version."
|
|
}
|
|
|
|
$shared | Add-Member -NotePropertyName version -NotePropertyValue $version -Force
|
|
$shared | Add-Member -NotePropertyName npmWorkspaceRoot -NotePropertyValue (Split-Path -Parent $packageJsonPath) -Force
|
|
$shared | Add-Member -NotePropertyName npmPackageJsonPath -NotePropertyValue $packageJsonPath -Force
|
|
Write-Log -Level "OK" -Message " Release version loaded by NpmReleaseVersion plugin: $version"
|
|
}
|
|
|
|
Export-ModuleMember -Function Invoke-Plugin
|