Skip to content

Build qmlls

Build qmlls #22

Workflow file for this run

name: Build qmlls
on:
# release nightly on schedule
schedule:
- cron: '0 2 * * 1,3,5'
# also release nightly on manual trigger
workflow_dispatch:
# release "real" release when a qmlls tag is pushed to dev
push:
branches:
- 'dev'
tags:
- 'qmlls-*'
defaults:
run:
shell: bash
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- name: ubuntu
os: ubuntu-latest
deps: libgl-dev libglu-dev 'libxcb*-dev' libx11-xcb-dev libxkbcommon-x11-dev libb2-dev libdouble-conversion-dev
tools: ccache
install_cmd: sudo apt-get -y install
configure_flags: -xcb
- name: macos
os: macos-latest
deps:
tools: ccache
install_cmd: HOMEBREW_NO_INSTALL_CLEANUP=1 brew install
- name: windows
os: windows-latest
install_cmd: choco install
install_cmd_postfix: --yes --no-progress
tools: ccache
configure_flags: -no-feature-sql-psql -no-feature-sql-mysql -no-feature-sql-odbc
runs-on: ${{ matrix.os }}
steps:
- uses: lukka/get-cmake@latest
- name: prepare Linux
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 100
- name: prepare macOS
if: runner.os == 'macOS'
run: echo noop
- name: prepare Windows
if: runner.os == 'Windows'
shell: cmd
run: |
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
set >> "%GITHUB_ENV%"
- uses: actions/checkout@v4
with:
path: source
- name: restore ccache
uses: actions/cache@v4
with:
path: ${{ runner.temp }}/ccache
key: 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: initialize subrepositories
working-directory: source
run: ./init-repository --module-subset=qtdeclarative --mirror="https://code.qt.io/qt/"
- name: set qtdeclarative to dev and set dependencies via dependencies.yaml
working-directory: source
run: cmake -DSYNC_TO_MODULE="qtdeclarative" -DSYNC_TO_BRANCH="dev" -P cmake/QtSynchronizeRepo.cmake
- name: configure and build
run: |
mkdir build
cd build
../source/configure -force-debug-info -ccache -no-pch -release -static \
-force-bundled-libs -submodules qtdeclarative -nomake tests -nomake examples \
-prefix '${{ runner.temp }}'/install_dir ${{ matrix.configure_flags }}
ninja qmlls
- name: Get current SHA
id: vars
working-directory: source/qtdeclarative
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Create info file
run: |
echo -e "commit: ${{ steps.vars.outputs.sha_short }}\nbuild: $(date +"%Y-%m-%dT%H:%M:%SZ")" \
> info.txt
# workaround because -separate-debug-info is not supported in static builds
# note: msvc on windows separates the debug info, no need to strip by hand
- name: Stripping qmlls binary on linux
if: matrix.name == 'ubuntu'
run: |
objcopy --only-keep-debug ./build/qtbase/bin/qmlls ./build/qtbase/bin/qmlls.dbg
strip ./build/qtbase/bin/qmlls
objcopy --add-gnu-debuglink=./build/qtbase/bin/qmlls.dbg ./build/qtbase/bin/qmlls
- name: Stripping qmlls binary on mac
if: matrix.name == 'macos'
run: |
dsymutil ./build/qtbase/bin/qmlls -o ./build/qtbase/bin/qmlls.dSYM
strip ./build/qtbase/bin/qmlls
- name: Zip build files in archive
run: 7z a qmlls-${{ matrix.name }}-${{ steps.vars.outputs.sha_short }}.7z ./build/qtbase/bin/qmlls* info.txt
- name: Upload archive
uses: actions/upload-artifact@v4
with:
path: qmlls-${{ matrix.name }}-${{ steps.vars.outputs.sha_short }}.7z
name: qmlls-${{ matrix.name }}-${{ steps.vars.outputs.sha_short }}.7z
release:
permissions:
contents: write
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
with:
repository: qt/qtdeclarative
path: source
- name: Get current SHA
id: vars
working-directory: source
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Download artifacts
id: downloaded_artifacts
uses: actions/download-artifact@v4
with:
path: release
- name: Create nightly release
if: ${{ ! contains(github.ref, 'tags/qmlls-') }}
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: qmlls-nightly-${{ steps.vars.outputs.sha_short }}
draft: false
prerelease: true
files: release/*/*.7z
- name: Create release
if: ${{ contains(github.ref, 'tags/qmlls-') && !contains(github.ref, 'nightly') }}
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# note: use default tag_name
draft: true
prerelease: false
files: release/*/*.7z