Skip to content

Latest commit

 

History

History
35 lines (22 loc) · 1.66 KB

README.md

File metadata and controls

35 lines (22 loc) · 1.66 KB

Cirrus Terminal

A service that powers Cirrus CI's task terminal access.

It's used as follows:

  • pkg/host package is used in the Cirrus CI agent and acts as a terminal host
  • internal/server is running in the cloud and provides the server functionality
  • Cirrus CI web frontend acts as a terminal guest

Architecture

The whole system consists of three components:

  • host — provides terminal sessions by registering itself on the server
    • currently works over gRPC
  • server — acts as a rendezvous point between host and guest
  • guest — connects to the hosts through a server and consumes terminal sessions
    • 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

The most up-to-date protocol specification can be found in the terminal.proto, but to give a bit more visual picture, the overall data flow looks like this:

Development

Development is done as you'd do normally, however, in case you need to make terminal.proto changes, you will need re-generate the internal/api package contents.

To do this, make sure Protocol Buffers Compiler (protoc) is installed, and run the following command from the root of the project:

make

The JavaScript stubs are generated automatically by the JavaScript Protocol Buffers and gRPC code-generation task in the .cirrus.yml.