diff --git a/.circleci/continue_config.yml b/.circleci/continue_config.yml index 0556908a..17acca07 100644 --- a/.circleci/continue_config.yml +++ b/.circleci/continue_config.yml @@ -27,7 +27,176 @@ jobs: - image: circleci/python:3.7 steps: - run: echo "CircleCI pipeline triggered" - + build-offline-chat-installer-macos: + macos: + xcode: 14.0.0 + steps: + - checkout + - run: + name: Update Submodules + command: | + git submodule sync + git submodule update --init --recursive + - restore_cache: # this is the new step to restore cache + keys: + - macos-qt-cache_v2 + - run: + name: Installing Qt + command: | + if [ ! -d ~/Qt ]; then + curl -o qt-unified-macOS-x64-4.6.0-online.dmg https://gpt4all.io/ci/qt-unified-macOS-x64-4.6.0-online.dmg + hdiutil attach qt-unified-macOS-x64-4.6.0-online.dmg + /Volumes/qt-unified-macOS-x64-4.6.0-online/qt-unified-macOS-x64-4.6.0-online.app/Contents/MacOS/qt-unified-macOS-x64-4.6.0-online --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email $QT_EMAIL --password $QT_PASSWORD install qt.tools.cmake qt.tools.ifw.46 qt.tools.ninja qt.qt6.651.clang_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver + hdiutil detach /Volumes/qt-unified-macOS-x64-4.6.0-online + fi + - save_cache: # this is the new step to save cache + key: macos-qt-cache_v2 + paths: + - ~/Qt + - run: + name: Build + command: | + mkdir build + cd build + export PATH=$PATH:$HOME/Qt/Tools/QtInstallerFramework/4.6/bin + ~/Qt/Tools/CMake/CMake.app/Contents/bin/cmake \ + -DCMAKE_GENERATOR:STRING=Ninja \ + -DBUILD_UNIVERSAL=ON \ + -DMACDEPLOYQT=~/Qt/6.5.1/macos/bin/macdeployqt \ + -DGPT4ALL_OFFLINE_INSTALLER=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH:PATH=~/Qt/6.5.1/macos/lib/cmake/Qt6 \ + -DCMAKE_MAKE_PROGRAM:FILEPATH=~/Qt/Tools/Ninja/ninja \ + -S ../gpt4all-chat \ + -B . + ~/Qt/Tools/CMake/CMake.app/Contents/bin/cmake --build . --target all + ~/Qt/Tools/CMake/CMake.app/Contents/bin/cmake --build . --target install + ~/Qt/Tools/CMake/CMake.app/Contents/bin/cmake --build . --target package + mkdir upload + cp gpt4all-installer-* upload + - store_artifacts: + path: build/upload + build-offline-chat-installer-linux: + machine: + image: ubuntu-2204:2023.04.2 + steps: + - checkout + - run: + name: Update Submodules + command: | + git submodule sync + git submodule update --init --recursive + - restore_cache: # this is the new step to restore cache + keys: + - linux-qt-cache + - run: + name: Setup Linux and Dependencies + command: | + wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc + sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-jammy.list http://packages.lunarg.com/vulkan/lunarg-vulkan-jammy.list + sudo apt update && sudo apt install -y libfontconfig1 libfreetype6 libx11-6 libx11-xcb1 libxext6 libxfixes3 libxi6 libxrender1 libxcb1 libxcb-cursor0 libxcb-glx0 libxcb-keysyms1 libxcb-image0 libxcb-shm0 libxcb-icccm4 libxcb-sync1 libxcb-xfixes0 libxcb-shape0 libxcb-randr0 libxcb-render-util0 libxcb-util1 libxcb-xinerama0 libxcb-xkb1 libxkbcommon0 libxkbcommon-x11-0 bison build-essential flex gperf python3 gcc g++ libgl1-mesa-dev libwayland-dev vulkan-sdk patchelf + - run: + name: Installing Qt + command: | + if [ ! -d ~/Qt ]; then + wget https://gpt4all.io/ci/qt-unified-linux-x64-4.6.0-online.run + chmod +x qt-unified-linux-x64-4.6.0-online.run + ./qt-unified-linux-x64-4.6.0-online.run --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email $QT_EMAIL --password $QT_PASSWORD install qt.tools.cmake qt.tools.ifw.46 qt.tools.ninja qt.qt6.651.gcc_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver qt.qt6.651.qtwaylandcompositor + fi + - save_cache: # this is the new step to save cache + key: linux-qt-cache + paths: + - ~/Qt + - run: + name: Build linuxdeployqt + command: | + git clone https://github.com/nomic-ai/linuxdeployqt + cd linuxdeployqt && qmake && sudo make install + - run: + name: Build + command: | + set -eo pipefail + export CMAKE_PREFIX_PATH=~/Qt/6.5.1/gcc_64/lib/cmake + export PATH=$PATH:$HOME/Qt/Tools/QtInstallerFramework/4.6/bin + mkdir build + cd build + mkdir upload + ~/Qt/Tools/CMake/bin/cmake -DGPT4ALL_OFFLINE_INSTALLER=ON -DCMAKE_BUILD_TYPE=Release -S ../gpt4all-chat -B . + ~/Qt/Tools/CMake/bin/cmake --build . --target all + ~/Qt/Tools/CMake/bin/cmake --build . --target install + ~/Qt/Tools/CMake/bin/cmake --build . --target package + cp gpt4all-installer-* upload + - store_artifacts: + path: build/upload + build-offline-chat-installer-windows: + machine: + image: 'windows-server-2019-vs2019:2022.08.1' + resource_class: windows.large + shell: powershell.exe -ExecutionPolicy Bypass + steps: + - checkout + - run: + name: Update Submodules + command: | + git submodule sync + git submodule update --init --recursive + - restore_cache: # this is the new step to restore cache + keys: + - windows-qt-cache + - run: + name: Installing Qt + command: | + if (-not (Test-Path C:\Qt)) { + Invoke-WebRequest -Uri https://gpt4all.io/ci/qt-unified-windows-x64-4.6.0-online.exe -OutFile qt-unified-windows-x64-4.6.0-online.exe + & .\qt-unified-windows-x64-4.6.0-online.exe --no-force-installations --no-default-installations --no-size-checking --default-answer --accept-licenses --confirm-command --accept-obligations --email ${Env:QT_EMAIL} --password ${Env:QT_PASSWORD} install qt.tools.cmake qt.tools.ifw.46 qt.tools.ninja qt.qt6.651.win64_msvc2019_64 qt.qt6.651.qt5compat qt.qt6.651.debug_info qt.qt6.651.addons.qtpdf qt.qt6.651.addons.qthttpserver + } + - save_cache: # this is the new step to save cache + key: windows-qt-cache + paths: + - C:\Qt + - run: + name: Install VulkanSDK + command: | + Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.261.1/windows/VulkanSDK-1.3.261.1-Installer.exe -OutFile VulkanSDK-1.3.261.1-Installer.exe + .\VulkanSDK-1.3.261.1-Installer.exe --accept-licenses --default-answer --confirm-command install + - run: + name: Build + command: | + $Env:PATH = "${Env:PATH};C:\Program Files (x86)\Windows Kits\10\bin\x64" + $Env:PATH = "${Env:PATH};C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64" + $Env:PATH = "${Env:PATH};C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64" + $Env:PATH = "${Env:PATH};C:\VulkanSDK\1.3.261.1\bin" + $Env:PATH = "${Env:PATH};C:\Qt\Tools\QtInstallerFramework\4.6\bin" + $Env:LIB = "${Env:LIB};C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\ucrt\x64" + $Env:LIB = "${Env:LIB};C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\um\x64" + $Env:LIB = "${Env:LIB};C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x64" + $Env:LIB = "${Env:LIB};C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\lib\x64" + $Env:INCLUDE = "${Env:INCLUDE};C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\ucrt" + $Env:INCLUDE = "${Env:INCLUDE};C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\um" + $Env:INCLUDE = "${Env:INCLUDE};C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared" + $Env:INCLUDE = "${Env:INCLUDE};C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\winrt" + $Env:INCLUDE = "${Env:INCLUDE};C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\cppwinrt" + $Env:INCLUDE = "${Env:INCLUDE};C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include" + $Env:INCLUDE = "${Env:INCLUDE};C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" + $Env:INCLUDE = "${Env:INCLUDE};C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" + mkdir build + cd build + & "C:\Qt\Tools\CMake_64\bin\cmake.exe" ` + "-DCMAKE_GENERATOR:STRING=Ninja" ` + "-DCMAKE_BUILD_TYPE=Release" ` + "-DCMAKE_PREFIX_PATH:PATH=C:\Qt\6.5.1\msvc2019_64" ` + "-DCMAKE_MAKE_PROGRAM:FILEPATH=C:\Qt\Tools\Ninja\ninja.exe" ` + "-DKOMPUTE_OPT_DISABLE_VULKAN_VERSION_CHECK=ON" ` + "-DGPT4ALL_OFFLINE_INSTALLER=ON" ` + "-S ..\gpt4all-chat" ` + "-B ." + & "C:\Qt\Tools\Ninja\ninja.exe" + & "C:\Qt\Tools\Ninja\ninja.exe" install + & "C:\Qt\Tools\Ninja\ninja.exe" package + mkdir upload + copy gpt4all-installer-win64.exe upload + - store_artifacts: + path: build/upload build-gpt4all-chat-linux: machine: image: ubuntu-2204:2023.04.2 @@ -163,6 +332,7 @@ jobs: cd build ~/Qt/Tools/CMake/CMake.app/Contents/bin/cmake \ -DCMAKE_GENERATOR:STRING=Ninja \ + -DBUILD_UNIVERSAL=ON \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH:PATH=~/Qt/6.5.1/macos/lib/cmake/Qt6 \ -DCMAKE_MAKE_PROGRAM:FILEPATH=~/Qt/Tools/Ninja/ninja \ @@ -828,6 +998,20 @@ workflows: when: << pipeline.parameters.run-default-workflow >> jobs: - default-job + build-chat-offline-installers: + when: << pipeline.parameters.run-chat-workflow >> + jobs: + - hold: + type: approval + - build-offline-chat-installer-macos: + requires: + - hold + - build-offline-chat-installer-windows: + requires: + - hold + - build-offline-chat-installer-linux: + requires: + - hold build-and-test-gpt4all-chat: when: << pipeline.parameters.run-chat-workflow >> jobs: diff --git a/gpt4all-chat/CMakeLists.txt b/gpt4all-chat/CMakeLists.txt index f4b9d729..cc17b592 100644 --- a/gpt4all-chat/CMakeLists.txt +++ b/gpt4all-chat/CMakeLists.txt @@ -208,11 +208,11 @@ set(CPACK_VERBATIM_VARIABLES YES) set(CPACK_IFW_VERBOSE ON) if(${CMAKE_SYSTEM_NAME} MATCHES Linux) - set(LINUXDEPLOYQT "$ENV{HOME}/dev/linuxdeployqt/build/tools/linuxdeployqt/linuxdeployqt") + find_program(LINUXDEPLOYQT linuxdeployqt HINTS "$ENV{HOME}/dev/linuxdeployqt/build/tools/linuxdeployqt" "$ENV{HOME}/project/linuxdeployqt/bin") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-linux.cmake.in" "${CMAKE_BINARY_DIR}/cmake/deploy-qt-linux.cmake" @ONLY) set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_BINARY_DIR}/cmake/deploy-qt-linux.cmake) - set(CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.5") + set(CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.6") set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-linux") set(CPACK_IFW_TARGET_DIRECTORY "@HomeDir@/${COMPONENT_NAME_MAIN}") elseif(${CMAKE_SYSTEM_NAME} MATCHES Windows) @@ -220,7 +220,7 @@ elseif(${CMAKE_SYSTEM_NAME} MATCHES Windows) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-windows.cmake.in" "${CMAKE_BINARY_DIR}/cmake/deploy-qt-windows.cmake" @ONLY) set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_BINARY_DIR}/cmake/deploy-qt-windows.cmake) - set(CPACK_IFW_ROOT "C:/Qt/Tools/QtInstallerFramework/4.5") + set(CPACK_IFW_ROOT "C:/Qt/Tools/QtInstallerFramework/4.6") set(CPACK_IFW_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/favicon.ico") set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-win64") set(CPACK_IFW_TARGET_DIRECTORY "@HomeDir@\\${COMPONENT_NAME_MAIN}") @@ -229,7 +229,7 @@ elseif(${CMAKE_SYSTEM_NAME} MATCHES Darwin) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-mac.cmake.in" "${CMAKE_BINARY_DIR}/cmake/deploy-qt-mac.cmake" @ONLY) set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_BINARY_DIR}/cmake/deploy-qt-mac.cmake) - set(CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.5") + set(CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.6") set(CPACK_IFW_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/favicon.icns") set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-darwin") set(CPACK_IFW_TARGET_DIRECTORY "@ApplicationsDir@/${COMPONENT_NAME_MAIN}") @@ -273,6 +273,7 @@ cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} REPLACES "gpt4all-chat") #W if (GPT4ALL_LOCALHOST) cpack_ifw_add_repository("GPT4AllRepository" URL "http://localhost/repository") elseif(GPT4ALL_OFFLINE_INSTALLER) + add_compile_definitions(GPT4ALL_OFFLINE_INSTALLER) # noop else() if(${CMAKE_SYSTEM_NAME} MATCHES Linux)