digraph static {
        label="GitLab / static mirror integration architecture, torproject.org, september 2021"
        subgraph "clustergitlab" {
                label="GitLab components"
                labelloc=bottom

                CI [ label="CI runners" ]
                GitLab [ label="GitLab rails\n app" shape=box ]
                artifacts [ shape=cylinder ]
                GitLab -> CI [ label="dispatches jobs" ]
                CI -> artifacts [ label="publishes" ]
        }
        subgraph "clustersource" {
                label="static source"
                labelloc=bottom
                webhook [ shape=box ]
                webhook -> puller [ label="runs" ]
                puller [ label="static-shim-pull" ]
                puller -> artifacts [ label="pulls and extracts" ]
                update [ label="static-update-component" ]
                puller -> update [ label="runs" ]
        }
        subgraph "clusterlegend" {
                service [ shape=box ]
                files [ shape=cylinder ]
                process [ shape=oval ]
                label="legend"
                labelloc=bottom
        }
        master [ label="static master\nand mirrors..." ]
        update -> master [ label="notifies" ]
        GitLab -> webhook [ label="notifies" ]
}
