Skip to content

What Flight does

Flight turns a public GitHub repository into a published program, on every push, in a container that cannot reach the network.

Flight is the build service. It is not a site you visit: it is a tab on a project and a build runner that does the work.

Give it a public GitHub repository and a file called .ceagle-flight, and every push to the tracked branch produces a release on Roost.

Set up Flight in your repoStart here

The one guide most people need: the manifest, the Makefile, the output path and the first build.

Read on

The pipeline#

  1. A push arrives

    GitHub sends one webhook to the console. Its signature is verified before the body is read, and it is routed by repository id.

  2. Visibility is checked

    Flight asks GitHub whether the repository is still public and still visible to the installation. A repository that has gone private stops building the moment the event lands.

  3. A build is queued

    One build at a time per source. Starting another while one is running answers 409.

  4. The repository is cloned

    A shallow clone of the tracked branch, with a protocol allow-list and symlinks disabled.

  5. The manifest is read and resolved

    Every value is validated before anything runs. A manifest that does not resolve fails the build without starting a container.

  6. The build command runs

    Inside a container with no network, every capability dropped, a read-only root filesystem and a wall-clock timeout.

  7. The artifact is collected

    Exactly one file has to match the output pattern, and it has to be a regular file inside the tree.

  8. A release is written

    The artifact, the listing from the manifest, the version, the checksum and the dependency graph.

Two kinds of source#

A project has exactly one source, and which kind it gets follows from the project language. You do not choose it separately.

Public repositories only#

Flight builds public repositories and nothing else. The visibility is read from GitHub at connect time, again before every build, and again whenever GitHub reports a repository event.

The build container has no network and no credentials, so a private repository could not be cloned anyway. Refusing it early is what makes that honest rather than a confusing clone failure.

The GitHub App

What the app can see, how an installation is bound to your account, and the single webhook.

Read on

What you control#

What you do not control#

The build environment is fixed and identical for every build. There is no way to install a package, add an environment variable, reach the network, or change the image.

That is what makes a build reproducible from the repository alone, and it is why everything a build needs has to be either in the repository or already in the image.

The build environment

What is on the machine and what is not.

Read on
CEagle documentation