Click Sign in and use TAMU single sign-on — there is no separate TTI Code password. Your account is created automatically on first sign-in.
Overnight, a directory sync fills in your profile from the TTI directory: your display name, photo, and department. That's not just cosmetic — it's what makes people findable (see Adding people).
Create a repo with the + button in the navbar, or migrate one in from GitHub/GitLab — the importer brings code, issues, labels, and releases. Visibility levels:
| Level | Who can see it |
|---|---|
| Public | Anyone who can reach the site |
| Internal | Any signed-in TTI person |
| Private | You, plus collaborators and teams you add |
Org repos under tti/ typically use branch protection: changes land via pull request with a passing status check, not direct pushes to main.
Your SSO password will not work for git push. Use one of:
Add your public key under avatar → Settings → SSH / GPG Keys, then note the non-standard port:
git clone ssh://git@code.tti.tamu.edu:2227/tti/example-repo.git
Mint a token under avatar → Settings → Applications → Generate new token and use it as the password:
git clone https://code.tti.tamu.edu/tti/example-repo.git
# username: your login · password: the token
laptop-git, ci-deploy) — losing one then means deleting one, not resetting everything. Pick only the scopes it needs (e.g. repository: read/write), and set Repository access → Specific repositories to limit it to just the repos it touches: a leaked token then can't reach anything else private (works for repository and issue scopes). Treat tokens like passwords — never commit them; the baseline scanner will flag it, and then you get to rotate it. Lost track of a token? Nothing to recover: delete it in Settings → Applications and mint a fresh one.Repo → Settings → Collaborators. Search by real name or NetID — because profiles are directory-synced, typing Rivera finds every Rivera with the department shown next to each, so you can pick the right one. Choose their permission (read / write / admin) and done.
Prefer teams when more than a couple of people need the same access — collaborator lists don't maintain themselves; teams can.
Org teams whose description starts with [entra-sync] are mirrored from TTI directory security groups. The sync reconciles membership daily:
A worked example: a student-workers security group is mapped to the tti/student-workers team with write permission. Granting a student access to a project = adding the team on that repo (Repo → Settings → Collaborators → Teams). When the semester ends, HR updates the group and the forge takes care of itself.
[entra-sync] teams — the next sync reverts it. Manage the security group instead. Need a group mapped for your unit? Ask an org owner.TTI Code runs GitHub-Actions-compatible workflows on TTI-hosted runners. Drop a file under .forgejo/workflows/:
name: test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: make test
Repos also carry a seeded security baseline workflow: dependency scanning (SCA) and secret detection run on every push, and protected branches can require it to pass. False positive? There's a reviewed ignore mechanism (.security-ignore) rather than deleting the check.
actions/upload-artifact@v4 does not work on self-hosted Forgejo. For small outputs, post results to an issue or PR comment from the job instead.Each org has built-in registries — publish internal packages and consume them like any other dependency, without leaving TTI:
npm config set @tti:registry https://code.tti.tamu.edu/api/packages/tti/npm/
npm install @tti/example-lib
pip install --index-url https://code.tti.tamu.edu/api/packages/tti/pypi/simple/ example-lib
docker pull code.tti.tamu.edu/tti/example-image:latest
Publishing needs a token with the package scope. Pull-through caches for upstream npm/PyPI/OCI also run on-site, so installs are fast and survive upstream outages.
Project planning happens on native issues, upgraded with:
tti/ repos.On repos where it's enabled, an AI reviewer leaves a first-pass comment on new pull requests — potential bugs, risky patterns, things a human should look at first. Two things to know:
The half-moon icon in the navbar cycles auto → light → dark. Both palettes are contrast-audited to WCAG 2.1 AA on every color change we ship. If anything is hard to read in either mode, report it — readability regressions are treated as bugs.