tappaas-cicd — Git & repository topology (design notes)¶
How TAPPaaS gets its updates, and the repository patterns behind it. For the control-plane design see DESIGN.md; catalog entry README.md.
Fundamentally TAPPaaS is GitOps, pull-based: on a schedule a running TAPPaaS pulls the latest from an upstream repository and then runs an update operation on the instance based on the new configuration. This is done by the tappaas-cicd module, which maintains a git clone of each upstream repository it tracks.
The tracked repositories are the repositories list in config/site.json on the tappaas user of the tappaas-cicd module, managed with site-manager repository add|delete|list (the legacy repository.sh now delegates to it). There are four basic patterns, below; module and application developers add a couple more variations (end of page).
Basic TAPPaaS GitOps¶
The setup you get by following the install guide. The default upstream is the open-source TAPPaaS repository (codeberg.org/TAPPaaS/TAPPaaS); you install the standard modules the project ships.
Pick the branch your system tracks: stable (released, supported) or main (ongoing development — moves fast, for testing/staging). See the install Preparation branch-selection step.
flowchart RL
subgraph TAPPaaS[TAPPaaS Repository]
stable[stable]
main[main]
end
subgraph Instance[TAPPaaS Instance]
local[tappaas-cicd/TAPPaaS]
end
local -->|pull| stable Community repositories¶
Add a community repository to expand the modules you can install.
flowchart RL
subgraph Repos[" "]
direction TB
subgraph TAPPaaS[TAPPaaS Repository]
stable[stable]
main[main]
end
subgraph Community[Community Repository]
comm_main[main]
end
end
subgraph Instance[TAPPaaS Instance]
local[tappaas-cicd/TAPPaaS]
comm_local[tappaas-cicd/Community]
end
local -->|pull| stable
comm_local -->|pull| comm_main Downstream repositories¶
If you manage a fleet of TAPPaaS instances you can inject a staging repository between the open-source repositories and your installations — controlling which modules are available and changing default values to match your deployment.
flowchart RL
subgraph Sources[" "]
direction TB
subgraph TAPPaaS[TAPPaaS Repository]
stable[stable]
main[main]
end
subgraph Community[Community Repository]
comm_main[main]
end
end
subgraph Downstream[Downstream Repository]
down_main[main]
end
subgraph Instances[" "]
direction TB
subgraph InstanceA[TAPPaaS Instance A]
localA[tappaas-cicd/Downstream]
end
subgraph InstanceB[TAPPaaS Instance B]
localB[tappaas-cicd/Downstream]
end
end
down_main -->|pull| main
down_main -->|pull| comm_main
localA -->|pull| down_main
localB -->|pull| down_main Private repositories¶
Finally, add your own private repositories to the mix.
flowchart RL
subgraph Sources[" "]
direction TB
subgraph Downstream[Downstream Repository]
down_main[main]
end
subgraph Private[Private Repository]
priv_main[main]
end
end
subgraph Instances[" "]
direction TB
subgraph InstanceA[TAPPaaS Instance A]
localA[tappaas-cicd/Downstream]
end
subgraph InstanceB[TAPPaaS Instance B]
localB[tappaas-cicd/Downstream]
localB_priv[tappaas-cicd/Private]
end
end
localA -->|pull| down_main
localB -->|pull| down_main
localB_priv -->|pull| priv_main Developing TAPPaaS modules¶
When developing modules you want a test TAPPaaS instance in parallel with production. The running instance can be any of the topologies above; the essence is a private branch — likely on a private git system — upstream of the development instance.
flowchart RL
subgraph Development[Development Repository]
dev_main[main]
end
subgraph Upstream[Upstream Repository]
up_stable[stable]
up_main[main]
up_main --> |merge| up_stable
end
subgraph Instances[" "]
direction TB
subgraph InstanceDev[TAPPaaS Instance Dev]
localDev[tappaas-cicd/Upstream]
localDev_dev[tappaas-cicd/Development]
end
subgraph InstanceProd[TAPPaaS Instance Prod]
localProd[tappaas-cicd/Upstream]
end
end
localProd -->|pull| up_stable
localDev -->|pull| up_main
localDev_dev -->|push| dev_main
dev_main --> |PR| up_main The module in the development repo is tested on the dev system; when it's ready it's submitted to the upstream repository via a Pull Request. Upstream can be TAPPaaS proper, a TAPPaaS community repository, or kept as a private repository.
If a module is sufficiently stand-alone it can be developed on a production system — TAPPaaS's isolation keeps development errors off production. The two key separations:
- a module gets its own VM with a defined resource envelope;
- a module can be deployed in a separate zone (a developer can enable a dedicated zone alongside
srvso development traffic never touches production).
Can the development repository be hosted on TAPPaaS itself? Yes — it needs a git system. TAPPaaS plans to ship Forgejo (the software behind Codeberg) as part of the DevOps stack (not available yet).
Developing applications to be deployed on TAPPaaS¶
Developing a TAPPaaS module is developing the deployment automation for an application. If instead you want to develop the application itself and use TAPPaaS as a CI or CD system, that is also possible: the intent is a stack of modules delivering a full DevOps pipeline. The CD aspect is the pull-based system above; the CI part (Forgejo, pipeline runners, binary repositories) is planned, and its build output can be pulled by the CD system.