SansanandClaude Sonnet 5 06f4e9ed11
Build and Test / build (push) Failing after 19s
Build and Test / windows (push) Successful in 1m34s
Fix CI test segfault: clamp stack ulimit before odin test
Root cause found via gdb backtrace on the runner (thread::pool_init
crashed from main -> testing runner): the CI container sets
`ulimit -s unlimited`, so getrlimit(RLIMIT_STACK) returns RLIM_INFINITY.
core:thread passes that to pthread_attr_setstacksize, pthread_create
fails, and thread.create() returns nil, which core:testing's pool_init
dereferences without a nil check. Reproduced and confirmed fixed in an
ubuntu:24.04 container with the same Odin build. `just test` now clamps
the stack limit before running odin test. Also removes the gdb
diagnostic step added to debug this.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-03 19:35:43 +02:00

HanjaKanaMun

Odin + raylib memory card game for learning Japanese, Korean and Thai scripts.

Match each symbol with its reading: hiragana and katakana with romaji, Hangul letters with their Revised Romanization, and Thai consonants with their sound and name word. Three difficulties (6, 12 or 16 pairs), best scores per deck, and a card deck themed on each country's flag.

Controls

Mouse Click cards and buttons
Arrows / WASD / hjkl Move between cards
Enter / Space Flip the selected card (Enter also plays again)
1-3 Pick a language or deck in menus
Left / Right Change difficulty
Esc Back (quits from the main menu)

Scores are saved to profile.json in the user data folder (~/Library/Application Support/HanjaKanaMun on macOS, ~/.local/share/HanjaKanaMun on Linux, %APPDATA%\HanjaKanaMun on Windows).

Development

Requires Odin (dev-2026-09) and just.

just run              # build and play (debug)
just check            # type-check with -vet
just test             # run tests
just package 1.0      # native release build -> build/HanjaKanaMun_1.0_<os>_<arch>.tar.gz
just windows-deps     # Linux only: fetch Windows SDK/CRT (xwin) and raylib.lib
just package-windows 1.0  # cross-compiled Windows build -> build/HanjaKanaMun_1.0_windows_x86_64.zip

The Windows build needs lld-link. On macOS, brew install lld and set LLD_LINK, and point XWIN_SDK and RAYLIB_WINDOWS at an xwin splat and Odin's Windows vendor/raylib/windows folder (the Linux/macOS Odin releases don't include raylib.lib).

Neovim

ols.json and odinfmt.json configure the ols language server and formatter. Install ols (e.g. :MasonInstall ols) and enable it with nvim-lspconfig: vim.lsp.enable('ols'). Formatting goes through ols (vim.lsp.buf.format()), or just fmt if odinfmt is on your PATH.

CI

  • .gitea/workflows/gitea-build.yaml: check, test and build on pushes and PRs to main and develop, plus a Windows cross-build so link problems show up before a release.
  • .gitea/workflows/gitea-release.yaml: on a version tag like v1.0, builds Linux and Windows packages, uploads them to the Gitea generic package registry (HanjaKanaMun/1.0) and creates a Gitea release with both attached. Needs a TOKEN secret with package write access.
  • .gitea/actions/setup: shared toolchain setup (apt packages, Odin, just).

Release: git tag v1.0 && git push origin v1.0

Credits

Fonts, all under the SIL Open Font License (license files in assets/): M PLUS Rounded 1c (UI and kana), Jua (Hangul), Mali (Thai).

S
Description
Odin + raylib multilingual application (Thai, Korean, Japanese)
Readme
4.5 MiB
0 Stars 1 Watchers 0 Forks
v0.0.1
Latest
2026-10-03 19:53:59 +02:00
Languages
Odin 93.4%
Just 6.6%