Repository Management

Hero image for Repository Management

When starting a new project, a new repository must be created on the version control system service. To ensure all the projects are set up following best practices, the below guidelines must be applied.

When inheriting an existing code repository, the squad must also work towards following the standard configuration.

Naming

  • Suffix the repository name with the platform name. The latter refers to the core tech stack that the application is built with.

    project-name
    project-name-frontend
    project-name-backend
    project-name-js
    project-name-mobile
    project-name-cross-platform
    
    project-name-web
    project-name-ios
    project-name-android
    project-name-flutter
    

    An exception exists for API applications. While technically, these projects are also on the Web platform, a separate client application is often created at the same time, hence the need to differentiate both applications:

    project-name-web-backend
    project-name-web
    
    project-name-web
    project-name-api
    
  • Prefers to store Infrastructure as Code (IaC), such as Terraform code, in a separate repository named project-name-infrastructure.

Branches

  • The primary branches develop and main must exist at all times.

  • The default branch must be set to develop. Every pull request can thus have develop as the destination branch by default, which is the desired outcome in 99.9% of the cases.

  • Branch protection rules for both branches must be implemented to:

    • Enforce a pull request workflow to merge code to develop and main.
    • Avoid developers pushing commits directly to develop and main.
    • Avoid the deletion of develop and main by mistake.

Access Management

  • Ensure the visibility of the code repository is set to private for clients’ projects as per the version control services conventions.

  • Access must be managed using user groups/teams. Never provide access to a single individual. In other words, an individual must be part of a group and access is provided to the group. There must be at least two user groups/teams:

    • Project Name - General: these users have only write access. Typically, this group consists of the developers.
    • Project Name - Admin: these users have only admin access. Typically, this group consists of the Engineering Lead, Team Lead, and Product Manager.