diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 7a5443d4c..000000000 --- a/.drone.yml +++ /dev/null @@ -1,98 +0,0 @@ ---- - -kind: pipeline -type: docker -name: Build Linux - -# Limits how many of these builds can run on the drone runner at a time, this isn't about cores -concurrency: - limit: 1 - -volumes: - - name: cache - host: - path: /var/lib/cache-release - -steps: - - name: Build Linux X64 - image: akkadius/eqemu-server:v14 - environment: - GITHUB_TOKEN: - from_secret: GH_RELEASE_GITHUB_API_TOKEN - RCLONE_CONFIG_REMOTE_TYPE: ftp - RCLONE_FTP_HOST: drone.akkadius.com - RCLONE_FTP_USER: artifacts - RCLONE_FTP_PASS: - from_secret: RCLONE_FTP_PASS - commands: - - ./utils/scripts/build/linux-build.sh - volumes: - - name: cache - path: /home/eqemu/.ccache/ - ---- - -kind: pipeline -type: exec -name: Build Windows - -# Limits how many of these builds can run on the drone runner at a time, this isn't about cores -concurrency: - limit: 1 - -platform: - os: windows - arch: amd64 - -steps: - - name: Build Windows X64 - environment: - RCLONE_CONFIG_REMOTE_TYPE: ftp - RCLONE_FTP_HOST: drone.akkadius.com - RCLONE_FTP_USER: artifacts - RCLONE_FTP_PASS: - from_secret: RCLONE_FTP_PASS - GITHUB_TOKEN: - from_secret: GH_RELEASE_GITHUB_API_TOKEN - commands: - - .\utils\scripts\build\windows-build.ps1 - ---- - -kind: pipeline -type: docker -name: Publish Artifacts to Github - -steps: - - name: Upload Artifacts - image: akkadius/eqemu-build-releaser:v3 - environment: - RCLONE_CONFIG_REMOTE_TYPE: ftp - RCLONE_FTP_HOST: drone.akkadius.com - RCLONE_FTP_USER: artifacts - RCLONE_FTP_PASS: - from_secret: RCLONE_FTP_PASS - GH_RELEASE_GITHUB_API_TOKEN: - from_secret: GH_RELEASE_GITHUB_API_TOKEN - GITHUB_TOKEN: - from_secret: GH_RELEASE_GITHUB_API_TOKEN - commands: - - ./utils/scripts/build/should-release/should-release - - rclone config create remote ftp env_auth true > /dev/null - - | - rclone copy remote: --include "eqemu-server*.zip" . - - gh-release --assets=eqemu-server-linux-x64.zip,eqemu-server-windows-x64.zip -y - - | - rclone delete remote: --include "eqemu-server*.zip" - -trigger: - branch: - - master - event: - - push - -depends_on: - - Build Windows - - Build Linux - - diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 000000000..c9650cf56 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,81 @@ +name: Build +on: + push: + branches: + - master + pull_request: + +jobs: + linux: + name: Linux + runs-on: ubuntu-latest + steps: + - name: Checkout source + uses: actions/checkout@v5 + with: + submodules: recursive + + - name: Setup ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ runner.os }}-ccache + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y build-essential ninja-build ccache libmariadb-dev libmariadb-dev-compat libboost-all-dev libperl-dev liblua5.1-0-dev libluajit-5.1-dev zlib1g-dev uuid-dev libssl-dev libsodium-dev libmbedtls-dev + + - name: Configure + run: | + cmake -S . -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DEQEMU_BUILD_TESTS=ON \ + -DEQEMU_BUILD_LOGIN=ON \ + -DEQEMU_BUILD_LUA=ON \ + -DEQEMU_BUILD_PERL=ON \ + -DEQEMU_BUILD_CLIENT_FILES=ON + + - name: Build + run: cmake --build build --parallel + + - name: Test + working-directory: build + run: ./bin/tests + + windows: + name: Windows + runs-on: windows-latest + steps: + - name: Checkout source + uses: actions/checkout@v5 + with: + submodules: recursive + + - name: Enable long paths + run: git config --global core.longpaths true + + - name: Setup MSVC environment + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: x64 + + - name: Configure + shell: pwsh + run: | + cmake -S . -B build -G "Visual Studio 17 2022" -A x64 ` + -DCMAKE_BUILD_TYPE=RelWithDebInfo ` + -DEQEMU_BUILD_TESTS=ON ` + -DEQEMU_BUILD_LOGIN=ON ` + -DEQEMU_BUILD_LUA=ON ` + -DEQEMU_BUILD_ZLIB=ON ` + -DEQEMU_BUILD_CLIENT_FILES=ON + + - name: Build + shell: pwsh + run: cmake --build build --config RelWithDebInfo --target ALL_BUILD -- /m + + - name: Test + working-directory: build + run: ./bin/RelWithDebInfo/tests.exe diff --git a/cmake/DependencyHelperMSVC.cmake b/cmake/DependencyHelperMSVC.cmake index 33f92e41b..1f4554e6c 100644 --- a/cmake/DependencyHelperMSVC.cmake +++ b/cmake/DependencyHelperMSVC.cmake @@ -35,60 +35,55 @@ ENDIF() IF(EQEMU_FETCH_MSVC_DEPENDENCIES_VCPKG) MESSAGE(STATUS "Resolving vcpkg dependencies...") - + IF(NOT EXISTS ${PROJECT_SOURCE_DIR}/vcpkg/${EQEMU_VCPKG_ZIP}) EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/vcpkg) - + MESSAGE(STATUS "Downloading existing vcpkg dependencies from releases...") - FILE(DOWNLOAD ${EQEMU_VCPKG_URL} ${PROJECT_SOURCE_DIR}/vcpkg/${EQEMU_VCPKG_ZIP} + FILE(DOWNLOAD ${EQEMU_VCPKG_URL} ${PROJECT_SOURCE_DIR}/vcpkg/${EQEMU_VCPKG_ZIP} SHOW_PROGRESS STATUS DOWNLOAD_STATUS) - + LIST(GET DOWNLOAD_STATUS 0 STATUS_CODE) IF(NOT STATUS_CODE EQUAL 0) MESSAGE(FATAL_ERROR "Was unable to download dependencies from ${EQEMU_VCPKG_URL}") ENDIF() - + MESSAGE(STATUS "Extracting files...") EXECUTE_PROCESS( COMMAND ${CMAKE_COMMAND} -E tar xzf ${PROJECT_SOURCE_DIR}/vcpkg/${EQEMU_VCPKG_ZIP} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vcpkg ) ENDIF() - + INCLUDE(${PROJECT_SOURCE_DIR}/vcpkg/${EQEMU_VCPKG_DIR}/scripts/buildsystems/vcpkg.cmake) ENDIF() IF(EQEMU_FETCH_MSVC_DEPENDENCIES_PERL) - #Try to find perl first, (so you can use your active install first) - FIND_PACKAGE(PerlLibs) - - IF(NOT PerlLibs_FOUND) - MESSAGE(STATUS "Resolving perl dependencies...") - - IF(NOT EXISTS ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_ZIP}) - EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/perl) - EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_DIR}) - - MESSAGE(STATUS "Downloading portable perl...") - FILE(DOWNLOAD ${EQEMU_PERL_URL} ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_ZIP} - SHOW_PROGRESS - STATUS DOWNLOAD_STATUS) - - LIST(GET DOWNLOAD_STATUS 0 STATUS_CODE) - IF(NOT STATUS_CODE EQUAL 0) - MESSAGE(FATAL_ERROR "Was unable to download dependencies from ${EQEMU_PERL_URL}") - ENDIF() - - MESSAGE(STATUS "Extracting files...") - EXECUTE_PROCESS( - COMMAND ${CMAKE_COMMAND} -E tar xzf ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_ZIP} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_DIR} - ) + MESSAGE(STATUS "Resolving perl dependencies...") + + IF(NOT EXISTS ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_ZIP}) + EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/perl) + EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_DIR}) + + MESSAGE(STATUS "Downloading portable perl...") + FILE(DOWNLOAD ${EQEMU_PERL_URL} ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_ZIP} + SHOW_PROGRESS + STATUS DOWNLOAD_STATUS) + + LIST(GET DOWNLOAD_STATUS 0 STATUS_CODE) + IF(NOT STATUS_CODE EQUAL 0) + MESSAGE(FATAL_ERROR "Was unable to download dependencies from ${EQEMU_PERL_URL}") ENDIF() - - SET(PERL_EXECUTABLE ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_DIR}/perl/bin/perl.exe CACHE FILEPATH "Path to perl program" FORCE) - SET(PERL_INCLUDE_PATH ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_DIR}/perl/lib/CORE CACHE PATH "Path to perl include files" FORCE) - SET(PERL_LIBRARY ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_DIR}/perl/lib/CORE/libperl524.a CACHE FILEPATH "Path to perl library" FORCE) + + MESSAGE(STATUS "Extracting files...") + EXECUTE_PROCESS( + COMMAND ${CMAKE_COMMAND} -E tar xzf ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_ZIP} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_DIR} + ) ENDIF() -ENDIF() \ No newline at end of file + + SET(PERL_EXECUTABLE ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_DIR}/perl/bin/perl.exe CACHE FILEPATH "Path to perl program" FORCE) + SET(PERL_INCLUDE_PATH ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_DIR}/perl/lib/CORE CACHE PATH "Path to perl include files" FORCE) + SET(PERL_LIBRARY ${PROJECT_SOURCE_DIR}/perl/${EQEMU_PERL_DIR}/perl/lib/CORE/libperl524.a CACHE FILEPATH "Path to perl library" FORCE) +ENDIF()