Start with an overview or a brief description of what the project is about and what it does. For example -
Welcome to our repository template designed to streamline your project setup! This robust template provides a reliable starting point for your new projects, covering an essential tech stack and encouraging best practices in documenting.
This repository template aims to foster a user-friendly development environment by ensuring that every included file is concise and adequately self-documented. By adhering to this standard, we can promote increased clarity and maintainability throughout your project's lifecycle. Bundled within this template are resources that pave the way for seamless repository creation. Currently supported technologies are:
- Terraform
- Docker
Make use of this repository template to expedite your project setup and enhance your productivity right from the get-go. Enjoy the advantage of having a well-structured, self-documented project that reduces overhead and increases focus on what truly matters - coding!
By including preferably a one-liner or if necessary a set of clear CLI instructions we improve user experience. This should be a frictionless installation process that works on various operating systems (macOS, Linux, Windows WSL) and handles all the dependencies.
Clone the repository
git clone https://github.com/NHSDigital/bcss-nhs-notify-integration.git
cd bcss-nhs-notify-integration
You will need to set up your local environment variables in a .env
file in the flask
folder to run the Flask application. If you are unsure of any values, ask our devs. We will look to improve this solution in the future.
export TOKEN_URL=https://int.api.service.nhs.uk/oauth2/token
export API_KEY= {{OUR_API_KEY}}
export KID= {{OUR_JWKS_KID}}
export ROUTING_PLAN_ID= {{OUR_ROUTING_PLAN_ID}}
export NOTIFY_INT_URL= https://int.api.service.nhs.uk/comms
export PRIVATE_KEY_PATH= {{PATH_TO_OUR_PRIVATE_KEY}}
export FLASK_APP= {{PATH_TO_FLASK_APP_FILE}}
The following software packages, or their equivalents, are expected to be installed and configured:
- Docker container runtime or a compatible tool, e.g. Podman,
- asdf version manager,
- GNU make 3.82 or later,
Note
The version of GNU make available by default on macOS is earlier than 3.82. You will need to upgrade it or certain make
tasks will fail. On macOS, you will need Homebrew installed, then to install make
, like so:
brew install make
You will then see instructions to fix your $PATH
variable to make the newly installed version available. If you are using dotfiles, this is all done for you.
- GNU sed and GNU grep are required for the scripted command-line output processing,
- GNU coreutils and GNU binutils may be required to build dependencies like Python, which may need to be compiled during installation,
Note
For macOS users, installation of the GNU toolchain has been scripted and automated as part of the dotfiles
project. Please see this script for details.
Git-Crypt has been used to encrypt the private key in this repository, you will need to request a the symmetric secret key to decrypt the private key. When given the key, use the following command to unlock the files:
git-crypt unlock /path/to/key
To check the status of encrypted/non encrypted files, use the following command:
git-crypt status
Installation and configuration of the toolchain dependencies
make config
From the Flask folder you can run the Flask web application using flask run
if you have exported FLASK-APP
in your .env as notify-test.py
, you can also run the Flask web application through running the file directly.
After a successful installation, provide an informative example of how this project can be used. Additional code snippets, screenshots and demos work well in this space. You may also link to the other documentation resources, e.g. the User Guide to demonstrate more use cases and to show more features.
There are make
tasks for you to configure to run your tests. Run make test
to see how they work. You should be able to use the same entry points for local development as in your CI pipeline.
The C4 model is a simple and intuitive way to create software architecture diagrams that are clear, consistent, scalable and most importantly collaborative. This should result in documenting all the system interfaces, external dependencies and integration points.
The source for diagrams should be in Git for change control and review purposes. Recommendations are draw.io (example above in docs folder) and Mermaids. Here is an example Mermaids sequence diagram:
sequenceDiagram
User->>+Service: GET /users?params=...
Service->>Service: auth request
Service->>Database: get all users
Database-->>Service: list of users
Service->>Service: filter users
Service-->>-User: list[User]
Most of the projects are built with customisability and extendability in mind. At a minimum, this can be achieved by implementing service level configuration options and settings. The intention of this section is to show how this can be used. If the system processes data, you could mention here for example how the input is prepared for testing - anonymised, synthetic or live data.
Describe or link templates on how to raise an issue, feature request or make a contribution to the codebase. Reference the other documentation files, like
- Environment setup for contribution, i.e.
CONTRIBUTING.md
- Coding standards, branching, linting, practices for development and testing
- Release process, versioning, changelog
- Backlog, board, roadmap, ways of working
- High-level requirements, guiding principles, decision records, etc.
Provide a way to contact the owners of this project. It can be a team, an individual or information on the means of getting in touch via active communication channels, e.g. opening a GitHub discussion, raising an issue, etc.
The LICENCE.md file will need to be updated with the correct year and owner
Unless stated otherwise, the codebase is released under the MIT License. This covers both the codebase and any sample code in the documentation.
Any HTML or Markdown documentation is © Crown Copyright and available under the terms of the Open Government Licence v3.0.