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