feat: Run tests on Windows & macOS in CI #12
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: Test Windows | |
on: | |
pull_request: | |
workflow_dispatch: | |
merge_group: | |
env: | |
TWITCH_PUBSUB_SERVER_TAG: v1.0.7 | |
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.5.0] | |
force-lto: [false] | |
plugins: [false] | |
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' || '' }} | |
steps: | |
- name: Force LTO | |
if: matrix.force-lto | |
run: | | |
echo "C2_ENABLE_LTO=ON" >> "$Env:GITHUB_ENV" | |
shell: pwsh | |
- name: Enable plugin support | |
if: matrix.plugins | |
run: | | |
echo "C2_PLUGINS=ON" >> "$Env:GITHUB_ENV" | |
shell: pwsh | |
- name: Set Crashpad | |
if: matrix.skip-crashpad == false | |
run: | | |
echo "C2_ENABLE_CRASHPAD=ON" >> "$Env:GITHUB_ENV" | |
shell: pwsh | |
- name: Set BUILD_WITH_QT6 | |
if: startsWith(matrix.qt-version, '6.') | |
run: | | |
echo "C2_BUILD_WITH_QT6=ON" >> "$Env:GITHUB_ENV" | |
shell: pwsh | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 # allows for tags access | |
- name: Install Qt | |
uses: jurplel/[email protected] | |
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 | |
if: startsWith(matrix.os, 'windows') | |
uses: ilammy/[email protected] | |
- name: Setup conan variables | |
if: startsWith(matrix.os, 'windows') | |
run: | | |
"C2_USE_OPENSSL3=$(if ($Env:C2_BUILD_WITH_QT6 -eq "on") { "True" } else { "False" })" >> "$Env:GITHUB_ENV" | |
"C2_CONAN_CACHE_SUFFIX=$(if ($Env:C2_BUILD_WITH_QT6 -eq "on") { "-QT6" } else { "`" })" >> "$Env:GITHUB_ENV" | |
shell: powershell | |
- name: Setup sccache | |
# sccache v0.5.3 | |
uses: nerixyz/ccache-action@9a7e8d00116ede600ee7717350c6594b8af6aaa5 | |
if: startsWith(matrix.os, 'windows') | |
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 | |
if: startsWith(matrix.os, 'windows') | |
uses: actions/cache@v3 | |
with: | |
key: ${{ runner.os }}-conan-user-${{ hashFiles('**/conanfile.py') }}${{ env.C2_CONAN_CACHE_SUFFIX }} | |
path: ~/.conan2/ | |
- name: Install Conan | |
if: startsWith(matrix.os, 'windows') | |
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 }}" | |
shell: pwsh | |
- name: Setup Conan | |
if: startsWith(matrix.os, 'windows') | |
run: | | |
conan --version | |
conan profile detect -f | |
- name: Install dependencies | |
if: startsWith(matrix.os, 'windows') | |
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" | |
shell: powershell | |
- name: Build | |
if: startsWith(matrix.os, 'windows') | |
shell: pwsh | |
env: | |
# Enable PCH on Windows, later we can have it depend on the run/Qt Version like in the build workflow, I just want to make it work | |
C2_WINDOWS_USE_PCH: True | |
run: | | |
cmake ` | |
-G"NMake Makefiles" ` | |
-DCMAKE_BUILD_TYPE=RelWithDebInfo ` | |
-DBUILD_TESTS=On ` | |
-DBUILD_APP=OFF ` | |
-DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" ` | |
-DUSE_PRECOMPILED_HEADERS=${{ env.C2_WINDOWS_USE_PCH }} ` | |
-DBUILD_WITH_CRASHPAD="$Env:C2_ENABLE_CRASHPAD" ` | |
-DCHATTERINO_LTO="$Env:C2_ENABLE_LTO" ` | |
-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 | |
if: startsWith(matrix.os, 'windows') | |
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 .. | |
shell: pwsh | |
- name: Cargo Install httpbox | |
if: startsWith(matrix.os, 'windows') | |
run: | | |
cargo install --git https://github.com/kevinastone/httpbox --rev 89b971f | |
shell: pwsh | |
- name: Test | |
if: startsWith(matrix.os, 'windows') | |
timeout-minutes: 30 | |
run: | | |
httpbox --port 9051 & | |
cd ..\pubsub-server-test | |
.\server.exe 127.0.0.1:9050 & | |
cd ..\build-test | |
ctest --repeat until-pass:4 --output-on-failure --exclude-regex ClassicEmoteNameFiltering | |
working-directory: build-test | |
shell: pwsh | |
- name: Clean Conan cache | |
if: startsWith(matrix.os, 'windows') | |
run: conan cache clean --source --build --download "*" | |
shell: pwsh |