| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- 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-standard-unity-makefile
- - ubuntu-bionic-coverage-ninja
- - macos-eigen-coverage-unity-xcode
- - macos-nometa-standard-makefile
- - windows-standard-unity-msvc
- - windows-nopython-nometa-standard-msvc
- include:
- - profile: ubuntu-bionic-standard-unity-makefile
- os: ubuntu-20.04
- config: Standard
- unity: YES
- generator: Unix Makefiles
- compiler: Default
- metalibs: YES
- python: YES
- eigen: NO
- - profile: ubuntu-bionic-coverage-ninja
- os: ubuntu-20.04
- config: Coverage
- unity: NO
- generator: Ninja
- compiler: Clang
- metalibs: YES
- python: YES
- eigen: NO
- - profile: macos-eigen-coverage-unity-xcode
- os: macOS-11
- config: Coverage
- unity: YES
- generator: Xcode
- compiler: Default
- metalibs: YES
- python: YES
- eigen: YES
- - profile: macos-nometa-standard-makefile
- os: macOS-11
- config: Standard
- unity: NO
- generator: Unix Makefiles
- compiler: Default
- metalibs: NO
- python: YES
- eigen: 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
- - 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
- runs-on: ${{ matrix.os }}
- steps:
- - uses: actions/checkout@v1
- 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.14/panda3d-1.10.14-tools-mac.tar.gz
- tar -xf panda3d-1.10.14-tools-mac.tar.gz
- mv panda3d-1.10.14/thirdparty thirdparty
- rmdir panda3d-1.10.14
- # 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: 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@v1
- with:
- path: thirdparty
- key: ci-cmake-${{ runner.OS }}-thirdparty-v1.10.13-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.13/panda3d-1.10.13-tools-win64.zip", "thirdparty-tools.zip")
- Expand-Archive -Path thirdparty-tools.zip
- Move-Item -Path thirdparty-tools/panda3d-1.10.13/thirdparty -Destination .
- }
- - name: ccache (non-Windows)
- if: runner.os != 'Windows'
- uses: actions/cache@v1
- 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 }}
- ..
- - 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@v4
- 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@v4
- 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@v4
- 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@v4
- 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: 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-20.04, windows-2019, macOS-11]
- runs-on: ${{ matrix.os }}
- steps:
- - uses: actions/checkout@v1
- - name: Install dependencies (Ubuntu)
- if: matrix.os == 'ubuntu-20.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.13/panda3d-1.10.13-tools-win64.zip", "thirdparty-tools.zip")
- Expand-Archive -Path thirdparty-tools.zip
- Move-Item -Path thirdparty-tools/panda3d-1.10.13/thirdparty -Destination .
- - name: Get thirdparty packages (macOS)
- if: runner.os == 'macOS'
- run: |
- curl -O https://www.panda3d.org/download/panda3d-1.10.14/panda3d-1.10.14-tools-mac.tar.gz
- tar -xf panda3d-1.10.14-tools-mac.tar.gz
- mv panda3d-1.10.14/thirdparty thirdparty
- rmdir panda3d-1.10.14
- (cd thirdparty/darwin-libs-a && rm -rf rocket)
- - name: Set up Python 3.11
- uses: actions/setup-python@v4
- 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
- - name: Test Python 3.11
- shell: bash
- run: |
- python -m pip install -r requirements-test.txt
- PYTHONPATH=built LD_LIBRARY_PATH=built/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
- - name: Set up Python 3.10
- uses: actions/setup-python@v4
- 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
- - name: Test Python 3.10
- shell: bash
- run: |
- python -m pip install -r requirements-test.txt
- PYTHONPATH=built LD_LIBRARY_PATH=built/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
- - name: Set up Python 3.9
- uses: actions/setup-python@v4
- 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
- - name: Test Python 3.9
- shell: bash
- run: |
- python -m pip install -r requirements-test.txt
- PYTHONPATH=built LD_LIBRARY_PATH=built/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
- - name: Set up Python 3.8
- uses: actions/setup-python@v4
- 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
- - name: Test Python 3.8
- shell: bash
- run: |
- python -m pip install -r requirements-test.txt
- PYTHONPATH=built LD_LIBRARY_PATH=built/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
- - name: Make installer
- run: |
- python makepanda/makepackage.py --verbose --lzma
|