Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
f729faf
Rework
MattSzymonski Jun 21, 2026
0d56089
Cleanup project structure
MattSzymonski Jun 25, 2026
13faf4b
Fix critical issues?
MattSzymonski Jun 25, 2026
ff48d00
Fix high prio issues
MattSzymonski Jun 25, 2026
8f1e969
Fix low prio
MattSzymonski Jun 25, 2026
bc44137
Update comments
MattSzymonski Jun 25, 2026
10914d0
Cleanup
MattSzymonski Jun 25, 2026
dd1603c
Cleanup
MattSzymonski Jun 25, 2026
185616f
Cleanup
MattSzymonski Jun 27, 2026
86742d6
Update devops
MattSzymonski Jun 27, 2026
988b6e7
Change files layout
MattSzymonski Jun 27, 2026
72f1ee6
Slim launcher
MattSzymonski Jun 27, 2026
67361b5
Fix misc
MattSzymonski Jun 27, 2026
1297ac1
Remove NO_PATH placeholder from workspace members
MattSzymonski Jun 27, 2026
560ab1d
Fix duplicate closing bracket in workspace members
MattSzymonski Jun 28, 2026
294bed1
Rework ci, rename game to project, cleanup examples
MattSzymonski Jun 28, 2026
ff2992e
Merge remote-tracking branch 'origin/main' into devops_rework
MattSzymonski Jun 29, 2026
698c632
Cleanup examples
MattSzymonski Jun 29, 2026
d58dba9
Test launcher
MattSzymonski Jun 29, 2026
a45ecf6
Fix flags and hot reload
MattSzymonski Jun 29, 2026
d78800a
Fix wasm build
MattSzymonski Jun 29, 2026
dc298cf
Remove crashing drop
MattSzymonski Jun 30, 2026
b728437
Remove empty example
MattSzymonski Jun 30, 2026
d376d1f
Refactor native
MattSzymonski Jun 30, 2026
263ae04
Cleanup
MattSzymonski Jun 30, 2026
8d06541
Cleanup hot-reload
MattSzymonski Jun 30, 2026
30493aa
Cleanup build and rebuild logging
MattSzymonski Jun 30, 2026
69d3b96
Improve comments
MattSzymonski Jul 1, 2026
0415cd2
Fix wasm builds
MattSzymonski Jul 1, 2026
c2ee3dc
Fix basic tests
MattSzymonski Jul 1, 2026
774ff1f
Fix tests
MattSzymonski Jul 1, 2026
0b9a153
Fix tests
MattSzymonski Jul 2, 2026
549ae9e
Update actions to use docker
MattSzymonski Jul 2, 2026
5c5e6c5
Fix xorg missing on alpine linux
MattSzymonski Jul 2, 2026
5f43402
Fix docker
MattSzymonski Jul 2, 2026
a6c7088
Fix CI
MattSzymonski Jul 2, 2026
91085b6
Fix CI
MattSzymonski Jul 2, 2026
bd6ef21
Cleanup and review CI
MattSzymonski Jul 2, 2026
8f1e533
Fix documentation generation
MattSzymonski Jul 2, 2026
e18dea8
Cleanup launcher files
MattSzymonski Jul 2, 2026
fe53fca
Fix tests
MattSzymonski Jul 8, 2026
6d6adf1
Bump up crate versions
MattSzymonski Jul 8, 2026
57cd930
Add headless native support
MattSzymonski Jul 8, 2026
00bff41
Prebuild pill launcher in docker image
MattSzymonski Jul 9, 2026
6c63393
Update CI scripts
MattSzymonski Jul 12, 2026
e916d83
Fix ci
MattSzymonski Jul 12, 2026
d7c25fd
Fix CI
MattSzymonski Jul 12, 2026
a338ebf
Fix lint
MattSzymonski Jul 12, 2026
410f82b
Remove unused import
MattSzymonski Jul 12, 2026
d85e282
Fix tests
MattSzymonski Jul 21, 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
11 changes: 11 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Only the engine source is needed for the builder stage.
# Exclude everything by default, then selectively re-include.
*
!engine/
!engine/**
# Re-exclude build output directories that live under engine/.
engine/target/
engine/target_games/
engine/target_projects/
engine/pill_launcher/target/

16 changes: 0 additions & 16 deletions .github/actions/linux-deps/action.yml

This file was deleted.

103 changes: 103 additions & 0 deletions .github/workflows/ci-basic-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# Pill CI Pipeline - fast checks on every push
#
# Triggers on every push. All jobs run in the pre-built pill-ci container
# (which includes PillLauncher, Rust toolchain, and WASM tooling), fanning out
# to 5 parallel checks: code formatting, linting, native build + artifact size,
# WASM build + artifact size + budget, performance benchmark.

name: CI Basic Tests

on:
push:
paths-ignore:
# Avoid racing ci-build-image.yml — when the Dockerfile changes,
# this workflow is triggered by workflow_run instead, after the
# new image is built and pushed.
- "devops/tests/Dockerfile"
- ".github/workflows/ci-build-image.yml"
workflow_run:
workflows: [CI Build Docker Image]
types: [completed]

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

permissions:
packages: read

env:
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: clang
CARGO_TERM_COLOR: always

jobs:
# ------------------------------------------------------------------
# 1. code_formatting_check
# ------------------------------------------------------------------
code_formatting_check:
runs-on: ubuntu-latest
container: ghcr.io/mattszymonski/pill-ci:latest
steps:
- uses: actions/checkout@v4
- name: rustfmt check
run: bash devops/tests/run_basic_tests.sh code_formatting_check

# ------------------------------------------------------------------
# 2. code_linting_check
# ------------------------------------------------------------------
code_linting_check:
runs-on: ubuntu-latest
container: ghcr.io/mattszymonski/pill-ci:latest
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
with: { workspaces: "engine -> target" }
- name: clippy lint
run: bash devops/tests/run_basic_tests.sh code_linting_check

# ------------------------------------------------------------------
# 3. build_native_cube_example
# ------------------------------------------------------------------
build_native_cube_example:
runs-on: ubuntu-latest
container: ghcr.io/mattszymonski/pill-ci:latest
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
engine -> target
examples/cube -> target
- name: Build cube example
run: bash devops/tests/run_basic_tests.sh build_native_cube_example

# ------------------------------------------------------------------
# 4. build_wasm_cube_example
# ------------------------------------------------------------------
build_wasm_cube_example:
runs-on: ubuntu-latest
container: ghcr.io/mattszymonski/pill-ci:latest
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
examples/cube/build/wasm/.build/pill_web -> target
- name: WASM build
run: bash devops/tests/run_basic_tests.sh build_wasm_cube_example

# ------------------------------------------------------------------
# 5. benchmark_native_performance
# ------------------------------------------------------------------
benchmark_performance:
runs-on: ubuntu-latest
container: ghcr.io/mattszymonski/pill-ci:latest
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
engine -> target
examples/city -> target
- name: City performance benchmark (headless, 3 runs)
run: bash devops/tests/run_basic_tests.sh benchmark_native_performance
49 changes: 49 additions & 0 deletions .github/workflows/ci-build-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Pill CI Pipeline - Preparation
# Build Pill CI Docker image and push it to GitHub Container Registry (GHCR).

# Only runs when the Dockerfile, the PillLauncher source code, or this workflow changes.
# All other CI workflows pull this pre-built image for
# minimalizing action environment setup time.

name: CI Build Docker Image

on:
push:
paths:
- "devops/tests/Dockerfile"
- ".github/workflows/ci-build-image.yml"
- "engine/pill_launcher/**"
workflow_dispatch:

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository_owner }}/pill-ci

jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/metadata-action@v5
id: meta
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=latest
type=sha,prefix=
type=ref,event=branch
- uses: docker/build-push-action@v6
with:
context: .
file: devops/tests/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
72 changes: 72 additions & 0 deletions .github/workflows/ci-examples-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Pill CI Pipeline - example builds (all native + standalone)
#
# Builds every example project in the repo (native + standalone crates).
# Native examples run in the pre-built pill-ci container (which includes
# PillLauncher, Rust toolchain, and WASM tooling). WASM builds are covered
# by ci-basic-tests.yml.
# Runs on daily schedule and manual trigger.

name: CI Compile Examples

on:
schedule:
# Every day at 03:30 UTC (staggered after ci-basic daily)
- cron: "30 3 * * *"
workflow_dispatch:

permissions:
packages: read

env:
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: clang
CARGO_TERM_COLOR: always

jobs:
# ------------------------------------------------------------------
# Native example builds (matrix - each example in parallel)
# ------------------------------------------------------------------
build_native_examples:
runs-on: ubuntu-latest
container: ghcr.io/mattszymonski/pill-ci:latest
strategy:
fail-fast: false
matrix:
example:
- examples/cube
- examples/floating_pills
- examples/italian_brainrot
- examples/city
- examples/empty
- examples/pill_tunel
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
engine -> target
${{ matrix.example }} -> target
- name: Build ${{ matrix.example }}
run: bash devops/tests/run_examples_tests.sh "${{ matrix.example }}"

# ------------------------------------------------------------------
# Standalone crates (no PillLauncher needed)
# ------------------------------------------------------------------
build_standalone:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
crate:
- examples/net_minimal/client
- examples/net_minimal/server
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/linux-deps
- uses: actions-rust-lang/setup-rust-toolchain@v1
with: { toolchain: stable }
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
${{ matrix.crate }} -> target
- name: Build ${{ matrix.crate }}
run: cargo build --manifest-path ${{ matrix.crate }}/Cargo.toml
92 changes: 92 additions & 0 deletions .github/workflows/ci-pill_launcher-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Pill CI Pipeline - launcher action validation
#
# Quick suite: smoke tests (basics, create, cargo, assets).
# Full suite: heavier actions (build, run, docs).
# Runs on daily schedule and manual trigger.

name: CI Pill Launcher Tests

on:
schedule:
# Every day at 03:30 UTC (staggered after ci-basic daily)
- cron: "30 3 * * *"
workflow_dispatch:

permissions:
packages: read

env:
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: clang
CARGO_TERM_COLOR: always

jobs:
# ------------------------------------------------------------------
# Build the launcher once, upload as artifact for all downstream jobs
# ------------------------------------------------------------------
build_launcher:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup
with:
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
engine -> target
- name: Build PillLauncher (release)
run: cargo build --release --manifest-path engine/pill_launcher/Cargo.toml
- name: Upload PillLauncher artifact
uses: actions/upload-artifact@v4
with:
name: pilllauncher-linux
path: engine/pill_launcher/target/release/PillLauncher

# ------------------------------------------------------------------
# Quick suite - basic smoke tests + cube build
# ------------------------------------------------------------------
quick_suite:
runs-on: ubuntu-latest
needs: build_launcher
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
engine -> target
examples/cube -> target
- uses: actions/download-artifact@v4
with:
{
name: pilllauncher-linux,
path: engine/pill_launcher/target/release,
}
- name: Quick suite (smoke tests)
run: bash devops/tests/run_pill_launcher_tests.sh basics create cargo assets

# ------------------------------------------------------------------
# Full suite - launcher build + run + docs tests
# ------------------------------------------------------------------
full_suite:
runs-on: ubuntu-latest
container: ghcr.io/mattszymonski/pill-ci:latest
needs: build_launcher
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
engine -> target
examples/cube -> target
examples/city -> target
examples/floating_pills -> target
examples/italian_brainrot -> target
examples/cube/build/wasm/.build/pill_web -> target
- uses: actions/download-artifact@v4
with:
{
name: pilllauncher-linux,
path: engine/pill_launcher/target/release,
}
- name: Full suite (all launcher action tests)
run: bash devops/tests/run_pill_launcher_tests.sh build run docs
Loading
Loading