โ„น๏ธOverview

About our back ends

Technology Stack

We have built our back ends primarily using Python, Django, and Django Rest Framework.

We recommend getting familiar with the basics of each technology before contributing to one of our back ends.

Code Repositories

Each service has a back end code repository in the Ocado Technology GitHub organisation which follows the naming convention:

codeforlife-{service}-backend

View our back end repos on GitHub.

Template

To speed up the process of creating a new back end repo, we created the template repo codeforlife-template-backend which can be used to scaffold a new service's back end repo. Read here on how to create a repo from a template.

After creating a repo from the template, run a case-insensitive search across all files for replace-me. Replace these strings with the appropriate value; this will most likely be the service's name.

CI/CD Pipelines

In order to avoid repeating the same pipelines in every back end service, we centrally define the pipelines in our workspace repo, and reference them in each back end service. In GitHub's terminology, these are referred to as reusable workflows.

There are 2 main pipelines in each back end service.

main.yaml

The main pipeline for each back end service which simply reuses the backend pipeline located in the workspace. This pipeline is responsible for testing and deploying a back end service.

You can see an example of this pipeline in the back end template repo.

contributing.yaml

This pipeline is responsible for managing the process of contributing to our code base, such as checking our contributors have signed our contributor agreement, auto-assigning/-unassigning contributors to issues, and more.

You can see an example of this pipeline in the back end template repo.

Python Package

To avoid repeating code across 2 or more back ends, we have created the repo codeforlife-package-python which automatically tests and releases new version of the package using semantic versioning. These versioned packages can then be installed into our Python virtual-environments (.venv).

Learn more about our Python package here.

Last updated