summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitrios Apostolou <jimis@qt.io>2020-06-12 04:18:18 +0200
committerDimitrios Apostolou <jimis@qt.io>2020-06-20 23:53:11 +0200
commitb9b03165a55aad5c25eb24d8306cdfd367c2894e (patch)
tree170a840908cd4f838c29c01b336d27d343ad5af6
parent1363084028722171f374e52b6f66f9736470074f (diff)
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>
-rw-r--r--.github/workflows/ninja-build.yml110
1 files changed, 110 insertions, 0 deletions
diff --git a/.github/workflows/ninja-build.yml b/.github/workflows/ninja-build.yml
new file mode 100644
index 0000000000..214ec6db1e
--- /dev/null
+++ b/.github/workflows/ninja-build.yml
@@ -0,0 +1,110 @@
+# 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