mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-13 19:49:51 +01:00
4c23f4bcea
Split up the CreateDMG.sh macos script to two scripts: MacDeploy.sh - this calls macdeployqt on the built app CreateDMG.sh - this calls dmgbuild on the built & deployed app Add a `SKIP_VENV` environment variable to CreateDMG.sh, this can be used to use the system version of dmgbuild Add the ability to codesign the created dmg and its contents using the `MACOS_CODESIGN_CERTIFICATE` environment variable Moved the output name logic from CreateDMG to the `OUTPUT_DMG_PATH` environment variable The nightly release create job also doesn't remove artifacts now, it only replaces artifacts that are conflicting. The downside to this is that if we change the name of an artifact, we need to manually delete the old artifact. The upside to this is that we can now upload artifacts that are not handled in the same CI job.
459 lines
15 KiB
YAML
459 lines
15 KiB
YAML
---
|
|
name: Build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: build-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
C2_ENABLE_LTO: ${{ github.ref == 'refs/heads/master' }}
|
|
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 }} (PCH:${{ matrix.pch }}, LTO:${{ matrix.force-lto }})"
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [windows-latest, macos-latest]
|
|
qt-version: [5.15.2, 6.5.0]
|
|
pch: [true]
|
|
force-lto: [false]
|
|
plugins: [false]
|
|
skip_artifact: ["no"]
|
|
crashpad: [true]
|
|
include:
|
|
# Ubuntu 20.04, Qt 5.12
|
|
- os: ubuntu-20.04
|
|
qt-version: 5.12.12
|
|
pch: true
|
|
force-lto: false
|
|
# Ubuntu 22.04, Qt 5.15
|
|
- os: ubuntu-22.04
|
|
qt-version: 5.15.2
|
|
pch: true
|
|
force-lto: false
|
|
# Ubuntu 22.04, Qt 6.2.4
|
|
- os: ubuntu-22.04
|
|
qt-version: 6.2.4
|
|
pch: false
|
|
force-lto: false
|
|
# Test for disabling Precompiled Headers & enabling link-time optimization and plugins
|
|
- os: ubuntu-22.04
|
|
qt-version: 5.15.2
|
|
pch: false
|
|
force-lto: true
|
|
skip_artifact: "yes"
|
|
plugins: true
|
|
# Test for disabling crashpad on Windows
|
|
- os: windows-latest
|
|
qt-version: 5.15.2
|
|
pch: false
|
|
force-lto: true
|
|
skip_artifact: "yes"
|
|
crashpad: false
|
|
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- name: Force LTO
|
|
if: matrix.force-lto == true
|
|
run: |
|
|
echo "C2_ENABLE_LTO=ON" >> "$GITHUB_ENV"
|
|
shell: bash
|
|
|
|
- name: Enable plugin support
|
|
if: matrix.plugins == true
|
|
run: |
|
|
echo "C2_PLUGINS=ON" >> "$GITHUB_ENV"
|
|
shell: bash
|
|
|
|
- name: Set Crashpad
|
|
if: matrix.crashpad == true
|
|
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.1.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.1.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: 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')
|
|
run: |
|
|
cd build
|
|
cmake `
|
|
-G"NMake Makefiles" `
|
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
|
|
-DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" `
|
|
-DUSE_PRECOMPILED_HEADERS=${{ matrix.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.crashpad
|
|
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 != 'yes'
|
|
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 != 'yes'
|
|
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=${{ matrix.pch }} \
|
|
-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: (startsWith(matrix.os, 'ubuntu') && matrix.pch == false && matrix.qt-version == '5.15.2' && github.event_name == 'pull_request')
|
|
uses: ZedThree/clang-tidy-review@v0.13.0
|
|
with:
|
|
build_dir: build
|
|
config_file: ".clang-tidy"
|
|
split_workflow: true
|
|
exclude: "tests/*,lib/*"
|
|
|
|
- name: clang-tidy-review upload
|
|
if: (startsWith(matrix.os, 'ubuntu') && matrix.pch == false && matrix.qt-version == '5.15.2' && github.event_name == 'pull_request')
|
|
uses: ZedThree/clang-tidy-review/upload@v0.13.0
|
|
|
|
- name: Package - AppImage (Ubuntu)
|
|
if: startsWith(matrix.os, 'ubuntu-20.04') && matrix.skip_artifact != 'yes'
|
|
run: |
|
|
cd build
|
|
sh ./../.CI/CreateAppImage.sh
|
|
shell: bash
|
|
|
|
- name: Package - .deb (Ubuntu)
|
|
if: startsWith(matrix.os, 'ubuntu') && matrix.skip_artifact != 'yes'
|
|
run: |
|
|
cd build
|
|
sh ./../.CI/CreateUbuntuDeb.sh
|
|
shell: bash
|
|
|
|
- name: Upload artifact - AppImage (Ubuntu)
|
|
if: startsWith(matrix.os, 'ubuntu-20.04') && matrix.skip_artifact != 'yes'
|
|
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 != 'yes'
|
|
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
|
|
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=${{ matrix.pch }} \
|
|
-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/master')
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0 # allows for tags access
|
|
|
|
- uses: actions/download-artifact@v3
|
|
name: macOS x86_64 Qt6.5.0 dmg
|
|
with:
|
|
name: chatterino-macos-Qt-6.5.0.dmg
|
|
path: release-artifacts/
|
|
|
|
- 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/
|
|
|
|
- name: Mark experimental
|
|
run: |
|
|
ls -l
|
|
# Mark all Qt6 builds as EXPERIMENTAL
|
|
mv chatterino-macos-Qt-6.5.0.dmg EXPERIMENTAL-chatterino-macos-Qt-6.5.0.dmg
|
|
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
|
|
|
|
- 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.12.12 AppImage
|
|
with:
|
|
name: Chatterino-x86_64-5.12.12.AppImage
|
|
path: release-artifacts/
|
|
|
|
- uses: actions/download-artifact@v3
|
|
name: Ubuntu 20.04 Qt5.12.12 deb
|
|
with:
|
|
name: Chatterino-ubuntu-20.04-Qt-5.12.12.deb
|
|
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: Copy flatpakref
|
|
run: |
|
|
cp .CI/chatterino-nightly.flatpakref release-artifacts/
|
|
shell: bash
|
|
|
|
- name: Create release
|
|
uses: ncipollo/release-action@v1.12.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
|