perf: only lay out visible channels #493
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: Build | |
on: | |
push: | |
branches: | |
- chatterino7 | |
pull_request: | |
workflow_dispatch: | |
merge_group: | |
concurrency: | |
group: build-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
C2_ENABLE_LTO: ${{ github.ref == 'refs/heads/chatterino7' }} | |
CHATTERINO_REQUIRE_CLEAN_GIT: On | |
C2_BUILD_WITH_QT6: Off | |
# Last known good conan version | |
# 2.0.3 has a bug on Windows (conan-io/conan#13606) | |
CONAN_VERSION: 2.0.2 | |
jobs: | |
build: | |
name: "Build ${{ matrix.os }}, Qt ${{ matrix.qt-version }} (LTO:${{ matrix.force-lto }}, crashpad:${{ matrix.skip-crashpad && 'off' || 'on' }})" | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [windows-latest, macos-latest] | |
qt-version: [5.15.2, 6.5.0] | |
force-lto: [false] | |
plugins: [false] | |
skip-artifact: [false] | |
skip-crashpad: [false] | |
clang-tidy-review: [false] | |
include: | |
# Ubuntu 22.04, Qt 5.15 | |
- os: ubuntu-22.04 | |
qt-version: 5.15.2 | |
force-lto: false | |
plugins: false | |
skip-artifact: false | |
skip-crashpad: false | |
clang-tidy-review: true | |
# Ubuntu 22.04, Qt 6.2.4 - tests LTO & plugins | |
- os: ubuntu-22.04 | |
qt-version: 6.2.4 | |
force-lto: true | |
plugins: true | |
skip-artifact: false | |
skip-crashpad: false | |
clang-tidy-review: false | |
# Test for disabling crashpad on Windows | |
- os: windows-latest | |
qt-version: 5.15.2 | |
force-lto: false | |
plugins: false | |
skip-artifact: true | |
skip-crashpad: true | |
clang-tidy-review: false | |
fail-fast: false | |
steps: | |
- name: Force LTO | |
if: matrix.force-lto | |
run: | | |
echo "C2_ENABLE_LTO=ON" >> "$GITHUB_ENV" | |
shell: bash | |
- name: Enable plugin support | |
if: matrix.plugins | |
run: | | |
echo "C2_PLUGINS=ON" >> "$GITHUB_ENV" | |
shell: bash | |
- name: Set Crashpad | |
if: matrix.skip-crashpad == false | |
run: | | |
echo "C2_ENABLE_CRASHPAD=ON" >> "$GITHUB_ENV" | |
shell: bash | |
- name: Set environment variables for windows-latest | |
if: matrix.os == 'windows-latest' | |
run: | | |
echo "vs_version=2022" >> "$GITHUB_ENV" | |
shell: bash | |
- name: Set BUILD_WITH_QT6 | |
if: startsWith(matrix.qt-version, '6.') | |
run: | | |
echo "C2_BUILD_WITH_QT6=ON" >> "$GITHUB_ENV" | |
shell: bash | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
fetch-depth: 0 # allows for tags access | |
- name: Install Qt5 | |
if: startsWith(matrix.qt-version, '5.') | |
uses: jurplel/install-qt-action@v3.3.0 | |
with: | |
cache: true | |
cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2 | |
version: ${{ matrix.qt-version }} | |
- name: Install Qt6 | |
if: startsWith(matrix.qt-version, '6.') | |
uses: jurplel/install-qt-action@v3.3.0 | |
with: | |
cache: true | |
cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2 | |
modules: qt5compat qtimageformats | |
version: ${{ matrix.qt-version }} | |
# WINDOWS | |
- name: Enable Developer Command Prompt (Windows) | |
if: startsWith(matrix.os, 'windows') | |
uses: ilammy/msvc-dev-cmd@v1.12.1 | |
- name: Setup conan variables (Windows) | |
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 (Windows) | |
# sccache v0.5.3 | |
uses: nerixyz/ccache-action@9a7e8d00116ede600ee7717350c6594b8af6aaa5 | |
if: startsWith(matrix.os, 'windows') | |
with: | |
variant: sccache | |
# only save on on the default (master) branch | |
save: ${{ github.event_name == 'push' }} | |
key: sccache-build-${{ matrix.os }}-${{ matrix.qt-version }}-${{ matrix.skip-crashpad }} | |
restore-keys: | | |
sccache-build-${{ matrix.os }}-${{ matrix.qt-version }} | |
- name: Cache conan packages (Windows) | |
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 (Windows) | |
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')" >> "$GITHUB_PATH" | |
pip3 install --user "conan==${{ env.CONAN_VERSION }}" | |
shell: powershell | |
- name: Setup Conan (Windows) | |
if: startsWith(matrix.os, 'windows') | |
run: | | |
conan --version | |
conan profile detect -f | |
shell: powershell | |
- name: Install dependencies (Windows) | |
if: startsWith(matrix.os, 'windows') | |
run: | | |
mkdir build | |
cd build | |
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 (Windows) | |
if: startsWith(matrix.os, 'windows') | |
shell: pwsh | |
env: | |
# Always enable PCH on Windows | |
C2_WINDOWS_USE_PCH: "ON" | |
run: | | |
cd build | |
cmake ` | |
-G"NMake Makefiles" ` | |
-DCMAKE_BUILD_TYPE=RelWithDebInfo ` | |
-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 | |
- name: Build crashpad (Windows) | |
if: startsWith(matrix.os, 'windows') && !matrix.skip-crashpad | |
shell: pwsh | |
run: | | |
cd build | |
set cl=/MP | |
nmake /S /NOLOGO crashpad_handler | |
mkdir Chatterino2/crashpad | |
cp bin/crashpad/crashpad_handler.exe Chatterino2/crashpad/crashpad_handler.exe | |
7z a bin/chatterino-Qt-${{ matrix.qt-version }}.pdb.7z bin/chatterino.pdb | |
- name: Package (windows) | |
if: startsWith(matrix.os, 'windows') | |
run: | | |
cd build | |
windeployqt bin/chatterino.exe --release --no-compiler-runtime --no-translations --no-opengl-sw --dir Chatterino2/ | |
cp bin/chatterino.exe Chatterino2/ | |
echo nightly > Chatterino2/modes | |
7z a chatterino-windows-x86-64-Qt-${{ matrix.qt-version }}.zip Chatterino2/ | |
- name: Upload artifact (Windows - binary) | |
if: startsWith(matrix.os, 'windows') && !matrix.skip-artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: chatterino-windows-x86-64-Qt-${{ matrix.qt-version }}.zip | |
path: build/chatterino-windows-x86-64-Qt-${{ matrix.qt-version }}.zip | |
- name: Upload artifact (Windows - symbols) | |
if: startsWith(matrix.os, 'windows') && !matrix.skip-artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: chatterino-windows-x86-64-Qt-${{ matrix.qt-version }}-symbols.pdb.7z | |
path: build/bin/chatterino-Qt-${{ matrix.qt-version }}.pdb.7z | |
- name: Clean Conan cache | |
if: startsWith(matrix.os, 'windows') | |
run: conan cache clean --source --build --download "*" | |
shell: bash | |
# LINUX | |
- name: Install dependencies (Ubuntu) | |
if: startsWith(matrix.os, 'ubuntu') | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install \ | |
cmake \ | |
virtualenv \ | |
rapidjson-dev \ | |
libfuse2 \ | |
libssl-dev \ | |
libboost-dev \ | |
libxcb-randr0-dev \ | |
libboost-system-dev \ | |
libboost-filesystem-dev \ | |
libpulse-dev \ | |
libxkbcommon-x11-0 \ | |
build-essential \ | |
libgl1-mesa-dev \ | |
libxcb-icccm4 \ | |
libxcb-image0 \ | |
libxcb-keysyms1 \ | |
libxcb-render-util0 \ | |
libxcb-xinerama0 | |
- name: Apply Qt patches (Ubuntu) | |
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.qt-version, '5.') | |
run: | | |
patch "$Qt5_DIR/include/QtConcurrent/qtconcurrentthreadengine.h" .patches/qt5-on-newer-gcc.patch | |
shell: bash | |
- name: Build (Ubuntu) | |
if: startsWith(matrix.os, 'ubuntu') | |
run: | | |
mkdir build | |
cd build | |
CXXFLAGS=-fno-sized-deallocation cmake \ | |
-DCMAKE_INSTALL_PREFIX=appdir/usr/ \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DPAJLADA_SETTINGS_USE_BOOST_FILESYSTEM=On \ | |
-DUSE_PRECOMPILED_HEADERS=OFF \ | |
-DCMAKE_EXPORT_COMPILE_COMMANDS=On \ | |
-DCHATTERINO_LTO="$C2_ENABLE_LTO" \ | |
-DCHATTERINO_PLUGINS="$C2_PLUGINS" \ | |
-DBUILD_WITH_QT6="$C2_BUILD_WITH_QT6" \ | |
.. | |
make -j"$(nproc)" | |
shell: bash | |
- name: clang-tidy review | |
if: matrix.clang-tidy-review && github.event_name == 'pull_request' | |
uses: ZedThree/clang-tidy-review@v0.13.3 | |
with: | |
build_dir: build-clang-tidy | |
config_file: ".clang-tidy" | |
split_workflow: true | |
exclude: "lib/*" | |
cmake_command: >- | |
cmake -S. -Bbuild-clang-tidy | |
-DCMAKE_BUILD_TYPE=Release | |
-DPAJLADA_SETTINGS_USE_BOOST_FILESYSTEM=On | |
-DUSE_PRECOMPILED_HEADERS=OFF | |
-DCMAKE_EXPORT_COMPILE_COMMANDS=On | |
-DCHATTERINO_LTO=Off | |
-DCHATTERINO_PLUGINS=On | |
-DBUILD_WITH_QT6=Off | |
-DBUILD_TESTS=On | |
-DBUILD_BENCHMARKS=On | |
apt_packages: >- | |
qttools5-dev, qt5-image-formats-plugins, libqt5svg5-dev, | |
libsecret-1-dev, | |
libboost-dev, libboost-system-dev, libboost-filesystem-dev, | |
libssl-dev, | |
rapidjson-dev, | |
libbenchmark-dev, | |
libavif-dev | |
- name: clang-tidy-review upload | |
if: matrix.clang-tidy-review && github.event_name == 'pull_request' | |
uses: ZedThree/clang-tidy-review/upload@v0.13.3 | |
- name: Package - AppImage (Ubuntu) | |
if: startsWith(matrix.os, 'ubuntu-22.04') && !matrix.skip-artifact | |
run: | | |
cd build | |
sh ./../.CI/CreateAppImage.sh | |
shell: bash | |
- name: Package - .deb (Ubuntu) | |
if: startsWith(matrix.os, 'ubuntu') && !matrix.skip-artifact | |
run: | | |
cd build | |
sh ./../.CI/CreateUbuntuDeb.sh | |
shell: bash | |
- name: Upload artifact - AppImage (Ubuntu) | |
if: startsWith(matrix.os, 'ubuntu-22.04') && !matrix.skip-artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Chatterino-x86_64-${{ matrix.qt-version }}.AppImage | |
path: build/Chatterino-x86_64.AppImage | |
- name: Upload artifact - .deb (Ubuntu) | |
if: startsWith(matrix.os, 'ubuntu') && !matrix.skip-artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Chatterino-${{ matrix.os }}-Qt-${{ matrix.qt-version }}.deb | |
path: build/Chatterino-${{ matrix.os }}-x86_64.deb | |
# MACOS | |
- name: Install dependencies (MacOS) | |
if: startsWith(matrix.os, 'macos') | |
run: | | |
brew install boost openssl rapidjson p7zip create-dmg cmake tree libavif | |
shell: bash | |
- name: Build (MacOS) | |
if: startsWith(matrix.os, 'macos') | |
run: | | |
mkdir build | |
cd build | |
cmake \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 \ | |
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \ | |
-DUSE_PRECOMPILED_HEADERS=OFF \ | |
-DCHATTERINO_LTO="$C2_ENABLE_LTO" \ | |
-DCHATTERINO_PLUGINS="$C2_PLUGINS" \ | |
-DBUILD_WITH_QT6="$C2_BUILD_WITH_QT6" \ | |
.. | |
make -j"$(sysctl -n hw.logicalcpu)" | |
shell: bash | |
- name: Package (MacOS) | |
if: startsWith(matrix.os, 'macos') | |
env: | |
OUTPUT_DMG_PATH: chatterino-macos-Qt-${{ matrix.qt-version}}.dmg | |
run: | | |
ls -la | |
pwd | |
ls -la build || true | |
cd build | |
./../.CI/MacDeploy.sh | |
./../.CI/CreateDMG.sh | |
shell: bash | |
- name: Upload artifact (MacOS) | |
if: startsWith(matrix.os, 'macos') | |
uses: actions/upload-artifact@v3 | |
with: | |
name: chatterino-macos-Qt-${{ matrix.qt-version }}.dmg | |
path: build/chatterino-macos-Qt-${{ matrix.qt-version }}.dmg | |
create-release: | |
needs: build | |
runs-on: ubuntu-latest | |
if: (github.event_name == 'push' && github.ref == 'refs/heads/chatterino7') | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 # allows for tags access | |
- uses: actions/download-artifact@v3 | |
name: Ubuntu 22.04 Qt6.2.4 deb | |
with: | |
name: Chatterino-ubuntu-22.04-Qt-6.2.4.deb | |
path: release-artifacts/ | |
- uses: actions/download-artifact@v3 | |
name: Windows Qt6.5.0 | |
with: | |
name: chatterino-windows-x86-64-Qt-6.5.0.zip | |
path: release-artifacts/ | |
- uses: actions/download-artifact@v3 | |
name: Windows Qt6.5.0 symbols | |
with: | |
name: chatterino-windows-x86-64-Qt-6.5.0-symbols.pdb.7z | |
path: release-artifacts/ | |
- uses: actions/download-artifact@v3 | |
name: Windows Qt5.15.2 | |
with: | |
name: chatterino-windows-x86-64-Qt-5.15.2.zip | |
path: release-artifacts/ | |
- uses: actions/download-artifact@v3 | |
name: Windows Qt5.15 symbols | |
with: | |
name: chatterino-windows-x86-64-Qt-5.15.2-symbols.pdb.7z | |
path: release-artifacts/ | |
- uses: actions/download-artifact@v3 | |
name: Linux Qt5.15.2 AppImage | |
with: | |
name: Chatterino-x86_64-5.15.2.AppImage | |
path: release-artifacts/ | |
- uses: actions/download-artifact@v3 | |
name: Ubuntu 22.04 Qt5.15.2 deb | |
with: | |
name: Chatterino-ubuntu-22.04-Qt-5.15.2.deb | |
path: release-artifacts/ | |
- uses: actions/download-artifact@v3 | |
name: macOS x86_64 Qt5.15.2 dmg | |
with: | |
name: chatterino-macos-Qt-5.15.2.dmg | |
path: release-artifacts/ | |
- name: Rename artifacts | |
run: | | |
ls -l | |
# Rename the macos build to indicate that it's for macOS 10.15 users | |
mv chatterino-macos-Qt-5.15.2.dmg Chatterino-macOS-10.15.dmg | |
# Mark all Qt6 builds as EXPERIMENTAL | |
mv Chatterino-ubuntu-22.04-x86_64.deb EXPERIMENTAL-Chatterino-ubuntu-22.04-Qt-6.2.4.deb | |
mv chatterino-windows-x86-64-Qt-6.5.0.zip EXPERIMENTAL-chatterino-windows-x86-64-Qt-6.5.0.zip | |
mv chatterino-Qt-6.5.0.pdb.7z EXPERIMENTAL-chatterino-Qt-6.5.0.pdb.7z | |
working-directory: release-artifacts | |
shell: bash | |
- name: Create release | |
uses: ncipollo/release-action@v1.13.0 | |
with: | |
replacesArtifacts: true | |
allowUpdates: true | |
artifactErrorsFailBuild: true | |
artifacts: "release-artifacts/*" | |
body: ${{ github.event.head_commit.message }} | |
prerelease: true | |
name: Nightly Release | |
tag: nightly-build | |
- name: Update nightly-build tag | |
run: | | |
git tag -f nightly-build | |
git push -f origin nightly-build | |
shell: bash |