Skip to content

Commit 5b80e08

Browse files
azure-sdkhallipr
andauthored
Move emitter-package.json scripts to eng/common (#1516)
Co-authored-by: Patrick Hallisey <pahallis@microsoft.com>
1 parent 82bd77f commit 5b80e08

2 files changed

Lines changed: 130 additions & 0 deletions

File tree

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
[CmdletBinding()]
2+
param (
3+
[parameter(Mandatory = $true)]
4+
[ValidateScript({ Test-Path $_ })]
5+
[string]$PackageJsonPath,
6+
7+
[parameter(Mandatory = $false)]
8+
[ValidateScript({ Test-Path $_ })]
9+
[string]$OverridesPath,
10+
11+
[parameter(Mandatory = $true)]
12+
[string]$OutputDirectory,
13+
14+
[parameter(Mandatory = $false)]
15+
[string]$PackageJsonFileName = "emitter-package.json"
16+
)
17+
18+
$packageJson = Get-Content $PackageJsonPath | ConvertFrom-Json -AsHashtable
19+
20+
# If we provide OverridesPath, use that to load a hashtable of version overrides
21+
$overrides = @{}
22+
23+
if ($OverridesPath) {
24+
Write-Host "Using overrides from $OverridesPath`:`n"
25+
$overrides = Get-Content $OverridesPath | ConvertFrom-Json -AsHashtable
26+
Write-Host ($overrides | ConvertTo-Json)
27+
Write-Host ""
28+
}
29+
30+
31+
# If there's a peer dependency and a dev dependency for the same package, carry the
32+
# dev dependency forward into emitter-package.json
33+
34+
$devDependencies = @{}
35+
36+
foreach ($package in $packageJson.peerDependencies.Keys) {
37+
$pinnedVersion = $packageJson.devDependencies[$package]
38+
if ($pinnedVersion -and -not $overrides[$package]) {
39+
Write-Host "Pinning $package to $pinnedVersion"
40+
$devDependencies[$package] = $pinnedVersion
41+
}
42+
}
43+
44+
$emitterPackageJson = [ordered]@{
45+
"main" = "dist/src/index.js"
46+
"dependencies" = @{
47+
$packageJson.name = $overrides[$packageJson.name] ?? $packageJson.version
48+
}
49+
}
50+
51+
# you shouldn't specify the same package in both dependencies and overrides
52+
$overrides.Remove($packageJson.name)
53+
54+
# Avoid adding an empty devDependencies section
55+
if($devDependencies.Keys.Count -gt 0) {
56+
$emitterPackageJson["devDependencies"] = $devDependencies
57+
}
58+
59+
# Avoid adding an empty overrides section
60+
if($overrides.Keys.Count -gt 0) {
61+
$emitterPackageJson["overrides"] = $overrides
62+
}
63+
64+
New-Item $OutputDirectory -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
65+
$OutputDirectory = Resolve-Path $OutputDirectory
66+
67+
$dest = Join-Path $OutputDirectory $PackageJsonFileName
68+
$destJson = $emitterPackageJson | ConvertTo-Json -Depth 100
69+
70+
Write-Host "Generating $dest"
71+
$destJson | Out-File $dest
72+
73+
Write-Host $destJson
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
[CmdletBinding()]
2+
param (
3+
[parameter(Mandatory = $true)]
4+
[string]$EmitterPackageJsonPath,
5+
6+
[parameter(Mandatory = $true)]
7+
[string]$OutputDirectory,
8+
9+
[parameter(Mandatory = $false)]
10+
[string]$NpmrcPath,
11+
12+
[parameter(Mandatory = $false)]
13+
[string]$LockFileName = "emitter-package-lock.json"
14+
)
15+
16+
New-Item $OutputDirectory -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
17+
$OutputDirectory = Resolve-Path $OutputDirectory
18+
19+
$tempFile = New-TemporaryFile
20+
Remove-Item $tempFile
21+
22+
# use a consistent folder name to avoid random package name in package-lock.json
23+
Write-Host "Creating temporary folder $tempFile/emitter-consumer"
24+
$tempFolder = New-Item "$tempFile/emitter-consumer" -ItemType Directory
25+
26+
if ($NpmrcPath) {
27+
Write-Host "Copy npmrc from $NpmrcPath to $tempFolder/.npmrc"
28+
Copy-Item $NpmrcPath "$tempFolder/.npmrc"
29+
}
30+
31+
Push-Location $tempFolder
32+
33+
try {
34+
Write-Host "Copy $EmitterPackageJsonPath to $tempFolder/package.json"
35+
Copy-Item $EmitterPackageJsonPath "$tempFolder/package.json"
36+
37+
Write-Host 'npm install --legacy-peer-deps'
38+
npm install --legacy-peer-deps
39+
40+
if ($LASTEXITCODE) {
41+
Write-Error "npm install failed with exit code $LASTEXITCODE"
42+
exit $LASTEXITCODE
43+
}
44+
45+
Write-Host '##[group]npm list --all'
46+
npm list --all
47+
Write-Host '##[endgroup]'
48+
49+
$dest = Join-Path $OutputDirectory $LockFileName
50+
Write-Host "Copy package-lock.json to $dest"
51+
Copy-Item 'package-lock.json' $dest
52+
}
53+
finally {
54+
Pop-Location
55+
}
56+
57+
Remove-Item $tempFolder -Recurse -Force

0 commit comments

Comments
 (0)