Merge remote-tracking branch 'upstream/master' into test-staging

# Conflicts:
#	.github/workflows/windows_build.yml
#	src/server/game/Handlers/CharacterHandler.cpp
This commit is contained in:
Keleborn
2026-07-17 15:15:37 -07:00
156 changed files with 2834 additions and 948 deletions

8
.github/SECURITY.md vendored
View File

@@ -23,10 +23,10 @@ We support the following versions of dependencies.
### Supported Operating Systems
| Linux (Ubuntu) | Status | Recommended |
| :------------- | :----------------: | :------------------: |
| 24.04 | :white_check_mark: | :large_blue_diamond: |
| 22.04 | :white_check_mark: | |
| 20.04 ≤ | :red_circle: | |
|:---------------| :----------------: | :------------------: |
| 26.04 | :white_check_mark: | :large_blue_diamond: |
| 24.04 | :white_check_mark: | |
| 22.04 ≤ | :red_circle: | |
| macOS | Status | Recommended |
| :---- | :----------------: | :------------------: |

View File

@@ -64,23 +64,14 @@ runs:
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 \
sudo apt-get -y install ccache clang cmake curl \
make unzip build-essential cmake-data \
libboost-all-dev libbz2-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
if [[ "$(lsb_release -sr)" == "26.04" ]]; then
sudo apt-get -y install libgoogle-perftools-dev default-libmysqlclient-dev
else
sudo apt-get -y install google-perftools libmysqlclient-dev libncurses5-dev
fi
- name: setup ccache

View File

@@ -19,14 +19,14 @@ The PR Reviewer agent is configured to review pull requests with deep understand
- Testing and validation requirements
- Security and quality standards
**Key Feature**: This agent always references `/CLAUDE.md`, the C++ Code Standards wiki, and the SQL Standards wiki before reviewing any PR.
**Key Feature**: This agent always references `/AGENTS.md`, the C++ Code Standards wiki, and the SQL Standards wiki before reviewing any PR.
## How It Works
When an AI tool reviews a PR in this repository:
1. The tool reads the appropriate agent configuration from this directory
2. The agent configuration instructs it to read `/CLAUDE.md` for full project context
2. The agent configuration instructs it to read `/AGENTS.md` for full project context
3. For C++ changes, the agent also references the [C++ Code Standards wiki](https://github.com/azerothcore/wiki/blob/master/docs/cpp-code-standards.md)
4. For SQL changes, the agent also references the [SQL Standards wiki](https://github.com/azerothcore/wiki/blob/master/docs/sql-standards.md)
5. The agent applies project-specific rules during review
@@ -36,7 +36,7 @@ When an AI tool reviews a PR in this repository:
If you're using AI tools to assist with contributions:
1. Familiarize yourself with `/CLAUDE.md` - it contains essential project knowledge
1. Familiarize yourself with `/AGENTS.md` - it contains essential project knowledge
2. Review the [C++ Code Standards](https://github.com/azerothcore/wiki/blob/master/docs/cpp-code-standards.md) for C++ contributions
3. Review the [SQL Standards](https://github.com/azerothcore/wiki/blob/master/docs/sql-standards.md) for database contributions
4. The AI agents will help ensure your changes follow project standards
@@ -47,13 +47,13 @@ If you're using AI tools to assist with contributions:
To update agent configurations:
1. Edit the relevant `.md` file in this directory
2. Ensure any changes align with documentation in `/CLAUDE.md` and the wiki standards
2. Ensure any changes align with documentation in `/AGENTS.md` and the wiki standards
3. Test the updated configuration with a sample PR review
4. Commit changes following the project's commit message format
## References
- Project guidelines: `/CLAUDE.md`
- Project guidelines: `/AGENTS.md`
- C++ standards: [C++ Code Standards](https://github.com/azerothcore/wiki/blob/master/docs/cpp-code-standards.md)
- SQL standards: [SQL Standards](https://github.com/azerothcore/wiki/blob/master/docs/sql-standards.md)
- PR template: `/pull_request_template.md`

View File

@@ -5,13 +5,13 @@ You are an expert code reviewer for the AzerothCore project. When reviewing pull
## Required Reading
Before reviewing any PR, you MUST read and follow the instructions in:
- `/CLAUDE.md` - Contains comprehensive project architecture, coding standards, build instructions, and PR requirements
- `/AGENTS.md` - Contains comprehensive project architecture, coding standards, build instructions, and PR requirements
- [C++ Code Standards](https://github.com/azerothcore/wiki/blob/master/docs/cpp-code-standards.md) - Detailed C++ coding conventions and style guide
- [SQL Standards](https://github.com/azerothcore/wiki/blob/master/docs/sql-standards.md) - SQL query formatting and database standards
## Key Review Focus Areas
Based on CLAUDE.md, always verify:
Based on AGENTS.md, always verify:
### 1. Commit Message Format
- Uses Conventional Commits: `Type(Scope/Subscope): Short description`
@@ -95,7 +95,7 @@ Based on CLAUDE.md, always verify:
## Review Process
1. Read CLAUDE.md to understand project context
1. Read AGENTS.md to understand project context
2. Review C++ Code Standards wiki for C++ changes
3. Review SQL Standards wiki for database changes
4. Check commit message format
@@ -108,7 +108,7 @@ Based on CLAUDE.md, always verify:
## Feedback Style
- Be constructive and educational
- Reference specific sections of CLAUDE.md, C++ Code Standards, or SQL Standards when applicable
- Reference specific sections of AGENTS.md, C++ Code Standards, or SQL Standards when applicable
- Suggest specific fixes with code examples if necessary
- Highlight both issues and good practices
- For C++ issues, cite specific rule from C++ Code Standards wiki

View File

@@ -25,10 +25,6 @@ jobs:
fail-fast: true
matrix:
include:
- os: ubuntu-22.04
compiler:
CC: clang-15
CXX: clang++-15
- os: ubuntu-24.04
compiler:
CC: clang-18
@@ -37,6 +33,10 @@ jobs:
compiler:
CC: gcc-14
CXX: g++-14
- os: ubuntu-26.04
compiler:
CC: clang-20
CXX: clang++-20
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-nopch
if: github.repository == 'mod-playerbots/azerothcore-wotlk' && !github.event.pull_request.draft

View File

@@ -25,14 +25,14 @@ jobs:
fail-fast: true
matrix:
include:
- os: ubuntu-22.04
compiler:
CC: clang-15
CXX: clang++-15
- os: ubuntu-24.04
compiler:
CC: clang-18
CXX: clang++-18
- os: ubuntu-26.04
compiler:
CC: clang-20
CXX: clang++-20
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-pch
if: github.repository == 'mod-playerbots/azerothcore-wotlk' && !github.event.pull_request.draft

View File

@@ -42,8 +42,8 @@ jobs:
fail-fast: true
matrix:
include:
- os: ubuntu-22.04
- os: ubuntu-24.04
- os: ubuntu-26.04
runs-on: ${{ matrix.os }}
if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
@@ -74,8 +74,8 @@ jobs:
fail-fast: true
matrix:
include:
- os: ubuntu-22.04
- os: ubuntu-24.04
- os: ubuntu-26.04
runs-on: ${{ matrix.os }}
if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
steps:

View File

@@ -39,15 +39,73 @@ jobs:
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.13
# Cache the fetched Boost + MySQL client so we don't re-download ~350 MB
# and re-run the Boost installer on every run. The Test-Path guards in
# "Configure OS" short-circuit the install work when these are restored.
- name: Cache Boost & MySQL
uses: actions/cache@v4
with:
path: |
C:\local\boost_1_87_0
C:\tools\mysql\current
key: winbuild-deps:boost-1.87.0:mysql-8.4.9
- name: Configure OS
shell: bash
env:
CONTINUOUS_INTEGRATION: true
shell: pwsh
run: |
cd C:/ac
./acore.sh install-deps
$ErrorActionPreference = 'Stop'
# The windows-latest runner image already ships CMake, Visual Studio
# (with the native desktop workload + MSVC) and OpenSSL, so we only need to
# provide Boost and the MySQL client libraries. We fetch these directly
# instead of via chocolatey, whose pinned packages keep breaking on CI
# (VS detection failures and slproweb removing old OpenSSL installers).
# --- Boost 1.87.0 (msvc-14.3, 64-bit) prebuilt binaries -> C:\local\boost_1_87_0 (BOOST_ROOT) ---
# Use the direct-download host; the plain /download URL serves an HTML interstitial.
if (-not (Test-Path 'C:\local\boost_1_87_0\boost'))
{
$boostExe = Join-Path $env:RUNNER_TEMP 'boost.exe'
Invoke-WebRequest -Uri 'https://master.dl.sourceforge.net/project/boost/boost-binaries/1.87.0/boost_1_87_0-msvc-14.3-64.exe?viasf=1' -OutFile $boostExe
$boostMB = (Get-Item $boostExe).Length / 1MB
Write-Host ("Downloaded Boost installer: {0:N1} MB" -f $boostMB)
if ($boostMB -lt 50) { throw "Boost installer download looks wrong ($([int]$boostMB) MB) - likely an HTML page." }
$boostProc = Start-Process -FilePath $boostExe -ArgumentList '/VERYSILENT','/SUPPRESSMSGBOXES','/NORESTART','/DIR=C:\local\boost_1_87_0' -Wait -PassThru
if ($boostProc.ExitCode -ne 0) { throw "Boost installer failed with exit code $($boostProc.ExitCode)." }
# Fail fast if the installer "succeeded" but didn't lay down the expected tree,
# instead of surfacing a cryptic error later during CMake configuration.
if (-not (Test-Path 'C:\local\boost_1_87_0\boost\version.hpp')) { throw 'Boost install missing headers at C:\local\boost_1_87_0\boost.' }
if (-not (Test-Path 'C:\local\boost_1_87_0\lib64-msvc-14.3')) { throw 'Boost install missing prebuilt libs at C:\local\boost_1_87_0\lib64-msvc-14.3.' }
}
# --- MySQL 8.4 client headers + libs -> C:\tools\mysql\current (path the build expects) ---
if (-not (Test-Path 'C:\tools\mysql\current\lib\mysqlclient.lib'))
{
# Use the archives CDN directly (keeps every version, unlike dev.mysql.com/get which only
# serves the current GA). A browser user-agent is required or Oracle returns an HTML error page.
$mysqlZip = Join-Path $env:RUNNER_TEMP 'mysql.zip'
Invoke-WebRequest -Uri 'https://cdn.mysql.com/archives/mysql-8.4/mysql-8.4.9-winx64.zip' -OutFile $mysqlZip -UserAgent 'Mozilla/5.0'
$mysqlMB = (Get-Item $mysqlZip).Length / 1MB
Write-Host ("Downloaded MySQL zip: {0:N1} MB" -f $mysqlMB)
if ($mysqlMB -lt 50) { throw "MySQL zip download looks wrong ($([int]$mysqlMB) MB)." }
New-Item -ItemType Directory -Force -Path 'C:\tools\mysql' | Out-Null
Expand-Archive -Path $mysqlZip -DestinationPath 'C:\tools\mysql' -Force
if (Test-Path 'C:\tools\mysql\current') { Remove-Item -Recurse -Force 'C:\tools\mysql\current' }
Rename-Item 'C:\tools\mysql\mysql-8.4.9-winx64' 'C:\tools\mysql\current'
# Fail fast if the archive layout changed and the client import library isn't
# where the build expects it, rather than failing later during CMake/link.
if (-not (Test-Path 'C:\tools\mysql\current\lib\mysqlclient.lib')) { throw 'MySQL client import library missing at C:\tools\mysql\current\lib\mysqlclient.lib.' }
}
# --- OpenSSL: use the copy already installed on the runner image ---
$opensslRoot = @($env:OPENSSL_ROOT_DIR, 'C:\Program Files\OpenSSL', 'C:\Program Files\OpenSSL-Win64') |
Where-Object { $_ -and (Test-Path (Join-Path $_ 'include\openssl\opensslv.h')) } |
Select-Object -First 1
if (-not $opensslRoot)
{
throw 'No OpenSSL development install found on the runner image.'
}
"OPENSSL_ROOT_DIR=$opensslRoot" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
Write-Host "Using OpenSSL at $opensslRoot"
- name: Build
shell: bash
run: |