Skip to content

Commit

Permalink
Move emitter-package.json scripts to eng/common (#41989)
Browse files Browse the repository at this point in the history
Co-authored-by: Patrick Hallisey <[email protected]>
  • Loading branch information
azure-sdk and hallipr authored Feb 14, 2024
1 parent cf3d2b8 commit 4ea0b68
Show file tree
Hide file tree
Showing 2 changed files with 130 additions and 0 deletions.
73 changes: 73 additions & 0 deletions eng/common/scripts/typespec/New-EmitterPackageJson.ps1
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
57 changes: 57 additions & 0 deletions eng/common/scripts/typespec/New-EmitterPackageLock.ps1
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

0 comments on commit 4ea0b68

Please sign in to comment.