{"id":25838034,"url":"https://github.com/apache/ignite-teamcity-bot","last_synced_at":"2026-09-10T19:30:15.543Z","repository":{"id":33546802,"uuid":"144731383","full_name":"apache/ignite-teamcity-bot","owner":"apache","description":"Apache ignite Teamcity Bot","archived":false,"fork":false,"pushed_at":"2026-08-05T16:35:24.000Z","size":4682,"stargazers_count":12,"open_issues_count":5,"forks_count":27,"subscribers_count":18,"default_branch":"master","last_synced_at":"2026-08-23T13:32:18.717Z","etag":null,"topics":["big-data","cloud","data-management-platform","database","distributed-sql-database","hadoop","ignite","iot","network-client","network-server","osgi","sql"],"latest_commit_sha":null,"homepage":"https://ignite.apache.org/","language":"Java","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apache.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2018-08-14T14:26:52.000Z","updated_at":"2026-08-05T16:37:31.000Z","dependencies_parsed_at":"2026-08-23T12:33:31.249Z","dependency_job_id":null,"html_url":"https://github.com/apache/ignite-teamcity-bot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/apache/ignite-teamcity-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fignite-teamcity-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fignite-teamcity-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fignite-teamcity-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fignite-teamcity-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apache","download_url":"https://codeload.github.com/apache/ignite-teamcity-bot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fignite-teamcity-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":341189360,"owners_count":37203385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-22T15:14:58.755Z","status":"online","status_checked_at":"2026-09-10T02:00:06.818Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["big-data","cloud","data-management-platform","database","distributed-sql-database","hadoop","ignite","iot","network-client","network-server","osgi","sql"],"created_at":"2025-03-01T03:31:07.133Z","updated_at":"2026-09-10T19:30:15.530Z","avatar_url":"https://github.com/apache.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ignite-teamcity-bot\n\n[Apache Ignite Teamcity Bot](https://cwiki.apache.org/confluence/display/IGNITE/Apache+Ignite+Teamcity+Bot) (MTCGA.bot) is [Apache Ignite](https://ignite.apache.org/)-based cache over [JetBrains TeamCity](https://jetbrains.ru/products/teamcity/) server(s).\n\nThis tool intended to monitor [Apache Ignite Teamcity](https://ci.ignite.apache.org/) where [Apache Ignite](https://ignite.apache.org/) is tested.\n\nTC tool should help to avoid new failures introduction into master and provide ways of its early detection.\n\nMajor use cases are the following:\n* Continuous monitoring of master and/or release branch\n* Check branch/PR changes to new failures\n* MCTGA Bot for slack and for email notifications.\n\nUser-facing bot rules and workflows are documented in [TeamCity bot user guide](docs/teamcity-bot-user-guide.md).\nProduction build and deployment are documented in [Build and installation](docs/install.md).\nLocal clean checks and emulated bot runs are documented in [Testing](docs/testing.md).\n\nThis tool is available on [https://mtcga.gridgain.com/](https://mtcga.gridgain.com/) - requires apache CI credentials.\n\nShould you have any questions, please contact Ignite Developers at dev@ignite.apache.org or dpavlov@apache.org\n\n## Development\n### Project setup\nLocal code can be set up using IntelliJ IDEA and Gradle project import.\n\nFor local development, use one of the shared IDEA run configurations:\n\n* `TC Bot Local - Live Services` starts the server directly from Java classes and uses configured real services.\n* `TC Bot Local - Stub Services` starts GitHub, JIRA, and TeamCity stubs, then runs the bot server code in the same JVM.\n  Use it for normal debugging: breakpoints hit the server code, static resources are read from source on every request,\n  and Python stubs can be restarted through the control REST without restarting the bot.\n* `TC Bot WAR - Live Services` runs the production-like WAR launcher against configured real services. Its before-run\n  Gradle step builds `:ignite-tc-helper-web:war` and prepares `jetty-launcher/build/install/jetty-launcher`.\n* `TC Bot WAR - Stub Services` is the Gradle production-like stub-services run that starts the bot from the built WAR.\n\nFor command-line production-like emulator checks, run:\n\n```\n./gradlew :tcbot-integration-tests:runEmulatedTcBotWar\n```\n\n`WAR` configurations use Gradle-built WAR artifacts. `Local` configurations are live Java runs intended for IDE\ndebugging. `Live Services` uses configured external services; `Stub Services` starts local Python service stubs. Refresh\nthe browser for HTML/JS/CSS changes; restart the Java run only for Java changes.\n\nWhen running Java main classes directly from an IDE on Java 17, use the same module options as the\n`igniteJava17JvmArgs` Gradle property:\n\n```\n-XX:+IgnoreUnrecognizedVMOptions\n--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED\n--add-exports=java.base/sun.nio.ch=ALL-UNNAMED\n--add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED\n--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED\n--add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED\n--add-opens=java.base/java.io=ALL-UNNAMED\n--add-opens=java.base/java.lang=ALL-UNNAMED\n--add-opens=java.base/java.nio=ALL-UNNAMED\n--add-opens=java.base/java.time=ALL-UNNAMED\n--add-opens=java.base/java.util=ALL-UNNAMED\n--add-opens=java.base/java.util.concurrent=ALL-UNNAMED\n--add-opens=java.base/sun.nio.ch=ALL-UNNAMED\n```\n\nThe bot creates its working directory at `~/.ignite-teamcity-helper` by default. The directory contains\nruntime data and local configuration files. The location can be changed with the\n`teamcity.helper.home` system property (`TcBotSystemProperties.TEAMCITY_HELPER_HOME`), for example:\n\n```\n-Dteamcity.helper.home=/path/to/local/tc-bot-work\n```\n\nExamples of configs can be found in [conf](conf) directory. \nMain config file is [conf/branches.json](conf/branches.json). This file needs to be placed to work directory, (under user home by default).\nThe running bot reloads `branches.json` lazily: configuration reads are cached for up to 3 minutes, so most changes\nbecome visible without a restart after the cache expires. Restart the bot only when you need the change to take effect\nimmediately.\nJIRA and GitHub tokens can be specified as plain text in `branches.json` or protected with `PasswordEncoder`.\nWhen `authTokEncoded` is not set, the bot auto-detects encoded hex values and otherwise treats tokens as plain.\nSet `authTokEncoded` only when you need to force a mode. For JIRA Personal Access Tokens, use\n`authScheme: \"Bearer\"`; legacy base64 username/password tokens can still use `authScheme: \"Basic\"`. If\nJIRA `authScheme` is omitted, encoded tokens default to Basic for compatibility and plain tokens default to Bearer.\nNo TeamCity credentials are required because TC bot asks users to enter creds.\n\nMinimal local run checklist:\n* Import the Gradle project into IntelliJ IDEA.\n* Copy `conf/branches.json` to the bot working directory, or prepare another `branches.json` there.\n* Adjust TeamCity, JIRA, GitHub, and notification settings in the copied config.\n* Run `TC Bot WAR - Live Services` for a production-like WAR run, or `TC Bot Local - Stub Services` for local stub-backed UI work.\n* Open `http://localhost:8080/` for `Live Services` runs, or `http://127.0.0.1:5555/` for `Stub Services` runs.\n* Log in with actual TeamCity credentials for real-service runs, and add service credentials on the user page when a configured service requires them.\n* Use the `Authorize Server` action in the top menu when you need background jobs, triggering, JIRA comments, notifications, or queue checks to run under your current TeamCity credentials.\n\nServer authorization is kept in memory. If the local process is restarted, log in and authorize the server again.\n\n### Code inspections, styles and abbreviation rules.\n[Code style](https://cwiki.apache.org/confluence/display/IGNITE/Coding+Guidelines) is inherited from Apache Ignite.\nPlease install following components for development using IntelliJ IDEA\n* Install [Abbreviation Plugin](https://cwiki.apache.org/confluence/display/IGNITE/Abbreviation+Rules#AbbreviationRules-IntelliJIdeaPlugin)\n* Apply [Code Inspection Profile](https://cwiki.apache.org/confluence/display/IGNITE/Coding+Guidelines#CodingGuidelines-C.CodeInspection)\n* Configure [IDEA Codestyle](https://cwiki.apache.org/confluence/display/IGNITE/Coding+Guidelines#CodingGuidelines-A.ConfigureIntelliJIDEAcodestyle)\n\n### Internal Design\nMain bot logic is placed in [ignite-tc-helper-web](ignite-tc-helper-web) module. \n[jetty-launcher](jetty-launcher) is an application module to start bot in production.\n\nApache Ignite TC Bot interacts with several data sources to find out current state and details of contribution.\n\n\u003cimg src=\"https://docs.google.com/drawings/d/e/2PACX-1vTbvhVlSrpo-KA8V5jTL5ogRrpsx_21ByzviOps58-Yw8gV3qz9buS3nEBJvxXZdJWzUZryQjscfiCs/pub?w=488\u0026amp;h=313\"\u003e\n\nTeamCity Bot Components and its interactions\n\n\u003cimg src=\"https://docs.google.com/drawings/d/e/2PACX-1vQM6tH6-pb6C_JGjNG41sUBJP72CVpNqeBHIQdgaGYL4rGoYfZtywwzVB1JKF1Kk8haXUVl_IORI6NQ/pub?w=1356\u0026h=733\"\u003e\n\n### Modules structure\nStatic content is placed in [webapp](ignite-tc-helper-web/src/main/webapp).\n\nTC Bot services can be found in [tcbot-engine](tcbot-engine)\n\nTC Bot integrations are placed in corresponding submodules\n\n| Data Source | Pure Integration | Persistence-enabled |\n| ----------- | ---------------- | ------------------- |\n| Teamcity | [tcbot-teamcity](tcbot-teamcity) | [tcbot-teamcity-ignited](tcbot-teamcity-ignited) |\n| JIRA | [tcbot-jira](tcbot-jira) | [tcbot-jira-ignited](tcbot-jira-ignited)  |\n| GitHub | [tcbot-github](tcbot-github) | [tcbot-github-ignited](tcbot-github-ignited)  |\n\nInternal storage and cache notes live in [TC Bot internals: caching strategy](docs/caching-strategy.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fignite-teamcity-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapache%2Fignite-teamcity-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fignite-teamcity-bot/lists"}