-
Notifications
You must be signed in to change notification settings - Fork 0
IN‐CORE Developer Setup
This guide covers getting a local development environment running, and running the tests, for every repository in the IN-CORE platform. It is the mechanical companion to CONTRIBUTING.md, which covers the process side (GitFlow, branch naming, PR review, CLA).
Each repository section has the same five parts:
- Prerequisites: runtimes and services you need before you start
- Setup: from a clean clone
- Run it: how to start the component locally
- Test it: how to run the test suite
- After a dependency change: what to regenerate, and what to commit
- Getting the source
- Shared prerequisites
- IN-CORE account and tokens
- Python libraries: pyincore · pyincore-viz · pyincore-data · pyincore-incubator
- Python based services: incore-auth · plotting-service · maestro-service
- Java based services: incore-services
- JavaScript/TypeScript based user interface: incore-ui · incore-studio
- Docs and infrastructure: incore-docs · incore-helm · incore-lab
This repository is a superproject that tracks several of the component repositories as git submodules.
git clone --recurse-submodules https://github.com/IN-CORE/IN-CORE.gitIf you already cloned without --recurse-submodules:
git submodule update --init --recursive12 repositories are tracked here as submodules: incore-auth, incore-docs, incore-helm, incore-lab, incore-services, incore-studio, incore-ui, plotting-service, pyincore, pyincore-data, pyincore-incubator, pyincore-viz.
maestro-service is part of the platform but is not a submodule of this repository, and must be cloned separately:
git clone https://github.com/IN-CORE/maestro-service.gitAll repositories use GitFlow: branch from develop, PR back into develop. The exception is this superproject, which currently has only main. Only admins can make contributions directly to the superproject. See also CONTRIBUTING.md.
You will not need all of these. Install what the repositories you are working on ask for.
| Tool | Used by | Notes |
|---|---|---|
| conda or micromamba | all Python repos | conda is the officially supported installation path for the pyincore family. CI uses micromamba. mamba is a drop-in faster replacement for conda if you prefer it. |
| Python 3.11+ | pyincore, pyincore-viz, pyincore-data |
pyincore sets python_requires=">=3.11"; CI tests 3.11, 3.12, 3.13. |
| Python 3.9 |
pyincore-incubator, maestro-service
|
Older pins; see Known problems. |
| GDAL C library |
pyincore, pyincore-viz, pyincore-incubator
|
Only needed for the (unsupported) pip install path. On Ubuntu: gdal-bin, libgdal-dev. Conda pulls this in for you. |
| Ipopt | pyincore |
Required by the CGE analyses. Comes from the ipopt>=3.11 conda dependency. |
| pre-commit |
pyincore, pyincore-viz, pyincore-data, pyincore-incubator
|
brew install pre-commit or pip install pre-commit. |
| JDK 11 | incore-services |
CI uses Zulu 11. The Gradle build sets source/target compatibility to 11. |
| Node 18+ | incore-studio |
engines requires node >= 16; CI builds on 18. |
| Node 12–14 | incore-ui |
CI builds on 12 and 14 only; see Known problems. |
| Poetry | maestro-service |
pip install poetry |
| Docker | every repo | Every component ships a Dockerfile; several are easiest to run this way. |
| MongoDB |
incore-services, incore-auth
|
|
| PostgreSQL |
maestro-service, incore-services (GeoServer-backed dataset publishing) |
|
| Helm 3 + a Kubernetes cluster | incore-helm |
Most of the Python repositories talk to the IN-CORE web services, and their tests authenticate against the dev deployment.
- Create an IN-CORE account: https://tools.in-core.org/ (sign-up link can also be found in CONTRIBUTING.md).
-
pyincorecaches tokens under~/.incore/.IncoreClientcreates this directory on first use and writes one token file per service URL. -
pyincore's test suite does not use the cache.tests/conftest.pyreadstests/pyincore/.incorepw, a two-line file containing a JWT and the key to decode it, and uses the credentials inside to log intoINCORE_API_DEV_URL. In CI this file is written from thePYTEST_USER_TOKENsecret. Ask in the#in-core-dev-teamSlack channel for the equivalent for local runs. Do not commit this file.
Flask service that generates sample points for plotting DFR3 curves.
conda, Python 3.8.10, plus pyincore and pyincore-viz from the in-core conda channel.
The environment file lives in the nested plotting-service/ directory, not at the repository root:
cd plotting-service/plotting-service
conda env create -f env.yml
conda activate plotting-serviceThen initialize the cache database:
cd ../util-script
python init_db.pycd plotting-service
python app.py
# or
flask runIn the container it runs under gunicorn: gunicorn app:app --config gunicorn.config.py, exposed on port 5000.
There is no test workflow in CI (only .github/workflows/docker.yaml). test/test_samples.py is an HTTP smoke script against a running local service on port 5000. It has def test_* helpers and an if __name__ == "__main__" entry point; it prints responses rather than asserting much.
Start the service first (see step 3), then:
cd test
python test_samples.pyplotting-service/env.yml is the single authoritative dependency file. There is no requirements.txt and no lock file. Edit it, then rebuild:
conda env update -f env.yml --prune
conda activate plotting-serviceBecause this service depends on pyincore and pyincore-viz from the in-core channel, a pyincore release can change this service's resolved environment without any change here. Recreate the environment from scratch (conda env remove -n plotting-service then conda env create -f env.yml) when a test result looks inexplicable.