From e42dc2e1d28f63266d5eecb85def1bc2f92ef6be Mon Sep 17 00:00:00 2001 From: brainiac Date: Mon, 17 Nov 2025 10:21:05 -0800 Subject: [PATCH] Add Github Actions support (#5031) Basic support for building linux and windows in pull requests and also the master branch. Removes search for local perl on windows. Just always use the packaged perl until we can switch to a package manager. Removes drone config file, since that isn't doing anything useful anymore. --- .drone.yml | 98 -------------------------------- .github/workflows/build.yaml | 81 ++++++++++++++++++++++++++ cmake/DependencyHelperMSVC.cmake | 67 ++++++++++------------ 3 files changed, 112 insertions(+), 134 deletions(-) delete mode 100644 .drone.yml create mode 100644 .github/workflows/build.yaml 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()