qt5base-lts/.github/workflows/ninja-build.yml
Dimitrios Apostolou b9b03165a5 Introduce Github Actions workflow for Cmake Ninja build
Has minimal configuration in order to achieve fastest build times.
CCache is on, and PCH is off as it significantly reduces the Ccache hit ratio.
This Github Workflow has been measured to take around
+ 30min without any Ccache hits and 8min  for a rebuild, on Linux
+ 20min without any Ccache hits and 4min  for a rebuild, on macOS
+ 1h    without any Ccache hits and 20min for a rebuild, on Windows

The goal is to use such Cloud building and testing systems as "smoke runs",
providing quick feedback, much sooner than the canonical approval from
Coin. Additionally having many independent systems helps verify "flakiness"
issues. Another big advantage of such systems is their hackability, allowing
someone to tweak the build parameters by just editing a couple of YAML lines.

Change-Id: I7eca22f513516b9e61f333fb1fe89ab11ed2d1d1
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-06-20 23:53:11 +02:00

111 lines
3.7 KiB
YAML

# 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 bulding
# bundled 3rd party libraries
# - ccache
name: Smoke build
on: push
defaults:
run:
shell: bash
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- name: ubuntu-18.04
os: ubuntu-18.04
deps: libgl-dev libglu-dev libpcre2-dev libz-dev libfreetype6-dev libpng-dev libjpeg-dev libsqlite3-dev
tools: ninja-build ccache
install_cmd: sudo apt-get -y install
cmake_flags: -DFEATURE_system_sqlite=ON
- name: macos-10.15
os: macos-10.15
deps: jpeg sqlite
tools: ninja ccache
install_cmd: brew install
cmake_flags: -DFEATURE_system_sqlite=ON
- name: windows-2019
os: windows-2019
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
tools: ninja ccache
# Because of header conflicts we disable everything else besides sqlite driver
cmake_flags: -DFEATURE_system_sqlite=OFF -DFEATURE_sql_psql=OFF -DFEATURE_sql_mysql=OFF -DFEATURE_sql_odbc=OFF
runs-on: ${{ matrix.os }}
steps:
- name: prepare Linux
if: runner.os == 'Linux'
run: sudo apt-get update
- 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/"
- uses: actions/checkout@v2
- name: restore ccache
id: ccache
uses: actions/cache@v2
with:
path: ~/.ccache
# "github.run_id" is unique, which causes the cache to always get
# saved at the end of a successful run.
key: ccache-${{ runner.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-${{ runner.os }}-${{ github.ref }}-
ccache-${{ runner.os }}-refs/heads/dev-
ccache-${{ runner.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: 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
echo Environment:
printenv
- name: make build directory
run: mkdir build
- name: configure
working-directory: build
run: ../configure -cmake -opensource -confirm-license \
\ -debug -no-optimize-debug -nomake tests -nomake examples \
\ -no-harfbuzz -no-iconv \
\ -system-pcre -system-zlib -system-freetype -system-libpng -system-libjpeg \
\ -- -DQT_NO_MAKE_TESTS=ON -DQT_NO_MAKE_EXAMPLES=ON \
\ -DQT_USE_CCACHE=ON -DBUILD_WITH_PCH=OFF \
\ ${{ matrix.cmake_flags }}
- name: ninja
working-directory: build
run: ninja
- name: various stats
# Print ccache utilization statistics, then reset them.
run: ccache -s && ccache -z