From dc147448d615ef2d5802a1f078e2bf8f36cf139d Mon Sep 17 00:00:00 2001 From: "Anna (Anya) Parker" <50943381+anna-parker@users.noreply.github.com> Date: Tue, 28 May 2024 14:01:30 +0200 Subject: [PATCH] (docs): Update READMEs with some development tips and a DAG (#1817) * Update READMEs with some development tips and an ingest DAG. --------- Co-authored-by: Cornelius Roemer Co-authored-by: Theo Sanderson --- README.md | 10 ++++++++++ backend/README.md | 2 ++ ingest/README.md | 8 ++++++++ ingest/dag.png | Bin 0 -> 52980 bytes kubernetes/README.md | 3 +++ 5 files changed, 23 insertions(+) create mode 100644 ingest/dag.png diff --git a/README.md b/README.md index 7670e0e970..732196626f 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,18 @@ Loculus is a software package to power microbial genomial databases. ## [Visit the Loculus documentation website](https://loculus-project.github.io/loculus/) +## Development + Additional documentation for development is available in each folder's README. This file contains a high-level overview of the project and shared development information that is best kept in one place. +If you would like to develop with a full local loculus instance you need to first: + +1. Deploy a local kubernetes instance: [kubernetes](/kubernetes/README.md) +2. Deploy the backend: [backend](/backend/README.md) +3. Deploy the frontend/website: [website](/website/README.md) + +Note that if you are developing the backend or frontend/website in isolation a full local loculus instance is not required. See the individual READMEs for more information. + ## Architecture - Backend code is in `backend`, see [`backend/README.md`](/backend/README.md) diff --git a/backend/README.md b/backend/README.md index 3c3351b5dc..cffa5482cc 100644 --- a/backend/README.md +++ b/backend/README.md @@ -69,6 +69,8 @@ We use Flyway, so that the service can provision an empty/existing DB without an The service listens, by default, to **port 8079**: . +Note: When using a postgresSQL development platform (e.g. pgAdmin) the hostname is 127.0.0.1 and not localhost - this is defined in the `deploy.py` file. + ### Operating the backend behind a proxy When running the backend behind a proxy, the proxy needs to set X-Forwarded headers: diff --git a/ingest/README.md b/ingest/README.md index 53c4d18018..94699b7f24 100644 --- a/ingest/README.md +++ b/ingest/README.md @@ -4,6 +4,14 @@ The following is a rough overview of the pipeline's steps. +The snakemake DAG can be visualized using [graphviz](https://en.wikipedia.org/wiki/Graphviz): + +```bash +snakemake --dag | dot -Tpng > dag.png +``` + +![snakemake DAG](dag.png) + ### Download data from NCBI virus Using NCBI `datasets` CLI, download all sequences and corresponding NCBI curated metadata for a configurable taxon. The taxon is specified using the NCBI Taxonomy ID, and includes all child taxa, i.e. dowloading sequences for the Ebola virus taxon ID includes all sequences for more specific Ebola virus (sub)species taxon ids. diff --git a/ingest/dag.png b/ingest/dag.png new file mode 100644 index 0000000000000000000000000000000000000000..26667977be9839e3ede4ec06ce3237a606c05532 GIT binary patch literal 52980 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 literal 0 HcmV?d00001 diff --git a/kubernetes/README.md b/kubernetes/README.md index be28810856..3dd52762d7 100644 --- a/kubernetes/README.md +++ b/kubernetes/README.md @@ -32,6 +32,9 @@ helm install loculus kubernetes/loculus -f my-values.yaml Install [k3d](https://k3d.io/v5.6.0/) and [helm](https://helm.sh/). + +We deploy to kubernetes via the `../deploy.py` script. It requires you to have `pyyaml` and `requests` installed. + ### Setup for local development #### TLDR