From 1740c7d0ceaf8fe9df4911cf9b08d1532b46419f Mon Sep 17 00:00:00 2001 From: uncor3 Date: Fri, 30 Jan 2026 23:26:25 +0000 Subject: [PATCH] replace go script with PowerShell script for downloading MSYS2 archive --- .github/workflows/build-windows.yml | 31 +------- util/get-msys2-archive.go | 108 ---------------------------- util/get-msys2-archive.ps1 | 41 +++++++++++ 3 files changed, 43 insertions(+), 137 deletions(-) delete mode 100644 util/get-msys2-archive.go create mode 100644 util/get-msys2-archive.ps1 diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 61db7fe..2ed6b9c 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -44,38 +44,11 @@ jobs: release: false update: false - # FIXME: use ./util/get-msys2-archive.go to download the archive db - # for now, since we install go from pacman, we better do it this way - name: Use msys2 archive shell: pwsh run: | - # Base URL for the 2025-06-22 MSYS2 archive release - $baseUrl = "https://github.com/msys2/msys2-archive/releases/download/2025-06-22" - - $databases = @( - "clang64", - "clangarm64", - "mingw32", - "mingw64", - "msys", - "ucrt64" - ) - - $targetDir = "C:\msys64\var\lib\pacman\sync" - - foreach ($db in $databases) { - $dbUrl = "$baseUrl/$db.db" - $sigUrl = "$baseUrl/$db.db.sig" - - $dbFile = Join-Path $targetDir "$db.db" - $sigFile = Join-Path $targetDir "$db.db.sig" - - Write-Host "Downloading $db.db ..." - Invoke-WebRequest -Uri $dbUrl -OutFile $dbFile - - Write-Host "Downloading $db.db.sig ..." - Invoke-WebRequest -Uri $sigUrl -OutFile $sigFile - } + $date = "2025-06-22" + & "scripts/get-msys2-archive.ps1" -Date $date - name: Install deps using pacman run: | diff --git a/util/get-msys2-archive.go b/util/get-msys2-archive.go deleted file mode 100644 index 6f3e633..0000000 --- a/util/get-msys2-archive.go +++ /dev/null @@ -1,108 +0,0 @@ -package main - -import ( - "fmt" - "io" - "net/http" - "os" - "path/filepath" - "sync" - "time" -) - -const ( - maxRetries = 3 - retryDelay = 2 * time.Second - baseUrl = "https://github.com/msys2/msys2-archive/releases/download" - targetDir = "C:\\msys64\\var\\lib\\pacman\\sync" -) - -var databases = []string{ - "clang64", - "clangarm64", - "mingw32", - "mingw64", - "msys", - "ucrt64", -} - -func downloadFile(url string, filepath string) error { - var err error - for i := 0; i < maxRetries; i++ { - if i > 0 { - fmt.Printf("Retrying download for %s in %v...\n", url, retryDelay) - time.Sleep(retryDelay) - } - - err = attemptDownload(url, filepath) - if err == nil { - return nil - } - fmt.Printf("Attempt %d failed for %s: %v\n", i+1, url, err) - } - return fmt.Errorf("failed to download %s after %d attempts: %w", url, maxRetries, err) -} - -func attemptDownload(url string, filepath string) error { - resp, err := http.Get(url) - if err != nil { - return err - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("bad status: %s", resp.Status) - } - - out, err := os.Create(filepath) - if err != nil { - return err - } - defer out.Close() - - _, err = io.Copy(out, resp.Body) - return err -} - -func main() { - if len(os.Args) < 2 { - fmt.Printf("Usage: %s \n", os.Args[0]) - os.Exit(1) - } - - archiveDate := os.Args[1] - archiveBaseUrl := baseUrl + "/" + archiveDate - - if _, err := os.Stat(targetDir); os.IsNotExist(err) { - fmt.Printf("Target directory %s does not exist. Exiting.\n", targetDir) - os.Exit(1) - } - - var wg sync.WaitGroup - - for _, db := range databases { - filesToDownload := []string{ - fmt.Sprintf("%s.db", db), - fmt.Sprintf("%s.db.sig", db), - } - - for _, file := range filesToDownload { - wg.Add(1) - go func(fileName string) { - defer wg.Done() - fileUrl := fmt.Sprintf("%s/%s", archiveBaseUrl, fileName) - filePath := filepath.Join(targetDir, fileName) - - fmt.Printf("Downloading %s...\n", fileUrl) - if err := downloadFile(fileUrl, filePath); err != nil { - fmt.Printf("Failed to download %s: %v\n", fileUrl, err) - } else { - fmt.Printf("Successfully downloaded %s\n", filePath) - } - }(file) - } - } - - wg.Wait() - fmt.Println("All downloads completed.") -} diff --git a/util/get-msys2-archive.ps1 b/util/get-msys2-archive.ps1 new file mode 100644 index 0000000..7918e44 --- /dev/null +++ b/util/get-msys2-archive.ps1 @@ -0,0 +1,41 @@ +param( + [Parameter(Mandatory = $true)] + [string]$Date +) + +$ErrorActionPreference = "Stop" + +if (-not $Date) { + Write-Error "MSYS2 archive date is required. Usage: get-msys2-archive.ps1 -Date " + exit 1 +} + +Write-Host "Using MSYS2 archive release date: $Date" + +# Base URL for the MSYS2 archive release +$baseUrl = "https://github.com/msys2/msys2-archive/releases/download/$Date" + +$databases = @( + "clang64", + "clangarm64", + "mingw32", + "mingw64", + "msys", + "ucrt64" +) + +$targetDir = "C:\msys64\var\lib\pacman\sync" + +foreach ($db in $databases) { + $dbUrl = "$baseUrl/$db.db" + $sigUrl = "$baseUrl/$db.db.sig" + + $dbFile = Join-Path $targetDir "$db.db" + $sigFile = Join-Path $targetDir "$db.db.sig" + + Write-Host "Downloading $db.db ..." + Invoke-WebRequest -Uri $dbUrl -OutFile $dbFile + + Write-Host "Downloading $db.db.sig ..." + Invoke-WebRequest -Uri $sigUrl -OutFile $sigFile +} \ No newline at end of file