From 9998aa8a588b78ab682d1367e38a3c5147c9018e Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Tue, 23 Jun 2020 23:22:40 +0200 Subject: [PATCH] added github workflow for QtCreator 4.13 (7) * simplified and fixed release upload --- .github/workflows/build_cmake.yml | 1007 +++++++++++++---------------- .github/workflows/build_qbs.yml | 99 +++ 2 files changed, 533 insertions(+), 573 deletions(-) create mode 100644 .github/workflows/build_qbs.yml diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml index 57826d6d91f..d8d01eaa2f7 100644 --- a/.github/workflows/build_cmake.yml +++ b/.github/workflows/build_cmake.yml @@ -20,610 +20,471 @@ jobs: fail-fast: false matrix: config: - - { + - { name: "Windows Latest MSVC", artifact: "Windows-MSVC", - os: windows-latest, + os: windows-latest, cc: "cl", cxx: "cl", - environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", + environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", is_msvc: true - } - - { + } + - { name: "Windows Latest MinGW", artifact: "Windows-MinGW", - os: windows-latest, + os: windows-latest, cc: "gcc", cxx: "g++", is_msvc: false - } - - { + } + - { name: "Ubuntu Latest GCC", artifact: "Linux", - os: ubuntu-latest, + os: ubuntu-latest, cc: "gcc", cxx: "g++" - } - - { + } + - { name: "macOS Latest Clang", artifact: "macOS", - os: macos-latest, + os: macos-latest, cc: "clang", cxx: "clang++" - } + } steps: - - uses: actions/checkout@v2 - - name: Checkout submodules - run: | - git submodule set-url -- perfparser https://code.qt.io/qt-creator/perfparser.git - git submodule update --init src/plugins/help/qlitehtml/litehtml - git submodule update --init src/tools/perfparser - - - name: Download Ninja and CMake - id: cmake_and_ninja - shell: cmake -P {0} - run: | - set(cmake_version "$ENV{CMAKE_VERSION}") - set(ninja_version "$ENV{NINJA_VERSION}") - - if ("${{ runner.os }}" STREQUAL "Windows") - set(ninja_suffix "win.zip") - set(cmake_suffix "win64-x64.zip") - set(cmake_dir "cmake-${cmake_version}-win64-x64/bin") - elseif ("${{ runner.os }}" STREQUAL "Linux") - set(ninja_suffix "linux.zip") - set(cmake_suffix "Linux-x86_64.tar.gz") - set(cmake_dir "cmake-${cmake_version}-Linux-x86_64/bin") - elseif ("${{ runner.os }}" STREQUAL "macOS") - set(ninja_suffix "mac.zip") - set(cmake_suffix "Darwin-x86_64.tar.gz") - set(cmake_dir "cmake-${cmake_version}-Darwin-x86_64/CMake.app/Contents/bin") - endif() - - set(ninja_url "https://github.com/ninja-build/ninja/releases/download/v${ninja_version}/ninja-${ninja_suffix}") - file(DOWNLOAD "${ninja_url}" ./ninja.zip SHOW_PROGRESS) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ninja.zip) - - set(cmake_url "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/cmake-${cmake_version}-${cmake_suffix}") - file(DOWNLOAD "${cmake_url}" ./cmake.zip SHOW_PROGRESS) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./cmake.zip) - - # Save the path for other steps - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir) - message("::set-output name=cmake_dir::${cmake_dir}") - - if (NOT "${{ runner.os }}" STREQUAL "Windows") - execute_process( - COMMAND chmod +x ninja - COMMAND chmod +x ${cmake_dir}/cmake - ) - endif() + - uses: actions/checkout@v2 + - name: Checkout submodules + run: | + git submodule set-url -- perfparser https://code.qt.io/qt-creator/perfparser.git + git submodule update --init src/plugins/help/qlitehtml/litehtml + git submodule update --init src/tools/perfparser + + - name: Download Ninja and CMake + id: cmake_and_ninja + shell: cmake -P {0} + run: | + set(cmake_version "$ENV{CMAKE_VERSION}") + set(ninja_version "$ENV{NINJA_VERSION}") + + if ("${{ runner.os }}" STREQUAL "Windows") + set(ninja_suffix "win.zip") + set(cmake_suffix "win64-x64.zip") + set(cmake_dir "cmake-${cmake_version}-win64-x64/bin") + elseif ("${{ runner.os }}" STREQUAL "Linux") + set(ninja_suffix "linux.zip") + set(cmake_suffix "Linux-x86_64.tar.gz") + set(cmake_dir "cmake-${cmake_version}-Linux-x86_64/bin") + elseif ("${{ runner.os }}" STREQUAL "macOS") + set(ninja_suffix "mac.zip") + set(cmake_suffix "Darwin-x86_64.tar.gz") + set(cmake_dir "cmake-${cmake_version}-Darwin-x86_64/CMake.app/Contents/bin") + endif() - - name: Download Qt - id: qt - shell: cmake -P {0} - run: | - set(qt_version "$ENV{QT_VERSION}") + set(ninja_url "https://github.com/ninja-build/ninja/releases/download/v${ninja_version}/ninja-${ninja_suffix}") + file(DOWNLOAD "${ninja_url}" ./ninja.zip SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ninja.zip) - string(REPLACE "." "" qt_version_dotless "${qt_version}") - if ("${{ runner.os }}" STREQUAL "Windows") - set(url_os "windows_x86") - if ("x${{ matrix.config.environment_script }}" STREQUAL "x") - set(qt_package_arch_suffix "win64_mingw81") - set(qt_dir_prefix "${qt_version}/mingw81_64") - set(qt_package_suffix "-Windows-Windows_10-Mingw-Windows-Windows_10-X86_64") - elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars64.bat") - set(qt_package_arch_suffix "win64_msvc2019_64") - set(qt_dir_prefix "${qt_version}/msvc2019_64") - set(qt_package_suffix "-Windows-Windows_10-MSVC2019-Windows-Windows_10-X86_64") - elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat") - set(qt_package_arch_suffix "win32_msvc2019") - set(qt_dir_prefix "${qt_version}/msvc2019") - set(qt_package_suffix "-Windows-Windows_10-MSVC2019-Windows-Windows_10-X86") + set(cmake_url "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/cmake-${cmake_version}-${cmake_suffix}") + file(DOWNLOAD "${cmake_url}" ./cmake.zip SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./cmake.zip) + + # Save the path for other steps + file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir) + message("::set-output name=cmake_dir::${cmake_dir}") + + if (NOT "${{ runner.os }}" STREQUAL "Windows") + execute_process( + COMMAND chmod +x ninja + COMMAND chmod +x ${cmake_dir}/cmake + ) + endif() + + - name: Download Qt + id: qt + shell: cmake -P {0} + run: | + set(qt_version "$ENV{QT_VERSION}") + + string(REPLACE "." "" qt_version_dotless "${qt_version}") + if ("${{ runner.os }}" STREQUAL "Windows") + set(url_os "windows_x86") + if ("x${{ matrix.config.environment_script }}" STREQUAL "x") + set(qt_package_arch_suffix "win64_mingw81") + set(qt_dir_prefix "${qt_version}/mingw81_64") + set(qt_package_suffix "-Windows-Windows_10-Mingw-Windows-Windows_10-X86_64") + elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars64.bat") + set(qt_package_arch_suffix "win64_msvc2019_64") + set(qt_dir_prefix "${qt_version}/msvc2019_64") + set(qt_package_suffix "-Windows-Windows_10-MSVC2019-Windows-Windows_10-X86_64") + elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat") + set(qt_package_arch_suffix "win32_msvc2019") + set(qt_dir_prefix "${qt_version}/msvc2019") + set(qt_package_suffix "-Windows-Windows_10-MSVC2019-Windows-Windows_10-X86") + endif() + elseif ("${{ runner.os }}" STREQUAL "Linux") + set(url_os "linux_x64") + set(qt_package_arch_suffix "gcc_64") + set(qt_dir_prefix "${qt_version}/gcc_64") + set(qt_package_suffix "-Linux-RHEL_7_6-GCC-Linux-RHEL_7_6-X86_64") + elseif ("${{ runner.os }}" STREQUAL "macOS") + set(url_os "mac_x64") + set(qt_package_arch_suffix "clang_64") + set(qt_dir_prefix "${qt_version}/clang_64") + set(qt_package_suffix "-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64") + endif() + + set(qt_base_url "https://download.qt.io/online/qtsdkrepository/${url_os}/desktop/qt5_${qt_version_dotless}") + file(DOWNLOAD "${qt_base_url}/Updates.xml" ./Updates.xml SHOW_PROGRESS) + + file(READ ./Updates.xml updates_xml) + string(REGEX MATCH "qt.qt5.*([0-9+-.]+)" updates_xml_output "${updates_xml}") + set(qt_package_version ${CMAKE_MATCH_1}) + + file(MAKE_DIRECTORY qt5) + + # Save the path for other steps + file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qt5/${qt_dir_prefix}" qt_dir) + message("::set-output name=qt_dir::${qt_dir}") + + function(downloadAndExtract url archive) + message("Downloading ${url}") + file(DOWNLOAD "${url}" ./${archive} SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${archive} WORKING_DIRECTORY qt5) + endfunction() + + foreach(package qtbase qtdeclarative qttools qtsvg qtserialport qtquickcontrols qtquickcontrols2 qtgraphicaleffects qtlocation qtimageformats qttranslations) + downloadAndExtract( + "${qt_base_url}/qt.qt5.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" + ${package}.7z + ) + endforeach() + + foreach(package qtquicktimeline qtquick3d qtscript) + downloadAndExtract( + "${qt_base_url}/qt.qt5.${qt_version_dotless}.${package}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" + ${package}.7z + ) + endforeach() + + # uic depends on libicu56.so + if ("${{ runner.os }}" STREQUAL "Linux") + downloadAndExtract( + "${qt_base_url}/qt.qt5.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}icu-linux-Rhel7.2-x64.7z" + icu.7z + ) endif() - elseif ("${{ runner.os }}" STREQUAL "Linux") - set(url_os "linux_x64") - set(qt_package_arch_suffix "gcc_64") - set(qt_dir_prefix "${qt_version}/gcc_64") - set(qt_package_suffix "-Linux-RHEL_7_6-GCC-Linux-RHEL_7_6-X86_64") - elseif ("${{ runner.os }}" STREQUAL "macOS") - set(url_os "mac_x64") - set(qt_package_arch_suffix "clang_64") - set(qt_dir_prefix "${qt_version}/clang_64") - set(qt_package_suffix "-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64") - endif() - - set(qt_base_url "https://download.qt.io/online/qtsdkrepository/${url_os}/desktop/qt5_${qt_version_dotless}") - file(DOWNLOAD "${qt_base_url}/Updates.xml" ./Updates.xml SHOW_PROGRESS) - - file(READ ./Updates.xml updates_xml) - string(REGEX MATCH "qt.qt5.*([0-9+-.]+)" updates_xml_output "${updates_xml}") - set(qt_package_version ${CMAKE_MATCH_1}) - - file(MAKE_DIRECTORY qt5) - - # Save the path for other steps - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qt5/${qt_dir_prefix}" qt_dir) - message("::set-output name=qt_dir::${qt_dir}") - - function(downloadAndExtract url archive) + + file(READ "qt5/${qt_dir_prefix}/mkspecs/qconfig.pri" qtconfig) + string(REPLACE "Enterprise" "OpenSource" qtconfig "${qtconfig}") + string(REPLACE "licheck.exe" "" qtconfig "${qtconfig}") + string(REPLACE "licheck64" "" qtconfig "${qtconfig}") + string(REPLACE "licheck_mac" "" qtconfig "${qtconfig}") + file(WRITE "qt5/${qt_dir_prefix}/mkspecs/qconfig.pri" "${qtconfig}") + + if ("${{ runner.os }}" STREQUAL "Windows") + # deploy "system" runtimes into Qt, so they get deployed as well + if ("x${{ matrix.config.environment_script }}" STREQUAL "x") + # deploy MinGW + foreach(file libwinpthread-1.dll libstdc++-6.dll libgcc_s_seh-1.dll) + file(INSTALL "C:/ProgramData/chocolatey/lib/mingw/tools/install/mingw64/bin/${file}" + DESTINATION "qt5/${qt_dir_prefix}/bin" + USE_SOURCE_PERMISSIONS) + endforeach() + else() + # deploy MSVC + foreach(file vcruntime140.dll concrt140.dll msvcp140_1.dll msvcp140_2.dll + msvcp140_codecvt_ids.dll vcruntime140_1.dll msvcp140.dll) + file(INSTALL "C:/Windows/System32/${file}" + DESTINATION "qt5/${qt_dir_prefix}/bin") + endforeach() + endif() + endif() + + - name: Download OpenSSL + shell: cmake -P {0} + run: | + if ("${{ runner.os }}" STREQUAL "Windows") + set(url_os "windows_x86") + set(openssl_localdir "Tools/OpenSSL/Win_x64/bin") + set(openssl_dest_dir "${{ steps.qt.outputs.qt_dir }}/bin") + set(shared_suffix ".dll") + elseif ("${{ runner.os }}" STREQUAL "Linux") + set(url_os "linux_x64") + set(openssl_localdir "Tools/OpenSSL/binary/lib") + set(openssl_dest_dir "${{ steps.qt.outputs.qt_dir }}/lib/Qt/lib") + set(shared_suffix ".so*") + elseif ("${{ runner.os }}" STREQUAL "macOS") + # Not needed on macOS + return() + endif() + + set(openssl_base_url "https://download.qt.io/online/qtsdkrepository/${url_os}/desktop/tools_openssl_x64") + file(DOWNLOAD "${openssl_base_url}/Updates.xml" ./Updates.xml SHOW_PROGRESS) + + file(READ ./Updates.xml updates_xml) + string(REGEX MATCH + "(qt.tools.openssl.*).*([0-9+-.]+).*(.*)" updates_xml_output "${updates_xml}") + + set(openssl_directory ${CMAKE_MATCH_1}) + set(openssl_version ${CMAKE_MATCH_2}) + set(openssl_archive ${CMAKE_MATCH_3}) + + set(url "${openssl_base_url}/${openssl_directory}/${openssl_version}${openssl_archive}") + + file(MAKE_DIRECTORY openssl) + file(MAKE_DIRECTORY ${openssl_dest_dir}) + message("Downloading ${url}") - file(DOWNLOAD "${url}" ./${archive} SHOW_PROGRESS) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${archive} WORKING_DIRECTORY qt5) - endfunction() - - foreach(package qtbase qtdeclarative qttools qtsvg qtserialport qtquickcontrols qtquickcontrols2 qtgraphicaleffects qtlocation qtimageformats qttranslations) - downloadAndExtract( - "${qt_base_url}/qt.qt5.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" - ${package}.7z - ) - endforeach() + file(DOWNLOAD "${url}" ./openssl.7z SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../openssl.7z WORKING_DIRECTORY openssl) - foreach(package qtquicktimeline qtquick3d qtscript) - downloadAndExtract( - "${qt_base_url}/qt.qt5.${qt_version_dotless}.${package}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" - ${package}.7z - ) - endforeach() + file(GLOB openssl_shared_objects "openssl/${openssl_localdir}/*${shared_suffix}") + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy ${openssl_shared_objects} ${openssl_dest_dir}) + + - name: Download libclang + id: libclang + shell: cmake -P {0} + run: | + set(clang_version "$ENV{CLANG_VERSION}") + + if ("${{ runner.os }}" STREQUAL "Windows") + if ("x${{ matrix.config.environment_script }}" STREQUAL "x") + set(libclang "libclang-release_${clang_version}-based-windows-mingw_64.7z") + elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars64.bat") + set(libclang "libclang-release_${clang_version}-based-windows-vs2019_64.7z") + elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat") + set(libclang "libclang-release_${clang_version}-based-windows-vs2019_32.7z") + endif() + elseif ("${{ runner.os }}" STREQUAL "Linux") + set(libclang "libclang-release_${clang_version}-based-linux-Ubuntu18.04-gcc9.2-x86_64.7z") + elseif ("${{ runner.os }}" STREQUAL "macOS") + set(libclang "libclang-release_${clang_version}-based-mac.7z") + endif() - # uic depends on libicu56.so - if ("${{ runner.os }}" STREQUAL "Linux") - downloadAndExtract( - "${qt_base_url}/qt.qt5.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}icu-linux-Rhel7.2-x64.7z" - icu.7z - ) - endif() + set(libclang_url "https://download.qt.io/development_releases/prebuilt/libclang/${libclang}") + file(DOWNLOAD "${libclang_url}" ./libclang.7z SHOW_PROGRESS) - file(READ "qt5/${qt_dir_prefix}/mkspecs/qconfig.pri" qtconfig) - string(REPLACE "Enterprise" "OpenSource" qtconfig "${qtconfig}") - string(REPLACE "licheck.exe" "" qtconfig "${qtconfig}") - string(REPLACE "licheck64" "" qtconfig "${qtconfig}") - string(REPLACE "licheck_mac" "" qtconfig "${qtconfig}") - file(WRITE "qt5/${qt_dir_prefix}/mkspecs/qconfig.pri" "${qtconfig}") + # Comes with libclang inside the archive + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./libclang.7z) - if ("${{ runner.os }}" STREQUAL "Windows") - # deploy "system" runtimes into Qt, so they get deployed as well - if ("x${{ matrix.config.environment_script }}" STREQUAL "x") - # deploy MinGW - foreach(file libwinpthread-1.dll libstdc++-6.dll libgcc_s_seh-1.dll) - file(INSTALL "C:/ProgramData/chocolatey/lib/mingw/tools/install/mingw64/bin/${file}" - DESTINATION "qt5/${qt_dir_prefix}/bin" - USE_SOURCE_PERMISSIONS) - endforeach() - else() - # deploy MSVC - foreach(file vcruntime140.dll concrt140.dll msvcp140_1.dll msvcp140_2.dll - msvcp140_codecvt_ids.dll vcruntime140_1.dll msvcp140.dll) - file(INSTALL "C:/Windows/System32/${file}" - DESTINATION "qt5/${qt_dir_prefix}/bin") + # Save the path for other steps + file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/libclang" libclang_dir) + message("::set-output name=libclang_dir::${libclang_dir}") + + - name: Download elfutils + if: runner.os == 'Windows' && matrix.config.is_msvc || runner.os == 'Linux' + id: elfutils + shell: cmake -P {0} + run: | + set(elfutils_version "$ENV{ELFUTILS_VERSION}") + + if ("${{ runner.os }}" STREQUAL "Windows") + if ("${{ matrix.config.environment_script }}" MATCHES "vcvars64.bat") + set(elfutils "elfutils-release_${elfutils_version}qt-windows-x86_64.7z") + elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat") + set(elfutils "elfutils-release_${elfutils_version}qt-windows-i686.7z") + endif() + elseif ("${{ runner.os }}" STREQUAL "Linux") + set(elfutils "elfutils-release_${elfutils_version}qt-linux-x86_64.7z") + endif() + + set(elfutils_url "https://download.qt.io/development_releases/prebuilt/elfutils/${elfutils}") + file(DOWNLOAD "${elfutils_url}" ./elfutils.7z SHOW_PROGRESS) + file(MAKE_DIRECTORY elfutils) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../elfutils.7z WORKING_DIRECTORY elfutils) + + # Save the path for other steps + file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/elfutils" elfutils_dir) + message("::set-output name=elfutils_dir::${elfutils_dir}") + + - name: Download ccache + id: ccache + shell: cmake -P {0} + run: | + set(ccache_url "https://github.com/cristianadam/ccache/releases/download/v$ENV{CCACHE_VERSION}/${{ runner.os }}.tar.xz") + file(DOWNLOAD "${ccache_url}" ./ccache.tar.xz SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ccache.tar.xz) + + - name: Prepare ccache timestamp + id: ccache_cache_timestamp + shell: cmake -P {0} + run: | + string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) + message("::set-output name=timestamp::${current_date}") + + - name: ccache cache files + uses: actions/cache@v1.1.0 + with: + path: .ccache + key: ${{ matrix.config.name }}-ccache-${{ steps.ccache_cache_timestamp.outputs.timestamp }} + restore-keys: | + ${{ matrix.config.name }}-ccache- + + - name: Install system libs + shell: cmake -P {0} + run: | + if ("${{ runner.os }}" STREQUAL "Linux") + execute_process( + COMMAND sudo apt update + ) + execute_process( + COMMAND sudo apt install libgl1-mesa-dev + RESULT_VARIABLE result + ) + if (NOT result EQUAL 0) + message(FATAL_ERROR "Failed to install dependencies") + endif() + endif() + + - name: Download Googletest + id: googletest + shell: cmake -P {0} + run: | + # Googletest should be a submodule + file(DOWNLOAD "https://github.com/google/googletest/archive/release-$ENV{GOOGLETEST_VERSION}.tar.gz" ./googletest.tar.gz SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf googletest.tar.gz) + file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/googletest-release-$ENV{GOOGLETEST_VERSION}" googletest_dir) + message("::set-output name=googletest_dir::${googletest_dir}") + + - name: Build + shell: cmake -P {0} + run: | + set(ENV{CC} ${{ matrix.config.cc }}) + set(ENV{CXX} ${{ matrix.config.cxx }}) + + if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") + execute_process( + COMMAND "${{ matrix.config.environment_script }}" && set + OUTPUT_FILE environment_script_output.txt + ) + file(STRINGS environment_script_output.txt output_lines) + foreach(line IN LISTS output_lines) + if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") + set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") + endif() endforeach() endif() - endif() - - - name: Download OpenSSL - shell: cmake -P {0} - run: | - if ("${{ runner.os }}" STREQUAL "Windows") - set(url_os "windows_x86") - set(openssl_localdir "Tools/OpenSSL/Win_x64/bin") - set(openssl_dest_dir "${{ steps.qt.outputs.qt_dir }}/bin") - set(shared_suffix ".dll") - elseif ("${{ runner.os }}" STREQUAL "Linux") - set(url_os "linux_x64") - set(openssl_localdir "Tools/OpenSSL/binary/lib") - set(openssl_dest_dir "${{ steps.qt.outputs.qt_dir }}/lib/Qt/lib") - set(shared_suffix ".so*") - elseif ("${{ runner.os }}" STREQUAL "macOS") - # Not needed on macOS - return() - endif() - - set(openssl_base_url "https://download.qt.io/online/qtsdkrepository/${url_os}/desktop/tools_openssl_x64") - file(DOWNLOAD "${openssl_base_url}/Updates.xml" ./Updates.xml SHOW_PROGRESS) - - file(READ ./Updates.xml updates_xml) - string(REGEX MATCH - "(qt.tools.openssl.*).*([0-9+-.]+).*(.*)" updates_xml_output "${updates_xml}") - - set(openssl_directory ${CMAKE_MATCH_1}) - set(openssl_version ${CMAKE_MATCH_2}) - set(openssl_archive ${CMAKE_MATCH_3}) - - set(url "${openssl_base_url}/${openssl_directory}/${openssl_version}${openssl_archive}") - - file(MAKE_DIRECTORY openssl) - file(MAKE_DIRECTORY ${openssl_dest_dir}) - - message("Downloading ${url}") - file(DOWNLOAD "${url}" ./openssl.7z SHOW_PROGRESS) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../openssl.7z WORKING_DIRECTORY openssl) - - file(GLOB openssl_shared_objects "openssl/${openssl_localdir}/*${shared_suffix}") - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy ${openssl_shared_objects} ${openssl_dest_dir}) - - - name: Download libclang - id: libclang - shell: cmake -P {0} - run: | - set(clang_version "$ENV{CLANG_VERSION}") - - if ("${{ runner.os }}" STREQUAL "Windows") + + set(path_separator ":") + if ("${{ runner.os }}" STREQUAL "Windows") + set(path_separator ";") + endif() + set(ENV{PATH} "${{ steps.cmake_and_ninja.outputs.cmake_dir }}${path_separator}$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") + + set(ENV{GOOGLETEST_DIR} "${{ steps.googletest.outputs.googletest_dir }}") + + set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") + + file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}" ccache_basedir) + set(ENV{CCACHE_BASEDIR} "${ccache_basedir}") + set(ENV{CCACHE_DIR} "${ccache_basedir}/.ccache") + set(ENV{CCACHE_SLOPPINESS} "pch_defines,time_macros") + set(ENV{CCACHE_COMPRESS} "true") + set(ENV{CCACHE_COMPRESSLEVEL} "6") + set(ENV{CCACHE_MAXSIZE} "400M") + if ("${{ matrix.config.cxx }}" STREQUAL "cl") + set(ENV{CCACHE_MAXSIZE} "600M") + endif() + + execute_process(COMMAND ccache -p) + execute_process(COMMAND ccache -z) + if ("x${{ matrix.config.environment_script }}" STREQUAL "x") - set(libclang "libclang-release_${clang_version}-based-windows-mingw_64.7z") - elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars64.bat") - set(libclang "libclang-release_${clang_version}-based-windows-vs2019_64.7z") - elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat") - set(libclang "libclang-release_${clang_version}-based-windows-vs2019_32.7z") + set(CDB_OPTION "--no-cdb") + else() + set(CDB_OPTION) endif() - elseif ("${{ runner.os }}" STREQUAL "Linux") - set(libclang "libclang-release_${clang_version}-based-linux-Ubuntu18.04-gcc9.2-x86_64.7z") - elseif ("${{ runner.os }}" STREQUAL "macOS") - set(libclang "libclang-release_${clang_version}-based-mac.7z") - endif() - - set(libclang_url "https://download.qt.io/development_releases/prebuilt/libclang/${libclang}") - file(DOWNLOAD "${libclang_url}" ./libclang.7z SHOW_PROGRESS) - - # Comes with libclang inside the archive - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./libclang.7z) - - # Save the path for other steps - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/libclang" libclang_dir) - message("::set-output name=libclang_dir::${libclang_dir}") - - - name: Download elfutils - if: runner.os == 'Windows' && matrix.config.is_msvc || runner.os == 'Linux' - id: elfutils - shell: cmake -P {0} - run: | - set(elfutils_version "$ENV{ELFUTILS_VERSION}") - - if ("${{ runner.os }}" STREQUAL "Windows") - if ("${{ matrix.config.environment_script }}" MATCHES "vcvars64.bat") - set(elfutils "elfutils-release_${elfutils_version}qt-windows-x86_64.7z") - elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat") - set(elfutils "elfutils-release_${elfutils_version}qt-windows-i686.7z") + + if (NOT "${{ steps.elfutils.outputs.elfutils_dir }}" STREQUAL "") + set(ELFUTILS_OPTION "--elfutils-path;${{ steps.elfutils.outputs.elfutils_dir }}") + else() + set(ELFUTILS_OPTION) endif() - elseif ("${{ runner.os }}" STREQUAL "Linux") - set(elfutils "elfutils-release_${elfutils_version}qt-linux-x86_64.7z") - endif() - - set(elfutils_url "https://download.qt.io/development_releases/prebuilt/elfutils/${elfutils}") - file(DOWNLOAD "${elfutils_url}" ./elfutils.7z SHOW_PROGRESS) - file(MAKE_DIRECTORY elfutils) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../elfutils.7z WORKING_DIRECTORY elfutils) - - # Save the path for other steps - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/elfutils" elfutils_dir) - message("::set-output name=elfutils_dir::${elfutils_dir}") - - - name: Download ccache - id: ccache - shell: cmake -P {0} - run: | - set(ccache_url "https://github.com/cristianadam/ccache/releases/download/v$ENV{CCACHE_VERSION}/${{ runner.os }}.tar.xz") - file(DOWNLOAD "${ccache_url}" ./ccache.tar.xz SHOW_PROGRESS) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ccache.tar.xz) - - - name: Prepare ccache timestamp - id: ccache_cache_timestamp - shell: cmake -P {0} - run: | - string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) - message("::set-output name=timestamp::${current_date}") - - - name: ccache cache files - uses: actions/cache@v1.1.0 - with: - path: .ccache - key: ${{ matrix.config.name }}-ccache-${{ steps.ccache_cache_timestamp.outputs.timestamp }} - restore-keys: | - ${{ matrix.config.name }}-ccache- - - - name: Install system libs - shell: cmake -P {0} - run: | - if ("${{ runner.os }}" STREQUAL "Linux") - execute_process( - COMMAND sudo apt update - ) + execute_process( - COMMAND sudo apt install libgl1-mesa-dev + COMMAND python + -u + scripts/build.py + --src . + --build build + --qt-path "${{ steps.qt.outputs.qt_dir }}" + --llvm-path "${{ steps.libclang.outputs.libclang_dir }}" + --with-tests + ${CDB_OPTION} + ${ELFUTILS_OPTION} + --add-config=-DCMAKE_C_COMPILER_LAUNCHER=ccache + --add-config=-DCMAKE_CXX_COMPILER_LAUNCHER=ccache + --add-config=-DIDE_REVISION_URL=https://github.com/$ENV{GITHUB_REPOSITORY}/commits/$ENV{GITHUB_SHA} + --zip-infix=-${{ matrix.config.artifact }}-${{ github.run_id }} RESULT_VARIABLE result + COMMAND_ECHO STDOUT ) if (NOT result EQUAL 0) - message(FATAL_ERROR "Failed to install dependencies") + message(FATAL_ERROR "Bad exit status") endif() - endif() - - - name: Download Googletest - id: googletest - shell: cmake -P {0} - run: | - # Googletest should be a submodule - file(DOWNLOAD "https://github.com/google/googletest/archive/release-$ENV{GOOGLETEST_VERSION}.tar.gz" ./googletest.tar.gz SHOW_PROGRESS) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf googletest.tar.gz) - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/googletest-release-$ENV{GOOGLETEST_VERSION}" googletest_dir) - message("::set-output name=googletest_dir::${googletest_dir}") - - - name: Build - shell: cmake -P {0} - run: | - set(ENV{CC} ${{ matrix.config.cc }}) - set(ENV{CXX} ${{ matrix.config.cxx }}) - - if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") + + execute_process(COMMAND ccache -s) + + - name: Run tests + shell: cmake -P {0} + run: | + include(ProcessorCount) + ProcessorCount(N) + + set(ENV{CTEST_OUTPUT_ON_FAILURE} "ON") + execute_process( - COMMAND "${{ matrix.config.environment_script }}" && set - OUTPUT_FILE environment_script_output.txt + COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/ctest -j ${N} + WORKING_DIRECTORY build/build + RESULT_VARIABLE result + OUTPUT_VARIABLE stdout + ERROR_VARIABLE stdout ) - file(STRINGS environment_script_output.txt output_lines) - foreach(line IN LISTS output_lines) - if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") - set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") - endif() - endforeach() - endif() - - set(path_separator ":") - if ("${{ runner.os }}" STREQUAL "Windows") - set(path_separator ";") - endif() - set(ENV{PATH} "${{ steps.cmake_and_ninja.outputs.cmake_dir }}${path_separator}$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") - - set(ENV{GOOGLETEST_DIR} "${{ steps.googletest.outputs.googletest_dir }}") - - set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") - - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}" ccache_basedir) - set(ENV{CCACHE_BASEDIR} "${ccache_basedir}") - set(ENV{CCACHE_DIR} "${ccache_basedir}/.ccache") - set(ENV{CCACHE_SLOPPINESS} "pch_defines,time_macros") - set(ENV{CCACHE_COMPRESS} "true") - set(ENV{CCACHE_COMPRESSLEVEL} "6") - set(ENV{CCACHE_MAXSIZE} "400M") - if ("${{ matrix.config.cxx }}" STREQUAL "cl") - set(ENV{CCACHE_MAXSIZE} "600M") - endif() - - execute_process(COMMAND ccache -p) - execute_process(COMMAND ccache -z) - - if ("x${{ matrix.config.environment_script }}" STREQUAL "x") - set(CDB_OPTION "--no-cdb") - else() - set(CDB_OPTION) - endif() - - if (NOT "${{ steps.elfutils.outputs.elfutils_dir }}" STREQUAL "") - set(ELFUTILS_OPTION "--elfutils-path;${{ steps.elfutils.outputs.elfutils_dir }}") - else() - set(ELFUTILS_OPTION) - endif() - - execute_process( - COMMAND python - -u - scripts/build.py - --src . - --build build - --qt-path "${{ steps.qt.outputs.qt_dir }}" - --llvm-path "${{ steps.libclang.outputs.libclang_dir }}" - --with-tests - ${CDB_OPTION} - ${ELFUTILS_OPTION} - --add-config=-DCMAKE_C_COMPILER_LAUNCHER=ccache - --add-config=-DCMAKE_CXX_COMPILER_LAUNCHER=ccache - --add-config=-DIDE_REVISION_URL=https://github.com/$ENV{GITHUB_REPOSITORY}/commits/$ENV{GITHUB_SHA} - --zip-infix=-${{ matrix.config.artifact }}-${{ github.run_id }} - RESULT_VARIABLE result - COMMAND_ECHO STDOUT - ) - if (NOT result EQUAL 0) - message(FATAL_ERROR "Bad exit status") - endif() - - execute_process(COMMAND ccache -s) - - - name: Run tests - shell: cmake -P {0} - run: | - include(ProcessorCount) - ProcessorCount(N) - - set(ENV{CTEST_OUTPUT_ON_FAILURE} "ON") - - execute_process( - COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/ctest -j ${N} - WORKING_DIRECTORY build/build - RESULT_VARIABLE result - OUTPUT_VARIABLE stdout - ERROR_VARIABLE stdout - ) - - message("${stdout}") - - if (NOT result EQUAL 0) - string(REGEX MATCH "[0-9]+% tests.*[0-9.]+ sec" pass_rate "${stdout}") - - # Do not fail on ctest failure - message("::warning::${pass_rate}") - endif() - - - name: Upload - uses: actions/upload-artifact@v1 - with: - path: build/qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - - - name: Upload Devel - uses: actions/upload-artifact@v1 - with: - path: build/qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z - name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z - - - name: Upload wininterrupt - if: runner.os == 'Windows' - uses: actions/upload-artifact@v1 - with: - path: build/wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - name: wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - - - name: Upload qtcreatorcdbext - if: runner.os == 'Windows' && matrix.config.is_msvc - uses: actions/upload-artifact@v1 - with: - path: build/qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - name: qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - - - name: Upload disk image - if: runner.os == 'macOS' - uses: actions/upload-artifact@v1 - with: - path: build/qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg - name: qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg - - release: - if: contains(github.ref, 'tags/v') - runs-on: ubuntu-latest - needs: build - steps: - - name: Create Release - id: create_release - uses: actions/create-release@v1.0.0 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} - draft: false - prerelease: false - - - name: Store Release url - run: | - echo "${{ steps.create_release.outputs.upload_url }}" > ./upload_url - - - uses: actions/upload-artifact@v1 - with: - path: ./upload_url - name: upload_url - - publish: - if: contains(github.ref, 'tags/v') - name: ${{ matrix.config.name }} - runs-on: ${{ matrix.config.os }} - strategy: - fail-fast: false - matrix: - config: - - { - name: "Windows Latest MSVC", artifact: "Windows-MSVC", - is_msvc: true, - os: ubuntu-latest - } - - { - name: "Windows Latest MinGW", artifact: "Windows-MinGW", - is_msvc: false, - os: ubuntu-latest - } - - { - name: "Ubuntu Latest GCC", artifact: "Linux", - os: ubuntu-latest - } - - { - name: "macOS Latest Clang", artifact: "macOS", - os: ubuntu-latest - } - needs: release + message("${stdout}") - steps: - - name: Download artifact - uses: actions/download-artifact@v1 - with: - name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - path: ./ - - - name: Download Devel artifact - uses: actions/download-artifact@v1 - with: - name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z - path: ./ - - - name: Download wininterrupt artifact - if: runner.os == 'Windows' - uses: actions/download-artifact@v1 - with: - name: wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - path: ./ - - - name: Download qtcreatorcdbext artifact - if: runner.os == 'Windows' && matrix.config.is_msvc - uses: actions/upload-artifact@v1 - with: - name: qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - path: ./ - - - name: Download disk image artifact - if: runner.os == 'macOS' - uses: actions/upload-artifact@v1 - with: - name: qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg - path: ./ - - - name: Download URL - uses: actions/download-artifact@v1 - with: - name: upload_url - path: ./ - - id: set_upload_url - run: | - upload_url=`cat ./upload_url` - echo ::set-output name=upload_url::$upload_url - - - name: Upload to Release - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.set_upload_url.outputs.upload_url }} - asset_path: ./qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - asset_name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - asset_content_type: application/x-gtar - - - name: Upload Devel to Release - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.set_upload_url.outputs.upload_url }} - asset_path: ./qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z - asset_name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z - asset_content_type: application/x-gtar - - - name: Upload wininterrupt to Release - if: runner.os == 'Windows' - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.set_upload_url.outputs.upload_url }} - asset_path: ./wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - asset_name: wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - asset_content_type: application/x-gtar - - - name: Upload qtcreatorcdbext to Release - if: runner.os == 'Windows' && matrix.config.is_msvc - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.set_upload_url.outputs.upload_url }} - asset_path: ./qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - asset_name: qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z - asset_content_type: application/x-gtar - - - name: Upload disk image to Release - if: runner.os == 'macOS' - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.set_upload_url.outputs.upload_url }} - asset_path: ./qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg - asset_name: qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg - asset_content_type: application/x-gtar + if (NOT result EQUAL 0) + string(REGEX MATCH "[0-9]+% tests.*[0-9.]+ sec" pass_rate "${stdout}") + + # Do not fail on ctest failure + message("::warning::${pass_rate}") + endif() + + - name: Upload + uses: actions/upload-artifact@v1 + with: + path: build/qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + + - name: Upload Devel + uses: actions/upload-artifact@v1 + with: + path: build/qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z + name: qtcreator-${{ matrix.config.artifact }}-${{ github.run_id }}_dev.7z + + - name: Upload wininterrupt + if: runner.os == 'Windows' + uses: actions/upload-artifact@v1 + with: + path: build/wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + name: wininterrupt-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + + - name: Upload qtcreatorcdbext + if: runner.os == 'Windows' && matrix.config.is_msvc + uses: actions/upload-artifact@v1 + with: + path: build/qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + name: qtcreatorcdbext-${{ matrix.config.artifact }}-${{ github.run_id }}.7z + + - name: Upload disk image + if: runner.os == 'macOS' + uses: actions/upload-artifact@v1 + with: + path: build/qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg + name: qt-creator-${{ matrix.config.artifact }}-${{ github.run_id }}.dmg + + - name: Upload binaries to release + if: contains(github.ref, 'tags/v') + uses: svenstaro/upload-release-action@v2 + with: + tag: ${{ github.ref }} + repo_token: ${{ secrets.GITHUB_TOKEN }} + release_name: Release ${{ github.ref }} + # body: ${{ github.event.head_commit.message }} + overwrite: true + file_glob: true + file: build/*.@(7z|dmg) diff --git a/.github/workflows/build_qbs.yml b/.github/workflows/build_qbs.yml new file mode 100644 index 00000000000..0fcabe5dfb0 --- /dev/null +++ b/.github/workflows/build_qbs.yml @@ -0,0 +1,99 @@ +name: Qbs Build Matrix + +on: [push, pull_request] + +jobs: + build: + name: ${{ matrix.config.name }} + runs-on: ${{ matrix.config.os }} + strategy: + fail-fast: false + matrix: + config: + - name: "Windows Latest MSVC" + artifact: "Windows-MSVC" + os: windows-latest + qt_version: "5.15.0" + qt_arch: "win64_msvc2019_64" + libclang_url: "https://download.qt.io/development_releases/prebuilt/libclang/libclang-release_100-based-windows-vs2019_64.7z" + + steps: + - name: Get LibClang + shell: cmake -P {0} + run: file(DOWNLOAD "${{ matrix.config.libclang_url }}" ./libclang.7z SHOW_PROGRESS) + + - run: 7z x libclang.7z + + - name: Cache Qt + id: cache-qt + uses: actions/cache@v1 + with: + path: ../Qt + key: QtCache-${{ matrix.config.qt_version }}-${{ matrix.config.qt_arch }} + + - name: Install Qt + uses: jurplel/install-qt-action@v2 + with: + version: "${{ matrix.config.qt_version }}" + arch: "${{ matrix.config.qt_arch }}" + modules: qtbase qtdeclarative qttools qtsvg qtserialport qtquickcontrols qtquickcontrols2 qtgraphicaleffects qtlocation qtimageformats qtquicktimeline qtquick3d qtscript + cached: ${{ steps.cache-qt.outputs.cache-hit }} + + - name: Install Qbs + run: choco install qbs + + - name: Setup Qbs + run: | + qbs setup-toolchains --detect + qbs setup-qt $Env:Qt5_DIR\bin\qmake.exe qt5-15 + qbs config qt5-15.baseProfile MSVC2019-x64 + qbs config defaultProfile qt5-15 + qbs config --list profiles + + - uses: actions/checkout@v2 + with: + path: Repo + - working-directory: Repo + run: | + git submodule update --init src/plugins/help/qlitehtml/litehtml + git submodule update --init src/shared/qbs + + - uses: actions/setup-python@v2 + with: + python-version: "3.x" + + - name: Build + working-directory: Repo + run: | + $Env:Path += ";${{ github.workspace }}\libclang\bin" + $Env:LLVM_INSTALL_DIR = "${{ github.workspace }}\libclang" + $Env:QTC_ENABLE_CLANG_LIBTOOLING = "true" + qbs build -d $ENV:TMP\build ` + qbs.installRoot:${{ github.workspace }}/install-root ` + config:Release qbs.defaultBuildVariant:release + + - name: Deploy + working-directory: ${{ github.workspace }}/install-root + run: | + python -u ${{ github.workspace }}/Repo/scripts/deployqt.py -i --llvm-path ${{ github.workspace }}/libclang ${{ github.workspace }}/install-root/bin/qtcreator.exe $Env:Qt5_DIR/bin/qmake.exe + + - name: Pack + working-directory: ${{ github.workspace }}/install-root + run: 7z a ../QtCreator-${{ matrix.config.qt_arch }}-${{ github.run_id }}.7z * -r + + - name: Upload + uses: actions/upload-artifact@v1 + with: + path: ${{ github.workspace }}/QtCreator-${{ matrix.config.qt_arch }}-${{ github.run_id }}.7z + name: QtCreator-${{ matrix.config.qt_arch }}-${{ github.run_id }}.7z + + - name: Upload binaries to release + if: contains(github.ref, 'tags/v') + uses: svenstaro/upload-release-action@v2 + with: + tag: ${{ github.ref }} + repo_token: ${{ secrets.GITHUB_TOKEN }} + release_name: Release ${{ github.ref }} + # body: ${{ github.event.head_commit.message }} + overwrite: true + file: ${{ github.workspace }}/QtCreator-${{ matrix.config.qt_arch }}-${{ github.run_id }}.7z