diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..b2935a445 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,101 @@ +name: Build + +on: + push: + pull_request: + +jobs: + build: + name: Build (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + qt_arch: gcc_64 + - os: macos-latest + qt_arch: clang_64 + - os: windows-latest + qt_arch: win64_msvc2019_64 + + steps: + - name: Check out source + uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.21.x' + cache: false + + - name: Install Qt (Linux) + if: runner.os == 'Linux' + uses: jurplel/install-qt-action@v4 + with: + version: '5.15.2' + host: linux + target: desktop + arch: ${{ matrix.qt_arch }} + install-deps: true + cache: true + + - name: Install Qt (macOS) + if: runner.os == 'macOS' + uses: jurplel/install-qt-action@v4 + with: + version: '5.15.2' + host: mac + target: desktop + arch: ${{ matrix.qt_arch }} + cache: true + + - name: Install Qt (Windows) + if: runner.os == 'Windows' + uses: jurplel/install-qt-action@v4 + with: + version: '5.15.2' + host: windows + target: desktop + arch: ${{ matrix.qt_arch }} + cache: true + + - name: Set up MSVC + if: runner.os == 'Windows' + uses: ilammy/msvc-dev-cmd@v1 + with: + toolset: 14.29 + + - name: Configure (Linux) + if: runner.os == 'Linux' + shell: bash + run: | + mkdir -p build-ci + cd build-ci + qmake ../liteidex CONFIG+=release + + - name: Configure (macOS) + if: runner.os == 'macOS' + shell: bash + run: | + mkdir -p build-ci + cd build-ci + qmake ../liteidex CONFIG+=release 'QMAKE_LIBS_OPENGL=-framework OpenGL' + + - name: Configure (Windows) + if: runner.os == 'Windows' + shell: cmd + run: | + if not exist build-ci mkdir build-ci + cd build-ci + qmake ..\liteidex CONFIG+=release CONFIG-=precompile_header + + - name: Compile (Unix) + if: runner.os != 'Windows' + shell: bash + run: make -C build-ci -j2 + + - name: Compile (Windows) + if: runner.os == 'Windows' + shell: cmd + run: nmake /f build-ci\Makefile diff --git a/build/build_linux_qt5.sh b/build/build_linux_qt5.sh index 85cd2e508..8a58053c7 100755 --- a/build/build_linux_qt5.sh +++ b/build/build_linux_qt5.sh @@ -1,9 +1,9 @@ #!/bin/sh -export BUILD_ROOT=$PWD +export BUILD_ROOT="$PWD" -if [ -z $LITEIDE_ROOT ]; then - export LITEIDE_ROOT=$PWD/../liteidex +if [ -z "$LITEIDE_ROOT" ]; then + export LITEIDE_ROOT="$PWD/../liteidex" fi echo build liteide @@ -12,11 +12,18 @@ echo BUILD_ROOT=$BUILD_ROOT echo LITEIDE_ROOT=$LITEIDE_ROOT echo . -export PATH=$QTDIR/bin:$PATH +if [ -n "$QTDIR" ]; then + export PATH="$QTDIR/bin:$PATH" +fi + +if ! command -v qmake >/dev/null 2>&1; then + echo 'error, qmake not found in PATH' + exit 1 +fi echo qmake liteide ... echo . -qtchooser -qt=qt5 -run-tool=qmake $LITEIDE_ROOT -spec linux-g++ "CONFIG+=release" +qtchooser -qt=qt5 -run-tool=qmake "$LITEIDE_ROOT" -spec linux-g++ "CONFIG+=release" if [ $? -ge 1 ]; then echo 'error, qmake fail' @@ -39,12 +46,12 @@ if [ $? -ge 1 ]; then fi echo build liteide tools ... -cd $LITEIDE_ROOT +cd "$LITEIDE_ROOT" || exit 1 -if [ -z $GOPATH ]; then - export GOPATH=$PWD +if [ -z "$GOPATH" ]; then + export GOPATH="$PWD" else - export GOPATH=$PWD:$GOPATH + export GOPATH="$PWD:$GOPATH" fi #(cd "$PWD/src/github.com/visualfc/gotools" && go install -ldflags "-s" -v) @@ -67,18 +74,18 @@ fi echo deploy ... -cd $BUILD_ROOT +cd "$BUILD_ROOT" || exit 1 -rm -r liteide +rm -rf liteide mkdir -p liteide mkdir -p liteide/bin mkdir -p liteide/share/liteide mkdir -p liteide/lib/liteide/plugins -cp -a -v $LITEIDE_ROOT/LICENSE.LGPL liteide -cp -a -v $LITEIDE_ROOT/LGPL_EXCEPTION.TXT liteide -cp -a -v $LITEIDE_ROOT/../README.md liteide -cp -a -v $LITEIDE_ROOT/../CONTRIBUTORS liteide +cp -a -v "$LITEIDE_ROOT/LICENSE.LGPL" liteide +cp -a -v "$LITEIDE_ROOT/LGPL_EXCEPTION.TXT" liteide +cp -a -v "$LITEIDE_ROOT/../README.md" liteide +cp -a -v "$LITEIDE_ROOT/../CONTRIBUTORS" liteide cp -a -v $LITEIDE_ROOT/liteide/bin/liteide liteide/bin cp -a -v $LITEIDE_ROOT/bin/gotools liteide/bin diff --git a/build/build_macos_qt5.sh b/build/build_macos_qt5.sh index 024955b6f..f4b06f05c 100755 --- a/build/build_macos_qt5.sh +++ b/build/build_macos_qt5.sh @@ -1,9 +1,9 @@ #!/bin/sh -export BUILD_ROOT=$PWD +export BUILD_ROOT="$PWD" -if [ -z $LITEIDE_ROOT ]; then - export LITEIDE_ROOT=$PWD/../liteidex +if [ -z "$LITEIDE_ROOT" ]; then + export LITEIDE_ROOT="$PWD/../liteidex" fi echo build liteide @@ -12,16 +12,18 @@ echo BUILD_ROOT=$BUILD_ROOT echo LITEIDE_ROOT=$LITEIDE_ROOT echo . -if [ -z $QTDIR ]; then - echo 'error, QTDIR is null' - exit 1 +if [ -n "$QTDIR" ]; then + export PATH="$QTDIR/bin:$PATH" fi -export PATH=$QTDIR/bin:$PATH +if ! command -v qmake >/dev/null 2>&1; then + echo 'error, qmake not found in PATH' + exit 1 +fi echo qmake liteide ... echo . -qmake $LITEIDE_ROOT -spec macx-clang CONFIG+=X86_64 +qmake "$LITEIDE_ROOT" -spec macx-clang "CONFIG+=release" if [ $? -ge 1 ]; then echo 'error, qmake fail' @@ -44,13 +46,13 @@ if [ $? -ge 1 ]; then fi echo build liteide tools ... -cd $LITEIDE_ROOT +cd "$LITEIDE_ROOT" || exit 1 -if [ -z $GOPATH ]; then - export GOPATH=$PWD +if [ -z "$GOPATH" ]; then + export GOPATH="$PWD" else - export GOPATH=$PWD:$GOPATH + export GOPATH="$PWD:$GOPATH" fi #(cd "$PWD/src/github.com/visualfc/gotools" && go install -ldflags "-s" -v) @@ -72,9 +74,9 @@ fi echo deploy ... -cd $BUILD_ROOT +cd "$BUILD_ROOT" || exit 1 -rm -r liteide +rm -rf liteide mkdir -p liteide cp -R -v $LITEIDE_ROOT/liteide/bin/LiteIDE.app liteide @@ -91,4 +93,3 @@ cp -R -v $LITEIDE_ROOT/bin/gocode liteide/LiteIDE.app/Contents/MacOS cp -R -v $LITEIDE_ROOT/bin/gomodifytags liteide/LiteIDE.app/Contents/MacOS cp -R -v $LITEIDE_ROOT/deploy/* liteide/LiteIDE.app/Contents/Resources cp -R -v $LITEIDE_ROOT/os_deploy/macosx/* liteide/LiteIDE.app/Contents/Resources - diff --git a/build/build_windows_msvc.cmd b/build/build_windows_msvc.cmd index e7503094e..16f4ae668 100644 --- a/build/build_windows_msvc.cmd +++ b/build/build_windows_msvc.cmd @@ -1,100 +1,104 @@ -@echo off - -setlocal - -set BUILD_ROOT=%CD% -if x%LITEIDE_ROOT%==x set LITEIDE_ROOT=%CD%\..\liteidex - -echo build liteide -echo QTDIR=%QTDIR% -echo GOROOT=%GOROOT% -echo BUILD_ROOT=%BUILD_ROOT% -echo LITEIDE_ROOT=%LITEIDE_ROOT% -echo . - -if x%QTDIR%==x goto qtdir_fail - -set PATH=%QTDIR%/bin;%PATH% - -echo qmake liteide ... -echo . -qmake %LITEIDE_ROOT% "CONFIG+=release" - -if ERRORLEVEL 1 goto qmake_fail - -echo make liteide ... -echo . -nmake - -if ERRORLEVEL 1 goto make_fail - -go version - -if ERRORLEVEL 1 goto go_fail - -echo build liteide tools -echo . - -cd %LITEIDE_ROOT% -if defined %GOPATH ( - set GOPATH=%CD%;%GOPATH% -) else ( - set GOPATH=%CD% -) - -:: (cd "%CD%/src/github.com/visualfc/gotools" & go install -ldflags "-s" -v & cd %CD%) -:: (cd "%CD%/src/github.com/visualfc/gocode" & go install -ldflags "-s" -v & cd %CD%) -:: (cd "%CD%/src/github.com/fatih/gomodifytags" & go install -ldflags "-s" -v & cd %CD%) - -if ERRORLEVEL 1 goto go_fail - -echo export qrc images -go run src/tools/exportqrc/main.go -root . -if ERRORLEVEL 1 goto go_fail - -cd %BUILD_ROOT% - -echo deploy liteide ... -echo . - -if exist liteide rmdir /q /s liteide - -if not exist liteide mkdir liteide -if not exist liteide\bin mkdir liteide\bin -if not exist liteide\lib mkdir liteide\lib -if not exist liteide\lib\liteide mkdir liteide\lib\liteide -if not exist liteide\lib\liteide\plugins mkdir liteide\lib\liteide\plugins - -xcopy %LITEIDE_ROOT%\LICENSE.LGPL liteide /y -xcopy %LITEIDE_ROOT%\LGPL_EXCEPTION.TXT liteide /y -xcopy %LITEIDE_ROOT%\..\README.MD liteide /y -xcopy %LITEIDE_ROOT%\..\CONTRIBUTORS liteide /y - -xcopy %LITEIDE_ROOT%\liteide\bin\* liteide\bin /y -xcopy %LITEIDE_ROOT%\bin\gotools.exe liteide\bin /y -xcopy %LITEIDE_ROOT%\bin\gocode.exe liteide\bin /y -xcopy %LITEIDE_ROOT%\bin\gomodifytags.exe liteide\bin /y -xcopy %LITEIDE_ROOT%\liteide\lib\liteide\plugins\*.dll liteide\lib\liteide\plugins /y - -xcopy %LITEIDE_ROOT%\deploy liteide\share\liteide /e /y /i -xcopy %LITEIDE_ROOT%\os_deploy\windows liteide\share\liteide /e /y /i - -goto end - -:qtdir_fail -echo error, QTDIR is null -goto end - -:qmake_fail -echo error, qmake fail -goto end - -:make_fail -echo error, make fail -goto end - -:go_fail -echo error, go fail -goto end - -:end +@echo off + +setlocal + +set "BUILD_ROOT=%CD%" +if not defined LITEIDE_ROOT set "LITEIDE_ROOT=%CD%\..\liteidex" + +echo build liteide +echo QTDIR=%QTDIR% +echo GOROOT=%GOROOT% +echo BUILD_ROOT=%BUILD_ROOT% +echo LITEIDE_ROOT=%LITEIDE_ROOT% +echo . + +if defined QTDIR set "PATH=%QTDIR%\bin;%PATH%" +where qmake >nul 2>&1 +if ERRORLEVEL 1 goto qmake_missing + +echo qmake liteide ... +echo . +qmake "%LITEIDE_ROOT%" "CONFIG+=release" "CONFIG-=precompile_header" + +if ERRORLEVEL 1 goto qmake_fail + +echo make liteide ... +echo . +nmake + +if ERRORLEVEL 1 goto make_fail + +go version + +if ERRORLEVEL 1 goto go_fail + +echo build liteide tools +echo . + +cd /d "%LITEIDE_ROOT%" +if defined GOPATH ( + set "GOPATH=%CD%;%GOPATH%" +) else ( + set "GOPATH=%CD%" +) + +:: (cd "%CD%/src/github.com/visualfc/gotools" & go install -ldflags "-s" -v & cd %CD%) +:: (cd "%CD%/src/github.com/visualfc/gocode" & go install -ldflags "-s" -v & cd %CD%) +:: (cd "%CD%/src/github.com/fatih/gomodifytags" & go install -ldflags "-s" -v & cd %CD%) + +if ERRORLEVEL 1 goto go_fail + +echo export qrc images +go run src/tools/exportqrc/main.go -root . +if ERRORLEVEL 1 goto go_fail + +cd /d "%BUILD_ROOT%" + +echo deploy liteide ... +echo . + +if exist liteide rmdir /q /s liteide + +if not exist liteide mkdir liteide +if not exist liteide\bin mkdir liteide\bin +if not exist liteide\lib mkdir liteide\lib +if not exist liteide\lib\liteide mkdir liteide\lib\liteide +if not exist liteide\lib\liteide\plugins mkdir liteide\lib\liteide\plugins + +xcopy %LITEIDE_ROOT%\LICENSE.LGPL liteide /y +xcopy %LITEIDE_ROOT%\LGPL_EXCEPTION.TXT liteide /y +xcopy %LITEIDE_ROOT%\..\README.MD liteide /y +xcopy %LITEIDE_ROOT%\..\CONTRIBUTORS liteide /y + +xcopy %LITEIDE_ROOT%\liteide\bin\* liteide\bin /y +xcopy %LITEIDE_ROOT%\bin\gotools.exe liteide\bin /y +xcopy %LITEIDE_ROOT%\bin\gocode.exe liteide\bin /y +xcopy %LITEIDE_ROOT%\bin\gomodifytags.exe liteide\bin /y +xcopy %LITEIDE_ROOT%\liteide\lib\liteide\plugins\*.dll liteide\lib\liteide\plugins /y + +xcopy %LITEIDE_ROOT%\deploy liteide\share\liteide /e /y /i +xcopy %LITEIDE_ROOT%\os_deploy\windows liteide\share\liteide /e /y /i + +goto end + +:qtdir_fail +goto qmake_missing + +:qmake_missing +echo error, qmake not found in PATH +exit /b 1 + +:qmake_fail +echo error, qmake fail +exit /b 1 + +:make_fail +echo error, make fail +exit /b 1 + +:go_fail +echo error, go fail +exit /b 1 + +:end +exit /b 0 diff --git a/build/deploy_macos_qt5.sh b/build/deploy_macos_qt5.sh index 650fcb088..8da77ac2b 100755 --- a/build/deploy_macos_qt5.sh +++ b/build/deploy_macos_qt5.sh @@ -1,9 +1,9 @@ #!/bin/sh -export BUILD_ROOT=$PWD +export BUILD_ROOT="$PWD" -if [ -z $LITEIDE_ROOT ]; then - export LITEIDE_ROOT=$PWD/../liteidex +if [ -z "$LITEIDE_ROOT" ]; then + export LITEIDE_ROOT="$PWD/../liteidex" fi echo deploy liteide/LiteIDE.app @@ -13,13 +13,15 @@ echo BUILD_ROOT=$BUILD_ROOT echo LITEIDE_ROOT=$LITEIDE_ROOT echo . -if [ -z $QTDIR ]; then - echo 'error, QTDIR is null' - exit 1 +if [ -n "$QTDIR" ]; then + export PATH="$QTDIR/bin:$PATH" fi -export PATH=$QTDIR/bin:$PATH +if ! command -v macdeployqt >/dev/null 2>&1; then + echo 'error, macdeployqt not found in PATH' + exit 1 +fi -rm liteide/LiteIDE.app/Contents/Resources/qt.conf -macdeployqt liteide/LiteIDE.app -codesign --force --deep --sign - liteide/LiteIDE.app +rm -f liteide/LiteIDE.app/Contents/Resources/qt.conf +macdeployqt liteide/LiteIDE.app || exit 1 +codesign --force --deep --sign - liteide/LiteIDE.app || exit 1 diff --git a/build/deploy_windows_qt5.15.2.cmd b/build/deploy_windows_qt5.15.2.cmd index aa932a53e..58242f4a6 100644 --- a/build/deploy_windows_qt5.15.2.cmd +++ b/build/deploy_windows_qt5.15.2.cmd @@ -1,32 +1,47 @@ -@echo off - -setlocal - -set BUILD_ROOT=%CD% -if x%LITEIDE_ROOT%==x set LITEIDE_ROOT=%CD%\..\liteidex - -echo build liteide -echo QTDIR=%QTDIR% -echo . - -if x%QTDIR%==x goto qtdir_fail - -windeployqt --no-angle --no-opengl-sw --dir liteide/bin liteide/lib/liteide/plugins/liteeditor.dll - -windeployqt --no-angle --no-opengl-sw --dir liteide/bin liteide/lib/liteide/plugins/welcome.dll - -windeployqt --no-angle --no-opengl-sw --dir liteide/bin liteide/lib/liteide/plugins/litebuild.dll - -windeployqt --no-angle --no-opengl-sw --dir liteide/bin liteide/lib/liteide/plugins/dlvdebugger.dll - -windeployqt --no-angle --no-opengl-sw --dir liteide/bin liteide/bin/liteapp.dll - - - -goto end - -:qtdir_fail -echo error, QTDIR is null -goto end - -:end +@echo off + +setlocal + +set "BUILD_ROOT=%CD%" +if not defined LITEIDE_ROOT set "LITEIDE_ROOT=%CD%\..\liteidex" + +echo build liteide +echo QTDIR=%QTDIR% +echo . + +if defined QTDIR set "PATH=%QTDIR%\bin;%PATH%" +where windeployqt >nul 2>&1 +if ERRORLEVEL 1 goto deploy_missing + +windeployqt --no-angle --no-opengl-sw --dir liteide/bin liteide/lib/liteide/plugins/liteeditor.dll +if ERRORLEVEL 1 goto deploy_fail + +windeployqt --no-angle --no-opengl-sw --dir liteide/bin liteide/lib/liteide/plugins/welcome.dll +if ERRORLEVEL 1 goto deploy_fail + +windeployqt --no-angle --no-opengl-sw --dir liteide/bin liteide/lib/liteide/plugins/litebuild.dll +if ERRORLEVEL 1 goto deploy_fail + +windeployqt --no-angle --no-opengl-sw --dir liteide/bin liteide/lib/liteide/plugins/dlvdebugger.dll +if ERRORLEVEL 1 goto deploy_fail + +windeployqt --no-angle --no-opengl-sw --dir liteide/bin liteide/bin/liteapp.dll +if ERRORLEVEL 1 goto deploy_fail + + + +goto end + +:qtdir_fail +goto deploy_missing + +:deploy_missing +echo error, windeployqt not found in PATH +exit /b 1 + +:deploy_fail +echo error, windeployqt fail +exit /b 1 + +:end +exit /b 0