Skip to content

Git Structure

This page documents the Git repository organization and GitOps workflow for TAPPaaS.

Fundamentally TAPPaaS uses a GitOps pull setup. on a regular schedule a TAPPaaS solution will pull the latest update from an upstream repository and then performs an update operation on the running TAPPaaS instance based on the new updated TAPPaaS configuration.

This is done by the "tappaas-cicd" module, which as a consequence will maintain a git clone of the TAPPaaS upstream repository

There are several ways this can be set up, but there are 4 basic patterns or use cases, which we are going through below The actual setup for your TAPPaaS is configured in config/configuration.json on the tappaas user on the tappaas-cicd module there is a command "repository.sh" that will change the configuration.

Further if you are Developing modules for TAPPaaS or developing applications that are to be deployed as modules then there are further variations which is documented at the end


Basic TAPPaaS GitOps

This is the basic setup that you will get if you follow the installation guide. The default upstream TAPPaaS repository is the Open Source REPO references on this documentation page top right corner. You can install the standard modules that comes from the TAPPaaS project.

you have to decide if you want to pull form the stable or unstable branch (the latter is really only for testing and staging)

flowchart RL
    subgraph TAPPaaS[TAPPaaS Repository]
        stable[stable]
        unstable[unstable]
    end

    subgraph Instance[TAPPaaS Instance]
        local[tappaas-cicd/TAPPaaS]
    end

    local -->|pull| stable

Community Repositories

The next step up is adding the Community Repository to the mix, this expands the actual modules you can install.

flowchart RL
    subgraph Repos[" "]
        direction TB
        subgraph TAPPaaS[TAPPaaS Repository]
            stable[stable]
            unstable[unstable]
        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 set of TAPPaaS Instances you might want to "inject" a staging repository between the open source repositories and your installation. that way you can control what modules are available, and change default values to mach you deployment needs

flowchart RL
    subgraph Sources[" "]
        direction TB
        subgraph TAPPaaS[TAPPaaS Repository]
            stable[stable]
            unstable[unstable]
        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| unstable
    down_main -->|pull| comm_main
    localA -->|pull| down_main
    localB -->|pull| down_main

Private Repositories

Finally you can add you 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

So you want to contribute to TAPPaaS. We are honoured, thank you.

Essentially when developing modules you want a test TAPPaaS Instance in parallel with your production instance. If the module you are developing is sufficiently separate from other modules then you can do module development on a production system. More on that below

What you want is a setup like the one below. The actual running instance of TAPPaaS can be achieved in any of the above scenarios but hte essen is to have a private branch, likely on a private git system that will be upstream from the development instance of TAPPaaS

flowchart RL
    subgraph Development[Development Repository]
        dev_unstable[unstable]
    end
    subgraph Upstream[Upstream Repository]
        up_stable[stable]
        up_unstable[unstable]
        up_unstable --> |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_unstable
    localDev_dev -->|push| dev_unstable
    dev_unstable --> |PR| up_unstable

The module in the development REPO will be tested on the development system and when considered ok it can be submitted to the upstream repository through a Pull request (PR). UPstream can be the the TAPPaaS proper, the TAPPaaS Community repositories, or it can be keep as a private repository

If the module being developed is sufficiently stand alone then it can be developed on a production system. TAPPaaS allows many kinds of isolation to ensure errors on development is not affecting production. The two most important parts of separation are:

  • A module will as default get its own VM with a well defined resource envelope
  • a module can also be deployed in a separate zone: a developer can enable a dedicated zone in parallel to "srv" so not traffic of the development module will interfere with production

A question that would be natural to ask: Can the Development repository be hosted on TAPPaaS: certanly. it would require that a Git system is installed. TAPPaaS decided to implement Forgejo (the software behind CodeBerg) as part of the DevOps stack (not available yet)


Developing applications to be deployed on TAPPaaS

Developing TAPPaaS modules is about developing the deployment automation for an application. If you are interested in developing an actual application and yes TAPPaaS as either a Continuous Integration system or as a Continuous Deployment solution for the development activities, then that is certainly possible

The intent is to provide a stack of modules/application that delivers a full devops pipeline. The CD aspect of the pipeline will be the system above, but the CI part will have main ForgeJo, pipeline systems, and binary repositories. The outcome of the CI can be pulled by the CD above