From 7898b97fc257f6ad9673472dfc5ebe530d759226 Mon Sep 17 00:00:00 2001 From: Wissididom <30803034+Wissididom@users.noreply.github.com> Date: Sat, 18 Nov 2023 15:13:27 +0100 Subject: [PATCH] feat: Run tests on Windows & macOS in CI (#4970) --- .github/workflows/test-macos.yml | 91 +++++++++++++++++ .github/workflows/test-windows.yml | 155 +++++++++++++++++++++++++++++ .github/workflows/test.yml | 2 +- CHANGELOG.md | 1 + 4 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/test-macos.yml create mode 100644 .github/workflows/test-windows.yml diff --git a/.github/workflows/test-macos.yml b/.github/workflows/test-macos.yml new file mode 100644 index 00000000..4d9b8c55 --- /dev/null +++ b/.github/workflows/test-macos.yml @@ -0,0 +1,91 @@ +--- +name: Test MacOS + +on: + pull_request: + workflow_dispatch: + merge_group: + +env: + TWITCH_PUBSUB_SERVER_IMAGE: ghcr.io/chatterino/twitch-pubsub-server-test:v1.0.6 + QT_QPA_PLATFORM: minimal + +concurrency: + group: test-macos-${{ github.ref }} + cancel-in-progress: true + +jobs: + test-macos: + name: "Test ${{ matrix.os }}, Qt ${{ matrix.qt-version }}" + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-13] + qt-version: [5.15.2, 6.5.0] + plugins: [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: Enable plugin support + if: matrix.plugins + run: | + echo "C2_PLUGINS=ON" >> "$GITHUB_ENV" + + - name: Set BUILD_WITH_QT6 + if: startsWith(matrix.qt-version, '6.') + run: | + echo "C2_BUILD_WITH_QT6=ON" >> "$GITHUB_ENV" + + - uses: actions/checkout@v4 + with: + submodules: recursive + fetch-depth: 0 # allows for tags access + + - name: Install Qt + uses: jurplel/install-qt-action@v3.3.0 + with: + cache: true + cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2 + modules: ${{ env.QT_MODULES }} + version: ${{ matrix.qt-version }} + + - name: Install dependencies + run: | + brew install boost openssl rapidjson p7zip create-dmg cmake tree docker colima + + - name: Setup Colima + run: | + colima start + + - name: Build + run: | + mkdir build-test + cd build-test + cmake \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DBUILD_TESTS=On \ + -DBUILD_APP=OFF \ + -DUSE_PRECOMPILED_HEADERS=OFF \ + -DCHATTERINO_PLUGINS="$C2_PLUGINS" \ + -DBUILD_WITH_QT6="$C2_BUILD_WITH_QT6" \ + .. + make -j"$(sysctl -n hw.logicalcpu)" + + - name: Test + timeout-minutes: 30 + run: | + docker pull kennethreitz/httpbin + docker pull ${{ env.TWITCH_PUBSUB_SERVER_IMAGE }} + docker run --network=host --detach ${{ env.TWITCH_PUBSUB_SERVER_IMAGE }} + docker run -p 9051:80 --detach kennethreitz/httpbin + ctest --repeat until-pass:4 --output-on-failure --exclude-regex ClassicEmoteNameFiltering + working-directory: build-test + + - name: Post Setup Colima + if: always() + run: | + colima stop + working-directory: build-test diff --git a/.github/workflows/test-windows.yml b/.github/workflows/test-windows.yml new file mode 100644 index 00000000..bb543ff2 --- /dev/null +++ b/.github/workflows/test-windows.yml @@ -0,0 +1,155 @@ +--- +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] + 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: 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@v3.3.0 + 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.12.1 + + - 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" + + - name: Setup sccache + # sccache v0.5.3 + uses: nerixyz/ccache-action@9a7e8d00116ede600ee7717350c6594b8af6aaa5 + 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@v3 + 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" + + - 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: Cargo Install httpbox + run: | + cargo install --git https://github.com/kevinastone/httpbox --rev 89b971f + + - name: Test + 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 + + - name: Clean Conan cache + run: conan cache clean --source --build --download "*" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b9e49039..b45ca108 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -99,6 +99,6 @@ jobs: docker pull ${{ env.TWITCH_PUBSUB_SERVER_IMAGE }} docker run --network=host --detach ${{ env.TWITCH_PUBSUB_SERVER_IMAGE }} docker run -p 9051:80 --detach kennethreitz/httpbin - ctest --repeat until-pass:4 + ctest --repeat until-pass:4 --output-on-failure working-directory: build-test shell: bash diff --git a/CHANGELOG.md b/CHANGELOG.md index 16eab57e..d51288a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,6 +65,7 @@ - Dev: Refactor `IrcMessageHandler`, removing a bunch of clang-tidy warnings & changing its public API. (#4927) - Dev: `Details` file properties tab is now populated on Windows. (#4912) - Dev: Removed `Outcome` from network requests. (#4959) +- Dev: Added Tests for Windows and MacOS in CI. (#4970) ## 2.4.6