mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-09-03 07:13:48 +00:00
CI: install Windows OpenSSL from slproweb's manifest instead of Chocolatey
The Chocolatey openssl package hardcodes a versioned slproweb URL in its install script, and slproweb keeps only the newest build of each OpenSSL branch. Every OpenSSL release therefore deletes the file the current package points at, and "windows with SSL" fails at the install step with a 404 until someone respins the package. That is what broke the job today: the package is still at 4.0.1 while slproweb has moved to 4.0.2. slproweb publishes a JSON manifest of its current downloads, linked from the download page and updated at the same time as the files themselves. Read that and take the newest 64-bit 4.x installer from it, so the URL is always live. The SHA512 in the manifest is verified before the installer runs. The silent flags are the ones the Chocolatey package used. /DIR pins the install location that the CMake step already finds, instead of relying on a registry lookup. PATH and OPENSSL_CONF are exported the same way the package set them. Staying on 4.x is deliberate: it keeps this job on the OpenSSL 4.0 series rather than dropping to the 3.6 that vcpkg would provide.
This commit is contained in:
37
.github/workflows/test.yaml
vendored
37
.github/workflows/test.yaml
vendored
@@ -524,7 +524,42 @@ jobs:
|
|||||||
run: vcpkg install gtest curl zlib brotli zstd
|
run: vcpkg install gtest curl zlib brotli zstd
|
||||||
- name: Install OpenSSL
|
- name: Install OpenSSL
|
||||||
if: ${{ matrix.config.with_ssl }}
|
if: ${{ matrix.config.with_ssl }}
|
||||||
run: choco install openssl
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
# Chocolatey's openssl package hardcodes a versioned slproweb URL, and
|
||||||
|
# slproweb keeps only the newest build of each branch. The package
|
||||||
|
# therefore 404s on every OpenSSL release until someone respins it.
|
||||||
|
# Read slproweb's own manifest instead: it is updated at the same time
|
||||||
|
# as the downloads it points at, so the URL is always live.
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
$ProgressPreference = 'SilentlyContinue' # Invoke-WebRequest is slow with it
|
||||||
|
|
||||||
|
$manifest = 'https://raw.githubusercontent.com/slproweb/opensslhashes/master/win32_openssl_hashes.json'
|
||||||
|
$entry = (Invoke-RestMethod $manifest).files.PSObject.Properties.Value |
|
||||||
|
Where-Object {
|
||||||
|
$_.bits -eq 64 -and $_.arch -eq 'INTEL' -and
|
||||||
|
-not $_.light -and $_.installer -eq 'exe' -and $_.basever -like '4.*'
|
||||||
|
} |
|
||||||
|
Sort-Object { [version]$_.basever } | Select-Object -Last 1
|
||||||
|
if (-not $entry) { throw 'No 64-bit OpenSSL 4.x installer found in the manifest' }
|
||||||
|
Write-Host "Installing OpenSSL $($entry.basever) from $($entry.url)"
|
||||||
|
|
||||||
|
$installer = Join-Path $env:RUNNER_TEMP 'Win64OpenSSL.exe'
|
||||||
|
Invoke-WebRequest $entry.url -OutFile $installer
|
||||||
|
$actual = (Get-FileHash $installer -Algorithm SHA512).Hash.ToLower()
|
||||||
|
if ($actual -ne $entry.sha512.ToLower()) {
|
||||||
|
throw "SHA512 mismatch: expected $($entry.sha512), got $actual"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Same silent flags the Chocolatey package used. The installer is Inno
|
||||||
|
# Setup, so /DIR pins the location CMake already looks in.
|
||||||
|
$dir = 'C:\Program Files\OpenSSL'
|
||||||
|
$proc = Start-Process $installer -Wait -PassThru -ArgumentList `
|
||||||
|
'/VERYSILENT', '/SUPPRESSMSGBOXES', '/NORESTART', '/SP-', "/DIR=$dir"
|
||||||
|
if ($proc.ExitCode -ne 0) { throw "Installer exited with $($proc.ExitCode)" }
|
||||||
|
|
||||||
|
"$dir\bin" | Out-File $env:GITHUB_PATH -Append -Encoding utf8
|
||||||
|
"OPENSSL_CONF=$dir\bin\openssl.cfg" | Out-File $env:GITHUB_ENV -Append -Encoding utf8
|
||||||
- name: Configure CMake ${{ matrix.config.name }}
|
- name: Configure CMake ${{ matrix.config.name }}
|
||||||
run: >
|
run: >
|
||||||
cmake -B build -S .
|
cmake -B build -S .
|
||||||
|
|||||||
Reference in New Issue
Block a user