Skip to content

Commit 5064c23

Browse files
authored
Support parameterless call to Pack-Crates and add Get-PackageVersions (Azure#2304)
1 parent 3aae498 commit 5064c23

File tree

6 files changed

+86
-8
lines changed

6 files changed

+86
-8
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/usr/bin/env pwsh
2+
#Requires -Version 7.0
3+
4+
[CmdletBinding()]
5+
6+
$ErrorActionPreference = 'Stop'
7+
8+
$packages = & (Join-Path $PSScriptRoot 'Get-PackageVersions.ps1')
9+
10+
$packages.packageDependencies | Select-Object -Property @(
11+
@{ Name = 'from'; Expression = { $_.dependant } },
12+
@{ Name = 'to'; Expression = { $_.name } },
13+
'kind',
14+
@{ Name = 'path'; Expression = { !!$_.path } },
15+
'req',
16+
@{ Name = 'local'; Expression = { $_.pathVersion } },
17+
@{ Name = 'index'; Expression = { $_.indexVersion } }
18+
)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/usr/bin/env pwsh
2+
#Requires -Version 7.0
3+
4+
[CmdletBinding()]
5+
param(
6+
[switch]$AsDependencyTable
7+
)
8+
9+
$ErrorActionPreference = 'Stop'
10+
11+
. (Join-Path $PSScriptRoot '..' 'common' 'scripts' 'common.ps1')
12+
13+
$metadata = cargo metadata --format-version 1 --no-deps --all-features | ConvertFrom-Json -AsHashtable
14+
$packages = $metadata.packages
15+
foreach ($package in $packages) {
16+
try {
17+
$name = $package.name
18+
$resp = Invoke-WebRequest "https://index.crates.io/$($name.Substring(0,2))/$($name.Substring(2,2))/$name"
19+
$packageVersions = $resp.Content.Trim().Split("`n") | ConvertFrom-Json | Select-Object -ExpandProperty vers
20+
$package.indexVersion = $packageVersions | Sort-Object { [AzureEngSemanticVersion]::ParseVersionString($_) } | Select-Object -Last 1
21+
}
22+
catch {
23+
if ($_.Exception.Response.StatusCode -eq 404) {
24+
$package.indexVersion = $null
25+
}
26+
else {
27+
throw
28+
}
29+
}
30+
31+
$package.publish = $null -eq $package.publish
32+
33+
foreach ($dependency in $package.dependencies) {
34+
$dependencyPackage = $packages | Where-Object -Property name -EQ -Value $dependency.name | Select-Object -First 1
35+
36+
if ($dependencyPackage) {
37+
$ordered = [ordered]@{
38+
dependant = $package.name
39+
pathVersion = $dependencyPackage.version
40+
indexVersion = $dependencyPackage.indexVersion
41+
}
42+
43+
foreach ($key in $dependency.Keys) {
44+
$ordered[$key] = $dependency[$key]
45+
}
46+
47+
$dependencyPackage.dependantPackages ??= @()
48+
$package.packageDependencies ??= @()
49+
50+
$dependencyPackage.dependantPackages += [hashtable]$ordered
51+
$package.packageDependencies += [hashtable]$ordered
52+
}
53+
}
54+
}
55+
56+
$packages | Select-Object name, version, publish, indexVersion, packageDependencies, dependantPackages

eng/scripts/Pack-Crates.ps1

100644100755
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/usr/bin/env pwsh
22

33
#Requires -Version 7.0
4+
[CmdletBinding(DefaultParameterSetName = "none")]
45
param(
56
[string]$OutputPath,
67
[Parameter(ParameterSetName = 'Named')]
@@ -22,9 +23,11 @@ if ($OutputPath) {
2223
$OutputPath = New-Item -ItemType Directory -Path $OutputPath -Force | Select-Object -ExpandProperty FullName
2324
}
2425

25-
function Get-OutputPackageNames($workspacePackageNames) {
26-
$names = @()
26+
function Get-OutputPackageNames($workspacePackages) {
27+
$packablePackages = $workspacePackages | Where-Object -Property publish -NE -Value @()
28+
$packablePackageNames = $packablePackages.name
2729

30+
$names = @()
2831
switch ($PsCmdlet.ParameterSetName) {
2932
'Named' {
3033
$names = $PackageNames
@@ -39,13 +42,13 @@ function Get-OutputPackageNames($workspacePackageNames) {
3942
}
4043

4144
default {
42-
return $workspacePackageNames
45+
return $packablePackageNames
4346
}
4447
}
4548

4649
foreach ($name in $names) {
47-
if (-not $workspacePackageNames.Contains($name)) {
48-
Write-Error "Package '$name' is not in the workspace"
50+
if (-not $packablePackageNames.Contains($name)) {
51+
Write-Error "Package '$name' is not in the workspace or does not publish"
4952
exit 1
5053
}
5154
}
@@ -77,7 +80,7 @@ function Get-CargoPackages() {
7780

7881
function Get-PackagesToBuild() {
7982
$packages = Get-CargoPackages
80-
$outputPackageNames = Get-OutputPackageNames $packages.name
83+
$outputPackageNames = Get-OutputPackageNames $packages
8184

8285
# We start with output packages, then recursively add unreleased dependencies to the list of packages that need to be built
8386
[array]$packagesToBuild = $packages | Where-Object { $outputPackageNames.Contains($_.name) }
@@ -178,8 +181,6 @@ try {
178181

179182
[array]$packages = Get-PackagesToBuild
180183

181-
Add-PathVersions $packages
182-
183184
Write-Host "Building packages in the following order:"
184185
foreach ($package in $packages) {
185186
$packageName = $package.name

eng/scripts/Publish-Crates.ps1

100644100755
File mode changed.

eng/scripts/Update-PackageVersion.ps1

100644100755
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
#!/usr/bin/env pwsh
2+
#Requires -Version 7.0
3+
14
<#
25
.SYNOPSIS
36
Bumps up package versions after release

eng/scripts/Yank-Crates.ps1

100644100755
File mode changed.

0 commit comments

Comments
 (0)