diff options
Diffstat (limited to '.github/workflows/windows.yml')
-rw-r--r-- | .github/workflows/windows.yml | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 00000000..b30038a0 --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,256 @@ +--- +name: windows + +on: + pull_request: + types: [opened, synchronize] + paths-ignore: + - '**.md' + - '.mailmap' + - 'ChangeLog*' + - 'whatsnew*' + - 'LICENSE' + push: + paths-ignore: + - '**.md' + - '.mailmap' + - 'ChangeLog*' + - 'whatsnew*' + - 'LICENSE' + +jobs: + vs2017: + runs-on: ${{ matrix.os }} + if: "!contains(github.event.head_commit.message, 'ci skip')" + strategy: + fail-fast: false + matrix: + os: [windows-2016] + EVENT_MATRIX: [NONE] + + steps: + - uses: actions/checkout@v2.0.0 + + - name: Cache Depends + id: cache-depends + uses: actions/cache@v1.0.3 + with: + path: C:\vcpkg\installed + key: ${{ matrix.os }}-vcpkg + + - name: Cache Build + uses: actions/cache@v1.0.3 + with: + path: build + key: ${{ matrix.os }}-${{ matrix.EVENT_MATRIX }}-v3 + + - name: Install Depends + if: steps.cache-depends.outputs.cache-hit != 'true' + shell: powershell + run: | + vcpkg install openssl:x64-windows + vcpkg install zlib:x64-windows + + - name: Build And Test + shell: powershell + run: | + $OPENSSL_ROOT_DIR="C:\vcpkg\installed\x64-windows" + $EVENT_BUILD_PARALLEL=10 + $EVENT_TESTS_PARALLEL=1 + $env:PATH="$OPENSSL_ROOT_DIR/bin;$env:PATH" + + mkdir build -ea 0 + cd build + + $CMAKE_CMD="cmake -G 'Visual Studio 15 2017 Win64' .." + function cmake_configure($retry) + { + $errcode=0 + try { + if ($retry -eq 0) { + echo "[cmake configure retry] $CMAKE_CMD" + } else { + echo "[cmake configure] $CMAKE_CMD" + } + Invoke-Expression $CMAKE_CMD + $errcode=$LastExitCode + } + catch { + $errcode=1 + } + finally { + if ($errcode -ne 0) { + if ($retry -eq 0) { + $host.SetShouldExit($LastExitCode) + } else { + echo "Remove all entries in build directory" + rm -r -fo * + cmake_configure 0 + } + } + } + } + cmake_configure 1 + + try { + cmake --build . -j $EVENT_BUILD_PARALLEL -- /nologo /verbosity:minimal + if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) } + + if ("${{ matrix.EVENT_MATRIX }}" -eq "TEST_EXPORT_STATIC") { + python ../test-export/test-export.py static + } + elseif ("${{ matrix.EVENT_MATRIX }}" -eq "TEST_EXPORT_SHARED") { + python ../test-export/test-export.py shared + } + else { + ctest --output-on-failure -j $EVENT_TESTS_PARALLEL + if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) } + } + } catch { + $host.SetShouldExit($LastExitCode) + } + + - uses: actions/upload-artifact@v1 + if: failure() + with: + name: ${{ matrix.os }}-${{ matrix.EVENT_MATRIX }}-build + path: build + + vs2019: + runs-on: ${{ matrix.os }} + if: "!contains(github.event.head_commit.message, 'ci skip')" + strategy: + fail-fast: false + matrix: + os: [windows-2019] + EVENT_MATRIX: + - NONE + - LIBRARY_TYPE_STATIC + - DISABLE_OPENSSL + - DISABLE_THREAD_SUPPORT + - DISABLE_DEBUG_MODE + - DISABLE_MM_REPLACEMENT + - DUNICODE + - TEST_EXPORT_SHARED + - TEST_EXPORT_STATIC + + steps: + - uses: actions/checkout@v2.0.0 + + - name: Cache Depends + id: cache-depends + uses: actions/cache@v1.1.0 + with: + path: C:\vcpkg\installed + key: ${{ matrix.os }}-vcpkg + + - name: Cache Build + uses: actions/cache@v1.1.0 + with: + path: build + key: ${{ matrix.os }}-${{ matrix.EVENT_MATRIX }}-v3 + + - name: Install Depends + if: steps.cache-depends.outputs.cache-hit != 'true' + shell: powershell + run: | + vcpkg install openssl:x64-windows + vcpkg install zlib:x64-windows + + - name: Build And Test + shell: powershell + run: | + $OPENSSL_ROOT_DIR="C:\vcpkg\installed\x64-windows" + $EVENT_BUILD_PARALLEL=10 + $EVENT_TESTS_PARALLEL=1 + $env:PATH="$OPENSSL_ROOT_DIR/bin;$env:PATH" + + if ( "${{ matrix.EVENT_MATRIX }}" -eq "LIBRARY_TYPE_STATIC" ) { + $EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=STATIC" + } + elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "DISABLE_OPENSSL" ) { + $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_OPENSSL=ON" + } + elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "DISABLE_THREAD_SUPPORT" ) { + $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_THREAD_SUPPORT=ON" + } + elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "DISABLE_DEBUG_MODE" ) { + $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_DEBUG_MODE=ON" + } + elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "DISABLE_MM_REPLACEMENT" ) { + $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_MM_REPLACEMENT=ON" + } + elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "UNICODE" ) { + $EVENT_CMAKE_OPTIONS="-DCMAKE_C_FLAGS='-DUNICODE -D_UNICODE'" + } + elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "TEST_EXPORT_SHARED" ) { + $EVENT_CMAKE_OPTIONS="-DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON" + } + elseif ( "${{ matrix.EVENT_MATRIX }}" -eq "TEST_EXPORT_STATIC" ) { + $EVENT_CMAKE_OPTIONS="-DEVENT__LIBRARY_TYPE=STATIC -DEVENT__DISABLE_TESTS=ON -DEVENT__DISABLE_SAMPLES=ON" + } + else { + $EVENT_CMAKE_OPTIONS="" + } + + mkdir build -ea 0 + cd build + + if ("${{ matrix.os }}" -eq "windows-2016") { + $CMAKE_CMD="cmake -G 'Visual Studio 15 2017 Win64' .." + } + else { # windows-2019 + $CMAKE_CMD="cmake -G 'Visual Studio 16 2019' -A x64 .. $EVENT_CMAKE_OPTIONS" + } + function cmake_configure($retry) + { + $errcode=0 + try { + if ($retry -eq 0) { + echo "[cmake configure retry] $CMAKE_CMD" + } else { + echo "[cmake configure] $CMAKE_CMD" + } + Invoke-Expression $CMAKE_CMD + $errcode=$LastExitCode + } + catch { + $errcode=1 + } + finally { + if ($errcode -ne 0) { + if ($retry -eq 0) { + $host.SetShouldExit($LastExitCode) + } else { + echo "Remove all entries in build directory" + rm -r -fo * + cmake_configure 0 + } + } + } + } + cmake_configure 1 + + try { + cmake --build . -j $EVENT_BUILD_PARALLEL -- /nologo /verbosity:minimal + if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) } + + if ("${{ matrix.EVENT_MATRIX }}" -eq "TEST_EXPORT_STATIC") { + python ../test-export/test-export.py static + } + elseif ("${{ matrix.EVENT_MATRIX }}" -eq "TEST_EXPORT_SHARED") { + python ../test-export/test-export.py shared + } + else { + ctest --output-on-failure -j $EVENT_TESTS_PARALLEL + if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) } + } + } catch { + $host.SetShouldExit($LastExitCode) + } + + - uses: actions/upload-artifact@v1 + if: failure() + with: + name: ${{ matrix.os }}-${{ matrix.EVENT_MATRIX }}-build + path: build |