v1.2.0
What's New
New Features
TeamCity CLI gains new commands for managing jobs, build steps, and settings: job create, job step, and setting subcommands for listing, getting, and setting job settings. You can now follow a specific test's history with run tests --test, navigate directly to TeamCity UI pages, and use --limit 0 to fetch all results with a truncation hint.
Improvements
The CLI now shows an activity spinner during long-running fetches and degrades Unicode glyphs to ASCII on terminals that do not support them. The startup banner is suppressed when --quiet is set or TERM=dumb is in effect.
Bug Fixes
Several correctness fixes have been applied: shell alias subprocesses now receive raw stdio streams and correctly preserve positional arguments containing spaces or quotes, --json output no longer includes progress text or serializes empty lists as null, artifact download failures now cause a non-zero exit, and user-supplied values are properly escaped in request paths and locators.
Changelog
- 4e3df6d: feat(api): add GetBuildTypeSettings and GetBuildTypeSetting methods (Viktor (@tiulpin))
- 0348bdc: feat(api): add paginated ListTestOccurrences primitive (Viktor (@tiulpin))
- 1ec38bb: feat(cli): suppress startup banner when --quiet or TERM=dumb (Viktor (@tiulpin))
- a9c8782: feat(evals): schema-driven checks, statistical gate, versioned pipeline (#350) (Viktor (@tiulpin))
- 6c7f378: feat(evals): submit eval results to Langfuse (Viktor (@tiulpin))
- 1da7baf: feat(evals): support ANTHROPIC_BASE_URL env var in Claude Code runs (Boris Yakhno (@boris-yakhno))
- 3cc3013: feat(job): add build step management commands (job step) (Viktor (@tiulpin))
- 5b6870f: feat(job): add job create command (Viktor (@tiulpin))
- ee795a1: feat(output): degrade Unicode glyphs to ASCII on incapable terminals (Viktor (@tiulpin))
- 5abee77: feat(output): show activity spinner during long-running fetches (Viktor (@tiulpin))
- 55cc9ac: feat(run): follow a test's history with run tests --test (Viktor (@tiulpin))
- f9bc30e: feat(setting): add job settings list/get/set subcommands (Viktor (@tiulpin))
- c908d89: feat: allow --limit 0 to fetch all results with truncation hint (Viktor (@tiulpin))
- a534869: feat: direct navigation to TeamCity UI pages (#306) (Viktor (@tiulpin))
- 8f9cc42: fix(alias): give shell alias subprocesses the raw stdio streams (Viktor (@tiulpin))
- 5b11e88: fix(alias): preserve positional args containing spaces or quotes (#341) (Viktor (@tiulpin))
- 67e21f0: fix(analytics): bump command schema version for job.settings.* (Viktor (@tiulpin))
- 29f90ef: fix(api): close response bodies of retried attempts (Viktor (@tiulpin))
- e344821: fix(api): emit empty pipeline and reason arrays as [] in --json (#365) (Viktor (@tiulpin))
- e749657: fix(api): escape user-supplied values in request paths and locators (#340) (Viktor (@tiulpin))
- b3eda8e: fix(api): serialize empty list results as [] not null (Viktor (@tiulpin))
- d641c55: fix(api): serialize empty step and settings lists as [] not null (Viktor (@tiulpin))
- 6886b89: fix(api): stop nested TeamCity from cancelling integration test builds (Viktor (@tiulpin))
- 55117e1: fix(api): strip context path from raw pagination nextHref (Viktor (@tiulpin))
- be981f3: fix(auth): report TEAMCITY_TOKEN in status when TEAMCITY_URL is unset (Viktor (@tiulpin))
- fe79077: fix(auth): validate callback state before acting on the result (Viktor (@tiulpin))
- 71204d3: fix(cli): note env-var auth alongside auth login in startup help (Viktor (@tiulpin))
- ca21623: fix(cmd): make --json and --web mutually exclusive in create commands (Viktor (@tiulpin))
- 5bd660d: fix(config): preserve context path in NormalizeURL (Viktor (@tiulpin))
- 5d545c5: fix(git): end option parsing before user-supplied revisions (Viktor (@tiulpin))
- 3b87756: fix(job): detect cycles by ancestor path so diamond deps aren't dropped (Viktor (@tiulpin))
- e276ba7: fix(output): replace em dashes with ASCII hyphens in user-facing strings (Viktor (@tiulpin))
- 427675a: fix(output): suppress the activity spinner on dumb terminals (Viktor (@tiulpin))
- 99a49d2: fix(run): exit non-zero when artifact downloads fail (Viktor (@tiulpin))
- fcb45da: fix(run): keep run start --json output free of progress text (Viktor (@tiulpin))
- 0fd5764: fix(run): surface watch errors from the TUI instead of reporting success (Viktor (@tiulpin))
- 4865b1b: fix(tests): retry sandbox test on seatbelt proxyconnect EPERM flake (Viktor (@tiulpin))
- 141044e: refactor(api): route run tests through ListTestOccurrences (Viktor (@tiulpin))
- ae46443: refactor(cmd):
Installation
macOS & Linux
Homebrew (recommended):
brew install jetbrains/utils/teamcityInstall script:
curl -fsSL https://jb.gg/tc/install | bashDebian/Ubuntu:
curl -fsSLO https://github.com/JetBrains/teamcity-cli/releases/download/v1.2.0/teamcity_linux_amd64.deb
sudo dpkg -i teamcity_linux_amd64.debRHEL/Fedora:
sudo rpm -i https://github.com/JetBrains/teamcity-cli/releases/download/v1.2.0/teamcity_linux_amd64.rpmArch Linux (AUR):
yay -S teamcity-binWindows
Winget (recommended):
winget install JetBrains.TeamCityCLIChocolatey:
choco install TeamCityCLIScoop:
scoop bucket add jetbrains https://github.com/JetBrains/scoop-utils
scoop install teamcityManual:
Download teamcity_1.2.0_windows_x86_64.zip, extract, and add to PATH.
npm
npm install -g @jetbrains/teamcity-cliGo Install
go install github.com/JetBrains/teamcity-cli/tc@v1.2.0Quick Start
# Authenticate with your TeamCity server
teamcity auth login
# List recent builds
teamcity run list
# Start a build
teamcity run start MyProject_Build --branch main --watchFull documentation — getting started, configuration, command reference, and more.