Browse Source

workflow: Add GitHub Actions workflow to build Emscripten

rdb 1 year ago
parent
commit
3d46db7621
1 changed files with 15 additions and 444 deletions
  1. 15 444
      .github/workflows/ci.yml

+ 15 - 444
.github/workflows/ci.yml

@@ -2,461 +2,32 @@ name: Continuous Integration
 on: [push, pull_request]
 
 jobs:
-  cmake:
-    name: CMake Buildsystem
+  emscripten:
     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 }}
-
+    runs-on: ubuntu-22.04
     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.14-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.14/panda3d-1.10.14-tools-win64.zip", "thirdparty-tools.zip")
-          Expand-Archive -Path thirdparty-tools.zip
-          Move-Item -Path thirdparty-tools/panda3d-1.10.14/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: Setup Python (Python 3.12)
-      if: contains(matrix.python, 'YES')
-      uses: actions/setup-python@v4
-      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-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'
+    - name: Install dependencies
       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.14/panda3d-1.10.14-tools-win64.zip", "thirdparty-tools.zip")
-        Expand-Archive -Path thirdparty-tools.zip
-        Move-Item -Path thirdparty-tools/panda3d-1.10.14/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)
+        sudo apt-get install build-essential ninja-build bison flex
 
-    - name: Set up Python 3.12
-      uses: actions/setup-python@v4
-      with:
-        python-version: '3.12'
-    - name: Build Python 3.12
+    - name: Build Host Interrogate
       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.12
-      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.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:$pythonLocation/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:$pythonLocation/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
+        mkdir -p host-build
+        cmake -S . -B host-build -DBUILD_DIRECT=OFF -DBUILD_PANDA=OFF -DBUILD_PANDATOOL=OFF -DBUILD_CONTRIB=OFF -DBUILD_DTOOL=ON -DBUILD_MODELS=OFF -DBUILD_SHARED_LIBS=OFF -DINTERROGATE_PYTHON_INTERFACE=OFF
+        cmake --build host-build --config Standard --parallel 4
+        echo host-build/bin >> $GITHUB_PATH
 
-    - name: Set up Python 3.9
-      uses: actions/setup-python@v4
+    - name: Setup emsdk
+      uses: mymindstorm/setup-emsdk@v14
       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:$pythonLocation/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
+        version: 3.1.51
+        actions-cache-folder: 'emsdk-cache'
 
-    - 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
+    - name: Build for Emscripten
       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
+        python3 makepanda/makepanda.py --git-commit=${{github.sha}} --target emscripten --outputdir=built --everything --no-python --verbose --threads=4