package.ps1 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #-------------------------------------------------------------------------------------------------------
  2. # Copyright (C) Microsoft. All rights reserved.
  3. # Copyright (c) ChakraCore Project Contributors. All rights reserved.
  4. # Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  5. #-------------------------------------------------------------------------------------------------------
  6. using namespace System.Text
  7. using module '.\package-classes.psm1'
  8. Set-StrictMode -Version 5.1
  9. $packageRoot = Split-Path -Parent $MyInvocation.MyCommand.Definition
  10. $packageVersionFile = Join-Path $packageRoot '.pack-version'
  11. $packageDataFile = Join-Path $packageRoot 'package-data.xml'
  12. $packageArtifactsDir = Join-Path $packageRoot 'Artifacts'
  13. $localNugetExe = Join-Path $packageRoot 'nuget.exe'
  14. # helper to download file with retry
  15. function DownloadFileWithRetry([string]$sourceUrl, [string]$destFile, [int]$retries) {
  16. $delayTimeInSeconds = 5
  17. while ($true) {
  18. try {
  19. Invoke-WebRequest $sourceUrl -OutFile $destFile
  20. break
  21. }
  22. catch {
  23. Write-Host "Failed to download $sourceUrl"
  24. if ($retries -gt 0) {
  25. $retries--
  26. Write-Host "Waiting $delayTimeInSeconds seconds before retrying. Retries left: $retries"
  27. Start-Sleep -Seconds $delayTimeInSeconds
  28. }
  29. else {
  30. $exception = $_.Exception
  31. throw $exception
  32. }
  33. }
  34. }
  35. }
  36. # helper to create NuGet package
  37. function CreateNugetPackage ([Package]$package, [string]$version, [string]$outputDir) {
  38. $properties = $package.Properties.Clone()
  39. $properties['id'] = $package.Id
  40. $properties['version'] = $version
  41. $sb = New-Object StringBuilder
  42. foreach ($propertyName in $properties.Keys) {
  43. $propertyValue = $properties[$propertyName]
  44. if ($sb.Length -gt 0) {
  45. [void]$sb.Append(';')
  46. }
  47. [void]$sb.AppendFormat('{0}={1}', $propertyName, $propertyValue.Replace('"', '""'))
  48. }
  49. $propertiesStr = $sb.toString()
  50. [void]$sb.Clear()
  51. $package.PreprocessFiles()
  52. & $localNugetExe pack $package.NuspecFile -OutputDirectory $outputDir -Properties $propertiesStr
  53. $package.RemovePreprocessedFiles()
  54. }
  55. if (Test-Path $packageArtifactsDir) {
  56. # Delete any existing output.
  57. Remove-Item "$packageArtifactsDir\*.nupkg"
  58. }
  59. if (!(Test-Path $localNugetExe)) {
  60. $nugetDistUrl = 'https://dist.nuget.org/win-x86-commandline/latest/nuget.exe'
  61. Write-Host "NuGet.exe not found - downloading latest from $nugetDistUrl"
  62. DownloadFileWithRetry $nugetDistUrl $localNugetExe -retries 3
  63. }
  64. # Create new NuGet packages based on data from an XML file.
  65. $version = (Get-Content $packageVersionFile)
  66. $packages = [Package]::GetPackages($packageDataFile)
  67. foreach ($package in $packages) {
  68. CreateNugetPackage $package $version $packageArtifactsDir
  69. }