Revision control

Copy as Markdown

# Smoke builds
#
# The goal of this workflow is to finish as fast as possible. Therefore some
# choices have been made:
# - no optimizations
# - link to system-provided libraries instead of building
# bundled 3rd party libraries
# - ccache
name: Smoke build
on: push
env:
BRANCH: dev
BRANCH_REF: refs/heads/dev
defaults:
run:
shell: bash
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- name: ubuntu-24.04
os: ubuntu-24.04
# NOTE: libmd4c-dev's cmake config exports an md4c::md4c-html
# target whose .so is not actually in the package on this release
# (and libmd4c-html-dev does not exist to fill the gap either),
# so -system-libmd4c cannot be used; qt-bundled md4c instead.
deps: libgl-dev libglu-dev 'libxcb*-dev' libx11-xcb-dev libxkbcommon-x11-dev libpcre2-dev libz-dev libfreetype6-dev libpng-dev libjpeg-dev libsqlite3-dev libharfbuzz-dev libb2-dev libdouble-conversion-dev
tools: ninja-build ccache
install_cmd: sudo apt-get -y install
configure_flags: -xcb -system-sqlite -system-pcre -system-zlib -system-freetype -system-libpng -system-libjpeg -system-harfbuzz -system-libb2 -system-doubleconversion
- name: ubuntu-22.04
os: ubuntu-22.04
# NOTE: same broken md4c-html cmake export as the 24.04 leg
deps: libgl-dev libglu-dev 'libxcb*-dev' libx11-xcb-dev libxkbcommon-x11-dev libpcre2-dev libz-dev libfreetype6-dev libpng-dev libjpeg-dev libsqlite3-dev libharfbuzz-dev libb2-dev libdouble-conversion-dev
tools: ninja-build ccache
install_cmd: sudo apt-get -y install
configure_flags: -xcb -system-sqlite -system-pcre -system-zlib -system-freetype -system-libpng -system-libjpeg -system-harfbuzz -system-libb2 -system-doubleconversion
- name: macos-15
os: macos-15
deps: jpeg sqlite libpng pcre2 harfbuzz freetype libb2 double-conversion
tools: ninja ccache pkg-config
install_cmd: HOMEBREW_NO_INSTALL_CLEANUP=1 brew install
# Specifically on macOS pkg_config has to be manually turned on otherwise libraries under /usr/local are not detected.
configure_flags: -pkg-config -system-sqlite -system-pcre -system-zlib -system-freetype -system-libpng -system-libjpeg -system-harfbuzz -system-libb2 -system-doubleconversion
- name: windows-2022
os: windows-2022
install_cmd: choco install
install_cmd_postfix: --yes --no-progress
# Chocolatey sqlite package does not come with headers, so we build with bundled sqlite.
#deps: sqlite
# ccache installed separately later in order to force version
tools: ninja
# We don't want the system headers / libraries from Strawberry Perl while compiling with MinGW 8.1.0
configure_flags: -qt-sqlite -qt-pcre -qt-zlib -qt-freetype -qt-libpng -qt-libjpeg -qt-harfbuzz -no-feature-sql-psql -no-feature-sql-mysql -no-feature-sql-odbc
runs-on: ${{ matrix.os }}
steps:
- name: prepare Linux
if: runner.os == 'Linux'
run: sudo apt-get update
- name: prepare macOS
if: runner.os == 'macOS'
run: echo noop
- name: prepare Windows
if: runner.os == 'Windows'
# Header pthread.h from postgres is included and creates issues.
# Also library zlib.lib is linked instead of the system one.
run: |
rm -rf "C:/Program Files/PostgreSQL/"
choco install ccache --version 3.7.12 --yes --no-progress --not-silent --verbose --debug
- uses: actions/checkout@v4
with:
path: source
- name: restore ccache
id: ccache
uses: actions/cache@v4
with:
path: ${{ runner.temp }}/ccache
# "github.run_id" is unique, which causes the cache to always get
# saved at the end of a successful run.
key: ccache-${{ matrix.os }}-${{ github.ref }}-${{ github.run_id }}
# As the unique "key" above will never be found in the cache when the
# job starts, we need these broader "restore-keys" in order to match
# and restore the most recent cache.
restore-keys: |
ccache-${{ matrix.os }}-${{ github.ref }}-
ccache-${{ matrix.os }}-${{ env.BRANCH_REF }}-
ccache-${{ matrix.os }}-refs/heads/dev-
ccache-${{ matrix.os }}-
- name: install build dependencies
run: ${{ matrix.install_cmd }} ${{ matrix.deps }} ${{ matrix.install_cmd_postfix }}
if: matrix.deps != ''
- name: install compiler tools
run: ${{ matrix.install_cmd }} ${{ matrix.tools }} ${{ matrix.install_cmd_postfix }}
- name: configure ccache
run: |
ccache --set-config sloppiness=file_macro,time_macros
ccache --set-config cache_dir='${{ runner.temp }}'/ccache
ccache --set-config compression=true
ccache --set-config max_size=1G
- name: print versions and environment
run: |
gcc --version | head -1
cmake --version | head -1
echo Ninja `ninja --version`
{ ninja --help || true ; } 2>&1 | grep "run N jobs in parallel"
ccache --version | head -1
ccache --show-config || echo 'Old ccache version does not support --show-config'
echo Environment:
printenv
- name: make build directory
run: mkdir build
- name: put the MinGW runtime next to Qt's own build tools
if: runner.os == 'Windows'
# CMake picks C:\mingw64's gcc.exe to build everything, including the
# host tools this build runs on itself (syncqt.exe first). But Git for
# Windows' bash always puts its own bundled MSYS root, mingw64/bin
# included, at the front of PATH -- this is baked into how bash.exe
# initializes, not something --noprofile --norc or GITHUB_PATH can
# override -- and that copy ships the same-named runtime DLLs, built
# differently. The loader then finds Git's libstdc++-6.dll and
# libgcc_s_seh-1.dll first, not the ones syncqt.exe was actually linked
# against: STATUS_DLL_NOT_FOUND (0xC0000135) the first time it runs.
#
# A DLL alongside the .exe always wins over anything on PATH, so put
# the correct pair where every host tool this build produces will find
# them first, regardless of what bash does to PATH.
run: |
mkdir -p build/bin
cp /c/mingw64/bin/libgcc_s_seh-1.dll build/bin/
cp /c/mingw64/bin/libstdc++-6.dll build/bin/
# syncqt.exe's own dependencies (checked); libwinpthread-1.dll is a
# common companion for a posix-threaded MinGW build like this one and
# cheap to include ahead of some later host tool needing it too.
cp /c/mingw64/bin/libwinpthread-1.dll build/bin/ 2>/dev/null || true
- name: configure
working-directory: build
run: "../source/configure -opensource -confirm-license -ccache -no-pch
-debug -nomake tests -nomake examples
-prefix '${{ runner.temp }}'/install_dir
${{ matrix.configure_flags }}"
- name: ninja
working-directory: build
run: ninja
- name: various stats
# Print ccache utilization statistics, then reset them.
run: |
ccache -s
ccache -x 2>/dev/null || true
ccache -z
- name: print logfiles and other info in case of failure
if: ${{ failure() }}
run: |
echo ==== CMakeOutput.log ====
cat build/CMakeFiles/CMakeOutput.log
echo
echo ==== CMakeError.log ====
cat build/CMakeFiles/CMakeError.log
echo ==== CMakeCache.txt ====
cat build/CMakeCache.txt