Docs
OSS Collaboration Platform Example
OSS Collaboration Platform Example
const contributor: User = { name: "Contributor", description: "Sends pull requests" };
const maintainer: User = { name: "Maintainer", description: "Reviews and deploys" };
const helios: ComputerSystem = { name: "Helios OSS" };
const gitGateway: Container = { name: "Git Gateway", system: helios };
const ciCluster: Container = { name: "CI Cluster", system: helios };
const observability: Container = { name: "Observability", system: helios };
const webApp: ReactApp = {
name: "Helios Web",
description: "Next.js UI for issues, merge requests, pipelines",
belongsTo: helios
};
const gitHttp: RestApi = {
name: "Git HTTP",
description: "Clone & push over HTTPS",
belongsTo: gitGateway
};
const apiGateway: RestApi = {
name: "GraphQL API",
description: "Issues, projects, releases",
belongsTo: gitGateway
};
const ciRunner: BackgroundJob = {
name: "CI Runner",
description: "Executes pipelines from queue",
belongsTo: ciCluster
};
const pipelineQueue: MessageQueue = {
name: "Pipeline Queue",
description: "Jobs waiting for runners",
belongsTo: ciCluster
};
const eventStream: KafkaTopic = {
name: "Activity Stream",
description: "Push events, comments, deployments",
belongsTo: observability
};
const metricsStore: Postgres = {
name: "Metrics Store",
description: "Usage, billing, analytics",
belongsTo: observability
};
contributor.sendsRequestTo(webApp, "open MR")
.then(webApp).sendsRequestTo(apiGateway, "create merge request")
.sendsRequestTo(gitHttp, "push commits")
.then(apiGateway).sendsRequestTo(pipelineQueue, "enqueue pipeline", { kind: 'event' })
.sendsRequestTo(eventStream, "publish activity", { kind: 'event' });
ciRunner.sendsRequestTo(pipelineQueue, "claim job", { kind: 'async' })
.executesRequest("run tests")
.sendsRequestTo(apiGateway, "update status")
.sendsRequestTo(eventStream, "emit pipeline events", { kind: 'event' });
maintainer.sendsRequestTo(webApp, "review & deploy")
.then(webApp).sendsRequestTo(apiGateway, "approve merge")
.sendsRequestTo(metricsStore, "record deployment", { kind: 'dependency' })
.then(apiGateway).sendsRequestTo(eventStream, "log deployment", { kind: 'event' });Try it in Playground