Skip to content

Repository layout: what belongs on GitHub

This page explains which directories are source, which are generated locally, and what never gets pushed. Goal: no confusion between docs/, site/, build/, venvs, optional local scratch trees, and vendored upstream trees.

Single sources of truth

What Where On GitHub?
Human-written documentation (MkDocs) docs/ (mkdocs.yml at repo root) Yes — this is the doc source.
VENDOR.md (component revisions for CMake / csr version) VENDOR.md at repo root (see also Vendor table (VENDOR.md)) Yes — required for builds and version strings.
Automation & CI .github/workflows/ Yes — only this .github tree is CSRetro’s; see below.
Build / dev entry tools.sh (repo root) Yes

Generated or local-only (gitignored — not on GitHub)

Path What it is Safe to delete?
site/ MkDocs output from mkdocs build (HTML for GitHub Pages is produced in CI, not from your local site/ folder). Yes — regenerated anytime.
build/, build-debug/ CMake build trees. Yes — use ./tools.sh build:clean.
game-test/ Installed engine + cstrike/ after ./tools.sh install:* / build:full. Yes — recreated by build/install.
logs/ Build and run logs. Yes.
docs/_upstream_mirror/ (if present) Gitignored. Optional local scratch; do not commit upstream HTML dumps. Prefer storing comparison snapshots outside the repo. Yes — delete anytime.
.venv/ Recommended Python virtualenv for MkDocs (pip install -r requirements-docs.txt). Yes — recreate with python3 -m venv .venv.

Do not commit the paths above. They are listed in the repo root .gitignore.

Python environment (one venv name)

Use one venv at the repo root for documentation tooling:

python3 -m venv .venv
.venv/bin/pip install -r requirements-docs.txt

If you previously created a separate folder (e.g. .venv-docs/), delete it and use .venv/ only to avoid duplicate environments.

.cursor/ — plans and rules vs local junk

  • Versioned in this repo: .cursor/plans/ (project plans) and .cursor/rules/ (shared editor rules for contributors).
  • Still ignored: other Cursor-only files under .cursor/ that are machine-specific.

So the Plans you care about live under .cursor/plans/ and are tracked when you commit — they are not “mystery duplicates” of docs/; docs/ remains the MkDocs documentation, plans are roadmaps / checklists.

Vendored upstream trees (3rdparty/, engine/, …)

Folders like 3rdparty/metamod/ or 3rdparty/nodemod/ are full upstream snapshots merged into CSRetro. They may contain their own .github/, CMakeLists.txt, or workflows from the original project. Those files are not CSRetro’s CI; they exist so merging future upstream updates stays diff-friendly.

Do not delete them without a tested sync strategy — see Architecture (section Vendor tree hygiene).

CSRetro’s own GitHub Actions live only under .github/workflows/ at the repository root.

Mental model

flowchart TB
  subgraph tracked [Committed to Git]
    docsMd[docs Markdown]
    mkdocsYml[mkdocs.yml]
    vendorMd[VENDOR.md]
    toolsSh[tools.sh]
    ghWorkflows[.github/workflows]
    cursorShared[.cursor plans and rules]
  end
  subgraph localOnly [Local only gitignored]
    siteOut[site output]
    buildDirs[build directories]
    gameTest[game-test]
    scratchDir[ignored scratch dirs]
    pyvenv[.venv]
  end
  docsMd --> mkdocsYml
  mkdocsYml --> siteOut

See also Building and Developers.