Modern Python/PySide6 clone of the Neverwinter Nights Aurora Toolset
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Giacomo 'Mr. Wolf' Furlan e77d009b4e
All checks were successful
CI / check (push) Successful in 1m30s
fix(tests): stop PySide6 teardown crash from clobbering the CI exit code
CI's test phase reported "2028 passed, 60 skipped" — a clean run — yet
the step still failed with exit code 139. Reproduced locally: pytest
prints its full passing summary, then the process segfaults (135/139,
flaky — not every run) during Python's own shutdown GC/atexit sweep,
which is a known PySide6 issue once enough QWidget/QOpenGLWidget
instances have been created across a session. It's a native teardown-
ordering crash, not a real test failure.

Add a pytest_sessionfinish hook that calls os._exit() with pytest's own
computed exit status, bypassing that GC/atexit sweep entirely so the
crash can't happen after the fact. Verified over repeated full-suite
runs (previously flaky at 135/139, now consistently 0) and confirmed a
deliberately failing test still exits 1.
2026-07-19 14:43:59 +02:00
.forgejo/workflows ci: drop sudo from apt-get (Forgejo runner runs as root) 2026-07-01 16:52:35 +02:00
bioware-docs Added new epics / stories and added original NWToolset manual 2026-07-03 15:37:19 +02:00
docs docs: mark EPIC-019..024 and EPIC-031 complete 2026-07-12 09:39:43 +02:00
scripts/hooks chore: add pre-commit hook; fix ruff/mypy debt across ui and renderer 2026-07-18 22:30:50 +02:00
src/pyaurora fix(render): default fog off in the 3D viewport 2026-07-19 14:29:55 +02:00
tests fix(tests): stop PySide6 teardown crash from clobbering the CI exit code 2026-07-19 14:43:59 +02:00
.gitignore feat(scaffold): init project with toolchain, src layout, and package tree 2026-07-01 11:05:40 +02:00
LICENSE License 2026-07-01 10:50:41 +02:00
Makefile chore: add pre-commit hook; fix ruff/mypy debt across ui and renderer 2026-07-18 22:30:50 +02:00
Pipfile feat(STORY-103): Sound Wizard 5-step QWizard for UTS blueprints 2026-07-11 21:48:28 +02:00
pyproject.toml feat(ui): add main window skeleton with menus, toolbar, docks, and QSettings persistence 2026-07-01 15:26:43 +02:00
README.md chore: add pre-commit hook; fix ruff/mypy debt across ui and renderer 2026-07-18 22:30:50 +02:00
uv.lock ci: add Forgejo Actions workflow for format, lint, typecheck, and test 2026-07-01 16:33:12 +02:00

pyaurora-toolset

Modern Python/PySide6 clone of the Neverwinter Nights Aurora Toolset.

Quickstart

uv sync
uv run pyaurora

On first launch the toolset auto-detects your NWN:EE installation. If detection fails you will be prompted to browse to the installation root manually.

Environment variables

Variable Purpose Required
NWNEE_HOME Path to the NWN:EE installation root (the directory containing chitin.key). Overrides auto-detection. No

Auto-detection search order (first valid path wins):

  1. NWNEE_HOME env var
  2. Steam — platform default paths (Linux, Windows, macOS)
  3. GOG — platform default paths (Windows, macOS)

If no installation is found automatically, set NWNEE_HOME explicitly:

export NWNEE_HOME="/path/to/Neverwinter Nights"
uv run pyaurora

Development

uv sync --group dev
make check        # format check + lint + typecheck + tests
make fmt          # auto-format and fix lint
make test         # tests only
make typecheck    # mypy only

Git hooks (format check, lint, typecheck on commit):

make hooks

Integration tests require a real NWN:EE installation and are skipped automatically when NWNEE_HOME is not set. To run them:

NWNEE_HOME="/path/to/Neverwinter Nights" uv run pytest -m integration