| # Copyright 2022-2026 The OpenSSL Project Authors. All Rights Reserved. |
| # |
| # Licensed under the Apache License 2.0 (the "License"). You may not use |
| # this file except in compliance with the License. You can obtain a copy |
| # in the file LICENSE in the source distribution or at |
| # https://www.openssl.org/source/license.html |
| |
| name: Windows Compression GitHub CI |
| |
| on: |
| pull_request: |
| paths: |
| - 'crypto/comp/*.c' |
| - '.github/workflows/windows_comp.yml' |
| push: |
| paths: |
| - '**.c' |
| |
| permissions: |
| contents: read |
| |
| jobs: |
| zstd: |
| runs-on: windows-latest |
| steps: |
| - uses: actions/checkout@v6 |
| with: |
| persist-credentials: false |
| - name: checkout fuzz/corpora submodule |
| run: git submodule update --init --depth 1 fuzz/corpora |
| - name: install nasm |
| if: github.repository == 'openssl/openssl' |
| run: | |
| $installer = "nasm-3.01-installer-x64.exe" |
| Invoke-WebRequest -Uri "https://openssl-library.org/ci-deps/$installer" -OutFile $installer |
| $expected = (Get-Content "$env:GITHUB_WORKSPACE\.github\ci-deps.json" -Raw | ConvertFrom-Json).$installer |
| $actual = (Get-FileHash $installer -Algorithm SHA256).Hash |
| if ($actual -ne $expected) { throw "SHA256 mismatch for $installer (expected $expected, got $actual)" } |
| Start-Process -FilePath ".\$installer" -ArgumentList '/S' -Wait |
| "C:\Program Files\NASM" | Out-File -FilePath "$env:GITHUB_PATH" -Append |
| - name: install nasm (forks) |
| if: github.repository != 'openssl/openssl' |
| run: | |
| $installer = "nasm-3.01-installer-x64.exe" |
| Invoke-WebRequest -Uri "https://www.nasm.us/pub/nasm/releasebuilds/3.01/win64/$installer" -OutFile $installer |
| Start-Process -FilePath ".\$installer" -ArgumentList '/S' -Wait |
| "C:\Program Files\NASM" | Out-File -FilePath "$env:GITHUB_PATH" -Append |
| - name: install jom |
| if: github.repository == 'openssl/openssl' |
| run: | |
| mkdir C:\jom |
| Invoke-WebRequest -Uri "https://openssl-library.org/ci-deps/jom-1.1.7.exe" -OutFile C:\jom\jom.exe |
| $expected = (Get-Content "$env:GITHUB_WORKSPACE\.github\ci-deps.json" -Raw | ConvertFrom-Json).'jom-1.1.7.exe' |
| $actual = (Get-FileHash C:\jom\jom.exe -Algorithm SHA256).Hash |
| if ($actual -ne $expected) { throw "SHA256 mismatch for jom.exe (expected $expected, got $actual)" } |
| "C:\jom" | Out-File -FilePath "$env:GITHUB_PATH" -Append |
| - name: install jom (forks) |
| if: github.repository != 'openssl/openssl' |
| run: | |
| mkdir C:\jom |
| Invoke-WebRequest -Uri "https://download.qt.io/official_releases/jom/jom_1_1_7.zip" -OutFile C:\jom\jom.zip |
| Expand-Archive -Path C:\jom\jom.zip -DestinationPath C:\jom |
| "C:\jom" | Out-File -FilePath "$env:GITHUB_PATH" -Append |
| - name: prepare the build directory |
| run: mkdir _build |
| - name: Get zstd |
| run: | |
| vcpkg install zstd:x64-windows |
| "C:\vcpkg\packages\zstd_x64-windows\bin" | Out-File -FilePath "$env:GITHUB_PATH" -Append |
| - name: config |
| working-directory: _build |
| shell: cmd |
| run: | |
| call "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Auxiliary\Build\vcvars64.bat" |
| perl ..\Configure --strict-warnings enable-comp enable-zstd --with-zstd-include=C:\vcpkg\packages\zstd_x64-windows\include --with-zstd-lib=C:\vcpkg\packages\zstd_x64-windows\lib\zstd.lib no-makedepend -DOSSL_WINCTX=openssl VC-WIN64A |
| perl configdata.pm --dump |
| - name: build |
| working-directory: _build |
| shell: cmd |
| run: | |
| call "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Auxiliary\Build\vcvars64.bat" |
| jom /j4 /S |
| - name: Gather openssl version info |
| working-directory: _build |
| run: | |
| apps/openssl.exe version -v |
| apps/openssl.exe version -v | %{($_ -split '\s+')[1]} |
| apps/openssl.exe version -v | %{($_ -split '\s+')[1] -replace '([0-9]+\.[0-9]+)(\..*)','$1'} |
| echo "OSSL_VERSION=$(apps/openssl.exe version -v | %{($_ -split '\s+')[1] -replace '([0-9]+\.[0-9]+)(\..*)','$1'})" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append |
| - name: Set registry keys |
| working-directory: _build |
| run: | |
| echo ${Env:OSSL_VERSION} |
| reg.exe add HKLM\SOFTWARE\OpenSSL-${Env:OSSL_VERSION}-openssl /v OPENSSLDIR /t REG_EXPAND_SZ /d TESTOPENSSLDIR /reg:32 |
| reg.exe add HKLM\SOFTWARE\OpenSSL-${Env:OSSL_VERSION}-openssl /v MODULESDIR /t REG_EXPAND_SZ /d TESTOPENSSLDIR /reg:32 |
| reg.exe query HKLM\SOFTWARE\OpenSSL-${Env:OSSL_VERSION}-openssl /v OPENSSLDIR /reg:32 |
| - name: download coreinfo |
| run: | |
| mkdir _build\coreinfo |
| Invoke-WebRequest -Uri "https://download.sysinternals.com/files/Coreinfo.zip" -outfile "_build\coreinfo\Coreinfo.zip" |
| - name: get cpu info |
| working-directory: _build |
| continue-on-error: true |
| run: | |
| 7z.exe x coreinfo/Coreinfo.zip |
| ./Coreinfo64.exe -accepteula -f |
| ./apps/openssl.exe version -c |
| - name: test |
| working-directory: _build |
| shell: cmd |
| run: | |
| call "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Auxiliary\Build\vcvars64.bat" |
| jom test VERBOSE_FAILURE=yes TESTS="-test_fuzz* -test_fipsload" HARNESS_JOBS=4 |
| |
| brotli: |
| runs-on: windows-latest |
| steps: |
| - uses: actions/checkout@v6 |
| with: |
| persist-credentials: false |
| - name: checkout fuzz/corpora submodule |
| run: git submodule update --init --depth 1 fuzz/corpora |
| - name: install nasm |
| if: github.repository == 'openssl/openssl' |
| run: | |
| $installer = "nasm-3.01-installer-x64.exe" |
| Invoke-WebRequest -Uri "https://openssl-library.org/ci-deps/$installer" -OutFile $installer |
| $expected = (Get-Content "$env:GITHUB_WORKSPACE\.github\ci-deps.json" -Raw | ConvertFrom-Json).$installer |
| $actual = (Get-FileHash $installer -Algorithm SHA256).Hash |
| if ($actual -ne $expected) { throw "SHA256 mismatch for $installer (expected $expected, got $actual)" } |
| Start-Process -FilePath ".\$installer" -ArgumentList '/S' -Wait |
| "C:\Program Files\NASM" | Out-File -FilePath "$env:GITHUB_PATH" -Append |
| - name: install nasm (forks) |
| if: github.repository != 'openssl/openssl' |
| run: | |
| $installer = "nasm-3.01-installer-x64.exe" |
| Invoke-WebRequest -Uri "https://www.nasm.us/pub/nasm/releasebuilds/3.01/win64/$installer" -OutFile $installer |
| Start-Process -FilePath ".\$installer" -ArgumentList '/S' -Wait |
| "C:\Program Files\NASM" | Out-File -FilePath "$env:GITHUB_PATH" -Append |
| - name: install jom |
| if: github.repository == 'openssl/openssl' |
| run: | |
| mkdir C:\jom |
| Invoke-WebRequest -Uri "https://openssl-library.org/ci-deps/jom-1.1.7.exe" -OutFile C:\jom\jom.exe |
| $expected = (Get-Content "$env:GITHUB_WORKSPACE\.github\ci-deps.json" -Raw | ConvertFrom-Json).'jom-1.1.7.exe' |
| $actual = (Get-FileHash C:\jom\jom.exe -Algorithm SHA256).Hash |
| if ($actual -ne $expected) { throw "SHA256 mismatch for jom.exe (expected $expected, got $actual)" } |
| "C:\jom" | Out-File -FilePath "$env:GITHUB_PATH" -Append |
| - name: install jom (forks) |
| if: github.repository != 'openssl/openssl' |
| run: | |
| mkdir C:\jom |
| Invoke-WebRequest -Uri "https://download.qt.io/official_releases/jom/jom_1_1_7.zip" -OutFile C:\jom\jom.zip |
| Expand-Archive -Path C:\jom\jom.zip -DestinationPath C:\jom |
| "C:\jom" | Out-File -FilePath "$env:GITHUB_PATH" -Append |
| - name: prepare the build directory |
| run: mkdir _build |
| - name: Get brotli |
| run: | |
| vcpkg install brotli:x64-windows |
| "C:\vcpkg\packages\brotli_x64-windows\bin" | Out-File -FilePath "$env:GITHUB_PATH" -Append |
| - name: config |
| working-directory: _build |
| shell: cmd |
| run: | |
| call "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Auxiliary\Build\vcvars64.bat" |
| perl ..\Configure --strict-warnings enable-comp enable-brotli --with-brotli-include=C:\vcpkg\packages\brotli_x64-windows\include --with-brotli-lib=C:\vcpkg\packages\brotli_x64-windows\lib no-makedepend -DOSSL_WINCTX=openssl VC-WIN64A |
| perl configdata.pm --dump |
| - name: build |
| working-directory: _build |
| shell: cmd |
| run: | |
| call "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Auxiliary\Build\vcvars64.bat" |
| jom /j4 /S |
| - name: Gather openssl version info |
| working-directory: _build |
| run: | |
| apps/openssl.exe version -v |
| apps/openssl.exe version -v | %{($_ -split '\s+')[1]} |
| apps/openssl.exe version -v | %{($_ -split '\s+')[1] -replace '([0-9]+\.[0-9]+)(\..*)','$1'} |
| echo "OSSL_VERSION=$(apps/openssl.exe version -v | %{($_ -split '\s+')[1] -replace '([0-9]+\.[0-9]+)(\..*)','$1'})" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append |
| - name: Set registry keys |
| working-directory: _build |
| run: | |
| echo ${Env:OSSL_VERSION} |
| reg.exe add HKLM\SOFTWARE\OpenSSL-${Env:OSSL_VERSION}-openssl /v OPENSSLDIR /t REG_EXPAND_SZ /d TESTOPENSSLDIR /reg:32 |
| reg.exe add HKLM\SOFTWARE\OpenSSL-${Env:OSSL_VERSION}-openssl /v MODULESDIR /t REG_EXPAND_SZ /d TESTOPENSSLDIR /reg:32 |
| reg.exe query HKLM\SOFTWARE\OpenSSL-${Env:OSSL_VERSION}-openssl /v OPENSSLDIR /reg:32 |
| - name: download coreinfo |
| run: | |
| mkdir _build\coreinfo |
| Invoke-WebRequest -Uri "https://download.sysinternals.com/files/Coreinfo.zip" -outfile "_build\coreinfo\Coreinfo.zip" |
| - name: get cpu info |
| working-directory: _build |
| continue-on-error: true |
| run: | |
| 7z.exe x coreinfo/Coreinfo.zip |
| ./Coreinfo64.exe -accepteula -f |
| ./apps/openssl.exe version -c |
| - name: test |
| working-directory: _build |
| shell: cmd |
| run: | |
| call "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Auxiliary\Build\vcvars64.bat" |
| jom test VERBOSE_FAILURE=yes TESTS="-test_fuzz* -test_fipsload" HARNESS_JOBS=4 |