diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 572fc91..d0a1fdd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,9 @@ jobs: "3.12", "3.13", "3.14", + "3.15", "pypy-3.11", + "pypy-3.12", ] raylib-platform: ["Desktop", "SDL"] env: @@ -142,10 +144,10 @@ jobs: runs-on: macos-14 strategy: matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15", "pypy-3.11", "pypy-3.12"] raylib-platform: ["Desktop", "SDL"] env: - MACOSX_DEPLOYMENT_TARGET: "11" + MACOSX_DEPLOYMENT_TARGET: "12.0" steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v4 @@ -255,11 +257,13 @@ jobs: image: electronstudio/ubuntu16-modern:latest options: --user root volumes: - # override /__e/node20 because GitHub Actions uses a version that requires too-recent glibc + # override /__e/node20 AND /__e/node24 with the image's own node because the nodes + # that GitHub Actions provides require too-recent glibc. Still needed for node + # actions such as actions/upload-artifact (we no longer use actions/checkout, we + # just run git directly). Since June 2026 the runner resolves ALL js actions to + # /__e/node24, so both paths must be overridden. - /tmp:/__e/node20 - env: - # Github Actions Checkout now wants Node 24. Maybe easier just to stop using Checkout than keep messing around with Node. - ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + - /tmp:/__e/node24 strategy: # You can use PyPy versions in python-version. # For example, pypy2 and pypy3 @@ -274,13 +278,27 @@ jobs: "python3.12", "python3.13", "python3.14", + "python3.15", "pypy3.11", + "pypy3.12" ] raylib-platform: ["Desktop", "SDL", "DRM", "SDL_SOFT"] steps: + # Must be the first step so the workspace is empty and git clone works + - name: Checkout + run: | + # workspace dir is owned by the host runner user but we are root in the + # container, so tell git that is OK (avoids "dubious ownership" error) + git config --global --add safe.directory "$GITHUB_WORKSPACE" + git clone ${{ github.server_url }}/${{ github.repository }} . + git fetch --force origin "${{ github.ref }}" + git checkout --force FETCH_HEAD + git submodule update --init --recursive + - name: fix node run: | ln -s /usr/local/bin /__e/node20/bin + ln -s /usr/local/bin /__e/node24/bin - name: setup wayland run: | @@ -303,10 +321,6 @@ jobs: cmake --build . --config Release cmake --install . - - uses: actions/checkout@v2 - with: - submodules: recursive - - name: fix raygui bug run: | patch -p0 = 2.0.0 + # hard-aborts the process (C assert) when accessing .fields on an opaque + # struct, instead of returning None like cffi 1.x did. ffi.sizeof() raises + # a normal Python exception for opaque structs, so use it to test first. + fields = None + try: + ffi.sizeof(ffi.typeof(struct)) + fields = ffi.typeof(struct).fields + except Exception: + pass if fields is not None: #print(ffi.typeof(struct).fields) #print(f" {arg}: {arg}") # print(f" def __init__(self{sig}):") # - for arg in ffi.typeof(struct).fields: + for arg in fields: print(f" {arg[0]}: {ctype_to_python_type(arg[1].type.cname)}") else: print(" ...") - # print(f" self.{arg[0]}={arg[0]}") elif ffi.typeof(struct).kind == "enum": print(f"{struct} = int") diff --git a/docs/.buildinfo b/docs/.buildinfo index aea702f..b7ba68d 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: d2e698b9576bffb5afca021582567e2a +config: 2370c1c0c28e9a086ad498bde8b78861 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/README.html b/docs/README.html index 0c60141..2e0e70d 100644 --- a/docs/README.html +++ b/docs/README.html @@ -145,13 +145,13 @@

Platforms: Windows, Mac, Linux, Raspberry Pi, Web

Quickstart

-

pip3 install raylib==6.0.1.0 --break-system-packages

+

pip3 install raylib==6.0.1.1 --break-system-packages

from pyray import *
-init_window(800, 450, "Hello")
+init_window(800, 450, "Hello")
 while not window_should_close():
     begin_drawing()
     clear_background(WHITE)
-    draw_text("Hello world", 190, 200, 20, VIOLET)
+    draw_text("Hello world", 190, 200, 20, VIOLET)
     end_drawing()
 close_window()
 
@@ -192,7 +192,7 @@

Installation
python3 -m pip install setuptools
-python3 -m pip install raylib==6.0.1.0
+python3 -m pip install raylib==6.0.1.1
 

On most platforms it should install a binary wheel. If yours isn’t available then pip will attempt to build from @@ -213,7 +213,7 @@

MacOSOlder MacOS requires building from source but this is usually simple:

brew install pkg-config
 brew install raylib
-python3 -m pip install raylib==6.0.1.0
+python3 -m pip install raylib==6.0.1.1
 

@@ -288,8 +288,8 @@

Running in a web browsermy_project with a file main.py:

diff --git a/docs/RPI.html b/docs/RPI.html index ca17393..125e7aa 100644 --- a/docs/RPI.html +++ b/docs/RPI.html @@ -123,7 +123,7 @@

Option 2: Compile Raylib from source X11 modemkdir build rm -rf build/* cd build -cmake -DPLATFORM="Desktop" -DOPENGL_VERSION=2.1 -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_BUSY_WAIT_LOOP=OFF -DSUPPORT_CUSTOM_FRAME_CONTROL=OFF -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release .. +cmake -DPLATFORM="Desktop" -DOPENGL_VERSION=2.1 -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_BUSY_WAIT_LOOP=OFF -DSUPPORT_CUSTOM_FRAME_CONTROL=OFF -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DWITH_PIC=ON -DCMAKE_BUILD_TYPE=Release .. make sudo make install sudo cp -r ../src/external/glfw/include/GLFW /usr/local/include/ @@ -157,7 +157,7 @@

Option 3: Compile Raylib from source DRM modemkdir build rm rf build/* cd build -cmake -DPLATFORM="DRM" -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_BUSY_WAIT_LOOP=OFF -DSUPPORT_CUSTOM_FRAME_CONTROL=OFF -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX:PATH=/usr .. +cmake -DPLATFORM="DRM" -DBUILD_EXAMPLES=OFF -DCUSTOMIZE_BUILD=ON -DSUPPORT_BUSY_WAIT_LOOP=OFF -DSUPPORT_CUSTOM_FRAME_CONTROL=OFF -DSUPPORT_FILEFORMAT_JPG=ON -DSUPPORT_FILEFORMAT_FLAC=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX:PATH=/usr .. make sudo make install

diff --git a/docs/_sources/README.md.txt b/docs/_sources/README.md.txt index 194fef5..7e8071b 100644 --- a/docs/_sources/README.md.txt +++ b/docs/_sources/README.md.txt @@ -21,7 +21,7 @@ original Raylib. # Quickstart -`pip3 install raylib==6.0.1.0 --break-system-packages` +`pip3 install raylib==6.0.1.1 --break-system-packages` ```python from pyray import * init_window(800, 450, "Hello") @@ -73,7 +73,7 @@ Then make sure you have the latest pip installed: Then install python3 -m pip install setuptools - python3 -m pip install raylib==6.0.1.0 + python3 -m pip install raylib==6.0.1.1 On most platforms it should install a binary wheel. If yours isn't available then pip will attempt to build from source, in which case you will need to have Raylib development libs installed, e.g. @@ -95,7 +95,7 @@ Older MacOS requires building from source but this is usually simple: brew install pkg-config brew install raylib - python3 -m pip install raylib==6.0.1.0 + python3 -m pip install raylib==6.0.1.1 ## Linux diff --git a/docs/objects.inv b/docs/objects.inv index 7180871..d0e6873 100644 Binary files a/docs/objects.inv and b/docs/objects.inv differ diff --git a/docs/pyray.html b/docs/pyray.html index 1d51195..7d0dbe3 100644 --- a/docs/pyray.html +++ b/docs/pyray.html @@ -2539,7 +2539,7 @@

Examples

Example program:

@@ -2562,7 +2562,7 @@

Examples

You can also now import the functions with no prefix:

from pyray import *
 
-init_window(800, 450, "Raylib texture test")
+init_window(800, 450, "Raylib texture test")
 ...
 
diff --git a/docs/raylib.html b/docs/raylib.html index 9418527..6183772 100644 --- a/docs/raylib.html +++ b/docs/raylib.html @@ -2505,10 +2505,10 @@

C APIExample program:

from raylib import *
 
-InitWindow(800, 450, b"Hello Raylib")
+InitWindow(800, 450, b"Hello Raylib")
 SetTargetFPS(60)
 
-camera = ffi.new("struct Camera3D *", [[18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0])
+camera = ffi.new("struct Camera3D *", [[18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0])
 
 while not WindowShouldClose():
     UpdateCamera(camera, CAMERA_ORBITAL)
@@ -2517,7 +2517,7 @@ 

C APIBeginMode3D(camera[0]) DrawGrid(20, 1.0) EndMode3D() - DrawText(b"Hellow World", 190, 200, 20, VIOLET) + DrawText(b"Hellow World", 190, 200, 20, VIOLET) EndDrawing() CloseWindow()

@@ -2525,7 +2525,7 @@

C APIIf you want to be more portable (i.e. same code will work with dynamic bindings) you can prefix the functions like this:

from raylib import ffi, rl, colors
 
-rl.InitWindow(800, 450, b"Hello Raylib")
+rl.InitWindow(800, 450, b"Hello Raylib")
 rl.SetTargetFPS(60)
 
 ...