-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move emitter-package.json scripts to eng/common (#41989)
Co-authored-by: Patrick Hallisey <[email protected]>
- Loading branch information
Showing
2 changed files
with
130 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
[CmdletBinding()] | ||
param ( | ||
[parameter(Mandatory = $true)] | ||
[ValidateScript({ Test-Path $_ })] | ||
[string]$PackageJsonPath, | ||
|
||
[parameter(Mandatory = $false)] | ||
[ValidateScript({ Test-Path $_ })] | ||
[string]$OverridesPath, | ||
|
||
[parameter(Mandatory = $true)] | ||
[string]$OutputDirectory, | ||
|
||
[parameter(Mandatory = $false)] | ||
[string]$PackageJsonFileName = "emitter-package.json" | ||
) | ||
|
||
$packageJson = Get-Content $PackageJsonPath | ConvertFrom-Json -AsHashtable | ||
|
||
# If we provide OverridesPath, use that to load a hashtable of version overrides | ||
$overrides = @{} | ||
|
||
if ($OverridesPath) { | ||
Write-Host "Using overrides from $OverridesPath`:`n" | ||
$overrides = Get-Content $OverridesPath | ConvertFrom-Json -AsHashtable | ||
Write-Host ($overrides | ConvertTo-Json) | ||
Write-Host "" | ||
} | ||
|
||
|
||
# If there's a peer dependency and a dev dependency for the same package, carry the | ||
# dev dependency forward into emitter-package.json | ||
|
||
$devDependencies = @{} | ||
|
||
foreach ($package in $packageJson.peerDependencies.Keys) { | ||
$pinnedVersion = $packageJson.devDependencies[$package] | ||
if ($pinnedVersion -and -not $overrides[$package]) { | ||
Write-Host "Pinning $package to $pinnedVersion" | ||
$devDependencies[$package] = $pinnedVersion | ||
} | ||
} | ||
|
||
$emitterPackageJson = [ordered]@{ | ||
"main" = "dist/src/index.js" | ||
"dependencies" = @{ | ||
$packageJson.name = $overrides[$packageJson.name] ?? $packageJson.version | ||
} | ||
} | ||
|
||
# you shouldn't specify the same package in both dependencies and overrides | ||
$overrides.Remove($packageJson.name) | ||
|
||
# Avoid adding an empty devDependencies section | ||
if($devDependencies.Keys.Count -gt 0) { | ||
$emitterPackageJson["devDependencies"] = $devDependencies | ||
} | ||
|
||
# Avoid adding an empty overrides section | ||
if($overrides.Keys.Count -gt 0) { | ||
$emitterPackageJson["overrides"] = $overrides | ||
} | ||
|
||
New-Item $OutputDirectory -ItemType Directory -ErrorAction SilentlyContinue | Out-Null | ||
$OutputDirectory = Resolve-Path $OutputDirectory | ||
|
||
$dest = Join-Path $OutputDirectory $PackageJsonFileName | ||
$destJson = $emitterPackageJson | ConvertTo-Json -Depth 100 | ||
|
||
Write-Host "Generating $dest" | ||
$destJson | Out-File $dest | ||
|
||
Write-Host $destJson |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
[CmdletBinding()] | ||
param ( | ||
[parameter(Mandatory = $true)] | ||
[string]$EmitterPackageJsonPath, | ||
|
||
[parameter(Mandatory = $true)] | ||
[string]$OutputDirectory, | ||
|
||
[parameter(Mandatory = $false)] | ||
[string]$NpmrcPath, | ||
|
||
[parameter(Mandatory = $false)] | ||
[string]$LockFileName = "emitter-package-lock.json" | ||
) | ||
|
||
New-Item $OutputDirectory -ItemType Directory -ErrorAction SilentlyContinue | Out-Null | ||
$OutputDirectory = Resolve-Path $OutputDirectory | ||
|
||
$tempFile = New-TemporaryFile | ||
Remove-Item $tempFile | ||
|
||
# use a consistent folder name to avoid random package name in package-lock.json | ||
Write-Host "Creating temporary folder $tempFile/emitter-consumer" | ||
$tempFolder = New-Item "$tempFile/emitter-consumer" -ItemType Directory | ||
|
||
if ($NpmrcPath) { | ||
Write-Host "Copy npmrc from $NpmrcPath to $tempFolder/.npmrc" | ||
Copy-Item $NpmrcPath "$tempFolder/.npmrc" | ||
} | ||
|
||
Push-Location $tempFolder | ||
|
||
try { | ||
Write-Host "Copy $EmitterPackageJsonPath to $tempFolder/package.json" | ||
Copy-Item $EmitterPackageJsonPath "$tempFolder/package.json" | ||
|
||
Write-Host 'npm install --legacy-peer-deps' | ||
npm install --legacy-peer-deps | ||
|
||
if ($LASTEXITCODE) { | ||
Write-Error "npm install failed with exit code $LASTEXITCODE" | ||
exit $LASTEXITCODE | ||
} | ||
|
||
Write-Host '##[group]npm list --all' | ||
npm list --all | ||
Write-Host '##[endgroup]' | ||
|
||
$dest = Join-Path $OutputDirectory $LockFileName | ||
Write-Host "Copy package-lock.json to $dest" | ||
Copy-Item 'package-lock.json' $dest | ||
} | ||
finally { | ||
Pop-Location | ||
} | ||
|
||
Remove-Item $tempFolder -Recurse -Force |