mirror of
https://github.com/Chatterino/chatterino2.git
synced 2026-08-24 02:24:18 -05:00
The nightly release is failing, because it can't update the tag. Re-enable `persist-credentials` to make it work. Reviewed-by: pajlada <rasmus.karlsson@pajlada.com>
427 lines
15 KiB
YAML
427 lines
15 KiB
YAML
---
|
|
name: Build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
- "bugfix-release/*"
|
|
- "release/*"
|
|
pull_request:
|
|
workflow_dispatch:
|
|
inputs:
|
|
buildType:
|
|
description: "Build type"
|
|
required: true
|
|
type: choice
|
|
default: "auto"
|
|
options:
|
|
- auto
|
|
- nightly
|
|
- stable
|
|
merge_group:
|
|
|
|
concurrency:
|
|
group: build-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
C2_ENABLE_LTO: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/bugfix-release/') || startsWith(github.ref, 'refs/heads/release/') }}
|
|
CHATTERINO_REQUIRE_CLEAN_GIT: On
|
|
CHATTERINO_BUILD_TYPE: ${{ case(inputs.buildType != '', inputs.buildType, 'auto') }}
|
|
CONAN_VERSION: 2.28.1
|
|
|
|
jobs:
|
|
build-ubuntu-docker:
|
|
# Our Ubuntu builds are built using Docker images that have been pre-published.
|
|
# This speeds up builds for us since we do some pre-building of packages that takes a long time
|
|
# However, this means if you need to add a dependency to the build, you'll need to do that
|
|
# in the https://github.com/Chatterino/docker repository first.
|
|
name: "Build Ubuntu in Docker"
|
|
runs-on: ubuntu-latest
|
|
container: ${{ matrix.container }}
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-22.04
|
|
container: ghcr.io/chatterino/chatterino2-build-ubuntu-22.04:latest
|
|
force-lto: false
|
|
skip-artifact: false
|
|
skip-crashpad: false
|
|
build-deb: true
|
|
plugins: true
|
|
- os: ubuntu-24.04
|
|
container: ghcr.io/chatterino/chatterino2-build-ubuntu-24.04:latest
|
|
force-lto: false
|
|
skip-artifact: false
|
|
skip-crashpad: false
|
|
build-deb: true
|
|
plugins: true
|
|
- os: ubuntu-24.04
|
|
container: ghcr.io/chatterino/chatterino2-build-ubuntu-24.04:latest
|
|
force-lto: false
|
|
skip-artifact: false
|
|
skip-crashpad: false
|
|
build-deb: false
|
|
plugins: false
|
|
- os: ubuntu-26.04
|
|
container: ghcr.io/chatterino/chatterino2-build-ubuntu-26.04:latest
|
|
force-lto: false
|
|
skip-artifact: false
|
|
skip-crashpad: false
|
|
build-deb: true
|
|
plugins: true
|
|
env:
|
|
C2_ENABLE_LTO: ${{ matrix.force-lto }}
|
|
C2_ENABLE_CRASHPAD: ${{ matrix.skip-crashpad == false }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
submodules: recursive
|
|
fetch-depth: 0 # allows for tags access
|
|
persist-credentials: false
|
|
|
|
- name: Fix git permission error
|
|
run: |
|
|
git config --global --add safe.directory '*'
|
|
|
|
- name: Determine build type
|
|
id: build-type
|
|
shell: bash
|
|
run: |
|
|
if [ "${CHATTERINO_BUILD_TYPE}" = "auto" ]; then
|
|
if git describe --exact-match --match 'v*'; then
|
|
echo "Auto - found release tag format"
|
|
echo "NIGHTLY_BUILD=Off" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Auto - did not find release tag format"
|
|
echo "NIGHTLY_BUILD=On" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
elif [ "${CHATTERINO_BUILD_TYPE}" = "nightly" ]; then
|
|
echo "Override to nightly"
|
|
echo "NIGHTLY_BUILD=On" >> "$GITHUB_OUTPUT"
|
|
elif [ "${CHATTERINO_BUILD_TYPE}" = "stable" ]; then
|
|
echo "Override to stable"
|
|
echo "NIGHTLY_BUILD=Off" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Error: no build type variable set"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Build
|
|
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" \
|
|
-DCMAKE_PREFIX_PATH="$Qt6_DIR/lib/cmake" \
|
|
-DCHATTERINO_STATIC_QT_BUILD=On \
|
|
-DCHATTERINO_NIGHTLY_BUILD=${{ steps.build-type.outputs.NIGHTLY_BUILD }} \
|
|
-DFORCE_JSON_GENERATION=Off \
|
|
-DCHATTERINO_PLUGINS=${{ case(matrix.plugins, 'On', 'Off') }} \
|
|
..
|
|
make -j"$(nproc)"
|
|
|
|
- name: Package - .deb (Ubuntu)
|
|
if: matrix.build-deb
|
|
run: |
|
|
cd build
|
|
sh ./../.CI/CreateUbuntuDeb.sh
|
|
|
|
- name: Upload artifact - .deb (Ubuntu)
|
|
if: matrix.build-deb
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: Chatterino-${{ matrix.os }}.deb
|
|
path: build/Chatterino-${{ matrix.os }}-x86_64.deb
|
|
|
|
build:
|
|
name: "Build ${{ matrix.os }}, Qt ${{ matrix.qt-version }} (LTO:${{ matrix.force-lto }}, crashpad:${{ case(matrix.skip-crashpad, 'off', 'on') }})"
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
# macOS
|
|
- os: macos-26
|
|
qt-version: 6.11.1
|
|
force-lto: false
|
|
skip-artifact: false
|
|
skip-crashpad: false
|
|
# Windows
|
|
- os: windows-latest
|
|
qt-version: 6.8.3
|
|
force-lto: false
|
|
skip-artifact: false
|
|
skip-crashpad: false
|
|
|
|
fail-fast: false
|
|
env:
|
|
C2_ENABLE_LTO: ${{ matrix.force-lto }}
|
|
C2_ENABLE_CRASHPAD: ${{ matrix.skip-crashpad == false }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
submodules: recursive
|
|
fetch-depth: 0 # allows for tags access
|
|
persist-credentials: false
|
|
|
|
- name: Determine build type
|
|
id: build-type
|
|
shell: bash
|
|
run: |
|
|
if [ "${CHATTERINO_BUILD_TYPE}" = "auto" ]; then
|
|
if git describe --exact-match --match 'v*'; then
|
|
echo "Auto - found release tag format"
|
|
echo "NIGHTLY_BUILD=Off" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Auto - did not find release tag format"
|
|
echo "NIGHTLY_BUILD=On" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
elif [ "${CHATTERINO_BUILD_TYPE}" = "nightly" ]; then
|
|
echo "Override to nightly"
|
|
echo "NIGHTLY_BUILD=On" >> "$GITHUB_OUTPUT"
|
|
elif [ "${CHATTERINO_BUILD_TYPE}" = "stable" ]; then
|
|
echo "Override to stable"
|
|
echo "NIGHTLY_BUILD=Off" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Error: no build type variable set"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Install Qt6
|
|
if: startsWith(matrix.qt-version, '6.')
|
|
uses: jurplel/install-qt-action@48d3ad6db93f3627c8ee7a0454bc6f3744f7e730 # v4.3.1
|
|
with:
|
|
cache: true
|
|
cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2
|
|
modules: qtimageformats
|
|
version: ${{ matrix.qt-version }}
|
|
|
|
# WINDOWS
|
|
- name: Enable Developer Command Prompt (Windows)
|
|
if: startsWith(matrix.os, 'windows')
|
|
uses: Chatterino/msvc-dev-cmd@24444121cb2805a7adbd23d0f4455d0916af896b # v2.0.7
|
|
|
|
- name: Setup sccache (Windows)
|
|
# sccache v0.7.4
|
|
uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
|
|
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@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
with:
|
|
key: ${{ runner.os }}-conan-user-${{ hashFiles('**/conanfile.py') }}-QT6
|
|
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="True"
|
|
shell: powershell
|
|
|
|
- name: Build (Windows)
|
|
if: startsWith(matrix.os, 'windows')
|
|
shell: pwsh
|
|
run: |
|
|
cd build
|
|
cmake `
|
|
-G"NMake Makefiles" `
|
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
|
|
-DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" `
|
|
-DUSE_PRECOMPILED_HEADERS=ON `
|
|
-DBUILD_WITH_CRASHPAD="$Env:C2_ENABLE_CRASHPAD" `
|
|
-DCHATTERINO_LTO="$Env:C2_ENABLE_LTO" `
|
|
-DCHATTERINO_NIGHTLY_BUILD="${{ steps.build-type.outputs.NIGHTLY_BUILD }}" `
|
|
-DFORCE_JSON_GENERATION=Off `
|
|
-DCHATTERINO_SPELLCHECK=On `
|
|
..
|
|
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 chatterino-crash-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: Prepare build dir (windows)
|
|
if: startsWith(matrix.os, 'windows')
|
|
run: |
|
|
cd build
|
|
windeployqt bin/chatterino.exe --release --no-compiler-runtime --no-translations --no-opengl-sw --force-openssl --dir Chatterino2/
|
|
cp bin/chatterino.exe Chatterino2/
|
|
..\.CI\deploy-crt.ps1 Chatterino2
|
|
|
|
- name: Package (windows)
|
|
if: startsWith(matrix.os, 'windows')
|
|
working-directory: build
|
|
run: |
|
|
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@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
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@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
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
|
|
|
|
# MACOS
|
|
- name: Install dependencies (MacOS)
|
|
if: startsWith(matrix.os, 'macos')
|
|
run: |
|
|
# brew install openssl rapidjson p7zip create-dmg cmake tree boost hunspell
|
|
brew install openssl rapidjson p7zip create-dmg tree boost hunspell
|
|
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" \
|
|
-DFORCE_JSON_GENERATION=Off \
|
|
-DCHATTERINO_NIGHTLY_BUILD=${{ steps.build-type.outputs.NIGHTLY_BUILD }} \
|
|
-DCHATTERINO_SPELLCHECK=On \
|
|
..
|
|
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@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: chatterino-macos-Qt-${{ matrix.qt-version }}.dmg
|
|
path: build/chatterino-macos-Qt-${{ matrix.qt-version }}.dmg
|
|
|
|
create-release:
|
|
needs: [build-ubuntu-docker, build]
|
|
runs-on: ubuntu-latest
|
|
if: (github.event_name == 'push' && github.ref == 'refs/heads/master')
|
|
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
fetch-depth: 0 # allows for tags access
|
|
persist-credentials: true # Required to update the nightly-build tag.
|
|
|
|
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
name: Download artifacts
|
|
with:
|
|
path: release-artifacts/
|
|
merge-multiple: true
|
|
|
|
- name: Copy flatpakref
|
|
run: |
|
|
cp .CI/chatterino-nightly.flatpakref release-artifacts/
|
|
shell: bash
|
|
|
|
- name: Remove macOS artifacts
|
|
run: |
|
|
rm -f release-artifacts/*macos*.dmg
|
|
shell: bash
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Format changes
|
|
id: format-changes
|
|
run: |
|
|
delimiter=$(openssl rand -hex 32)
|
|
{
|
|
echo "changelog<<$delimiter"
|
|
python3 ./.CI/format-recent-changes.py
|
|
echo $delimiter
|
|
} >> "$GITHUB_OUTPUT"
|
|
shell: bash
|
|
|
|
- name: Create release
|
|
uses: ncipollo/release-action@339a81892b84b4eeb0f6e744e4574d79d0d9b8dd # v1.21.0
|
|
with:
|
|
replacesArtifacts: true
|
|
allowUpdates: true
|
|
artifactErrorsFailBuild: true
|
|
artifacts: "release-artifacts/*"
|
|
body: ${{ steps.format-changes.outputs.changelog }}
|
|
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
|