Your first pipeline
Push code and watch it build. No configuration file needed.
Push and it runs
gittan detects your project type automatically. Push to a repo that contains a package.json, go.mod, or Dockerfile and the pipeline runs immediately — install, lint, test, build — all
determined by org policies that match your project files.
You see the result right in your terminal:
$ git push
remote: ── pipeline starting ──────────────────
remote: feat: add user profile endpoint
remote: ✓ secret-scan 1s
remote: ✓ install 3s
remote: ✓ lint 4s
remote: ✓ test 12s
remote: ✓ build 8s
remote: ── pipeline passed ─── 28s ───────────
remote: ✓ main → a1b2c3d If the pipeline fails, the push is rejected. Fix and push again —
no broken code lands on main.
$ git push
remote: ── pipeline starting ──────────────────
remote: fix: update validation logic
remote: ✓ secret-scan 1s
remote: ✓ install 3s
remote: ✗ test 9s
remote: FAIL src/validation.test.ts
remote: expected 200, received 422
remote: ── pipeline failed ─── 13s ────────────
remote: ✗ push rejected — fix and push again
! [remote rejected] main -> main (pre-receive hook declined) How detection works
There is no magic auto-detection service. Your org’s policies have match rules
that check which files exist in the repo. A policy matching package.json provides Node.js steps. One matching go.mod provides Go steps. The pipeline you see is the union of all matching policies.
Three platform policies always run:
- secret-scan — checks for hardcoded secrets — blocks push if secrets found
- dep-scan — CVE scanning — blocks push on CRITICAL, advisory on HIGH
- policy-scan — anti-patterns (SQL injection, :latest tags, etc.) — advisory
Adding .gittan.yaml
Most repos never need a config file. Add .gittan.yaml when you need to:
- Override the default steps with your own
- Add a publish step to build and push a container image
- Add a review gate
- Declare dependencies on other repos
- Configure notifications
steps:
- name: install
run: pnpm install --frozen-lockfile
- name: test
run: pnpm test
needs: [install]
- name: build
run: pnpm build
needs: [install]
- name: publish
publish:
image: api
needs: [test, build] When you add a .gittan.yaml with steps, your steps replace the default policy steps. Enforce policies
(like org-wide security scanning) still run — they cannot be overridden.
See the full spec at Pipeline YAML reference.
Gated branches
By default, main is gated — a failing pipeline rejects the push. Other branches run the
pipeline but accept the push regardless of the result. Change this with:
gated:
- main
- release/* Viewing runs
Besides the terminal output, you can view pipeline runs in the web UI or CLI:
# Latest run with full output
gittan pipelines logs
# List recent runs
gittan pipelines list --format table
# Specific run
gittan pipelines logs <run-id> --full What’s next
- Pipeline configuration — step fields, DAG ordering, services, caching.
- Policies — org-wide and team-scoped pipeline rules.
- Import repos — bring existing repos from GitHub, GitLab, or Bitbucket.