aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-10-20 13:38:51 +0200
committerEike Ziller <eike.ziller@qt.io>2020-10-20 14:08:37 +0000
commit7326424349dc8df89d60644780e77a79cc0fd45f (patch)
treea75664e9cb255a75bdf759788b3f5e68395250dc
parent3a846d68b39044d010eb9a25fe975a20cc13bf5d (diff)
Update GitHub workflow
Provision cmake & ninja, use CMake for building and include various fixes from Qt Creator's main workflow. Build against 4.14 beta1 snapshots. Change-Id: I6eb111afb99aa567599f79f98f1ab4e5d816dac8 Reviewed-by: Cristian Adam <cristian.adam@qt.io>
-rw-r--r--.github/workflows/README.md2
-rw-r--r--.github/workflows/build_cmake.yml (renamed from .github/workflows/build_qmake.yml)253
2 files changed, 125 insertions, 130 deletions
diff --git a/.github/workflows/README.md b/.github/workflows/README.md
index 8481ed1..107410c 100644
--- a/.github/workflows/README.md
+++ b/.github/workflows/README.md
@@ -1,6 +1,6 @@
# GitHub Actions & Workflows
-The `build_qmake.yml` in this directory adds a [GitHub action][1] and workflow that builds
+The `build_cmake.yml` in this directory adds a [GitHub action][1] and workflow that builds
your plugin anytime you push commits to GitHub on Windows, Linux and macOS.
The build artifacts can be downloaded from GitHub and be installed into an existing Qt Creator
diff --git a/.github/workflows/build_qmake.yml b/.github/workflows/build_cmake.yml
index 1970d67..a116f23 100644
--- a/.github/workflows/build_qmake.yml
+++ b/.github/workflows/build_cmake.yml
@@ -3,11 +3,12 @@ name: QMake Build Matrix
on: [push]
env:
- QT_VERSION: 5.15.0
- QT_CREATOR_VERSION: 4.13.0
- QT_CREATOR_SNAPSHOT: NO
- PLUGIN_PRO: haskell.pro
PLUGIN_NAME: Haskell
+ QT_VERSION: 5.15.1
+ QT_CREATOR_VERSION: 4.14.0-beta1
+ QT_CREATOR_SNAPSHOT: latest
+ CMAKE_VERSION: 3.18.3
+ NINJA_VERSION: 1.10.1
jobs:
build:
@@ -17,83 +18,114 @@ jobs:
matrix:
config:
- {
- name: "Windows Latest x64", artifact: "Windows-x64.zip",
+ name: "Windows Latest MSVC", artifact: "Windows-x64",
os: windows-latest,
- environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
+ cc: "cl", cxx: "cl",
+ environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat",
}
- {
- name: "Windows Latest x86", artifact: "Windows-x86.zip",
- os: windows-latest,
- environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars32.bat"
- }
- - {
- name: "Linux Latest x64", artifact: "Linux-x64.zip",
- os: ubuntu-latest
+ name: "Ubuntu Latest GCC", artifact: "Linux-x64",
+ os: ubuntu-latest,
+ cc: "gcc", cxx: "g++"
}
- {
- name: "macOS Latest x64", artifact: "macOS-x64.zip",
- os: macos-latest
+ name: "macOS Latest Clang", artifact: "macOS-x64",
+ os: macos-latest,
+ cc: "clang", cxx: "clang++"
}
steps:
- uses: actions/checkout@v1
- - name: Installing system libs
+ - name: Download Ninja and CMake
+ 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)
+
+ # Add to PATH environment variable
+ file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir)
+ set(path_separator ":")
+ if ("${{ runner.os }}" STREQUAL "Windows")
+ set(path_separator ";")
+ endif()
+ file(APPEND "$ENV{GITHUB_PATH}" "$ENV{GITHUB_WORKSPACE}${path_separator}${cmake_dir}")
+
+ if (NOT "${{ runner.os }}" STREQUAL "Windows")
+ execute_process(
+ COMMAND chmod +x ninja
+ COMMAND chmod +x ${cmake_dir}/cmake
+ )
+ endif()
+
+ - 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
)
- endif()
- if ("${{ runner.os }}" STREQUAL "Windows")
- # get JOM
- file(DOWNLOAD "https://download.qt.io/official_releases/jom/jom.zip" ./jom.zip SHOW_PROGRESS)
- file(MAKE_DIRECTORY ./jom)
- execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../jom.zip WORKING_DIRECTORY ./jom)
+ if (NOT result EQUAL 0)
+ message(FATAL_ERROR "Failed to install dependencies")
+ endif()
endif()
- name: Download Qt
id: qt
shell: cmake -P {0}
run: |
- set(qt_version $ENV{QT_VERSION})
+ set(qt_version "$ENV{QT_VERSION}")
string(REPLACE "." "" qt_version_dotless "${qt_version}")
if ("${{ runner.os }}" STREQUAL "Windows")
set(url_os "windows_x86")
- if ("${{ matrix.config.environment_script }}" MATCHES "vcvars64.bat")
- set(qt_package_name "qt.qt5.${qt_version_dotless}.win64_msvc2019_64")
- set(qt_dir_prefix "${qt_version}/msvc2019_64")
- elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat")
- set(qt_package_name "qt.qt5.${qt_version_dotless}.win32_msvc2019")
- set(qt_dir_prefix "${qt_version}/msvc2019")
- else()
- endif()
+ 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 ("${{ runner.os }}" STREQUAL "Linux")
set(url_os "linux_x64")
- set(qt_package_name "qt.qt5.${qt_version_dotless}.gcc_64")
+ 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_name "qt.qt5.${qt_version_dotless}.clang_64")
+ 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 "<Name>${qt_package_name}.*<Version>([0-9+-.]+)</Version>.*<DownloadableArchives>qtbase([a-zA-Z0-9_-]+).7z"
- updates_xml_output "${updates_xml}")
- set(package_version ${CMAKE_MATCH_1})
- set(package_suffix ${CMAKE_MATCH_2})
- string(REPLACE "-debug-symbols" "" package_suffix "${package_suffix}")
-
- # Workaround for CMake's greedy regex
- if ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat")
- string(REPLACE "X86_64" "X86" package_suffix "${package_suffix}")
- endif()
+ string(REGEX MATCH "<Name>qt.qt5.*<Version>([0-9+-.]+)</Version>" updates_xml_output "${updates_xml}")
+ set(qt_package_version ${CMAKE_MATCH_1})
file(MAKE_DIRECTORY qt5)
@@ -101,20 +133,27 @@ jobs:
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qt5/${qt_dir_prefix}" qt_dir)
message("::set-output name=qt_dir::${qt_dir}")
- foreach(package qtbase qtdeclarative qttools qtsvg)
- file(DOWNLOAD
- "${qt_base_url}/${qt_package_name}/${package_version}${package}${package_suffix}.7z" ./${package}.7z
- SHOW_PROGRESS
+ message("Downloading Qt to ${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)
+ downloadAndExtract(
+ "${qt_base_url}/qt.qt5.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z"
+ ${package}.7z
)
- execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${package}.7z WORKING_DIRECTORY qt5)
endforeach()
- 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}")
+ # 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()
- name: Download Qt Creator
id: qt_creator
@@ -129,29 +168,21 @@ jobs:
endif()
if ("${{ runner.os }}" STREQUAL "Windows")
- set(qtc_output_directory "target/lib/qtcreator/plugins")
- set(qtc_binary_name "$ENV{PLUGIN_NAME}4.dll")
- if ("${{ matrix.config.environment_script }}" MATCHES "vcvars64.bat")
- set(qtc_platform "windows_x64")
- elseif ("${{ matrix.config.environment_script }}" MATCHES "vcvars32.bat")
- set(qtc_platform "windows_x86")
- endif()
+ set(qtc_platform "windows_x64")
elseif ("${{ runner.os }}" STREQUAL "Linux")
- set(qtc_output_directory "target/lib/qtcreator/plugins")
- set(qtc_binary_name "lib$ENV{PLUGIN_NAME}.so")
set(qtc_platform "linux_x64")
elseif ("${{ runner.os }}" STREQUAL "macOS")
- set(qtc_output_directory "target/PlugIns")
- set(qtc_binary_name "lib$ENV{PLUGIN_NAME}.dylib")
set(qtc_platform "mac_x64")
endif()
+ file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qtcreator" qtc_dir)
# Save the path for other steps
- message("::set-output name=qtc_binary_name::${qtc_binary_name}")
- message("::set-output name=qtc_output_directory::${qtc_output_directory}")
+ message("::set-output name=qtc_dir::${qtc_dir}")
file(MAKE_DIRECTORY qtcreator)
+ message("Downloading Qt Creator from ${qtc_base_url}/${qtc_platform}")
+
foreach(package qtcreator qtcreator_dev)
file(DOWNLOAD
"${qtc_base_url}/${qtc_platform}/${package}.7z" ./${package}.7z SHOW_PROGRESS)
@@ -159,9 +190,13 @@ jobs:
${CMAKE_COMMAND} -E tar xvf ../${package}.7z WORKING_DIRECTORY qtcreator)
endforeach()
- - name: Configure
+ - name: Build
shell: cmake -P {0}
run: |
+ set(ENV{CC} ${{ matrix.config.cc }})
+ set(ENV{CXX} ${{ matrix.config.cxx }})
+ set(ENV{MACOSX_DEPLOYMENT_TARGET} "10.13")
+
if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x")
execute_process(
COMMAND "${{ matrix.config.environment_script }}" && set
@@ -171,72 +206,36 @@ jobs:
foreach(line IN LISTS output_lines)
if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$")
set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}")
-
- # Set for other steps
- message("::set-env name=${CMAKE_MATCH_1}::${CMAKE_MATCH_2}")
endif()
endforeach()
endif()
- if ("${{ runner.os }}" STREQUAL "macOS")
- file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qtcreator/Qt Creator.app" qtcreator_build)
- else()
- file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qtcreator" qtcreator_build)
- endif()
- file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qtcreator" qtcreator_source)
- file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/target" target_path)
+ set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ")
execute_process(
- COMMAND ${{ steps.qt.outputs.qt_dir }}/bin/qmake
- $ENV{PLUGIN_PRO}
- CONFIG+=release
- IDE_SOURCE_TREE="${qtcreator_source}"
- IDE_BUILD_TREE="${qtcreator_build}"
- IDE_OUTPUT_PATH="${target_path}"
+ COMMAND python
+ -u
+ ${{ steps.qt_creator.outputs.qtc_dir }}/scripts/build_plugin.py
+ --name "$ENV{PLUGIN_NAME}-$ENV{QT_CREATOR_VERSION}-${{ matrix.config.artifact }}"
+ --src .
+ --build build
+ --qt-path "${{ steps.qt.outputs.qt_dir }}"
+ --qtc-path "${{ steps.qt_creator.outputs.qtc_dir }}"
+ --output-path "$ENV{GITHUB_WORKSPACE}"
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
- message(FATAL_ERROR "Bad exit status")
+ string(REGEX MATCH "FAILED:.*$" error_message "${output}")
+ string(REPLACE "\n" "%0A" error_message "${error_message}")
+ message("::error::${error_message}")
+ message(FATAL_ERROR "Build failed")
endif()
- - name: Build
- shell: cmake -P {0}
- run: |
- if ("${{ runner.os }}" STREQUAL "Windows")
- set(ENV{PATH} "${{ steps.qt.outputs.qt_dir }}/bin/;$ENV{PATH}")
- else()
- set(ENV{PATH} "${{ steps.qt.outputs.qt_dir }}/bin/:$ENV{PATH}")
- set(ENV{LD_LIBRARY_PATH} "qtcreator/lib/Qt/lib:$ENV{LD_LIBRARY_PATH}")
- endif()
-
- include(ProcessorCount)
- ProcessorCount(N)
-
- set(make_program make -j ${N})
- if ("${{ runner.os }}" STREQUAL "Windows")
- set(make_program "jom/jom")
- endif()
-
- execute_process(
- COMMAND ${make_program}
- RESULT_VARIABLE result
- )
- if (NOT result EQUAL 0)
- message(FATAL_ERROR "Bad exit status")
- endif()
-
- file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/$ENV{PLUGIN_NAME}-$ENV{QT_CREATOR_VERSION}-${{ matrix.config.artifact }}" artifact)
-
- execute_process(COMMAND
- ${CMAKE_COMMAND} -E tar cvf ${artifact} --format=zip "${{ steps.qt_creator.outputs.qtc_binary_name }}"
- WORKING_DIRECTORY "${{ steps.qt_creator.outputs.qtc_output_directory }}"
- )
-
- - uses: actions/upload-artifact@v1
+ - uses: actions/upload-artifact@v2
id: upload_artifact
with:
- path: ./${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}
- name: ${{ env.PLUGIN_NAME}}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}
+ path: ./${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}.7z
+ name: ${{ env.PLUGIN_NAME}}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}.7z
release:
if: contains(github.ref, 'tags/v')
@@ -273,19 +272,15 @@ jobs:
matrix:
config:
- {
- name: "Windows Latest x64", artifact: "Windows-x64.zip",
- os: ubuntu-latest
- }
- - {
- name: "Windows Latest x86", artifact: "Windows-x86.zip",
+ name: "Windows Latest x64", artifact: "Windows-x64.7z",
os: ubuntu-latest
}
- {
- name: "Linux Latest x64", artifact: "Linux-x64.zip",
+ name: "Linux Latest x64", artifact: "Linux-x64.7z",
os: ubuntu-latest
}
- {
- name: "macOS Latest x64", artifact: "macOS-x64.zip",
+ name: "macOS Latest x64", artifact: "macOS-x64.7z",
os: macos-latest
}
needs: release
@@ -316,4 +311,4 @@ jobs:
upload_url: ${{ steps.set_upload_url.outputs.upload_url }}
asset_path: ./${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}
asset_name: ${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}
- asset_content_type: application/zip
+ asset_content_type: application/x-7z-compressed