fix(ci): use FireDaemon OpenSSL zip on Windows#5321
Conversation
Replace the winget-based ShiningLight install with FireDaemon's portable OpenSSL zip. Installs into the job's RUNNER_TEMP sandbox so every run gets a clean copy; the zip includes the legacy provider (ossl-modules/legacy.dll) needed for DES-ECB and PKCS12 RC2/3DES PBE tests. Avoids winget's non-zero exit on "already installed" (microsoft/winget-cli#4262), msstore agreement prompts, registry dependence, and the runner image's pre-installed OpenSSL (which lacks the legacy provider). Latest patch for the chosen major.minor track is scraped from the KB article; falls back to a pinned version if the page layout changes.
aleks-f
left a comment
There was a problem hiding this comment.
we now also need SSH, see #5315.
SSH vcpkg installs both:
- name: Install libssh (vcpkg)
shell: pwsh
run: |
vcpkg install libssh:x64-windows
$root = "$env:VCPKG_INSTALLATION_ROOT\installed\x64-windows"
"LIBSSH_ROOT_DIR=$root" | Out-File -FilePath $env:GITHUB_ENV -Append
Add-Content $env:GITHUB_PATH "$root\bin"
Problem on GitHub runners was that they are shared and there were many OpenSSL library present on the runner (some with and some without development files). Installing with Using a zip file where it is possible to control the files that are going to be used was the most stable way to do it. |
vcpkg can be installed in a directory, without affecting anything system-wide. I don't care one way or the other, as long as we have ssh covered and don't end up again with multiple openssl copies. to me, vcpkg installing ssh/openssl in a local directory seems like an optimal solution |
|
I'll merge this now to have CI working on Windows. |
|
Until it suddenly doesn't because there are multiple installations on the worker, including such without development files. I created test job that discovered more than five instances of OpenSSL files in the path on the worker and installation from shining light without development files. 🤷 |
ok, let's not make a mystery out of this. how can there be multiple vcpkg installations when vcpkg puts it always in if you have a different solution for ssh, let me know. otherwise it will have to be vcpkg |
|
The problem is most likely having more than one ssl installation, I have seen that on our windows ci machine with vcpkg and ShiningLight. The same effect that was achieved with merging this branch would have been achieved with merging vcpkg in main. And if there is ever another ci with ShiningLight triggered, it will happen again. |
Summary
RUNNER_TEMPsandbox so every run gets a clean copy.ossl-modules/legacy.dll) needed for DES-ECB and PKCS12 RC2/3DES PBE tests.Why
The previous winget step broke because:
windows-2025runner image ships an OpenSSL without the legacy provider, so even detecting the pre-installed copy would fail on DES-ECB / PKCS12 tests.libssl-3-x64.dllfrom MySQL (which ships its own earlier on PATH).winget list/install.FireDaemon's distribution sidesteps all of this:
ossl-modules/legacy.dllout of the box.Test plan
windows-2025-msvc-cmakejob passed on this branch: https://github.com/pocoproject/poco/actions/runs/24532002067/job/71717348644