TEST_OUTPUT_DIRECTORY: "C:/Git-Test"
tags:
- saas-windows-medium-amd64
+ cache:
+ key:
+ files:
+ - ci/install-dependencies.ps1
+ paths:
+ - .dependencies
before_script:
- *windows_before_script
- - choco install -y git meson ninja rust-ms
- - Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1
- - refreshenv
+ - ./ci/install-dependencies.ps1
+ - $env:Path = "C:\Meson;C:\Rust\bin;$env:Path"
- New-Item -Path $env:TEST_OUTPUT_DIRECTORY -ItemType Directory
build:msvc-meson:
--- /dev/null
+param(
+ [string]$DownloadDirectory = '.dependencies'
+)
+
+$ErrorActionPreference = 'Stop'
+$ProgressPreference = 'SilentlyContinue'
+
+$GitVersion = '2.54.0.windows.1'
+$MesonVersion = '1.11.0'
+$RustVersion = '1.96.0'
+
+New-Item -Path $DownloadDirectory -ItemType Directory -Force | Out-Null
+New-Item -Path .git/info -ItemType Directory -Force | Out-Null
+New-Item -Path .git/info/exclude -ItemType File -Force | Out-Null
+Add-Content -Path .git/info/exclude -Value "/$DownloadDirectory"
+
+function Get-Installer {
+ param(
+ [Parameter(Mandatory = $true)][string]$Name,
+ [Parameter(Mandatory = $true)][string]$Url
+ )
+
+ $path = Join-Path $DownloadDirectory $Name
+ if (-not (Test-Path $path)) {
+ Write-Host "Downloading $Url"
+ Invoke-WebRequest $Url -OutFile $path -TimeoutSec 300
+ }
+ return $path
+}
+
+function Invoke-Installer {
+ param(
+ [Parameter(Mandatory = $true)][string]$FilePath,
+ [Parameter(Mandatory = $true)][string[]]$ArgumentList
+ )
+
+ Write-Host "Running $FilePath $($ArgumentList -join ' ')"
+ $process = Start-Process -Wait -PassThru -FilePath $FilePath -ArgumentList $ArgumentList
+ if ($process.ExitCode -ne 0) {
+ throw "$FilePath failed with exit code $($process.ExitCode)"
+ }
+}
+
+$gitAssetVersion = $GitVersion -replace '\.windows\.\d+$', ''
+$gitInstaller = Get-Installer "Git-Installer.exe" `
+ "https://github.com/git-for-windows/git/releases/download/v$GitVersion/PortableGit-$gitAssetVersion-64-bit.7z.exe"
+Invoke-Installer $gitInstaller @('-y', '-o"C:\Program Files\Git"')
+
+$mesonMsi = Get-Installer "meson.msi" `
+ "https://github.com/mesonbuild/meson/releases/download/$MesonVersion/meson-$MesonVersion-64.msi"
+Invoke-Installer msiexec.exe @('/i', $mesonMsi, 'INSTALLDIR=C:\Meson', '/quiet', '/norestart')
+
+$rustMsi = Get-Installer "rust.msi" `
+ "https://static.rust-lang.org/dist/rust-$RustVersion-x86_64-pc-windows-msvc.msi"
+Invoke-Installer msiexec.exe @('/i', $rustMsi, 'INSTALLDIR=C:\Rust', 'ADDLOCAL=Rustc,Cargo,Std', '/quiet', '/norestart')