Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
334e06f
Add gameplay tests to starting-platformer
claude Aug 8, 2026
52a3be4
Add gameplay tests to starting-3D-platformer
claude Aug 8, 2026
77f4c4a
Add gameplay tests to starting-3d-driving
claude Aug 8, 2026
23632f0
Add gameplay tests to starting-3d-tank
claude Aug 8, 2026
b3d47fe
Add gameplay tests to starting-first-person-shooter
claude Aug 8, 2026
c87cec4
Add gameplay tests feedback for the platformers/vehicles/FPS starters…
claude Aug 8, 2026
a52da11
Ignore the gameplay test runner artefacts
claude Aug 8, 2026
5c15910
Run the gameplay tests of the examples on CI
claude Aug 8, 2026
9ee7e47
Add gameplay tests to starting-platformer-pixel
claude Aug 8, 2026
2ca68bf
Add gameplay tests to starting-top-down
claude Aug 8, 2026
c4be814
Add gameplay tests to starting-top-down-pixel
claude Aug 8, 2026
2003239
Add gameplay tests to starting-flappy-bird
claude Aug 8, 2026
0b898bc
Add gameplay tests to starting-clicker
claude Aug 8, 2026
a01f09e
Update the gameplay tests feedback with the second batch of starters
claude Aug 8, 2026
5e566ab
Add gameplay tests to starting-shootemup
claude Aug 8, 2026
29260f8
Add gameplay tests to starting-endless-runner
claude Aug 8, 2026
67c04d2
Add gameplay tests to starting-twin-stick-shooter
claude Aug 8, 2026
07834b7
Add gameplay tests to starting-vampire-survivor
claude Aug 8, 2026
264f784
Update the gameplay tests feedback with the 2D action starters
claude Aug 8, 2026
69a6efe
Add gameplay tests to starting-2d-driving
claude Aug 8, 2026
856c92c
Add gameplay tests to starting-physics
claude Aug 8, 2026
8cda356
Add gameplay tests to starting-physics-pixel
claude Aug 8, 2026
fe7ac86
Update the gameplay tests feedback with the driving and physics starters
claude Aug 8, 2026
486b080
Add gameplay tests to starting-beatemup
claude Aug 8, 2026
68407dc
Add gameplay tests to starting-2d-car-racing
claude Aug 8, 2026
b89b82c
Add gameplay tests to starting-point-and-click
claude Aug 8, 2026
0b2f27e
Add gameplay tests to starting-point-and-click-pixel
claude Aug 8, 2026
3a73dba
Update the gameplay tests feedback with the beat'em up, racing and po…
claude Aug 8, 2026
326cdb8
Add gameplay tests to starting-2d-platformer-shooter
claude Aug 8, 2026
ab148cc
Add gameplay tests to starting-quiz
claude Aug 8, 2026
4ddc6a1
Update the gameplay tests feedback with the platformer shooter and quiz
claude Aug 8, 2026
f6b3c05
Add gameplay tests to starting-draggable-tiles
claude Aug 8, 2026
86d9d9d
Add gameplay tests to starting-tile-placement
claude Aug 8, 2026
1141959
Update the gameplay tests feedback with the board and tile starters
claude Aug 8, 2026
f581545
Add gameplay tests to starting-card-game
claude Aug 8, 2026
937f501
Add gameplay tests to starting-rts-unit-selection
claude Aug 8, 2026
61f863d
Update the gameplay tests feedback with the card game and RTS starters
claude Aug 8, 2026
8a0b0e8
Add gameplay tests to starting-top-down-rpg
claude Aug 8, 2026
f392727
Add gameplay tests to starting-first-person
claude Aug 8, 2026
53678d0
Update the gameplay tests feedback with the RPG and first person star…
claude Aug 8, 2026
35d02a8
Add gameplay tests to starting-first-person-horror
claude Aug 9, 2026
f37d629
Add gameplay tests to starting-first-person-shooter-horror
claude Aug 9, 2026
af68915
Update the gameplay tests feedback with the horror starters
claude Aug 9, 2026
109417d
Add gameplay tests to starting-3d-shootemup
claude Aug 9, 2026
218e572
Add gameplay tests to starting-3d-twin-stick-shooter
claude Aug 9, 2026
5147091
Update the gameplay tests feedback with the 3D shooter starters
claude Aug 9, 2026
ca42658
Add gameplay tests to starting-3d-vampire-survivor
claude Aug 9, 2026
5b22daf
Add gameplay tests to starting-3d-car-racing
claude Aug 9, 2026
7bd31de
Update the gameplay tests feedback with the 3D survivor and racing st…
claude Aug 9, 2026
ae0b384
Add gameplay tests to starting-3d-endless-runner
claude Aug 9, 2026
8ba7dcc
Add gameplay tests to starting-3d-draggable-tiles
claude Aug 9, 2026
e79eb51
Update the gameplay tests feedback with the 3D runner and tiles starters
claude Aug 9, 2026
a98e909
Add gameplay tests to starting-3d-tile-placement
claude Aug 9, 2026
470e42b
Add gameplay tests to starting-3d-rts-unit-selection
claude Aug 9, 2026
7a48c40
Update the gameplay tests feedback with the 3D tile placement and RTS…
claude Aug 9, 2026
f657a3d
Keep the slowest gameplay tests well inside the 30s budget
claude Aug 9, 2026
6fc1393
Record that the Jolt boot race is fixed and verified
claude Aug 9, 2026
876da37
Re-run a game whose gameplay tests only failed on wall-clock timeouts
claude Aug 9, 2026
d011b93
Measure the new render cap: 2.2-2.9x on 2D, 1.2x on 3D
claude Aug 9, 2026
8eb6c44
Click the dialog button at its own scene position
claude Aug 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 157 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,28 @@ version: 2.1
orbs:
aws-cli: circleci/aws-cli@2.0.2

parameters:
# Run the gameplay tests of *every* example, even on a branch. Set it when
# triggering a pipeline (CircleCI UI or API) to check the whole repository
# without waiting for the change to land on `main`.
run-all-gameplay-tests:
type: boolean
default: false
# Number of parallel containers used to run the gameplay tests of every
# example. Raise it as more examples get gameplay tests.
all-gameplay-tests-parallelism:
type: integer
default: 4
# Same, for a branch (which usually only changes one or two games).
changed-gameplay-tests-parallelism:
type: integer
default: 1
# Branch of the GDevelop repository whose latest build is used to run the
# gameplay tests.
gdevelop-branch:
type: string
default: master

jobs:
install:
docker:
Expand Down Expand Up @@ -50,6 +72,115 @@ jobs:
- aws-cli/setup
- run: npm run deploy -- --cf-zoneid $CLOUDFLARE_ZONE_ID --cf-token $CLOUDFLARE_TOKEN

# Run the gameplay tests of the example games with a real GDevelop: the
# latest Linux build published on S3 by GDevelop's own CI is downloaded and
# used to open each game in CLI mode.
gameplay-tests:
parameters:
scope:
description: >
"all" tests every game of the repository that has gameplay tests.
"changed" only tests the games modified compared to `main`.
type: enum
enum: ['all', 'changed']
default: 'all'
parallelism:
description: Number of containers the games are split across.
type: integer
default: 1
resource-class:
description: >
The games are rendered in software (no GPU on CI), which is what
makes them slow: give them enough CPU.
type: string
default: large
parallelism: << parameters.parallelism >>
resource_class: << parameters.resource-class >>
docker:
# Same image as the job of the GDevelop repository that runs its
# portable Linux build headlessly.
- image: cimg/node:24.13.0
working_directory: ~/GDevelop-examples

steps:
- checkout

- run:
name: Install the runtime dependencies of GDevelop
# Even in CLI mode, Electron needs these libraries and a display to
# start up on a headless machine.
command: |
sudo apt-get update
sudo apt-get install -y \
libnss3 \
libasound2t64 \
libgbm1 \
libgtk-3-0 \
libxss1 \
libatk-bridge2.0-0 \
libdrm2 \
libxkbcommon0 \
xvfb

- run:
name: Install the dependencies of the scripts
# Only the runtime dependencies are needed to run the games.
command: npm ci --omit=dev

- run:
name: List the games to test
command: |
if [ "<< parameters.scope >>" = "changed" ]; then
node scripts/run-gameplay-tests.js --list \
--only-changed --base-ref=origin/main > /tmp/games.txt
else
node scripts/run-gameplay-tests.js --list > /tmp/games.txt
fi
echo "Games with gameplay tests to run:"
cat /tmp/games.txt

- run:
name: Split the games across the parallel containers
# Balanced using the durations recorded by `store_test_results` on
# the previous runs (falls back to an even split the first time).
command: |
if [ -s /tmp/games.txt ]; then
circleci tests split --split-by=timings --timings-type=filename \
< /tmp/games.txt > /tmp/games-for-this-container.txt
else
: > /tmp/games-for-this-container.txt
fi
echo "Games for this container:"
cat /tmp/games-for-this-container.txt

- run:
name: Run the gameplay tests
# A single game can legitimately take a few minutes: the games are
# rendered in software on CI.
no_output_timeout: 30m
# The failure is reported by the last step of the job, so that the
# results and artifacts of a failing run are uploaded first (they
# are exactly what is needed to understand the failure).
command: |
set +e
node scripts/run-gameplay-tests.js \
--projects-file=/tmp/games-for-this-container.txt \
--gdevelop-branch=<< pipeline.parameters.gdevelop-branch >> \
--work-dir=/tmp/gdevelop-portable \
--artifacts-dir=/tmp/gameplay-tests-artifacts \
--junit-path=/tmp/gameplay-tests-results/results.xml
echo $? > /tmp/gameplay-tests-exit-code

- store_test_results:
path: /tmp/gameplay-tests-results
- store_artifacts:
path: /tmp/gameplay-tests-artifacts
destination: gameplay-tests

- run:
name: Report whether the gameplay tests passed
command: exit "$(cat /tmp/gameplay-tests-exit-code)"

workflows:
tests:
jobs:
Expand All @@ -67,3 +198,29 @@ workflows:
filters:
branches:
only: main

# On `main` (or when explicitly asked for): check that every gameplay test
# of the repository still passes.
all-gameplay-tests:
when:
or:
- equal: [main, << pipeline.git.branch >>]
- << pipeline.parameters.run-all-gameplay-tests >>
jobs:
- gameplay-tests:
name: gameplay-tests-all
scope: 'all'
parallelism: << pipeline.parameters.all-gameplay-tests-parallelism >>

# On a branch / Pull Request: only check the games it modifies.
changed-gameplay-tests:
when:
and:
- not:
equal: [main, << pipeline.git.branch >>]
- not: << pipeline.parameters.run-all-gameplay-tests >>
jobs:
- gameplay-tests:
name: gameplay-tests-changed
scope: 'changed'
parallelism: << pipeline.parameters.changed-gameplay-tests-parallelism >>
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@
.DS_Store
/dist
*.autosave

# Artefacts written next to a game by the gameplay test runner.
gameplay-test-results.json
gameplay-test-screenshots/
Loading
Loading