Compare commits

...

8 Commits

Author SHA1 Message Date
dependabot[bot]
ba504558b0 chore(deps): bump the rust-minor group across 1 directory with 9 updates
Bumps the rust-minor group with 8 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [bitflags](https://github.com/bitflags/bitflags) | `2.9.4` | `2.10.0` |
| [circular-buffer](https://github.com/andreacorbellini/rust-circular-buffer) | `1.1.0` | `1.2.0` |
| rust-embed | `8.7.2` | `8.9.0` |
| [tokio](https://github.com/tokio-rs/tokio) | `1.47.1` | `1.48.0` |
| [http](https://github.com/hyperium/http) | `1.3.1` | `1.4.0` |
| [hyper](https://github.com/hyperium/hyper) | `1.7.0` | `1.8.1` |
| [bytes](https://github.com/tokio-rs/bytes) | `1.10.1` | `1.11.0` |
| [bon](https://github.com/elastio/bon) | `3.7.2` | `3.8.1` |



Updates `bitflags` from 2.9.4 to 2.10.0
- [Release notes](https://github.com/bitflags/bitflags/releases)
- [Changelog](https://github.com/bitflags/bitflags/blob/main/CHANGELOG.md)
- [Commits](https://github.com/bitflags/bitflags/compare/2.9.4...2.10.0)

Updates `circular-buffer` from 1.1.0 to 1.2.0
- [Release notes](https://github.com/andreacorbellini/rust-circular-buffer/releases)
- [Changelog](https://github.com/andreacorbellini/rust-circular-buffer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/andreacorbellini/rust-circular-buffer/compare/v1.1.0...v1.2.0)

Updates `rust-embed` from 8.7.2 to 8.9.0

Updates `serde` from 1.0.225 to 1.0.228
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.225...v1.0.228)

Updates `tokio` from 1.47.1 to 1.48.0
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.47.1...tokio-1.48.0)

Updates `http` from 1.3.1 to 1.4.0
- [Release notes](https://github.com/hyperium/http/releases)
- [Changelog](https://github.com/hyperium/http/blob/master/CHANGELOG.md)
- [Commits](https://github.com/hyperium/http/compare/v1.3.1...v1.4.0)

Updates `hyper` from 1.7.0 to 1.8.1
- [Release notes](https://github.com/hyperium/hyper/releases)
- [Changelog](https://github.com/hyperium/hyper/blob/master/CHANGELOG.md)
- [Commits](https://github.com/hyperium/hyper/compare/v1.7.0...v1.8.1)

Updates `bytes` from 1.10.1 to 1.11.0
- [Release notes](https://github.com/tokio-rs/bytes/releases)
- [Changelog](https://github.com/tokio-rs/bytes/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tokio-rs/bytes/compare/v1.10.1...v1.11.0)

Updates `bon` from 3.7.2 to 3.8.1
- [Release notes](https://github.com/elastio/bon/releases)
- [Changelog](https://github.com/elastio/bon/blob/master/release-plz.toml)
- [Commits](https://github.com/elastio/bon/compare/v3.7.2...v3.8.1)

---
updated-dependencies:
- dependency-name: bitflags
  dependency-version: 2.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-minor
- dependency-name: circular-buffer
  dependency-version: 1.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-minor
- dependency-name: rust-embed
  dependency-version: 8.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-minor
- dependency-name: serde
  dependency-version: 1.0.228
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rust-minor
- dependency-name: tokio
  dependency-version: 1.48.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-minor
- dependency-name: http
  dependency-version: 1.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-minor
- dependency-name: hyper
  dependency-version: 1.8.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-minor
- dependency-name: bytes
  dependency-version: 1.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-minor
- dependency-name: bon
  dependency-version: 3.8.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-02 01:08:29 +00:00
dependabot[bot]
191fe49c64 chore(deps): bump actions/checkout in the github-actions group (#11)
Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).


Updates `actions/checkout` from 5 to 6
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-25 16:14:41 -06:00
Ryan Walters
cc6a1a4c6a fix(ci): skip Railway deployment and Coveralls upload when tokens unavailable
Dependabot PRs lack access to repository secrets, causing workflow failures.
This change adds token availability checks with informative warnings, allowing
CI to complete successfully while skipping deployment steps that require secrets.

Coverage generation still runs to maintain build verification, but upload is
conditional on token availability.
2025-11-23 11:48:58 -06:00
Ryan Walters
0338188e94 refactor: reorganize project structure for clarity
Move documentation assets to .github/assets/ and backend scripts to pacman-server/scripts/. Updates all references in README and Justfile.
2025-11-23 11:47:43 -06:00
dependabot[bot]
a60d309a66 chore(deps): bump mockall from 0.13.1 to 0.14.0 in the rust-major group (#14) 2025-11-23 16:15:22 +00:00
Ryan Walters
203a5c0e2e fix(ci): skip Coveralls upload when token unavailable
The coverage workflow was failing on Dependabot PRs because
COVERALLS_REPO_TOKEN is not available to PRs from forks for security
reasons. Add a conditional check to skip the upload step when the
token is missing, while still running coverage generation.

This allows PRs to pass CI while retaining coverage reports on master.
2025-11-23 01:38:41 -06:00
Ryan Walters
cb50ade88f fix(web): resolve leaderboard production crashes by removing react-animated-numbers
Remove react-animated-numbers dependency which caused production-only crashes due to CommonJS/ESM interop issues with Vite's production bundler. Replace animated score displays with simple toLocaleString() formatting.

Also add missing +config.ts to disable SSR for the leaderboard page, fixing 307 redirect loop caused by SSR/prerender configuration mismatch.

Changes:
- Remove react-animated-numbers from package.json
- Add web/pages/leaderboard/+config.ts with ssr: false
- Replace AnimatedNumbers component with direct number formatting
- Simplify leaderboard score display (no animation, instant render)
2025-11-23 01:21:02 -06:00
Ryan Walters
984a2e95ca fix(ci): consolidate Dependabot configs to resolve overlapping directories
Dependabot rejected the previous configuration due to duplicate
package-ecosystem/directory combinations. Merged separate patch/minor/major
update configs into single configs per directory with grouped update types.
2025-11-23 01:21:02 -06:00
21 changed files with 166 additions and 368 deletions

View File

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

181
.github/dependabot.yml vendored
View File

@@ -4,135 +4,40 @@
# Strategy:
# - Weekly checks for faster vulnerability detection
# - Separate patch/minor/major updates to prevent blocking
# - Group by crate (game vs server) for easier review
# - Auto-merge patches via GitHub branch protection rules
# - Limit concurrent PRs to avoid spam
version: 2
updates:
# Game: Patch updates (auto-mergeable)
# Cargo workspace (all Rust crates)
- package-ecosystem: "cargo"
directory: "/pacman"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
game-patches:
applies-to: "version-updates"
update-types:
- "patch"
ignore:
# Bevy ECS 0.17+ requires API migration - ignore until manual update
# Bevy ECS 0.17+ requires API migration
- dependency-name: "bevy_ecs"
versions: ["0.17.x", "0.18.x", "0.19.x"]
labels:
- "dependencies"
- "dependencies:patch"
- "game"
# Game: Minor updates (grouped, manual review)
- package-ecosystem: "cargo"
directory: "/pacman"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
game-minor:
applies-to: "version-updates"
update-types:
- "minor"
ignore:
- dependency-name: "bevy_ecs"
versions: ["0.17.x", "0.18.x", "0.19.x"]
labels:
- "dependencies"
- "dependencies:minor"
- "game"
# Game: Major updates (separate PRs, manual review)
- package-ecosystem: "cargo"
directory: "/pacman"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
game-major:
applies-to: "version-updates"
update-types:
- "major"
ignore:
- dependency-name: "bevy_ecs"
versions: ["0.17.x", "0.18.x", "0.19.x"]
labels:
- "dependencies"
- "dependencies:major"
- "game"
# Server: Patch updates (auto-mergeable)
- package-ecosystem: "cargo"
directory: "/pacman-server"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
server-patches:
applies-to: "version-updates"
update-types:
- "patch"
ignore:
# jsonwebtoken 10+ requires crypto backend feature flag - ignore until manual migration
# jsonwebtoken 10+ requires crypto backend feature flag
- dependency-name: "jsonwebtoken"
versions: ["10.x", "11.x"]
labels:
- "dependencies"
- "dependencies:patch"
- "server"
# Server: Minor updates (grouped, manual review)
- package-ecosystem: "cargo"
directory: "/pacman-server"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
server-minor:
rust-patches:
applies-to: "version-updates"
update-types:
- "minor"
ignore:
- dependency-name: "jsonwebtoken"
versions: ["10.x", "11.x"]
update-types: ["patch"]
rust-minor:
applies-to: "version-updates"
update-types: ["minor"]
rust-major:
applies-to: "version-updates"
update-types: ["major"]
labels:
- "dependencies"
- "dependencies:minor"
- "server"
- "rust"
# Server: Major updates (separate PRs, manual review)
- package-ecosystem: "cargo"
directory: "/pacman-server"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
server-major:
applies-to: "version-updates"
update-types:
- "major"
ignore:
- dependency-name: "jsonwebtoken"
versions: ["10.x", "11.x"]
labels:
- "dependencies"
- "dependencies:major"
- "server"
# Frontend: Patch updates (auto-mergeable)
# Frontend (web/)
- package-ecosystem: "npm"
directory: "/web"
schedule:
@@ -142,65 +47,21 @@ updates:
groups:
frontend-patches:
applies-to: "version-updates"
update-types:
- "patch"
labels:
- "dependencies"
- "dependencies:patch"
- "frontend"
# Frontend: Minor updates (grouped, manual review)
- package-ecosystem: "npm"
directory: "/web"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
update-types: ["patch"]
frontend-minor:
applies-to: "version-updates"
update-types:
- "minor"
labels:
- "dependencies"
- "dependencies:minor"
- "frontend"
# Frontend: Major updates (separate PRs for critical deps)
- package-ecosystem: "npm"
directory: "/web"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
update-types: ["minor"]
frontend-major-framework:
applies-to: "version-updates"
update-types:
- "major"
update-types: ["major"]
patterns:
- "react"
- "react-dom"
- "vike"
- "vite"
labels:
- "dependencies"
- "dependencies:major"
- "frontend"
- "framework"
# Frontend: Other major updates (grouped)
- package-ecosystem: "npm"
directory: "/web"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
frontend-major-other:
applies-to: "version-updates"
update-types:
- "major"
update-types: ["major"]
exclude-patterns:
- "react"
- "react-dom"
@@ -208,10 +69,9 @@ updates:
- "vite"
labels:
- "dependencies"
- "dependencies:major"
- "frontend"
# GitHub Actions: All updates grouped (low risk)
# GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
@@ -220,8 +80,7 @@ updates:
open-pull-requests-limit: 5
groups:
github-actions:
patterns:
- "*"
patterns: ["*"]
labels:
- "dependencies"
- "github-actions"

View File

@@ -38,7 +38,7 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Setup Rust Toolchain
uses: dtolnay/rust-toolchain@master

View File

@@ -19,7 +19,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master

View File

@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
@@ -56,7 +56,16 @@ jobs:
just coverage
working-directory: pacman
- name: Check Coveralls Token
run: |
if [ -z "${{ secrets.COVERALLS_REPO_TOKEN }}" ]; then
echo "::warning::COVERALLS_REPO_TOKEN not available - coverage upload skipped (common for Dependabot PRs)"
else
echo "COVERALLS_REPO_TOKEN is available - will upload coverage"
fi
- name: Coveralls upload
if: ${{ secrets.COVERALLS_REPO_TOKEN != '' }}
uses: coverallsapp/github-action@v2
with:
github-token: ${{ secrets.COVERALLS_REPO_TOKEN }}

View File

@@ -22,7 +22,7 @@ jobs:
digest: ${{ steps.docker_build.outputs.digest }}
steps:
- name: Checkout
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Setup Emscripten SDK
uses: pyodide/setup-emsdk@v15
@@ -132,8 +132,17 @@ jobs:
env:
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
steps:
- name: Check Railway Token
run: |
if [ -z "$RAILWAY_TOKEN" ]; then
echo "::warning::RAILWAY_TOKEN not available - deployment skipped (common for Dependabot PRs)"
exit 0
fi
- name: Generate proxy Dockerfile
if: env.RAILWAY_TOKEN != ''
run: echo "FROM ghcr.io/xevion/pac-man@${{ needs.build-and-deploy.outputs.digest }}" > Dockerfile
- name: Deploy to Railway
if: env.RAILWAY_TOKEN != ''
run: railway up --service pac-man

View File

@@ -19,7 +19,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master

270
Cargo.lock generated
View File

@@ -2,15 +2,6 @@
# It is not intended for manual editing.
version = 4
[[package]]
name = "addr2line"
version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
dependencies = [
"gimli",
]
[[package]]
name = "adler2"
version = "2.0.1"
@@ -264,7 +255,7 @@ checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5"
dependencies = [
"axum-core",
"axum-macros",
"bytes 1.10.1",
"bytes 1.11.0",
"form_urlencoded",
"futures-util",
"http",
@@ -284,7 +275,7 @@ dependencies = [
"serde_path_to_error",
"serde_urlencoded",
"sync_wrapper",
"tokio 1.47.1",
"tokio 1.48.0",
"tower",
"tower-layer",
"tower-service",
@@ -310,7 +301,7 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6"
dependencies = [
"bytes 1.10.1",
"bytes 1.11.0",
"futures-core",
"http",
"http-body",
@@ -343,7 +334,7 @@ checksum = "680e88effaafbb28675074f29cda0e984c984bed5eb513085c17caf7de564225"
dependencies = [
"anyhow",
"axum",
"bytes 1.10.1",
"bytes 1.11.0",
"bytesize",
"cookie",
"expect-json",
@@ -359,26 +350,11 @@ dependencies = [
"serde_json",
"serde_urlencoded",
"smallvec 1.15.1",
"tokio 1.47.1",
"tokio 1.48.0",
"tower",
"url",
]
[[package]]
name = "backtrace"
version = "0.3.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
dependencies = [
"addr2line",
"cfg-if 1.0.3",
"libc",
"miniz_oxide",
"object",
"rustc-demangle",
"windows-targets 0.52.6",
]
[[package]]
name = "base64"
version = "0.21.7"
@@ -410,7 +386,7 @@ dependencies = [
"bevy_reflect",
"bevy_tasks",
"bevy_utils",
"bitflags 2.9.4",
"bitflags 2.10.0",
"bumpalo",
"concurrent-queue",
"derive_more",
@@ -544,7 +520,7 @@ version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
dependencies = [
"bitflags 2.9.4",
"bitflags 2.10.0",
"cexpr",
"clang-sys",
"itertools 0.13.0",
@@ -572,11 +548,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.9.4"
version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
dependencies = [
"serde",
"serde_core",
]
[[package]]
@@ -602,10 +578,10 @@ checksum = "899ca34eb6924d6ec2a77c6f7f5c7339e60fd68235eaf91edd5a15f12958bb06"
dependencies = [
"async-stream",
"base64 0.22.1",
"bitflags 2.9.4",
"bitflags 2.10.0",
"bollard-buildkit-proto",
"bollard-stubs",
"bytes 1.10.1",
"bytes 1.11.0",
"chrono",
"futures-core",
"futures-util",
@@ -632,7 +608,7 @@ dependencies = [
"serde_repr",
"serde_urlencoded",
"thiserror 2.0.16",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-stream",
"tokio-util",
"tonic",
@@ -661,7 +637,7 @@ checksum = "64ea257e555d16a2c01e5593f40b73865cdf12efbceda33c6d14a2d8d1490368"
dependencies = [
"base64 0.22.1",
"bollard-buildkit-proto",
"bytes 1.10.1",
"bytes 1.11.0",
"chrono",
"prost",
"serde",
@@ -672,9 +648,9 @@ dependencies = [
[[package]]
name = "bon"
version = "3.7.2"
version = "3.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2529c31017402be841eb45892278a6c21a000c0a17643af326c73a73f83f0fb"
checksum = "ebeb9aaf9329dff6ceb65c689ca3db33dbf15f324909c60e4e5eef5701ce31b1"
dependencies = [
"bon-macros",
"rustversion",
@@ -682,9 +658,9 @@ dependencies = [
[[package]]
name = "bon-macros"
version = "3.7.2"
version = "3.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d82020dadcb845a345591863adb65d74fa8dc5c18a0b6d408470e13b7adc7005"
checksum = "77e9d642a7e3a318e37c2c9427b5a6a48aa1ad55dcd986f3034ab2239045a645"
dependencies = [
"darling 0.21.3",
"ident_case",
@@ -737,9 +713,9 @@ dependencies = [
[[package]]
name = "bytes"
version = "1.10.1"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3"
[[package]]
name = "bytesize"
@@ -827,9 +803,9 @@ dependencies = [
[[package]]
name = "circular-buffer"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23bdce1da528cadbac4654b5632bfcd8c6c63e25b1d42cea919a95958790b51d"
checksum = "14c638459986b83c2b885179bd4ea6a2cbb05697b001501a56adb3a3d230803b"
[[package]]
name = "clang-sys"
@@ -1807,12 +1783,6 @@ dependencies = [
"weezl",
]
[[package]]
name = "gimli"
version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]]
name = "glam"
version = "0.29.3"
@@ -1841,14 +1811,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
dependencies = [
"atomic-waker",
"bytes 1.10.1",
"bytes 1.11.0",
"fnv",
"futures-core",
"futures-sink",
"http",
"indexmap 2.11.3",
"slab",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-util",
"tracing",
]
@@ -1963,12 +1933,11 @@ dependencies = [
[[package]]
name = "http"
version = "1.3.1"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
dependencies = [
"bytes 1.10.1",
"fnv",
"bytes 1.11.0",
"itoa",
]
@@ -1978,7 +1947,7 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes 1.10.1",
"bytes 1.11.0",
"http",
]
@@ -1988,7 +1957,7 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
dependencies = [
"bytes 1.10.1",
"bytes 1.11.0",
"futures-core",
"http",
"http-body",
@@ -2015,12 +1984,12 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "hyper"
version = "1.7.0"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11"
dependencies = [
"atomic-waker",
"bytes 1.10.1",
"bytes 1.11.0",
"futures-channel",
"futures-core",
"h2",
@@ -2032,7 +2001,7 @@ dependencies = [
"pin-project-lite",
"pin-utils",
"smallvec 1.15.1",
"tokio 1.47.1",
"tokio 1.48.0",
"want",
]
@@ -2046,7 +2015,7 @@ dependencies = [
"hyper",
"hyper-util",
"pin-project-lite",
"tokio 1.47.1",
"tokio 1.48.0",
"tower-service",
"winapi 0.3.9",
]
@@ -2062,7 +2031,7 @@ dependencies = [
"hyper-util",
"rustls",
"rustls-pki-types",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-rustls",
"tower-service",
"webpki-roots 1.0.2",
@@ -2077,7 +2046,7 @@ dependencies = [
"hyper",
"hyper-util",
"pin-project-lite",
"tokio 1.47.1",
"tokio 1.48.0",
"tower-service",
]
@@ -2087,12 +2056,12 @@ version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
dependencies = [
"bytes 1.10.1",
"bytes 1.11.0",
"http-body-util",
"hyper",
"hyper-util",
"native-tls",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-native-tls",
"tower-service",
]
@@ -2104,7 +2073,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
dependencies = [
"base64 0.22.1",
"bytes 1.10.1",
"bytes 1.11.0",
"futures-channel",
"futures-core",
"futures-util",
@@ -2117,7 +2086,7 @@ dependencies = [
"pin-project-lite",
"socket2 0.6.0",
"system-configuration",
"tokio 1.47.1",
"tokio 1.48.0",
"tower-service",
"tracing",
"windows-registry",
@@ -2134,7 +2103,7 @@ dependencies = [
"hyper",
"hyper-util",
"pin-project-lite",
"tokio 1.47.1",
"tokio 1.48.0",
"tower-service",
]
@@ -2373,17 +2342,6 @@ dependencies = [
"rustversion",
]
[[package]]
name = "io-uring"
version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b"
dependencies = [
"bitflags 2.9.4",
"cfg-if 1.0.3",
"libc",
]
[[package]]
name = "iovec"
version = "0.1.4"
@@ -2529,7 +2487,7 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
dependencies = [
"bitflags 2.9.4",
"bitflags 2.10.0",
"libc",
"redox_syscall 0.5.17",
]
@@ -2760,9 +2718,9 @@ dependencies = [
[[package]]
name = "mockall"
version = "0.13.1"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39a6bfcc6c8c7eed5ee98b9c3e33adc726054389233e201c95dab2d41a3839d2"
checksum = "f58d964098a5f9c6b63d0798e5372fd04708193510a7af313c22e9f29b7b620b"
dependencies = [
"cfg-if 1.0.3",
"downcast",
@@ -2774,9 +2732,9 @@ dependencies = [
[[package]]
name = "mockall_derive"
version = "0.13.1"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25ca3004c2efe9011bd4e461bd8256445052b9615405b4f7ea43fc8ca5c20898"
checksum = "ca41ce716dda6a9be188b385aa78ee5260fc25cd3802cb2a8afdc6afbe6b6dbf"
dependencies = [
"cfg-if 1.0.3",
"proc-macro2",
@@ -3003,15 +2961,6 @@ dependencies = [
"url",
]
[[package]]
name = "object"
version = "0.36.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
version = "1.21.3"
@@ -3024,7 +2973,7 @@ version = "0.10.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
dependencies = [
"bitflags 2.9.4",
"bitflags 2.10.0",
"cfg-if 1.0.3",
"foreign-types",
"libc",
@@ -3078,7 +3027,7 @@ version = "0.81.1"
dependencies = [
"anyhow",
"bevy_ecs",
"bitflags 2.9.4",
"bitflags 2.10.0",
"circular-buffer",
"glam 0.30.5",
"libc",
@@ -3122,7 +3071,7 @@ dependencies = [
"axum-cookie",
"axum-test",
"bon",
"bytes 1.10.1",
"bytes 1.11.0",
"chrono",
"cookie",
"dashmap",
@@ -3145,7 +3094,7 @@ dependencies = [
"sqlx",
"testcontainers",
"time",
"tokio 1.47.1",
"tokio 1.48.0",
"tower-http",
"tracing",
"tracing-futures",
@@ -3399,7 +3348,7 @@ version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0"
dependencies = [
"bitflags 2.9.4",
"bitflags 2.10.0",
"crc32fast",
"fdeflate",
"flate2",
@@ -3538,7 +3487,7 @@ version = "0.13.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5"
dependencies = [
"bytes 1.10.1",
"bytes 1.11.0",
"prost-derive",
]
@@ -3604,7 +3553,7 @@ version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
dependencies = [
"bytes 1.10.1",
"bytes 1.11.0",
"cfg_aliases",
"pin-project-lite",
"quinn-proto",
@@ -3613,7 +3562,7 @@ dependencies = [
"rustls",
"socket2 0.6.0",
"thiserror 2.0.16",
"tokio 1.47.1",
"tokio 1.48.0",
"tracing",
"web-time",
]
@@ -3624,7 +3573,7 @@ version = "0.11.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
dependencies = [
"bytes 1.10.1",
"bytes 1.11.0",
"getrandom 0.3.3",
"lru-slab",
"rand 0.9.2",
@@ -3818,7 +3767,7 @@ version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
dependencies = [
"bitflags 2.9.4",
"bitflags 2.10.0",
]
[[package]]
@@ -3877,7 +3826,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb"
dependencies = [
"base64 0.22.1",
"bytes 1.10.1",
"bytes 1.11.0",
"encoding_rs",
"futures-core",
"h2",
@@ -3901,7 +3850,7 @@ dependencies = [
"serde_json",
"serde_urlencoded",
"sync_wrapper",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-native-tls",
"tokio-rustls",
"tower",
@@ -3965,9 +3914,9 @@ dependencies = [
[[package]]
name = "rust-embed"
version = "8.7.2"
version = "8.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a"
checksum = "947d7f3fad52b283d261c4c99a084937e2fe492248cb9a68a8435a861b8798ca"
dependencies = [
"rust-embed-impl",
"rust-embed-utils",
@@ -3976,9 +3925,9 @@ dependencies = [
[[package]]
name = "rust-embed-impl"
version = "8.7.2"
version = "8.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c"
checksum = "5fa2c8c9e8711e10f9c4fd2d64317ef13feaab820a4c51541f1a8c8e2e851ab2"
dependencies = [
"proc-macro2",
"quote",
@@ -3989,9 +3938,9 @@ dependencies = [
[[package]]
name = "rust-embed-utils"
version = "8.7.2"
version = "8.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594"
checksum = "60b161f275cb337fe0a44d924a5f4df0ed69c2c39519858f931ce61c779d3475"
dependencies = [
"sha2",
"walkdir",
@@ -4013,7 +3962,7 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c839d037155ebc06a571e305af66ff9fd9063a6e662447051737e1ac75beea41"
dependencies = [
"bytes 1.10.1",
"bytes 1.11.0",
"futures-core",
"futures-util",
"http",
@@ -4022,12 +3971,6 @@ dependencies = [
"thiserror 2.0.16",
]
[[package]]
name = "rustc-demangle"
version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
[[package]]
name = "rustc-hash"
version = "2.1.1"
@@ -4049,7 +3992,7 @@ version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
dependencies = [
"bitflags 2.9.4",
"bitflags 2.10.0",
"errno",
"libc",
"linux-raw-sys",
@@ -4127,7 +4070,7 @@ version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "65bc94b580d0f5a6b7a2d604e597513d3c673154b52ddeccd1d5c32360d945ee"
dependencies = [
"bytes 1.10.1",
"bytes 1.11.0",
"rxml_validation",
]
@@ -4154,7 +4097,7 @@ checksum = "2fd8d44de9045104205a93dcfe3525889df62af2d2db6d95ccb44663733b8832"
dependencies = [
"aws-region",
"base64 0.22.1",
"bytes 1.10.1",
"bytes 1.11.0",
"femlol-aws-creds",
"futures 0.3.31",
"hex",
@@ -4175,7 +4118,7 @@ dependencies = [
"strum_macros",
"thiserror 2.0.16",
"time",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-stream",
"tokio-util",
"url",
@@ -4260,7 +4203,7 @@ version = "2.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
dependencies = [
"bitflags 2.9.4",
"bitflags 2.10.0",
"core-foundation 0.9.4",
"core-foundation-sys",
"libc",
@@ -4273,7 +4216,7 @@ version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640"
dependencies = [
"bitflags 2.9.4",
"bitflags 2.10.0",
"core-foundation 0.10.1",
"core-foundation-sys",
"libc",
@@ -4313,9 +4256,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "serde"
version = "1.0.225"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d"
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
dependencies = [
"serde_core",
"serde_derive",
@@ -4323,18 +4266,18 @@ dependencies = [
[[package]]
name = "serde_core"
version = "1.0.225"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383"
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.225"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516"
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
@@ -4618,7 +4561,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6"
dependencies = [
"base64 0.22.1",
"bytes 1.10.1",
"bytes 1.11.0",
"chrono",
"crc",
"crossbeam-queue 0.3.12",
@@ -4641,7 +4584,7 @@ dependencies = [
"sha2",
"smallvec 1.15.1",
"thiserror 2.0.16",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-stream",
"tracing",
"url",
@@ -4682,7 +4625,7 @@ dependencies = [
"sqlx-postgres",
"sqlx-sqlite",
"syn",
"tokio 1.47.1",
"tokio 1.48.0",
"url",
]
@@ -4694,9 +4637,9 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526"
dependencies = [
"atoi",
"base64 0.22.1",
"bitflags 2.9.4",
"bitflags 2.10.0",
"byteorder",
"bytes 1.10.1",
"bytes 1.11.0",
"chrono",
"crc",
"digest",
@@ -4737,7 +4680,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46"
dependencies = [
"atoi",
"base64 0.22.1",
"bitflags 2.9.4",
"bitflags 2.10.0",
"byteorder",
"chrono",
"crc",
@@ -4905,7 +4848,7 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
dependencies = [
"bitflags 2.9.4",
"bitflags 2.10.0",
"core-foundation 0.9.4",
"system-configuration-sys",
]
@@ -4967,7 +4910,7 @@ dependencies = [
"async-trait",
"bollard",
"bollard-stubs",
"bytes 1.10.1",
"bytes 1.11.0",
"docker_credential",
"either",
"etcetera 0.10.0",
@@ -4980,7 +4923,7 @@ dependencies = [
"serde_json",
"serde_with",
"thiserror 2.0.16",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-stream",
"tokio-tar",
"tokio-util",
@@ -5147,22 +5090,19 @@ dependencies = [
[[package]]
name = "tokio"
version = "1.47.1"
version = "1.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
dependencies = [
"backtrace",
"bytes 1.10.1",
"io-uring",
"bytes 1.11.0",
"libc",
"mio 1.0.4",
"parking_lot 0.12.4",
"pin-project-lite",
"signal-hook-registry",
"slab",
"socket2 0.6.0",
"tokio-macros",
"windows-sys 0.59.0",
"windows-sys 0.61.0",
]
[[package]]
@@ -5220,9 +5160,9 @@ dependencies = [
[[package]]
name = "tokio-macros"
version = "2.5.0"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
dependencies = [
"proc-macro2",
"quote",
@@ -5236,7 +5176,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
dependencies = [
"native-tls",
"tokio 1.47.1",
"tokio 1.48.0",
]
[[package]]
@@ -5265,7 +5205,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
dependencies = [
"rustls",
"tokio 1.47.1",
"tokio 1.48.0",
]
[[package]]
@@ -5276,7 +5216,7 @@ checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
dependencies = [
"futures-core",
"pin-project-lite",
"tokio 1.47.1",
"tokio 1.48.0",
]
[[package]]
@@ -5299,7 +5239,7 @@ dependencies = [
"futures-core",
"libc",
"redox_syscall 0.3.5",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-stream",
"xattr",
]
@@ -5386,11 +5326,11 @@ version = "0.7.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
dependencies = [
"bytes 1.10.1",
"bytes 1.11.0",
"futures-core",
"futures-sink",
"pin-project-lite",
"tokio 1.47.1",
"tokio 1.48.0",
]
[[package]]
@@ -5436,7 +5376,7 @@ dependencies = [
"async-trait",
"axum",
"base64 0.22.1",
"bytes 1.10.1",
"bytes 1.11.0",
"h2",
"http",
"http-body",
@@ -5448,7 +5388,7 @@ dependencies = [
"pin-project",
"prost",
"socket2 0.5.10",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-stream",
"tower",
"tower-layer",
@@ -5468,7 +5408,7 @@ dependencies = [
"pin-project-lite",
"slab",
"sync_wrapper",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-util",
"tower-layer",
"tower-service",
@@ -5481,8 +5421,8 @@ version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
dependencies = [
"bitflags 2.9.4",
"bytes 1.10.1",
"bitflags 2.10.0",
"bytes 1.11.0",
"futures-core",
"futures-util",
"http",
@@ -5495,7 +5435,7 @@ dependencies = [
"mime_guess",
"percent-encoding",
"pin-project-lite",
"tokio 1.47.1",
"tokio 1.48.0",
"tokio-util",
"tower",
"tower-layer",
@@ -5985,7 +5925,7 @@ version = "24.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c"
dependencies = [
"bitflags 2.9.4",
"bitflags 2.10.0",
"js-sys",
"log",
"serde",

View File

@@ -52,7 +52,7 @@ push:
# Create a postgres container for the server
server-postgres:
bun run .scripts/postgres.ts
bun run pacman-server/scripts/postgres.ts
# Build the server image
server-image:

View File

@@ -2,7 +2,7 @@
<!-- markdownlint-disable MD041 -->
<div align="center">
<img src="assets/banner.png" alt="Pac-Man Banner Screenshot">
<img src=".github/assets/banner.png" alt="Pac-Man Banner Screenshot">
</div>
# Pac-Man
@@ -49,16 +49,16 @@ However, every commit has build artifacts, so you can grab the [latest build art
## Screenshots
<div align="center">
<img src="assets/screenshots/0.png" alt="Screenshot 0 - Starting Game">
<img src=".github/assets/screenshots/0.png" alt="Screenshot 0 - Starting Game">
<p><em>Starting a new game</em></p>
<img src="assets/screenshots/1.png" alt="Screenshot 1 - Eating Dots">
<img src=".github/assets/screenshots/1.png" alt="Screenshot 1 - Eating Dots">
<p><em>Pac-Man collecting dots and avoiding ghosts</em></p>
<img src="assets/screenshots/2.png" alt="Screenshot 2 - Game Over">
<img src=".github/assets/screenshots/2.png" alt="Screenshot 2 - Game Over">
<p><em>Game over screen after losing all lives</em></p>
<img src="assets/screenshots/3.png" alt="Screenshot 3 - Debug Mode">
<img src=".github/assets/screenshots/3.png" alt="Screenshot 3 - Debug Mode">
<p><em>Debug mode showing hitboxes, node graph, and performance details.</em></p>
</div>

View File

@@ -51,7 +51,7 @@ s3-tokio = { version = "0.39.6", default-features = false }
rustls = { version = "0.23", features = ["ring"] }
image = { version = "0.25", features = ["png", "jpeg"] }
sha2 = "0.10"
mockall = "0.13.1"
mockall = "0.14.0"
# validator = { version = "0.16", features = ["derive"] }
[dev-dependencies]
@@ -64,7 +64,7 @@ anyhow = "1"
axum-test = "18.1.0"
pretty_assertions = "1.4.1"
testcontainers = "0.25.0"
bon = "3.7.2"
bon = "3.8.1"
cookie = "0.18.1"
[lints.rust]

View File

@@ -28,9 +28,9 @@ time = { version = "0.3.43", features = ["formatting", "macros"] }
thiserror = "2.0.16"
anyhow = "1.0"
smallvec = "1.15.1"
bitflags = "2.9.4"
bitflags = "2.10.0"
micromap = "0.1.0"
circular-buffer = "=1.1.0"
circular-buffer = "=1.2.0"
parking_lot = "0.12.3"
strum = "0.27.2"
strum_macros = "0.27.2"
@@ -50,7 +50,7 @@ windows-sys = { version = "0.61.0", features = ["Win32_System_Console"] }
# On desktop platforms, build SDL2 with cargo-vcpkg
sdl2 = { version = "0.38", default-features = false, features = ["image", "ttf", "gfx", "mixer", "unsafe_textures", "static-link", "use-vcpkg"] }
rand = { version = "0.9.2", default-features = false, features = ["thread_rng"] }
rust-embed = "8.7.2"
rust-embed = "8.9.0"
spin_sleep = "1.3.3"
# Browser-specific dependencies

View File

@@ -9,7 +9,6 @@
"@tabler/icons-react": "^3.35.0",
"@vitejs/plugin-react": "^5.0.2",
"react": "^19.1.1",
"react-animated-numbers": "^1.1.1",
"react-dom": "^19.1.1",
"vike": "^0.4.240",
"vike-react": "^0.6.5",
@@ -465,8 +464,6 @@
"for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="],
"framer-motion": ["framer-motion@11.18.2", "", { "dependencies": { "motion-dom": "^11.18.1", "motion-utils": "^11.18.1", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w=="],
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
"function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
@@ -641,12 +638,6 @@
"minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
"motion": ["motion@11.18.2", "", { "dependencies": { "framer-motion": "^11.18.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-JLjvFDuFr42NFtcVoMAyC2sEjnpA8xpy6qWPyzQvCloznAyQ8FIXioxWfHiLtgYhoVpfUqSWpn1h9++skj9+Wg=="],
"motion-dom": ["motion-dom@11.18.1", "", { "dependencies": { "motion-utils": "^11.18.1" } }, "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw=="],
"motion-utils": ["motion-utils@11.18.1", "", {}, "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA=="],
"mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="],
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
@@ -711,8 +702,6 @@
"react": ["react@19.2.0", "", {}, "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ=="],
"react-animated-numbers": ["react-animated-numbers@1.1.1", "", { "dependencies": { "motion": "^11.16.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-Jr2vbDWjo5wW+X8wBYRBACpuKdPkLa4A2ZYfxlAR0oc/gXWVeWyAmAWzZj73276IQxycxrTL7aGn4quWV7+l2Q=="],
"react-dom": ["react-dom@19.2.0", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.0" } }, "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ=="],
"react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="],
@@ -803,8 +792,6 @@
"ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="],
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="],
"typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="],

View File

@@ -14,7 +14,6 @@
"@tabler/icons-react": "^3.35.0",
"@vitejs/plugin-react": "^5.0.2",
"react": "^19.1.1",
"react-animated-numbers": "^1.1.1",
"react-dom": "^19.1.1",
"vike": "^0.4.240",
"vike-react": "^0.6.5"

View File

@@ -1,8 +1,5 @@
import { useState } from "react";
import { IconTrophy, IconCalendar } from "@tabler/icons-react";
import { clientOnly } from "vike-react/clientOnly";
const AnimatedNumbers = clientOnly(() => import("react-animated-numbers"));
interface LeaderboardEntry {
id: number;
@@ -238,15 +235,7 @@ function LeaderboardTable({ data }: { data: LeaderboardEntry[] }) {
</td>
<td className="py-2">
<span className="text-yellow-300 font-[600] text-lg">
<AnimatedNumbers
fallback={<span className="text-transparent">{entry.score.toLocaleString()}</span>}
useThousandsSeparator
transitions={(digitIndex) => ({
type: "easeIn",
duration: 0.75 + digitIndex * 0.25 + entryIndex * 0.2,
})}
animateToNumber={entry.score}
/>
{entry.score.toLocaleString()}
</span>
</td>
<td className="py-2">

View File

@@ -0,0 +1,6 @@
import type { Config } from "vike/types";
export default {
prerender: true, // Generate static HTML for deployment
ssr: false, // Force client-side only rendering
} satisfies Config;