{"id":20121538,"url":"https://github.com/cirruslabs/terminal","last_synced_at":"2025-05-06T15:31:00.470Z","repository":{"id":39889815,"uuid":"376055258","full_name":"cirruslabs/terminal","owner":"cirruslabs","description":"A service that powers Cirrus CI's task terminal access","archived":false,"fork":false,"pushed_at":"2025-04-23T18:30:01.000Z","size":331,"stargazers_count":8,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-23T19:41:27.615Z","etag":null,"topics":["golang","grpc","protocol-buffers"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"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/cirruslabs.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}},"created_at":"2021-06-11T14:43:53.000Z","updated_at":"2025-04-23T18:30:03.000Z","dependencies_parsed_at":"2022-08-28T10:22:00.251Z","dependency_job_id":"990c4f69-f21f-4c4d-b3e7-820a2ab7a39d","html_url":"https://github.com/cirruslabs/terminal","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cirruslabs%2Fterminal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cirruslabs%2Fterminal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cirruslabs%2Fterminal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cirruslabs%2Fterminal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cirruslabs","download_url":"https://codeload.github.com/cirruslabs/terminal/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252712846,"owners_count":21792380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["golang","grpc","protocol-buffers"],"created_at":"2024-11-13T19:29:40.091Z","updated_at":"2025-05-06T15:31:00.146Z","avatar_url":"https://github.com/cirruslabs.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cirrus Terminal\n\nA service that powers [Cirrus CI](https://cirrus-ci.org/)'s task terminal access.\n\nIt's used as follows:\n\n* `pkg/host` package is used in the [Cirrus CI agent](https://github.com/cirruslabs/cirrus-ci-agent) and acts as a terminal host\n* `internal/server` is running in the cloud and provides the server functionality\n* [Cirrus CI web frontend](https://github.com/cirruslabs/cirrus-ci-web) acts as a terminal guest\n\n## Architecture\n\nThe whole system consists of three components:\n\n* `host` — provides terminal sessions by registering itself on the `server`\n  * currently works over gRPC\n* `server` — acts as a rendezvous point between `host ` and `guest `\n* `guest` — connects to the `hosts` through a `server` and consumes terminal sessions\n  * currently works over gRPC-Web, however, in the future, it's technically possible to provide an ability to connect to the `hosts` via `server` using a standard SSH client\n\nThe most up-to-date protocol specification can be found in the [`terminal.proto`](proto/terminal.proto), but to give a bit more visual picture, the overall data flow looks like this:\n\n![](doc/diagram.png)\n\n## Development\n\nDevelopment is done as you'd do normally, however, in case you need to make [`terminal.proto`](proto/terminal.proto) changes, you will need re-generate the `internal/api` package contents.\n\nTo do this, make sure [Protocol Buffers Compiler](https://grpc.io/docs/protoc-installation/) (`protoc`) is installed, and run the following command from the root of the project:\n\n```\nmake\n```\n\nThe JavaScript stubs are generated automatically by the `JavaScript Protocol Buffers and gRPC code-generation` task in the [`.cirrus.yml`](.cirrus.yml).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcirruslabs%2Fterminal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcirruslabs%2Fterminal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcirruslabs%2Fterminal/lists"}