--- name: Test Windows on: pull_request: workflow_dispatch: merge_group: env: TWITCH_PUBSUB_SERVER_TAG: v1.0.7 HTTPBOX_TAG: v0.2.1 QT_QPA_PLATFORM: minimal # Last known good conan version # 2.0.3 has a bug on Windows (conan-io/conan#13606) CONAN_VERSION: 2.0.2 concurrency: group: test-windows-${{ github.ref }} cancel-in-progress: true jobs: test-windows: name: "Test ${{ matrix.os }}, Qt ${{ matrix.qt-version }}" runs-on: ${{ matrix.os }} strategy: matrix: os: [windows-latest] qt-version: [5.15.2, 6.7.1] plugins: [true] skip-artifact: [false] skip-crashpad: [false] fail-fast: false env: C2_BUILD_WITH_QT6: ${{ startsWith(matrix.qt-version, '6.') && 'ON' || 'OFF' }} QT_MODULES: ${{ startsWith(matrix.qt-version, '6.') && 'qt5compat qtimageformats' || '' }} C2_USE_OPENSSL3: ${{ startsWith(matrix.qt-version, '6.') && 'True' || 'False' }} C2_CONAN_CACHE_SUFFIX: ${{ startsWith(matrix.qt-version, '6.') && '-QT6' || '' }} steps: - name: Enable plugin support if: matrix.plugins run: | echo "C2_PLUGINS=ON" >> "$Env:GITHUB_ENV" - name: Set Crashpad if: matrix.skip-crashpad == false run: | echo "C2_ENABLE_CRASHPAD=ON" >> "$Env:GITHUB_ENV" - name: Set BUILD_WITH_QT6 if: startsWith(matrix.qt-version, '6.') run: | echo "C2_BUILD_WITH_QT6=ON" >> "$Env:GITHUB_ENV" - uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 # allows for tags access - name: Install Qt uses: jurplel/install-qt-action@v4.1.1 with: cache: true cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2 modules: ${{ env.QT_MODULES }} version: ${{ matrix.qt-version }} - name: Enable Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1.13.0 - name: Setup sccache # sccache v0.7.4 uses: hendrikmuhs/ccache-action@v1.2.14 with: variant: sccache # only save on the default (master) branch save: ${{ github.event_name == 'push' }} key: sccache-test-${{ matrix.os }}-${{ matrix.qt-version }}-${{ matrix.skip-crashpad }} restore-keys: | sccache-test-${{ matrix.os }}-${{ matrix.qt-version }} - name: Cache conan packages uses: actions/cache@v4 with: key: ${{ runner.os }}-conan-user-${{ hashFiles('**/conanfile.py') }}${{ env.C2_CONAN_CACHE_SUFFIX }} path: ~/.conan2/ - name: Install Conan run: | python3 -c "import site; import sys; print(f'{site.USER_BASE}\\Python{sys.version_info.major}{sys.version_info.minor}\\Scripts')" >> "$Env:GITHUB_PATH" pip3 install --user "conan==${{ env.CONAN_VERSION }}" - name: Setup Conan run: | conan --version conan profile detect -f - name: Install dependencies run: | mkdir build-test cd build-test conan install .. ` -s build_type=RelWithDebInfo ` -c tools.cmake.cmaketoolchain:generator="NMake Makefiles" ` -b missing ` --output-folder=. ` -o with_openssl3="$Env:C2_USE_OPENSSL3" # The Windows runners currently use an older version of the CRT - name: Install CRT run: | mkdir -Force build-test/bin cp "$((ls $Env:VCToolsRedistDir/onecore/x64 -Filter '*.CRT')[0].FullName)/*" build-test/bin - name: Install httpbox run: | mkdir httpbox Invoke-WebRequest -Uri "https://github.com/Chatterino/httpbox/releases/download/${{ env.HTTPBOX_TAG }}/httpbox-x86_64-pc-windows-msvc.zip" -outfile "httpbox.zip" Expand-Archive httpbox.zip -DestinationPath httpbox rm httpbox.zip - name: Build run: | cmake ` -G"NMake Makefiles" ` -DCMAKE_BUILD_TYPE=RelWithDebInfo ` -DBUILD_TESTS=On ` -DBUILD_APP=OFF ` -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" ` -DUSE_PRECOMPILED_HEADERS=On ` -DBUILD_WITH_CRASHPAD="$Env:C2_ENABLE_CRASHPAD" ` -DCHATTERINO_PLUGINS="$Env:C2_PLUGINS" ` -DBUILD_WITH_QT6="$Env:C2_BUILD_WITH_QT6" ` .. set cl=/MP nmake /S /NOLOGO working-directory: build-test - name: Download and extract Twitch PubSub Server Test run: | mkdir pubsub-server-test Invoke-WebRequest -Uri "https://github.com/Chatterino/twitch-pubsub-server-test/releases/download/${{ env.TWITCH_PUBSUB_SERVER_TAG }}/server-${{ env.TWITCH_PUBSUB_SERVER_TAG }}-windows-amd64.zip" -outfile "pubsub-server.zip" Expand-Archive pubsub-server.zip -DestinationPath pubsub-server-test rm pubsub-server.zip cd pubsub-server-test Invoke-WebRequest -Uri "https://github.com/Chatterino/twitch-pubsub-server-test/raw/${{ env.TWITCH_PUBSUB_SERVER_TAG }}/cmd/server/server.crt" -outfile "server.crt" Invoke-WebRequest -Uri "https://github.com/Chatterino/twitch-pubsub-server-test/raw/${{ env.TWITCH_PUBSUB_SERVER_TAG }}/cmd/server/server.key" -outfile "server.key" cd .. - name: Test timeout-minutes: 30 run: | ..\httpbox\httpbox.exe --port 9051 & cd ..\pubsub-server-test .\server.exe 127.0.0.1:9050 & cd ..\build-test ctest --repeat until-pass:4 --output-on-failure working-directory: build-test - name: Clean Conan cache run: conan cache clean --source --build --download "*"