diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000000..e0e50f0467
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,57 @@
+name: Continuous Integration
+on: [push, pull_request]
+jobs:
+ makepanda:
+ strategy:
+ matrix:
+ os: [ubuntu-16.04, windows-2016, macOS-10.14]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v1
+ - name: Install dependencies (Ubuntu)
+ if: matrix.os == 'ubuntu-16.04'
+ run: |
+ 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.4.1/panda3d-1.10.4.1-tools-win64.zip", "thirdparty-tools.zip")
+ Expand-Archive -Path thirdparty-tools.zip
+ Move-Item -Path thirdparty-tools/panda3d-1.10.4.1/thirdparty -Destination .
+ - name: Get thirdparty packages (macOS)
+ if: runner.os == 'macOS'
+ run: |
+ curl -O https://www.panda3d.org/download/panda3d-1.10.4.1/panda3d-1.10.4.1-tools-mac.tar.gz
+ tar -xf panda3d-1.10.4.1-tools-mac.tar.gz
+ mv panda3d-1.10.4.1/thirdparty thirdparty
+ rmdir panda3d-1.10.4.1
+ (cd thirdparty/darwin-libs-a && rm -rf ode openal vrpn openexr assimp rocket)
+ - name: Set up Python 3.7
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.7
+ - name: Build Python 3.7
+ 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
+ - name: Test Python 3.7
+ shell: bash
+ run: |
+ python -m pip install pytest
+ PYTHONPATH=built LD_LIBRARY_PATH=built/lib DYLD_LIBRARY_PATH=built/lib python -m pytest
+ - name: Set up Python 2.7
+ uses: actions/setup-python@v1
+ with:
+ python-version: 2.7
+ - name: Build Python 2.7
+ run: |
+ python makepanda/makepanda.py --no-copy-python --git-commit=${{github.sha}} --outputdir=built --everything --no-eigen --python-incdir=$pythonLocation/include --python-libdir=$pythonLocation/lib --verbose --threads=4
+ - name: Test Python 2.7
+ shell: bash
+ run: |
+ python -m pip install pytest
+ 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
diff --git a/direct/src/directscripts/DetectPanda3D.js b/direct/src/directscripts/DetectPanda3D.js
deleted file mode 100644
index 52c57cc034..0000000000
--- a/direct/src/directscripts/DetectPanda3D.js
+++ /dev/null
@@ -1,99 +0,0 @@
-// Based on Apple sample code at
-// http://developer.apple.com/internet/webcontent/examples/detectplugins_source.html
-
-
-// initialize global variables
-var detectableWithVB = false;
-var pluginFound = false;
-
-function goURL(daURL) {
- // Assume we have Javascript 1.1 functionality.
- window.location.replace(daURL);
- return;
-}
-
-function redirectCheck(pluginFound, redirectURL, redirectIfFound) {
- // check for redirection
- if( redirectURL && ((pluginFound && redirectIfFound) ||
- (!pluginFound && !redirectIfFound)) ) {
- // go away
- goURL(redirectURL);
- return pluginFound;
- } else {
- // stay here and return result of plugin detection
- return pluginFound;
- }
-}
-
-function canDetectPlugins() {
- if( detectableWithVB || (navigator.plugins && navigator.plugins.length > 0) ) {
- return true;
- } else {
- return false;
- }
-}
-
-function detectPanda3D(redirectURL, redirectIfFound) {
- pluginFound = detectPlugin('Panda3D');
- // if not found, try to detect with VisualBasic
- if(!pluginFound && detectableWithVB) {
- pluginFound = detectActiveXControl('P3DACTIVEX.P3DActiveXCtrl.1');
- }
- // check for redirection
- return redirectCheck(pluginFound, redirectURL, redirectIfFound);
-}
-
-function detectPlugin() {
- // allow for multiple checks in a single pass
- var daPlugins = detectPlugin.arguments;
- // consider pluginFound to be false until proven true
- var pluginFound = false;
- // if plugins array is there and not fake
- if (navigator.plugins && navigator.plugins.length > 0) {
- var pluginsArrayLength = navigator.plugins.length;
- // for each plugin...
- for (pluginsArrayCounter=0; pluginsArrayCounter < pluginsArrayLength; pluginsArrayCounter++ ) {
- // loop through all desired names and check each against the current plugin name
- var numFound = 0;
- for(namesCounter=0; namesCounter < daPlugins.length; namesCounter++) {
- // if desired plugin name is found in either plugin name or description
- if( (navigator.plugins[pluginsArrayCounter].name.indexOf(daPlugins[namesCounter]) >= 0) ||
- (navigator.plugins[pluginsArrayCounter].description.indexOf(daPlugins[namesCounter]) >= 0) ) {
- // this name was found
- numFound++;
- }
- }
- // now that we have checked all the required names against this one plugin,
- // if the number we found matches the total number provided then we were successful
- if(numFound == daPlugins.length) {
- pluginFound = true;
- // if we've found the plugin, we can stop looking through at the rest of the plugins
- break;
- }
- }
- }
- return pluginFound;
-} // detectPlugin
-
-
-// Here we write out the VBScript block for MSIE Windows
-if ((navigator.userAgent.indexOf('MSIE') != -1) && (navigator.userAgent.indexOf('Win') != -1)) {
- document.writeln('');
-}
diff --git a/direct/src/directscripts/RunPanda3D.js b/direct/src/directscripts/RunPanda3D.js
deleted file mode 100644
index b26d3b99c3..0000000000
--- a/direct/src/directscripts/RunPanda3D.js
+++ /dev/null
@@ -1,132 +0,0 @@
-// This script injects the appropriate syntax into the document to
-// embed Panda3D, either for the ActiveX or Mozilla-based plugin.
-
-// It is also possible to write browser-independent code by nesting
-//