Просмотр исходного кода

[Infrastructure] Script to automatically update Selenium and Playwright dependencies (#59338)

Javier Calvarro Nelson 1 год назад
Родитель
Сommit
305a061b6c

+ 24 - 0
.github/workflows/update-selenium-and-playwright-dependencies.yml

@@ -0,0 +1,24 @@
+name: Update Selenium and Playwright dependencies
+
+on:
+  schedule:
+  - cron: '0 0 1-7 * 1' # Run on the first monday of the month
+  workflow_dispatch:  # Allow manual runs
+
+permissions:
+  contents: write
+  issues: write
+  pull-requests: write
+
+jobs:
+  update-jquery-validate:
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+
+      - name: Update dependencies
+        run: pwsh eng/scripts/update-selenium-and-playwright-versions.ps1
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

+ 110 - 0
eng/scripts/update-selenium-and-playwright-versions.ps1

@@ -0,0 +1,110 @@
+# Define the packages and their corresponding XML entries
+$packages = @{
+    "Microsoft.Playwright" = "MicrosoftPlaywrightVersion"
+    "Selenium.Support" = "SeleniumSupportVersion"
+    "Selenium.WebDriver" = "SeleniumWebDriverVersion"
+  }
+
+  # Function to get the latest stable version from NuGet
+function Get-LatestNuGetVersion {
+    param (
+        [string]$packageName
+    )
+    $packageName = $packageName.ToLower();
+    $url = "https://api.nuget.org/v3-flatcontainer/$packageName/index.json"
+    $response = Invoke-RestMethod -Uri $url
+    $versions = $response.versions | Where-Object { $_ -notmatch "-" } | ForEach-Object { [System.Version]$_ }
+    return ($versions | Sort-Object -Property Major, Minor, Build, Revision -Descending | Select-Object -First 1).ToString()
+}
+
+# Function to update the Versions.props file
+function Update-VersionsProps {
+param (
+    [string]$filePath,
+    [hashtable]$versions
+)
+$content = Get-Content -Path $filePath
+foreach ($package in $versions.Keys) {
+    $entryName = $packages[$package]
+    $version = $versions[$package]
+    $pattern = "(?<=<$entryName>)(.*?)(?=</$entryName>)"
+    $replacement = $version
+    $content = $content -replace $pattern, $replacement
+}
+Set-Content -Path $filePath -Value $content
+}
+
+# Function to check if the Docker image exists
+function Test-DockerImageExists {
+param (
+    [string]$imageName,
+    [string]$version
+)
+$url = "https://mcr.microsoft.com/v2/$imageName/tags/list"
+$response = Invoke-RestMethod -Uri $url
+return $response.tags -contains $version
+}
+
+# Function to update the Dockerfile
+function Update-Dockerfile {
+param (
+    [string]$filePath,
+    [string]$version
+)
+(Get-Content -Path $filePath) -replace 'FROM mcr.microsoft.com/playwright/dotnet:.* AS final', "FROM mcr.microsoft.com/playwright/dotnet:$version AS final" | Set-Content -Path $filePath
+}
+
+# Get the latest versions of the packages
+$versions = @{}
+foreach ($package in $packages.Keys) {
+$versions[$package] = Get-LatestNuGetVersion -packageName $package
+}
+
+# Print the package versions found
+foreach ($package in $versions.Keys) {
+    Write-Host "$($package): $($versions[$package])"
+}
+
+# Update the Versions.props file
+Update-VersionsProps -filePath "eng/Versions.props" -versions $versions
+
+# Check if the Docker image exists
+$playwrightVersion = "v$($versions["Microsoft.Playwright"])-jammy-amd64"
+if (Test-DockerImageExists -imageName "playwright/dotnet" -version $playwrightVersion) {
+# Update the Dockerfile
+Update-Dockerfile -filePath "src/Components/benchmarkapps/Wasm.Performance/dockerfile" -version $playwrightVersion
+} else {
+Write-Error "Docker image for Playwright version $playwrightVersion not found."
+exit 1
+}
+
+# Check if there are changes
+if (-not (git diff --cached --quiet)) {
+    Write-Host "No changes to commit."
+    exit 0
+}
+
+# Create a new branch
+git checkout -b infrastructure/update-selenium-and-typescript-dependencies
+
+# Stage the changes
+git add eng/Versions.props src/Components/benchmarkapps/Wasm.Performance/dockerfile
+
+# Commit the changes
+$commitMessage = @"
+[Infrastructure] Update Selenium and Playwright dependencies $(Get-Date -Format "yyyy-MM-dd")
+* Updated Playwright version to $($versions["Microsoft.Playwright"])
+* Updated Selenium version to $($versions["Selenium.Support"])
+* Updated Selenium version to $($versions["Selenium.WebDriver"])
+"@
+git commit -m $commitMessage
+
+# Push the branch
+git push origin infrastructure/update-selenium-and-typescript-dependencies
+
+$prBody = $commitMessage + @"
+
+Please see the [MirroringPackages.md](https://github.com/dotnet/arcade/blob/main/Documentation/MirroringPackages.md) document in the [dotnet/arcade](https://github.com/dotnet/arcade) repository for information on how to mirror these packages on the MS NuGet feed.
+"@
+
+gh pr create --title "Update Selenium and Playwright dependencies $(Get-Date -Format "yyyy-MM-dd")" --body $prBody --base main --head infrastructure/update-selenium-and-typescript-dependencies