feat(CI): rework core ubuntu build, ubuntu-22 support (#17281)

feat(CI): rework core ubuntu build
This commit is contained in:
Mike Delago
2024-03-27 14:58:27 -04:00
committed by GitHub
parent 02cf369fe2
commit 3ff8de2086
4 changed files with 226 additions and 87 deletions

174
.github/actions/linux-build/action.yml vendored Normal file
View File

@@ -0,0 +1,174 @@
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
pch:
default: false
description: Flag to enable or disable PCH
required: false
type: boolean
runs:
using: composite
steps:
- name: Cache
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/var/ccache
# format
# ccache:OS:CC_CXX:MODULES:GITHUB_REF:GITHUB_SHA
key: ccache:ubuntu-latest:${{ inputs.CC }}_${{ inputs.CXX }}:${{ inputs.modules }}:${{ github.ref }}:${{ github.sha }}
restore-keys: |
ccache:ubuntu-latest:${{ inputs.CC }}_${{ inputs.CXX }}:${{ inputs.modules }}:${{ github.ref }}
ccache:ubuntu-latest:${{ inputs.CC }}_${{ inputs.CXX }}:${{ inputs.modules }}
ccache:ubuntu-latest:${{ 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-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 <<EOF >> $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="all" \
-DSCRIPTS="static" \
-DMODULES="static" \
-DWITH_WARNINGS="ON" \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \
-DCMAKE_C_COMPILER_LAUNCHER="ccache" \
-DBUILD_TESTING="ON" \
-DUSE_SCRIPTPCH=${{ inputs.pch && 'ON' || '' }} \
-DUSE_COREPCH=${{ inputs.pch && 'ON' || '' }} \
${{ !inputs.pch && '-DNOPCH=true' || '' }}
- name: build
shell: bash
working-directory: "${{ github.workspace }}/build"
run: cmake --build . --config "Release" -j "$(($(nproc) + 2))"
- 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 <<EOF >> $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
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: run dbimport
shell: bash
run: env/dist/bin/dbimport
- 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="./env/dist/bin/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

View File

@@ -4,7 +4,10 @@ on:
branches:
- 'master'
pull_request:
types: ['opened', 'synchronize', 'reopened']
types:
- opened
- reopened
- synchronize
concurrency:
group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }})
@@ -15,42 +18,30 @@ jobs:
strategy:
fail-fast: false
matrix:
# the result of the matrix will be the combination of all attributes, so we get os*compiler builds
include:
- os: ubuntu-20.04
compiler: clang12
compiler:
CC: gcc-10
CXX: g++-10
- os: ubuntu-20.04
compiler: gcc10
compiler:
CC: clang-12
CXX: clang++-12
- os: ubuntu-22.04
compiler:
CC: clang-15
CXX: clang++-15
- os: ubuntu-22.04
compiler:
CC: gcc-13
CXX: g++-13
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler }}-nopch
env:
COMPILER: ${{ matrix.compiler }}
name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-nopch
if: github.repository == 'azerothcore/azerothcore-wotlk'
steps:
- uses: actions/checkout@v4
- name: Cache
uses: actions/cache@v3
- uses: ./.github/actions/linux-build
with:
path: var/ccache
key: ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }}:${{ github.sha }}
restore-keys: |
ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }}
ccache:${{ matrix.os }}:${{ matrix.compiler }}
- name: Configure OS
run: source ./acore.sh install-deps
env:
CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh
run: source ./apps/ci/ci-conf-core.sh
- name: Process pending sql
run: bash bin/acore-db-pendings
- name: Build
run: source ./apps/ci/ci-compile.sh
- name: Dry run authserver
run: source ./apps/ci/ci-dry-run.sh authserver
- name: Dry run worldserver
run: source ./apps/ci/ci-dry-run.sh worldserver
- name: Check startup errors
run: source ./apps/ci/ci-error-check.sh
- name: Run unit tests
run: source ./apps/ci/ci-run-unit-tests.sh
CC: ${{ matrix.compiler.CC }}
CXX: ${{ matrix.compiler.CXX }}
pch: false

View File

@@ -15,32 +15,30 @@ jobs:
strategy:
fail-fast: false
matrix:
# the result of the matrix will be the combination of all attributes, so we get os*compiler builds
include:
- os: ubuntu-20.04
compiler: clang12
compiler:
CC: gcc-10
CXX: g++-10
- os: ubuntu-20.04
compiler:
CC: clang-12
CXX: clang++-12
- os: ubuntu-22.04
compiler:
CC: clang-15
CXX: clang++-15
- os: ubuntu-22.04
compiler:
CC: gcc-13
CXX: g++-13
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler }}-pch
env:
COMPILER: ${{ matrix.compiler }}
name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-nopch
if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v4
- name: Configure OS
run: source ./acore.sh install-deps
env:
CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh
run: source ./apps/ci/ci-conf-core-pch.sh
- name: Process pending sql
run: bash bin/acore-db-pendings
- name: Build
run: source ./apps/ci/ci-compile.sh
- name: Dry run authserver
run: source ./apps/ci/ci-dry-run.sh authserver
- name: Dry run worldserver
run: source ./apps/ci/ci-dry-run.sh worldserver
- name: Check startup errors
run: source ./apps/ci/ci-error-check.sh
- name: Run unit tests
run: source ./apps/ci/ci-run-unit-tests.sh
- uses: ./.github/actions/linux-build
with:
CC: ${{ matrix.compiler.CC }}
CXX: ${{ matrix.compiler.CXX }}
pch: true

View File

@@ -12,22 +12,13 @@ concurrency:
jobs:
build-modules:
strategy:
fail-fast: false
matrix:
# the result of the matrix will be the combination of all attributes, so we get os*compiler*modules builds
os: [ubuntu-20.04]
compiler: [clang]
modules: [with]
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler }}-${{ matrix.modules }}-modules
env:
COMPILER: ${{ matrix.compiler }}
runs-on: ubuntu-latest
name: modules build on latest ubuntu
if: |
github.repository == 'azerothcore/azerothcore-wotlk'
&& !github.event.pull_request.draft
&& (
github.ref == 'refs/heads/master'
github.ref_name == 'master'
|| contains(github.event.pull_request.labels.*.name, 'file-cpp'
|| github.event.label.name == 'file-cpp'
|| contains(github.event.pull_request.labels.*.name, 'run-build')
@@ -35,24 +26,9 @@ jobs:
)
steps:
- uses: actions/checkout@v4
- name: Checkout modules
run: ./apps/ci/ci-install-modules.sh
if: matrix.modules == 'with'
- name: Cache
uses: actions/cache@v3
- uses: ./.github/actions/linux-build
with:
path: var/ccache
key: ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.modules }}-modules:${{ github.ref }}:${{ github.sha }}
restore-keys: |
ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.modules }}-modules:${{ github.ref }}
ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.modules }}-modules
- name: Configure OS
run: source ./acore.sh install-deps
env:
CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh
run: source ./apps/ci/ci-conf-core.sh
- name: Process pending sql
run: bash bin/acore-db-pendings
- name: Build
run: source ./apps/ci/ci-compile.sh
CC: clang-15
CXX: clang++-15
modules: true
pch: false