name: Build # Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the master branch push: pull_request: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: jobs: build-mac-intel: runs-on: macos-13 strategy: matrix: python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.9', 'pypy-3.10', 'pypy-3.11' ] raylib-platform: ['Desktop', 'SDL'] env: MACOSX_DEPLOYMENT_TARGET: '10.13' steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v4 with: submodules: recursive - name: Build SDL run: | wget https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.7.tar.gz tar xvfz release-2.30.7.tar.gz mkdir build cd build cmake ../SDL-release-2.30.7 -DSDL_SHARED=OFF -DSDL_STATIC=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release cmake --build . --config Release sudo cmake --install . - name: Setup Python uses: actions/setup-python@v5 with: # Version range or exact version of a Python version to use, using SemVer's version range syntax. python-version: ${{ matrix.python-version }} # The target architecture (x86, x64) of the Python interpreter. architecture: x64 # Runs a set of commands using the runners shell - name: Build raylib without SDL because SDL version has incorrect pkg-config run: | cd raylib-c mkdir build cd build cmake -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release .. make -j2 sudo make install - name: Build raylib with SDL if selected run: | cd raylib-c mkdir build2 cd build2 cmake -DPLATFORM=${{ matrix.raylib-platform }} -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release .. make -j2 sudo cp raylib/libraylib.a /usr/local/lib/libraylib.a - name: Copy extras run: | sudo cp -r raylib-c/src/external/glfw/include/GLFW /usr/local/include/ sudo cp physac/src/physac.h /usr/local/include/ sudo cp raygui/src/raygui.h /usr/local/include/ - name: Build raylib-python-cffi env: RAYLIB_PLATFORM: ${{ matrix.raylib-platform }} run: | python -m pip install --upgrade pip pip3 install "cffi>=1.17.1" pip3 install wheel pip3 install setuptools python setup.py bdist_wheel --plat-name macosx_10_13_x86_64 - name: Test run: | pip3 install dist/*.whl cd / python3 -c 'import pyray; pyray.init_window(100,100,"test")' >/tmp/output 2>&1 || true cat /tmp/output if grep -q "INFO: Initializing raylib" /tmp/output; then echo "Passed" exit 0 else echo "Failed" exit 1 fi - name: Upload build Artifact wheel uses: actions/upload-artifact@v4 with: name: wheel-mac-${{ matrix.raylib-platform }}-${{ matrix.python-version }} path: dist/* # build-mac-universal: # runs-on: macos-14 # strategy: # matrix: # python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.8', 'pypy-3.9', 'pypy-3.10' ] # raylib-platform: ['Desktop', 'SDL'] # env: # MACOSX_DEPLOYMENT_TARGET: 11.0 # steps: # # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it # - uses: actions/checkout@v4 # with: # submodules: recursive # # - name: Build SDL # run: | # wget https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.7.tar.gz # tar xvfz release-2.30.7.tar.gz # mkdir build # cd build # cmake ../SDL-release-2.30.7 -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DSDL_SHARED=OFF -DSDL_STATIC=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release # cmake --build . --config Release # sudo cmake --install . # # - name: Setup Python # uses: actions/setup-python@v5 # with: # # Version range or exact version of a Python version to use, using SemVer's version range syntax. # python-version: ${{ matrix.python-version }} # architecture: arm64 # # # Runs a set of commands using the runners shell # - name: Build raylib without SDL because SDL version has incorrect pkg-config # run: | # cd raylib-c # mkdir build # cd build # cmake -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release .. # make -j2 # sudo make install # # - name: Build raylib with SDL if selected # run: | # cd raylib-c # mkdir build2 # cd build2 # cmake -DPLATFORM=${{ matrix.raylib-platform }} -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DPLATFORM=SDL -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release .. # make -j2 # sudo cp raylib/libraylib.a /usr/local/lib/libraylib.a # # - name: Copy extras # run: | # sudo cp -r raylib-c/src/external/glfw/include/GLFW /usr/local/include/ # sudo cp physac/src/physac.h /usr/local/include/ # sudo cp raygui/src/raygui.h /usr/local/include/ # # - name: Build raylib-python-cffi # run: | # python -m pip install --upgrade pip # pip3 install "cffi>=1.17.1" # pip3 install wheel # pip3 install setuptools # RAYLIB_PLATFORM=${{ matrix.raylib-platform }} python setup.py bdist_wheel # # - name: Upload build Artifact wheel # uses: actions/upload-artifact@v3.2.1 # with: # name: wheel # path: dist/* # # # Name defaults to universal2 and it technically is, but we override name to arm64. Why don't we make a working universal2 wheel? Because # # I'd rather have a separate x86_64 that I can test, and I want it to work on 10_15 but I'm not sure a 'macosx_10_15_universal2' is valid # # given that there is no SDK for universal until macosx_11_0 # - name: Build raylib-python-cffi # run: | # python -m pip install --upgrade pip # pip3 install cffi # pip3 install wheel # python setup.py bdist_wheel --plat-name macosx_12_0_arm64 build-linux: runs-on: ubuntu-20.04 strategy: # You can use PyPy versions in python-version. # For example, pypy2 and pypy3 matrix: python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.9', 'pypy-3.10', 'pypy-3.11' ] raylib-platform: ['Desktop', 'SDL', 'DRM'] steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v4 with: submodules: recursive - name: Setup Python uses: actions/setup-python@v5 with: # Version range or exact version of a Python version to use, using SemVer's version range syntax. python-version: ${{ matrix.python-version }} # The target architecture (x86, x64) of the Python interpreter. architecture: x64 - name: install prereqs run: | sudo apt update sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev libwayland-dev libxkbcommon-dev - name: Build SDL run: | wget https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.7.tar.gz tar xvfz release-2.30.7.tar.gz mkdir build cd build cmake ../SDL-release-2.30.7 -DSDL_SHARED=OFF -DSDL_STATIC=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release cmake --build . --config Release sudo cmake --install . # Runs a set of commands using the runners shell - name: Build raylib run: | cd raylib-c mkdir build cd build cmake -DPLATFORM=${{ matrix.raylib-platform }} -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release -DOpenGL_GL_PREFERENCE=GLVND .. make -j2 sudo make install - name: Copy extras run: | sudo cp -r raylib-c/src/external/glfw/include/GLFW /usr/local/include/ sudo cp physac/src/physac.h /usr/local/include/ sudo cp raygui/src/raygui.h /usr/local/include/ - name: Build raylib-python-cffi env: RAYLIB_PLATFORM: ${{ matrix.raylib-platform }} run: | python -m pip install --upgrade pip pip3 install "cffi>=1.17.1" pip3 install wheel pip3 install setuptools python setup.py bdist_wheel --plat-name manylinux2014_x86_64 - name: Test run: | pip3 install dist/*.whl cd / python3 -c 'import pyray; pyray.init_window(100,100,"test")' >/tmp/output 2>&1 || true cat /tmp/output if grep -q "INFO: Initializing raylib" /tmp/output; then echo "Passed" exit 0 else echo "Failed" exit 1 fi - name: Upload build Artifact wheel uses: actions/upload-artifact@v4 with: name: wheel-linux-${{ matrix.raylib-platform }}-${{ matrix.python-version }} path: dist/* build-windows: # The type of runner that the job will run on runs-on: windows-2019 strategy: # You can use PyPy versions in python-version. # For example, pypy2 and pypy3 matrix: python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.9', 'pypy-3.10', 'pypy-3.11' ] raylib-platform: ['Desktop', 'SDL'] steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Download SDL2 run: curl -L -o SDL2.zip https://github.com/libsdl-org/SDL/releases/download/release-2.30.8/SDL2-devel-2.30.8-VC.zip - name: Create extraction directory run: mkdir ${{ runner.temp }}\SDL2 - name: Unzip SDL2 run: tar -xf SDL2.zip -C ${{ runner.temp }}\SDL2 --strip-components=1 - name: Set SDL2_DIR environment variable run: echo SDL2_DIR=${{ runner.temp }}\SDL2\cmake >> $env:GITHUB_ENV - name: Setup Python uses: actions/setup-python@v5 with: # Version range or exact version of a Python version to use, using SemVer's version range syntax. python-version: ${{ matrix.python-version }} # The target architecture (x86, x64) of the Python interpreter. architecture: x64 - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v2 - name: Build raylib run: | cd raylib-c mkdir build cd build cmake -DPLATFORM=${{ matrix.raylib-platform }} -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release .. msbuild raylib.sln /target:raylib /property:Configuration=Release copy raylib\Release\raylib.lib ..\.. cd ..\.. shell: cmd - name: Build raylib-python-cffi env: RAYLIB_PLATFORM: ${{ matrix.raylib-platform }} run: | copy ${{ runner.temp }}\SDL2\lib\x64\SDL2.lib . copy ${{ runner.temp }}\SDL2\lib\x64\SDL2.dll raylib\ python -m pip install --upgrade pip pip3 install "cffi>=1.17.1" pip3 install wheel pip3 install setuptools del raylib\dynamic\*.so* >nul 2>&1 del raylib\dynamic\*.dll >nul 2>&1 del raylib\dynamic\*.dylib >nul 2>&1 del raylib\dynamic\32bit\* >nul 2>&1 python setup.py bdist_wheel shell: cmd - name: Test shell: bash run: | pip3 install --no-deps dist/*.whl cd / python3 -c 'import pyray; pyray.init_window(100,100,"test")' >/tmp/output 2>&1 || true cat /tmp/output if grep -q "INFO: Initializing raylib" /tmp/output; then echo "Passed" exit 0 else echo "Failed" exit 1 fi - name: Upload build Artifact wheel uses: actions/upload-artifact@v4 with: name: wheel-windows-${{ matrix.raylib-platform }}-${{ matrix.python-version }} path: dist/* source-distro: runs-on: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v4 with: submodules: recursive - name: Setup Python uses: actions/setup-python@v5 with: # Version range or exact version of a Python version to use, using SemVer's version range syntax. python-version: '3.12' # The target architecture (x86, x64) of the Python interpreter. architecture: x64 - name: Build raylib run: | sudo apt update sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev libwayland-dev libxkbcommon-dev cd raylib-c mkdir build cd build cmake -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release .. make -j2 sudo make install - name: Copy extras run: | sudo cp -r raylib-c/src/external/glfw/include/GLFW /usr/local/include/ sudo cp physac/src/physac.h /usr/local/include/ sudo cp raygui/src/raygui.h /usr/local/include/ - name: Build raylib-python-cffi run: | python -m pip install --upgrade pip pip3 install "cffi>=1.17.1" pip3 install wheel pip3 install setuptools python setup.py sdist - name: Upload build Artifact wheel uses: actions/upload-artifact@v4 with: name: wheel-source path: dist/* dynamic-distro: runs-on: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v4 with: submodules: recursive - name: Setup Python uses: actions/setup-python@v5 with: # Version range or exact version of a Python version to use, using SemVer's version range syntax. python-version: '3.12' # The target architecture (x86, x64) of the Python interpreter. architecture: x64 - name: Build raylib-python-cffi-dynamic run: | python -m pip install --upgrade pip pip3 install "cffi>=1.17.1" pip3 install wheel pip3 install setuptools cd dynamic python setup.py sdist - name: Upload build Artifact wheel uses: actions/upload-artifact@v4 with: name: wheel-dynamic path: dynamic/dist/* merge: needs: [build-mac-intel, build-windows, build-linux, source-distro, dynamic-distro] runs-on: ubuntu-latest steps: - name: Merge All Artifacts uses: actions/upload-artifact/merge@v4 with: name: wheel pattern: wheel-*