Files
forge/docs/build-setup.md
zeekayandHanzo Dev a0b748828a refactor(brand): purge upstream naming from user- and operator-visible surfaces
Audited what users and operators actually see, not raw grep counts. The
rendered DOM, page titles, meta and footer on git.hanzo.ai were already
clean; the frontend bundle is clean on main (the live hits were a stale
deployed image, v1.26.19). What survived was server-side text and locales.

User-visible:
- Locale values: 12 -> 0 across 11 languages. The bulk was the admin
  self-check telling operators to run "gitea doctor convert"; our binary
  is gitd, so the instruction was wrong as well as off-brand.
- Credential prompt realm when OAuth2 is disabled (the branch whose job is
  to NOT match Git Credential Manager's "Gitea" probe).
- Admin diagnosis download is hanzo-git-diagnosis-*.zip; dump artifacts are
  hanzo-git-dump-*.zip / hanzo-git-db.sql.
- Azure AD icon gradient ids no longer carry the upstream name. Source
  hygiene only: svgo cleanupIds already rewrote them before shipping.

Outbound identity (what third parties see):
- User-Agent to OAuth providers, haveibeenpwned and remote LFS servers is
  now Hanzo Git. The git-lfs "git-lfs/<version>" prefix is untouched;
  some LFS servers parse it.

Operator-visible:
- CLI help, descriptions and examples name gitd, not gitea. Several were
  telling operators to run commands that do not exist.
- Migration/startup failure text (wrong-DB-version, no-SQLite-support,
  collation warning, internal-API contact error). The "upgrade to Gitea
  1.6.4 first" note keeps the upstream name: that release is a real point
  in the schema lineage and renaming it would make it a lie.
- Prometheus namespace gitea_ -> hanzogit_. Verified metrics are disabled
  on git.hanzo.ai, so no dashboard exists to break; this is the cheapest
  moment to do it.
- Default log file, PID file, and the container entrypoint message.
- Our own X-* headers are now function-namespaced per the platform's
  vendor-free convention: X-Cache-Debug, X-Internal-Auth,
  X-LFS-Content-Length, X-Vite-Dev-Server. Every side ships in one binary,
  so the rename is atomic.

Correctness found on the way:
- LLM.md documented GITEA__<section>__<KEY>; only GIT__ is accepted and
  there is no fallback, so a stale GITEA__ var is silently ignored.
- EnvConfigKeyPrefixGitea held "GIT__" — name now matches its value.
- api_packages_container_test.go still asserted the old registry realm
  while the code emits ours, so that test could not pass.
- README told developers to run ./gitea web; docs/build-setup.md told
  contributors to clone go-gitea/gitea instead of this fork.

Deliberately kept, and why, recorded in LLM.md: MIT attribution, dependency
import paths, addressing values whose rename silently redirects (webhook
type, .gitea/ repo conventions, index and analyzer names, /data/gitea),
the GCM interop realm, and three wire contracts with external consumers
(X-GITEA-OTP, webhook delivery headers, mail headers) that need an owner
decision rather than a blind rename.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-26 13:50:17 -07:00

2.6 KiB

Setup and requirements

This document lists the tools you need to build Gitea from source and how to get the code. Once your environment is ready, see development.md for the build and development workflow, and testing.md for running tests.

For the contribution workflow and review process, see CONTRIBUTING.md.

Requirements

Go

Install Go and set up your Go environment. The required version is the one declared in go.mod; installing the same version your continuous integration uses avoids gofmt differences between Go releases.

Note

Some make tasks build external Go tools on demand (for example make watch-backend). To use them, the "$GOPATH"/bin directory must be on your executable PATH; otherwise you have to manage those tools yourself.

Node.js and pnpm

Install Node.js to build the JavaScript and CSS files. The minimum supported version is the one declared in package.json (engines.node); the latest LTS is recommended.

Gitea manages frontend dependencies with pnpm. The make targets invoke it for you, so installing pnpm manually is only needed if you want to run pnpm commands directly.

Make

Gitea uses Make to drive builds, linting, and tests. On Windows it can be installed via MSYS2 or Chocolatey.

Python with uv (optional)

Linting the templates, workflow files, and YAML requires Python tooling that Gitea runs through uv. After installing uv, make creates the environment automatically (uv sync); you only need this if you run make lint-templates, make lint-yaml, or make lint-actions locally.

Git LFS

The integration tests require Git LFS to be installed.

Getting the source code

Clone the repository:

git clone https://github.com/hanzoai/git

To contribute changes, fork the repository on GitHub and add your fork as a git remote so you can push branches and open pull requests. See GitHub's working with forks documentation for the details.

Installing dependencies

Most build and test targets install the dependencies they need on their own. To fetch everything up front, run make deps (or the per-group make deps-frontend, make deps-backend, make deps-tools, make deps-py).