708 lines
26 KiB
YAML
708 lines
26 KiB
YAML
name: Continuous Integration
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
cmake:
|
|
name: CMake Buildsystem
|
|
if: "!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[ci skip]')"
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
profile:
|
|
- ubuntu-bionic-double-standard-unity-makefile
|
|
- ubuntu-bionic-coverage-ninja
|
|
#- macos-coverage-unity-xcode
|
|
- macos-nometa-standard-makefile
|
|
- windows-standard-unity-msvc
|
|
- windows-nopython-nometa-standard-msvc
|
|
|
|
include:
|
|
- profile: ubuntu-bionic-double-standard-unity-makefile
|
|
os: ubuntu-22.04
|
|
config: Standard
|
|
unity: YES
|
|
generator: Unix Makefiles
|
|
compiler: Default
|
|
metalibs: YES
|
|
python: YES
|
|
eigen: NO
|
|
double: YES
|
|
|
|
- profile: ubuntu-bionic-coverage-ninja
|
|
os: ubuntu-22.04
|
|
config: Coverage
|
|
unity: NO
|
|
generator: Ninja
|
|
compiler: Clang
|
|
metalibs: YES
|
|
python: YES
|
|
eigen: NO
|
|
double: NO
|
|
|
|
#- profile: macos-coverage-unity-xcode
|
|
# os: macOS-15
|
|
# config: Coverage
|
|
# unity: YES
|
|
# generator: Xcode
|
|
# compiler: Default
|
|
# metalibs: YES
|
|
# python: YES
|
|
# eigen: NO
|
|
# double: NO
|
|
|
|
- profile: macos-nometa-standard-makefile
|
|
os: macOS-15
|
|
config: Standard
|
|
unity: NO
|
|
generator: Unix Makefiles
|
|
compiler: Default
|
|
metalibs: NO
|
|
python: YES
|
|
eigen: NO
|
|
double: NO
|
|
|
|
- profile: windows-standard-unity-msvc
|
|
os: windows-2022
|
|
config: Standard
|
|
unity: YES
|
|
generator: Visual Studio 17 2022
|
|
compiler: Default
|
|
metalibs: YES
|
|
python: YES
|
|
eigen: NO
|
|
double: NO
|
|
|
|
- profile: windows-nopython-nometa-standard-msvc
|
|
os: windows-2022
|
|
config: Standard
|
|
unity: NO
|
|
generator: Visual Studio 17 2022
|
|
compiler: Default
|
|
metalibs: NO
|
|
python: NO
|
|
eigen: NO
|
|
double: NO
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 10
|
|
|
|
- name: Self-destruct makepanda
|
|
run: python3 makepanda/selfdestruct.py --yes
|
|
|
|
- name: Install dependencies (macOS)
|
|
if: runner.os == 'macOS'
|
|
run: |
|
|
curl -O https://www.panda3d.org/download/panda3d-1.10.15/panda3d-1.10.15-tools-mac.tar.gz
|
|
tar -xf panda3d-1.10.15-tools-mac.tar.gz
|
|
mv panda3d-1.10.15/thirdparty thirdparty
|
|
rmdir panda3d-1.10.15
|
|
|
|
# Temporary hack so that pzip can run, since we are about to remove Cg anyway.
|
|
install_name_tool -id "$(pwd)/thirdparty/darwin-libs-a/nvidiacg/lib/libCg.dylib" thirdparty/darwin-libs-a/nvidiacg/lib/libCg.dylib
|
|
|
|
brew install ccache
|
|
|
|
- name: Set up XCode (macOS)
|
|
if: runner.os == 'macOS'
|
|
run: sudo xcode-select -s /Applications/Xcode_16.app/Contents/Developer
|
|
|
|
- name: Install dependencies (Ubuntu)
|
|
if: startsWith(matrix.os, 'ubuntu')
|
|
run: >
|
|
sudo apt-get update
|
|
|
|
sudo apt-get install
|
|
build-essential ninja-build clang llvm ccache
|
|
bison flex
|
|
libeigen3-dev libfreetype6-dev libgl1-mesa-dev libjpeg-dev libode-dev
|
|
libopenal-dev libpng-dev libssl-dev libvorbis-dev libx11-dev
|
|
libxcursor-dev libxrandr-dev nvidia-cg-toolkit zlib1g-dev
|
|
python3-setuptools python3-tk
|
|
|
|
- name: Cache dependencies (Windows)
|
|
if: runner.os == 'Windows'
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: thirdparty
|
|
key: ci-cmake-${{ runner.OS }}-thirdparty-v1.10.15-r1
|
|
- name: Install dependencies (Windows)
|
|
if: runner.os == 'Windows'
|
|
shell: powershell
|
|
run: |
|
|
if (!(Test-Path thirdparty/win-libs-vc14-x64)) {
|
|
$wc = New-Object System.Net.WebClient
|
|
$wc.DownloadFile("https://www.panda3d.org/download/panda3d-1.10.15/panda3d-1.10.15-tools-win64.zip", "thirdparty-tools.zip")
|
|
Expand-Archive -Path thirdparty-tools.zip
|
|
Move-Item -Path thirdparty-tools/panda3d-1.10.15/thirdparty -Destination .
|
|
}
|
|
|
|
- name: ccache (non-Windows)
|
|
if: runner.os != 'Windows'
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: ccache
|
|
key: ci-cmake-ccache-${{ matrix.profile }}
|
|
|
|
- name: Configure
|
|
shell: bash
|
|
env:
|
|
CMAKE_GENERATOR: "${{ matrix.generator }}"
|
|
run: >
|
|
mkdir -p build
|
|
|
|
cd build
|
|
|
|
if ${{ matrix.compiler == 'Clang' }}; then
|
|
if [[ "$CMAKE_GENERATOR" =~ Studio.+20(19|22) ]]; then
|
|
export CMAKE_GENERATOR_TOOLSET=ClangCL
|
|
elif [[ "$CMAKE_GENERATOR" == *Studio* ]]; then
|
|
export CMAKE_GENERATOR_TOOLSET=LLVM
|
|
else
|
|
export CC=clang CXX=clang++
|
|
fi
|
|
fi
|
|
|
|
if ${{ runner.os != 'Windows' }}; then
|
|
compilerLauncher=$(echo -DCMAKE_C{,XX}_COMPILER_LAUNCHER=ccache)
|
|
export CCACHE_DIR="$(dirname $PWD)/ccache"
|
|
echo "CCACHE_DIR=$(dirname $PWD)/ccache" >> $GITHUB_ENV
|
|
fi
|
|
|
|
cmake
|
|
${compilerLauncher:-}
|
|
-D CMAKE_UNITY_BUILD=${{ matrix.unity }}
|
|
-D CMAKE_BUILD_TYPE="${{ matrix.config }}"
|
|
-D BUILD_METALIBS=${{ matrix.metalibs }}
|
|
-D HAVE_PYTHON=${{ runner.os != 'Windows' && matrix.python || 'NO' }}
|
|
-D HAVE_EIGEN=${{ matrix.eigen }}
|
|
-D STDFLOAT_DOUBLE=${{ matrix.double }}
|
|
..
|
|
|
|
- name: Build (no Python)
|
|
if: contains(matrix.python, 'NO')
|
|
# BEGIN A
|
|
working-directory: build
|
|
run: cmake --build . --config ${{ matrix.config }} --parallel 4
|
|
# END A
|
|
|
|
- name: Setup Python (Python 3.8)
|
|
if: contains(matrix.python, 'YES')
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.8'
|
|
- name: Configure (Python 3.8)
|
|
if: contains(matrix.python, 'YES')
|
|
working-directory: build
|
|
shell: bash
|
|
run: >
|
|
cmake -DWANT_PYTHON_VERSION=3.8 -DHAVE_PYTHON=YES
|
|
-DPython_FIND_REGISTRY=NEVER -DPython_ROOT="$pythonLocation" .
|
|
- name: Build (Python 3.8)
|
|
if: contains(matrix.python, 'YES')
|
|
# BEGIN A
|
|
working-directory: build
|
|
run: cmake --build . --config ${{ matrix.config }} --parallel 4
|
|
# END A
|
|
- name: Test (Python 3.8)
|
|
# BEGIN B
|
|
if: contains(matrix.python, 'YES')
|
|
working-directory: build
|
|
shell: bash
|
|
env:
|
|
PYTHONPATH: ${{ matrix.config }}
|
|
run: |
|
|
PYTHON_EXECUTABLE=$(grep 'Python_EXECUTABLE:' CMakeCache.txt | sed 's/.*=//')
|
|
$PYTHON_EXECUTABLE -m pip install -r ../requirements-test.txt
|
|
export COVERAGE_FILE=.coverage.$RANDOM LLVM_PROFILE_FILE=$PWD/pid-%p.profraw
|
|
$PYTHON_EXECUTABLE -m pytest ../tests --cov=.
|
|
# END B
|
|
|
|
- name: Setup Python (Python 3.9)
|
|
if: contains(matrix.python, 'YES')
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.9'
|
|
- name: Configure (Python 3.9)
|
|
if: contains(matrix.python, 'YES')
|
|
working-directory: build
|
|
shell: bash
|
|
run: >
|
|
cmake -DWANT_PYTHON_VERSION=3.9 -DHAVE_PYTHON=YES
|
|
-DPython_FIND_REGISTRY=NEVER -DPython_ROOT="$pythonLocation" .
|
|
- name: Build (Python 3.9)
|
|
if: contains(matrix.python, 'YES')
|
|
# BEGIN A
|
|
working-directory: build
|
|
run: cmake --build . --config ${{ matrix.config }} --parallel 4
|
|
# END A
|
|
- name: Test (Python 3.9)
|
|
# BEGIN B
|
|
if: contains(matrix.python, 'YES')
|
|
working-directory: build
|
|
shell: bash
|
|
env:
|
|
PYTHONPATH: ${{ matrix.config }}
|
|
run: |
|
|
PYTHON_EXECUTABLE=$(grep 'Python_EXECUTABLE:' CMakeCache.txt | sed 's/.*=//')
|
|
$PYTHON_EXECUTABLE -m pip install -r ../requirements-test.txt
|
|
export COVERAGE_FILE=.coverage.$RANDOM LLVM_PROFILE_FILE=$PWD/pid-%p.profraw
|
|
$PYTHON_EXECUTABLE -m pytest ../tests --cov=.
|
|
# END B
|
|
|
|
- name: Setup Python (Python 3.10)
|
|
if: contains(matrix.python, 'YES')
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.10'
|
|
- name: Configure (Python 3.10)
|
|
if: contains(matrix.python, 'YES')
|
|
working-directory: build
|
|
shell: bash
|
|
run: >
|
|
cmake -DWANT_PYTHON_VERSION=3.10 -DHAVE_PYTHON=YES
|
|
-DPython_FIND_REGISTRY=NEVER -DPython_ROOT="$pythonLocation" .
|
|
- name: Build (Python 3.10)
|
|
if: contains(matrix.python, 'YES')
|
|
# BEGIN A
|
|
working-directory: build
|
|
run: cmake --build . --config ${{ matrix.config }} --parallel 4
|
|
# END A
|
|
- name: Test (Python 3.10)
|
|
# BEGIN B
|
|
if: contains(matrix.python, 'YES')
|
|
working-directory: build
|
|
shell: bash
|
|
env:
|
|
PYTHONPATH: ${{ matrix.config }}
|
|
run: |
|
|
PYTHON_EXECUTABLE=$(grep 'Python_EXECUTABLE:' CMakeCache.txt | sed 's/.*=//')
|
|
$PYTHON_EXECUTABLE -m pip install -r ../requirements-test.txt
|
|
export COVERAGE_FILE=.coverage.$RANDOM LLVM_PROFILE_FILE=$PWD/pid-%p.profraw
|
|
$PYTHON_EXECUTABLE -m pytest ../tests --cov=.
|
|
# END B
|
|
|
|
- name: Setup Python (Python 3.11)
|
|
if: contains(matrix.python, 'YES')
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.11'
|
|
- name: Configure (Python 3.11)
|
|
if: contains(matrix.python, 'YES')
|
|
working-directory: build
|
|
shell: bash
|
|
run: >
|
|
cmake -DWANT_PYTHON_VERSION=3.11 -DHAVE_PYTHON=YES
|
|
-DPython_FIND_REGISTRY=NEVER -DPython_ROOT="$pythonLocation" .
|
|
- name: Build (Python 3.11)
|
|
if: contains(matrix.python, 'YES')
|
|
# BEGIN A
|
|
working-directory: build
|
|
run: cmake --build . --config ${{ matrix.config }} --parallel 4
|
|
# END A
|
|
- name: Test (Python 3.11)
|
|
# BEGIN B
|
|
if: contains(matrix.python, 'YES')
|
|
working-directory: build
|
|
shell: bash
|
|
env:
|
|
PYTHONPATH: ${{ matrix.config }}
|
|
run: |
|
|
PYTHON_EXECUTABLE=$(grep 'Python_EXECUTABLE:' CMakeCache.txt | sed 's/.*=//')
|
|
$PYTHON_EXECUTABLE -m pip install -r ../requirements-test.txt
|
|
export COVERAGE_FILE=.coverage.$RANDOM LLVM_PROFILE_FILE=$PWD/pid-%p.profraw
|
|
$PYTHON_EXECUTABLE -m pytest ../tests --cov=.
|
|
# END B
|
|
|
|
- name: Setup Python (Python 3.12)
|
|
if: contains(matrix.python, 'YES')
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.12'
|
|
- name: Configure (Python 3.12)
|
|
if: contains(matrix.python, 'YES')
|
|
working-directory: build
|
|
shell: bash
|
|
run: >
|
|
cmake -DWANT_PYTHON_VERSION=3.12 -DHAVE_PYTHON=YES
|
|
-DPython_FIND_REGISTRY=NEVER -DPython_ROOT="$pythonLocation" .
|
|
- name: Build (Python 3.12)
|
|
if: contains(matrix.python, 'YES')
|
|
# BEGIN A
|
|
working-directory: build
|
|
run: cmake --build . --config ${{ matrix.config }} --parallel 4
|
|
# END A
|
|
- name: Test (Python 3.12)
|
|
# BEGIN B
|
|
if: contains(matrix.python, 'YES')
|
|
working-directory: build
|
|
shell: bash
|
|
env:
|
|
PYTHONPATH: ${{ matrix.config }}
|
|
run: |
|
|
PYTHON_EXECUTABLE=$(grep 'Python_EXECUTABLE:' CMakeCache.txt | sed 's/.*=//')
|
|
$PYTHON_EXECUTABLE -m pip install -r ../requirements-test.txt
|
|
export COVERAGE_FILE=.coverage.$RANDOM LLVM_PROFILE_FILE=$PWD/pid-%p.profraw
|
|
$PYTHON_EXECUTABLE -m pytest ../tests --cov=.
|
|
# END B
|
|
|
|
- name: Upload coverage reports
|
|
if: always() && matrix.config == 'Coverage'
|
|
working-directory: build
|
|
shell: bash
|
|
env:
|
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
run: |
|
|
shopt -s expand_aliases
|
|
if ${{ runner.os == 'macOS' }}; then alias llvm-profdata='xcrun llvm-profdata' llvm-cov='xcrun llvm-cov'; fi
|
|
|
|
python -m pip install coverage
|
|
python -m coverage combine $(find . -name '.coverage.*')
|
|
|
|
llvm-profdata merge pid-*.profraw -o coverage.profdata
|
|
llvm-cov show $(grep -Rl LLVM_PROFILE_FILE . | sed 's/^/-object /') -instr-profile=coverage.profdata > coverage.txt
|
|
bash <(curl -s https://codecov.io/bash) -y ../.github/codecov.yml
|
|
|
|
makepanda:
|
|
if: "!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[ci skip]')"
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-22.04, windows-2022, macOS-15]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Install dependencies (Ubuntu)
|
|
if: matrix.os == 'ubuntu-22.04'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install build-essential bison flex libfreetype6-dev libgl1-mesa-dev libjpeg-dev libode-dev libopenal-dev libpng-dev libssl-dev libvorbis-dev libx11-dev libxcursor-dev libxrandr-dev nvidia-cg-toolkit zlib1g-dev
|
|
- name: Get thirdparty packages (Windows)
|
|
if: runner.os == 'Windows'
|
|
shell: powershell
|
|
run: |
|
|
$wc = New-Object System.Net.WebClient
|
|
$wc.DownloadFile("https://www.panda3d.org/download/panda3d-1.10.16/panda3d-1.10.16-tools-win64.zip", "thirdparty-tools.zip")
|
|
Expand-Archive -Path thirdparty-tools.zip
|
|
Move-Item -Path thirdparty-tools/panda3d-1.10.16/thirdparty -Destination .
|
|
- name: Get thirdparty packages (macOS)
|
|
if: runner.os == 'macOS'
|
|
run: |
|
|
curl -O https://www.panda3d.org/download/panda3d-1.10.16/panda3d-1.10.16-tools-mac.tar.gz
|
|
tar -xf panda3d-1.10.16-tools-mac.tar.gz
|
|
mv panda3d-1.10.16/thirdparty thirdparty
|
|
rmdir panda3d-1.10.16
|
|
(cd thirdparty/darwin-libs-a && rm -rf rocket)
|
|
|
|
- name: Set up XCode (macOS)
|
|
if: runner.os == 'macOS'
|
|
run: sudo xcode-select -s /Applications/Xcode_16.app/Contents/Developer
|
|
|
|
- name: Set up Python 3.13
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.13'
|
|
- name: Build Python 3.13
|
|
shell: bash
|
|
run: |
|
|
python makepanda/makepanda.py --git-commit=${{github.sha}} --outputdir=built --everything --no-eigen --python-incdir="$pythonLocation/include" --python-libdir="$pythonLocation/lib" --verbose --threads=4 --windows-sdk=10 --msvc-version=14.3
|
|
- name: Test Python 3.13
|
|
shell: bash
|
|
run: |
|
|
python -m pip install -r requirements-test.txt
|
|
PYTHONPATH=built LD_LIBRARY_PATH=built/lib:$pythonLocation/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
|
|
|
|
- name: Set up Python 3.12
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.12'
|
|
- name: Build Python 3.12 (double)
|
|
shell: bash
|
|
run: |
|
|
python makepanda/makepanda.py --override STDFLOAT_DOUBLE=1 --git-commit=${{github.sha}} --outputdir=built_dbl --everything --no-eigen --python-incdir="$pythonLocation/include" --python-libdir="$pythonLocation/lib" --verbose --threads=4 --windows-sdk=10 --msvc-version=14.3
|
|
- name: Test Python 3.12 (double)
|
|
shell: bash
|
|
run: |
|
|
python -m pip install -r requirements-test.txt
|
|
PYTHONPATH=built_dbl LD_LIBRARY_PATH=built_dbl/lib:$pythonLocation/lib DYLD_LIBRARY_PATH=built_dbl/lib python -m pytest
|
|
|
|
- name: Make installer
|
|
run: |
|
|
python makepanda/makepackage.py --verbose --lzma --outputdir=built_dbl
|
|
|
|
- name: Set up Python 3.11
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.11'
|
|
- name: Build Python 3.11
|
|
shell: bash
|
|
run: |
|
|
python makepanda/makepanda.py --git-commit=${{github.sha}} --outputdir=built --everything --no-eigen --python-incdir="$pythonLocation/include" --python-libdir="$pythonLocation/lib" --verbose --threads=4 --windows-sdk=10 --msvc-version=14.3
|
|
- name: Test Python 3.11
|
|
shell: bash
|
|
run: |
|
|
python -m pip install -r requirements-test.txt
|
|
PYTHONPATH=built LD_LIBRARY_PATH=built/lib:$pythonLocation/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
|
|
|
|
- name: Set up Python 3.10
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.10'
|
|
- name: Build Python 3.10
|
|
shell: bash
|
|
run: |
|
|
python makepanda/makepanda.py --git-commit=${{github.sha}} --outputdir=built --everything --no-eigen --python-incdir="$pythonLocation/include" --python-libdir="$pythonLocation/lib" --verbose --threads=4 --windows-sdk=10 --msvc-version=14.3
|
|
- name: Test Python 3.10
|
|
shell: bash
|
|
run: |
|
|
python -m pip install -r requirements-test.txt
|
|
PYTHONPATH=built LD_LIBRARY_PATH=built/lib:$pythonLocation/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
|
|
|
|
- name: Set up Python 3.9
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.9'
|
|
- name: Build Python 3.9
|
|
shell: bash
|
|
run: |
|
|
python makepanda/makepanda.py --git-commit=${{github.sha}} --outputdir=built --everything --no-eigen --python-incdir="$pythonLocation/include" --python-libdir="$pythonLocation/lib" --verbose --threads=4 --windows-sdk=10 --msvc-version=14.3
|
|
- name: Test Python 3.9
|
|
shell: bash
|
|
run: |
|
|
python -m pip install -r requirements-test.txt
|
|
PYTHONPATH=built LD_LIBRARY_PATH=built/lib:$pythonLocation/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
|
|
|
|
- name: Set up Python 3.8
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.8'
|
|
- name: Build Python 3.8
|
|
shell: bash
|
|
run: |
|
|
python makepanda/makepanda.py --git-commit=${{github.sha}} --outputdir=built --everything --no-eigen --python-incdir="$pythonLocation/include" --python-libdir="$pythonLocation/lib" --verbose --threads=4 --windows-sdk=10 --msvc-version=14.3
|
|
- name: Test Python 3.8
|
|
shell: bash
|
|
run: |
|
|
python -m pip install -r requirements-test.txt
|
|
PYTHONPATH=built LD_LIBRARY_PATH=built/lib:$pythonLocation/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
|
|
|
|
- name: Make installer
|
|
run: |
|
|
python makepanda/makepackage.py --verbose --lzma
|
|
|
|
emscripten:
|
|
if: "!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[ci skip]')"
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install build-essential ninja-build bison flex nodejs python3-pip
|
|
|
|
- name: Setup emsdk
|
|
uses: mymindstorm/setup-emsdk@v14
|
|
with:
|
|
version: 4.0.2
|
|
actions-cache-folder: 'emsdk-cache'
|
|
|
|
- name: Restore Python build cache
|
|
id: cache-emscripten-python-restore
|
|
uses: actions/cache/restore@v5
|
|
with:
|
|
path: ~/python
|
|
key: cache-emscripten-python-3.12.8
|
|
|
|
- name: Build Python 3.12
|
|
if: steps.cache-emscripten-python-restore.outputs.cache-hit != 'true'
|
|
run: |
|
|
wget https://www.python.org/ftp/python/3.12.8/Python-3.12.8.tar.xz
|
|
tar -xJf Python-3.12.8.tar.xz
|
|
(cd Python-3.12.8 && EM_CONFIG=$EMSDK/.emscripten python3 Tools/wasm/wasm_build.py emscripten-browser)
|
|
(cd Python-3.12.8/builddir/emscripten-browser && make install DESTDIR=~/python)
|
|
cp Python-3.12.8/builddir/emscripten-browser/Modules/_hacl/libHacl_Hash_SHA2.a ~/python/usr/local/lib
|
|
cp Python-3.12.8/builddir/emscripten-browser/Modules/_decimal/libmpdec/libmpdec.a ~/python/usr/local/lib
|
|
cp Python-3.12.8/builddir/emscripten-browser/Modules/expat/libexpat.a ~/python/usr/local/lib
|
|
rm -rf Python-3.12.8
|
|
|
|
- name: Save Python build cache
|
|
id: cache-emscripten-python-save
|
|
if: steps.cache-emscripten-python-restore.outputs.cache-hit != 'true'
|
|
uses: actions/cache/save@v5
|
|
with:
|
|
path: ~/python
|
|
key: ${{ steps.cache-emscripten-python-restore.outputs.cache-primary-key }}
|
|
|
|
- name: Build for Emscripten
|
|
shell: bash
|
|
run: |
|
|
python3 makepanda/makepanda.py --git-commit=${{github.sha}} --target emscripten --python-incdir=~/python/usr/local/include --python-libdir=~/python/usr/local/lib --static --everything --no-pandatool --no-deploytools --verbose --threads=4
|
|
|
|
- name: Install test dependencies
|
|
shell: bash
|
|
run: |
|
|
python3 -m pip install -t ~/python/usr/local/lib/python3.12/site-packages -r requirements-test.txt
|
|
|
|
- name: Test in node.js
|
|
shell: bash
|
|
run: |
|
|
PYTHONHOME=~/python/usr/local PYTHONPATH=built node built/bin/run_tests.js tests
|
|
|
|
android:
|
|
if: "!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[ci skip]')"
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
include:
|
|
- android-abi: arm64-v8a
|
|
android-arch: arm64
|
|
android-triple: aarch64-linux-android
|
|
ndk-version: 29.0.14206865
|
|
runner: ubuntu-latest
|
|
|
|
- android-abi: armeabi-v7a
|
|
android-arch: arm
|
|
android-triple: arm-linux-androideabi
|
|
ndk-version: 29.0.14206865
|
|
runner: ubuntu-latest
|
|
|
|
- android-abi: x86_64
|
|
android-arch: x86_64
|
|
android-triple: x86_64-linux-android
|
|
ndk-version: 29.0.14206865
|
|
runner: ubuntu-latest
|
|
|
|
- android-abi: x86
|
|
android-arch: x86
|
|
android-triple: i686-linux-android
|
|
ndk-version: 29.0.14206865
|
|
runner: ubuntu-latest
|
|
|
|
runs-on: ${{ matrix.runner }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Setup Android SDK
|
|
uses: android-actions/setup-android@v3
|
|
with:
|
|
packages: 'tools platform-tools platforms;android-21 ndk;${{ matrix.ndk-version }}'
|
|
|
|
- name: Set up Android NDK
|
|
run: |
|
|
echo "ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk/${{ matrix.ndk-version }}" >> $GITHUB_ENV
|
|
|
|
- uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.13'
|
|
|
|
- name: Restore Python build cache
|
|
id: cache-android-python-restore
|
|
uses: actions/cache/restore@v5
|
|
with:
|
|
path: ~/python-prefix
|
|
key: cache-android-python-3.13.9-${{ matrix.android-abi }}-ndk${{ matrix.ndk-version }}
|
|
|
|
- name: Build Python 3.13
|
|
if: steps.cache-android-python-restore.outputs.cache-hit != 'true'
|
|
run: |
|
|
wget https://www.python.org/ftp/python/3.13.9/Python-3.13.9.tar.xz
|
|
tar -xJf Python-3.13.9.tar.xz
|
|
sed -i.bak "s/aarch64-linux-android/${{ matrix.android-triple }}/" Python-3.13.9/Android/android.py
|
|
sed -i.bak "s/ndk_version=[0-9.]\{1,\}/ndk_version=${{ matrix.ndk-version }}/" Python-3.13.9/Android/android-env.sh
|
|
(cd Python-3.13.9/Android && python3 android.py build ${{ matrix.android-triple }})
|
|
cp -R Python-3.13.9/cross-build/${{ matrix.android-triple }}/prefix ~/python-prefix
|
|
rm -rf Python-3.13.9
|
|
|
|
- name: Save Python build cache
|
|
id: cache-android-python-save
|
|
if: steps.cache-android-python-restore.outputs.cache-hit != 'true'
|
|
uses: actions/cache/save@v5
|
|
with:
|
|
path: ~/python-prefix
|
|
key: ${{ steps.cache-android-python-restore.outputs.cache-primary-key }}
|
|
|
|
- name: Restore thirdparty build cache
|
|
id: cache-android-thirdparty-restore
|
|
uses: actions/cache/restore@v5
|
|
with:
|
|
path: ./thirdparty
|
|
key: cache-android-thirdparty-935c80380ca171e08587c570e9dad678d29db3c8-${{ matrix.android-abi }}-ndk${{ matrix.ndk-version }}
|
|
|
|
- name: Install yasm
|
|
if: steps.cache-android-thirdparty-restore.outputs.cache-hit != 'true'
|
|
run: ${{runner.os == 'macOS' && 'brew' || 'sudo apt-get'}} install yasm
|
|
|
|
- name: Build thirdparty packages
|
|
if: steps.cache-android-thirdparty-restore.outputs.cache-hit != 'true'
|
|
run: |
|
|
git clone --revision=935c80380ca171e08587c570e9dad678d29db3c8 --depth=1 https://github.com/rdb/panda3d-thirdparty.git thirdparty
|
|
cd thirdparty
|
|
cmake -B build \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake \
|
|
-DCMAKE_ANDROID_ARCH_ABI=${{ matrix.android-abi }} \
|
|
-DCMAKE_ANDROID_ARCH=${{ matrix.android-arch }} \
|
|
-DCMAKE_SYSTEM_VERSION=21 \
|
|
-DANDROID_ABI=${{ matrix.android-abi }} \
|
|
-DANDROID_PLATFORM=android-21 \
|
|
-DBUILD_FCOLLADA=OFF \
|
|
-DBUILD_OPENSSL=OFF \
|
|
-DBUILD_VRPN=OFF \
|
|
-DBUILD_ARTOOLKIT=OFF
|
|
cmake --build build --config Release -j4
|
|
rm -rf build
|
|
|
|
- name: Save thirdparty build cache
|
|
id: cache-android-thirdparty-save
|
|
if: steps.cache-android-thirdparty-restore.outputs.cache-hit != 'true'
|
|
uses: actions/cache/save@v5
|
|
with:
|
|
path: ./thirdparty
|
|
key: ${{ steps.cache-android-thirdparty-restore.outputs.cache-primary-key }}
|
|
|
|
- name: Build for Android
|
|
shell: bash
|
|
run: |
|
|
python makepanda/makepanda.py --git-commit=${{github.sha}} --target android-21 --python-incdir=~/python-prefix/include --python-libdir=~/python-prefix/lib --arch ${{ matrix.android-arch }} --everything --no-openssl --no-tinydisplay --no-pandatool --verbose --threads=4
|
|
|
|
- name: Install test dependencies
|
|
shell: bash
|
|
run: |
|
|
python -m pip install -t ~/python-prefix/lib/python3.13/site-packages -r requirements-test.txt
|
|
|
|
- name: Enable KVM group perms
|
|
if: startsWith(matrix.runner, 'ubuntu')
|
|
run: |
|
|
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
|
|
sudo udevadm control --reload-rules
|
|
sudo udevadm trigger --name-match=kvm
|
|
|
|
- name: Setup Android Emulator and Run Tests
|
|
if: startsWith(matrix.android-abi, 'x86')
|
|
uses: reactivecircus/android-emulator-runner@v2
|
|
with:
|
|
api-level: 27
|
|
arch: ${{ matrix.android-abi }}
|
|
target: default
|
|
profile: pixel_6
|
|
script: |
|
|
adb shell "rm -rf /data/local/tmp/panda3d-tests"
|
|
adb push built/bin/run_tests /data/local/tmp/panda3d-tests/run_tests
|
|
adb shell "mkdir /data/local/tmp/panda3d-tests/lib"
|
|
adb push built/lib/*.so /data/local/tmp/panda3d-tests/lib
|
|
adb push ~/python-prefix/lib/*.so /data/local/tmp/panda3d-tests/lib
|
|
adb push ~/python-prefix/lib/python3.13 /data/local/tmp/panda3d-tests/lib/python3.13
|
|
adb push built/panda3d /data/local/tmp/panda3d-tests/lib/python3.13/site-packages/
|
|
adb push built/direct /data/local/tmp/panda3d-tests/lib/python3.13/site-packages/
|
|
adb push built/models /data/local/tmp/panda3d-tests/models
|
|
adb push built/etc /data/local/tmp/panda3d-tests/etc
|
|
adb push tests /data/local/tmp/panda3d-tests/tests
|
|
adb shell "cd /data/local/tmp/panda3d-tests && LD_LIBRARY_PATH=/data/local/tmp/panda3d-tests/lib PYTHONPATH=/data/local/tmp/panda3d-tests/lib/python3.13/site-packages ./run_tests -v tests"
|