name: linux build description: a helper action to shorten running a build on linux inputs: CC: default: clang description: C Compiler to use type: string required: true CXX: default: clang++ description: C++ compiler to use type: string required: true modules: default: false description: Flag to install modules or not required: true type: boolean tools: default: none description: Flag to enable tools build required: false type: string pch: default: false description: Flag to enable or disable PCH required: false type: boolean maxerrors: default: 1 description: Max allowed error count before compilation stops required: false type: number keepgoing: default: false description: Flag to continue build after errors required: false type: boolean runs: using: composite steps: - name: Cache uses: actions/cache@v4 if: inputs.pch != 'true' with: path: ${{ github.workspace }}/var/ccache # format # ccache:OS:CC_CXX:MODULES:GITHUB_REF:GITHUB_SHA key: ccache:${{ runner.os }}:${{ inputs.CC }}_${{ inputs.CXX }}:${{ inputs.modules }}:${{ github.ref }}:${{ github.sha }} restore-keys: | ccache:${{ runner.os }}:${{ inputs.CC }}_${{ inputs.CXX }}:${{ inputs.modules }}:${{ github.ref }} ccache:${{ runner.os }}:${{ inputs.CC }}_${{ inputs.CXX }}:${{ inputs.modules }} ccache:${{ runner.os }}:${{ inputs.CC }}_${{ inputs.CXX }} # This script moves sql files from "data/sql/updates/pending_$DB" to the # proper folder for the db - name: Process pending sql shell: bash run: bash apps/ci/ci-pending-sql.sh - name: Install build dependencies shell: bash run: | sudo apt update sudo apt remove needrestart #refer: https://github.com/actions/runner-images/issues/9937 sudo apt-get -y install ccache clang cmake curl google-perftools \ libmysqlclient-dev make unzip build-essential cmake-data \ libboost-all-dev libbz2-dev libncurses5-dev libmysql++-dev \ libreadline6-dev libssl-dev libtool openssl zlib1g-dev # Account for https://github.com/actions/runner-images/issues/8659 # based off of https://github.com/actions/runner-images/issues/8659#issuecomment-1852353116 UBUNTU_VERSION="$(grep VERSION_ID /etc/os-release | cut -f2 -d\")" source /etc/os-release if [[ "$VERSION_CODENAME" == "jammy" ]]; then if [[ "${{ inputs.cc }}" =~ "clang-" ]]; then CLANG_VERSION="$(echo '${{ inputs.cc }}' | cut -f2 -d\-)" wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo add-apt-repository "deb http://apt.llvm.org/$VERSION_CODENAME/ llvm-toolchain-$VERSION_CODENAME-$CLANG_VERSION main" sudo apt-get -qq update sudo apt-get -qq install '${{ inputs.cc }}' fi fi - name: setup ccache shell: bash env: CCACHE_DIR: $GITHUB_WORKSPACE/var/ccache run: | cat <> $GITHUB_ENV CCACHE_DIR=${{ env.CCACHE_DIR }} CCACHE_MAXSIZE=1000MB CCACHE_SLOPPINESS=pch_defines,time_macros,include_file_mtime CCACHE_CPP2=true CCACHE_COMPRESS=1 CCACHE_COMPRESSLEVEL=9 CCACHE_COMPILERCHECK=content CCACHE_LOGFILE=$CCACHE_DIR/cache.debug CC=${{ inputs.CC }} CXX=${{ inputs.CXX }} EOF - name: Configure shell: bash run: | set -x mkdir build cd build cmake "$GITHUB_WORKSPACE" \ -DCMAKE_INSTALL_PREFIX="$GITHUB_WORKSPACE/env/dist" \ -DAPPS_BUILD="all" \ -DTOOLS_BUILD=${{ inputs.tools }} \ -DSCRIPTS="static" \ -DMODULES="static" \ -DWITH_WARNINGS="ON" \ -DCMAKE_BUILD_TYPE="Release" \ -DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \ -DCMAKE_C_COMPILER_LAUNCHER="ccache" \ -DCMAKE_C_FLAGS="-Werror ${{ startsWith(inputs.cc, 'clang') && '-ferror-limit=' || '-fmax-errors=' }}${{inputs.maxerrors}} " \ -DCMAKE_CXX_FLAGS="-Werror ${{ startsWith(inputs.cxx, 'clang') && '-ferror-limit=' || '-fmax-errors=' }}${{inputs.maxerrors}}" \ -DBUILD_TESTING="ON" \ -DUSE_SCRIPTPCH=${{ inputs.pch == 'true' && 'ON' || '' }} \ -DUSE_COREPCH=${{ inputs.pch == 'true' && 'ON' || '' }} \ ${{ inputs.pch == 'true' && '' || '-DNOPCH=true' }} - name: build shell: bash working-directory: "${{ github.workspace }}/build" run: | # '--' passes '--keep-going' to the underlying build system (make) cmake --build . --config "Release" -j "$(($(nproc) + 2))" ${{ inputs.keepgoing == 'true' && '-- --keep-going' || '' }} - name: install shell: bash working-directory: "${{ github.workspace }}/build" run: cmake --install . --config "Release" - name: Setup config shell: bash run: | ls -1 env/dist/etc/*.conf.dist | while read -r dist; do # chop the ".dist" off the end config_name="$(<<< $dist rev | cut -f1 -d\. --complement | rev)" cp -v "$dist" "$config_name" done cat <> $GITHUB_ENV AC_LOGIN_DATABASE_INFO=localhost;3306;root;root;acore_auth AC_CHARACTER_DATABASE_INFO=localhost;3306;root;root;acore_characters AC_WORLD_DATABASE_INFO=localhost;3306;root;root;acore_world AC_DATA_DIR=env/dist/data AC_LOGS_DIR=env/dist/logs EOF - name: get dbc files shell: bash run: | git clone --depth 1 --branch master --single-branch https://github.com/ac-data/ac-data.git "$AC_DATA_DIR" - name: Start MySQL container shell: bash run: sudo systemctl start mysql.service - name: Dry run authserver shell: bash run: timeout 5m env/dist/bin/authserver --dry-run - name: Dry run worldserver shell: bash run: timeout 5m env/dist/bin/worldserver --dry-run - name: Check startup errors shell: bash run: | error_log="$AC_LOGS_DIR/Errors.log" # -s checks if the file's size is greater than 0 bytes # ! -s checks if the file's size is less than/equal to 0 bytes # if the error log is empty, exit without error [[ ! -s "$error_log" ]] && exit 0 printf "The Errors.log file contains startup errors:\n\n" cat "$error_log" printf "\nPlease solve the startup errors listed above!\n" exit 1 - name: Run unit tests shell: bash run: | if [[ -f build/obj/src/test/unit_tests ]]; then build/obj/src/test/unit_tests else exit 0 fi