windows: Add `update-workspace-hack.ps1` script (#28219)

张小白 created

Release Notes:

- N/A

Change summary

.github/workflows/ci.yml         |  4 +-
script/update-workspace-hack.ps1 | 36 ++++++++++++++++++++++++++++++++++
2 files changed, 38 insertions(+), 2 deletions(-)

Detailed changes

.github/workflows/ci.yml 🔗

@@ -131,13 +131,13 @@ jobs:
       - name: Check workspace-hack Cargo.toml is up-to-date
         run: |
           cargo hakari generate --diff || {
-            echo "To fix, run script/update-workspace-hack";
+            echo "To fix, run script/update-workspace-hack or script/update-workspace-hack.ps1";
             false
           }
       - name: Check all crates depend on workspace-hack
         run: |
           cargo hakari manage-deps --dry-run || {
-            echo "To fix, run script/update-workspace-hack"
+            echo "To fix, run script/update-workspace-hack or script/update-workspace-hack.ps1"
             false
           }
 

script/update-workspace-hack.ps1 🔗

@@ -0,0 +1,36 @@
+$ErrorActionPreference = "Stop"
+
+$HAKARI_VERSION = "0.9"
+
+$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
+Set-Location (Split-Path -Parent $scriptPath)
+
+$hakariInstalled = $false
+try {
+    $versionOutput = cargo hakari --version 2>&1
+    if ($versionOutput -match "cargo-hakari $HAKARI_VERSION") {
+        $hakariInstalled = $true
+    }
+}
+catch {
+    $hakariInstalled = $false
+}
+
+if (-not $hakariInstalled) {
+    Write-Host "Installing cargo-hakari@^$HAKARI_VERSION..."
+    cargo install "cargo-hakari@^$HAKARI_VERSION"
+    if ($LASTEXITCODE -ne 0) {
+        throw "Failed to install cargo-hakari@^$HAKARI_VERSION"
+    }
+}
+else {
+    Write-Host "cargo-hakari@^$HAKARI_VERSION is already installed."
+}
+
+# update the workspace-hack crate
+cargo hakari generate
+if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
+
+# make sure workspace-hack is added as a dep for all crates in the workspace
+cargo hakari manage-deps
+if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }