You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: restructure Open Pulse stack and environment configuration
- Consolidated the entire Open Pulse stack under `infra/open-pulse-stack/`, including main compose files, CLI orchestrator overlay, and GrimoireLab assets.
- Introduced a single-file environment model with `infra/.env` as the authoritative deployment environment, while `<repo>/.env` is designated for the open-pulse CLI when interacting with external infrastructure.
- Updated `.gitignore` to recursively ignore `data/` directories to prevent accidental pollution of the working tree.
- Added `infra/.env.example` as a comprehensive template for deployment configuration.
- Simplified default authentication credentials across the stack to `openpulse` / `replace-me`, with stronger placeholders where necessary.
- Enhanced documentation to reflect the new structure and configuration processes, including a new `.env` wizard for easier setup.
|`open-pulse deploy up`| Deploy services via Docker Compose. Without `--profile` flags, opens an interactive selector. Creates `.env` from `infra/env/.env.example` if absent. |
187
+
|`open-pulse deploy up`| Deploy services via Docker Compose. Without `--profile` flags, opens an interactive selector. Compose loads only `<repo>/infra/.env`(auto-seeded from `infra/.env.example` if missing). The tool/client `<repo>/.env` is for the open-pulse Python CLI / hub against external infra and is not a compose input. |
185
188
|`open-pulse deploy down`| Tear down deployed services. `--volumes` / `-v` also removes named volumes. |
186
189
|`open-pulse deploy ps`| Show the status of deployed containers. |
Copy file name to clipboardExpand all lines: CHANGELOG.md
+12-1Lines changed: 12 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,11 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht
9
9
10
10
### Changed
11
11
12
+
- Consolidated the entire Open Pulse stack under `infra/open-pulse-stack/`. The main compose, the CLI orchestrator overlay, and the full GrimoireLab compose now live alongside each other as `docker-compose.yml`, `docker-compose.cli.yml`, and `docker-compose.grimoirelab.yml`; GrimoireLab supporting assets (applier source, config templates, sigils, one-shot scripts) moved to `infra/open-pulse-stack/grimoirelab/`. Updated `deploy.py` path constants, `health.py``_COMPOSE_FILE`, `justfile``regen-grimoire-config`, `.github/dependabot.yml`, the docker-validate workflow (with a third matrix entry exercising the grimoirelab compose), and every doc that referenced the old paths.
13
+
- Split `.env` along the principle "when launching from `infra/`, all env lives in `infra/`; otherwise `<repo>/.env` is just for the open-pulse tool acting as a client". `<repo>/infra/.env` is the AUTHORITATIVE deployment env: image refs, ports, resource limits, storage paths, ALL container-side credentials, per-service knobs (HUB_AUTH, CRAWLER_*, EXTRACTOR_*, GrimoireLab block, V2/RAG flags). Compose loads only this file (`--env-file infra/.env`); every service additionally `env_file:`-pulls it so any key set there reaches the container without an explicit `environment:` mapping. `<repo>/.env` is the tool/client env, consumed only by the open-pulse Python CLI / hub when running on the host against EXTERNAL infrastructure — compose never reads it. Both files are gitignored; `infra/.env` auto-seeds from `infra/.env.example` on first `op deploy up`, while `<repo>/.env` is a manual copy from `<repo>/.env.example`. `deploy up` / `down` / `ps` and the cli + grimoirelab compose env_file directives all dropped the second `--env-file` / `env_file:` entry.
14
+
- Simplified default auth across the stack to `openpulse` / `replace-me`. Where the underlying service forces a specific username (Neo4j → `neo4j`, OpenSearch admin → `admin`, MariaDB init → `root`) only the password changes; everywhere else (GrimoireLab Postgres user, SortingHat superuser, hub login UI) the default username is `openpulse`. Compose-baked fallbacks (`${NEO4J_AUTH:-...}`, `${GRIMOIRELAB_DB_USER:-...}`, `${GRIMOIRELAB_DB_PASSWORD:-...}`) and the runtime fallback in `gui/hub/routes/stats.py` now match. `replace-me` is a placeholder; rotate before any non-local deployment.
15
+
- Pinned `OPEN_PULSE_DATA_DIR` to an absolute path during `.env` seeding. The previous default `./data` resolved differently between `op deploy …` (relative to repo root via `--project-directory`) and raw `docker compose -f infra/open-pulse-stack/…` (relative to the compose file), silently splitting state into two locations. `_ensure_env_files` now substitutes the line with the absolute repo-root data path when seeding `infra/.env` from the template; `OPEN_PULSE_HOST_PATH` is filled the same way. `GRIMOIRE_DATA_DIR` derives from `${OPEN_PULSE_DATA_DIR}` so GrimoireLab data lands alongside Neo4j et al. under a single root.
16
+
- Hardened `.gitignore` to ignore `data/` recursively (any nesting level) so an accidental relative-path resolution can't pollute the working tree. Removed the per-path `infra/services/{neo4j,portainer}/data/` entries that the recursive rule now covers.
12
17
- Added explicit `mem_limit`, `cpus`, and `restart` policies to every service in `infra/compose/docker-compose.yml` and `infra/services/grimoirelab/docker-compose.yml`. Each cap reads from a per-service env var (e.g. `OPENSEARCH_MEM_LIMIT`, `NEO4J_MEM_LIMIT`, `MORDRED_MEM_LIMIT`, `EXTRACTOR_MEM_LIMIT`) so production deploys override the dev defaults without editing the compose. Neo4j heap and page cache are now explicit (`NEO4J_HEAP`, `NEO4J_PAGECACHE`) and sized to fit under the new cap. Mordred default cap dropped from 4g to 2g (it idled at 1.78 GiB; the previous 4g was generous and contributed to the host-OS pressure that OOM-killed opensearch). See `dev/advise/2026-05-05-resource-caps-and-oom-diagnosis.md` for the full diagnosis, budget math, and how to apply the new caps to running services without downtime.
13
18
- Added healthchecks to `opensearch-node1` (`_cluster/health?wait_for_status=yellow` with auth — `yellow` is the success state on a single-node deploy because replicas can't be allocated) and `opensearch-dashboards` (liveness via `GET /` — *not*`/api/status`, which requires auth in v3 and would always report unhealthy).
14
19
- Simplified Compose topology to a two-file model under `infra/compose/`: `docker-compose.yml` for infra services and `docker-compose.cli.yml` as an optional CLI overlay.
@@ -28,8 +33,14 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht
28
33
- Split monolithic `tests/test_cli.py` into per-domain test modules: `test_cli.py` (entry point), `test_deploy.py`, `test_quest.py`, `test_grimoire.py`, `test_health.py`, and `test_orchestrator.py`. Added `conftest.py` with shared fixtures.
29
34
- Added new test cases: `deploy down --volumes` flag pass-through, `deploy down`/`ps` Docker-unavailable guards, `deploy up --file` compose override, `quest start --resume` flag forwarding, `quest start --config` custom path, pipeline failure propagation, grimoire `install-watcher --clone-dir`, mixed-state container health check, orchestrator checkpoint persistence on success and failure, and empty task list handling.
30
35
36
+
### Removed
37
+
38
+
- Removed `infra/env/` and the old `infra/services/grimoirelab/` directories. Their contents either moved to the new structure (`infra/services/grimoirelab/docker-compose.yml` → `infra/open-pulse-stack/docker-compose.grimoirelab.yml`; the `applier/`, `config/`, `python-scripts/`, `scripts/`, and `README.md` siblings → `infra/open-pulse-stack/grimoirelab/`) or were superseded (`infra/env/.env.example` → `<repo>/.env.example` + `infra/.env.example`; `infra/services/grimoirelab/.env.dist` → unified `infra/.env.example`).
39
+
31
40
### Added
32
41
42
+
- Added `infra/.env.example` (deployment template — comprehensive: every container-side knob the local stack needs) and `<repo>/.env.example` (tool/client template — slim: endpoint overrides + auth for talking to remote infra). The CLI auto-substitutes `OPEN_PULSE_DATA_DIR` and `OPEN_PULSE_HOST_PATH` to absolute paths when seeding `infra/.env`.
43
+
- Added `env_file: ../.env` directives to the crawler, extractor, and hub services in `infra/open-pulse-stack/docker-compose.yml` so any per-service knob set in `infra/.env` reaches the container automatically. This is what makes the extractor's V2 / RAG / agent-runtime knobs (V2_*, RCP_TOKEN, OPENALEX_MAILTO, HF_TOKEN, EPFL_GRAPH_*, ORCID_*, INDEX_QDRANT_URL, GRIMOIRE_GITHUB_TOKEN) reach the container without per-key `environment:` plumbing.
33
44
- Added new command groups `services` and `gui` with grimoire subcommands split by domain (`services grimoire prepare-config`, `services grimoire install-watcher`, `gui grimoire`).
34
45
- Added `open_pulse.utils.grimoire` package (`sparql_config.py`, `cronjob.py`) and `open_pulse.gui.grimoire_streamlit`.
35
46
- Added new `open_pulse.services` modules:
@@ -135,6 +146,6 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht
135
146
- Updated `.gitignore` with docs tooling artifacts (`node_modules/`, `docs-site/build/`).
136
147
- Rewrote root `README.md` for onboarding with project purpose, architecture overview, DB stack quick start, `uv`-based analysis quick start, documentation navigation links, and release/contribution references.
137
148
- Refactored root `docker-compose.yml` into a profile-aware topology with default Neo4j plus opt-in `analysis`, `grimoirelab`, and `orchestration` services.
138
-
- Added healthchecks and dependency readiness gates for key profile services (`neo4j`, `analysis-notebook`, and `grimoirelab-db`).
149
+
- Added healthchecks and dependency readiness gates for key profile services (`neo4j` and `grimoirelab-db`).
139
150
- Expanded `analysis/README.md` with sequential orchestration usage and checkpoint resume guidance.
140
151
- Expanded `analysis/README.md` with container build/smoke/non-root checks and devcontainer setup guidance.
0 commit comments