Skip to content

feat: add docker directory with several docker composes#1965

Merged
sevenzing merged 12 commits intomainfrom
ll/docker
Apr 24, 2026
Merged

feat: add docker directory with several docker composes#1965
sevenzing merged 12 commits intomainfrom
ll/docker

Conversation

@sevenzing
Copy link
Copy Markdown
Member

@sevenzing sevenzing commented Apr 20, 2026

Summary

  • Reorganized Docker Compose setup into docker/ directory with purpose-specific compose files:
    • docker-compose.yml
    • docker-compose.devnet.yml
    • docker-compose.orchestrator.yml
  • Extracted individual service definitions into docker/services/*.yml fragments using extends to eliminate duplication
  • aslo updated orchestrator.ts to use new docker compose, package.json with build scripts, added docker/README.md with usage docs for developers

Why

Resolves #1923


Testing

  • Manually tested docker-compose.devnet.yml stack
  • Manually tested docker-compose.yml stack
  • docker compose config used to verify resolved output after restructure
  • orchestrator.ts updated to point to new file path; CI will validate on merge

Notes for Reviewer (Optional)

  • Maybe rename postgres service to ensdb ? not sure, probably ensdb is word for database schema, not for postgres service

  • env_file is not defined in services/*.yml — each compose file declares its own env_file list explicitly to control order and required param

  • volumes: must be re-declared in every compose file

  • Initially wanted to add docker-compose.yml to root using symlink, but dropped it. it broke extends path resolution when Docker Compose resolved paths relative to the symlink location rather than the real file :(


Pre-Review Checklist (Blocking)

[x] This PR does not introduce significant changes and is low-risk to review quickly.
[x] Relevant changesets are included (or are not required)

@sevenzing sevenzing requested a review from a team as a code owner April 20, 2026 18:10
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 20, 2026

🦋 Changeset detected

Latest commit: d8deeb5

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 23 packages
Name Type
@ensnode/integration-test-env Patch
@docs/ensnode Patch
ensindexer Patch
ensadmin Patch
ensrainbow Patch
ensapi Patch
fallback-ensapi Patch
enssdk Patch
enscli Patch
enskit Patch
ensskills Patch
@ensnode/datasources Patch
@ensnode/ensrainbow-sdk Patch
@ensnode/ensdb-sdk Patch
@ensnode/ensnode-react Patch
@ensnode/ensnode-sdk Patch
@ensnode/ponder-sdk Patch
@ensnode/ponder-subgraph Patch
@ensnode/shared-configs Patch
@docs/ensrainbow Patch
@namehash/ens-referrals Patch
@namehash/namehash-ui Patch
@ensnode/enskit-react-example Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 20, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
admin.ensnode.io Ready Ready Preview, Comment Apr 24, 2026 6:57pm
ensnode.io Ready Ready Preview, Comment Apr 24, 2026 6:57pm
ensrainbow.io Ready Ready Preview, Comment Apr 24, 2026 6:57pm

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 20, 2026

📝 Walkthrough

Walkthrough

Reorganized Docker Compose into a dedicated docker/ directory with purpose-specific manifests (base mainnet/sepolia stack, devnet variant, CI orchestrator), added modular service and env files, updated docs and scripts to reference the new compose files, and removed the previous root docker-compose.yml.

Changes

Cohort / File(s) Summary
Top-level README & docs
README.md, docs/ensnode.io/src/content/docs/docs/contributing/index.mdx, docs/ensnode.io/src/content/docs/docs/deploying/docker.mdx, docker/README.md
Added Docker usage docs and updated references to the new docker/ compose files and commands; adjusted ports and instructions to use -f docker/... where appropriate.
Compose manifests
docker/docker-compose.yml, docker/docker-compose.devnet.yml, docker/docker-compose.orchestrator.yml, docker-compose.yml
Added purpose-specific compose files under docker/ (base, devnet, orchestrator) and removed the old root docker-compose.yml.
Service modules
docker/services/.../devnet.yml, docker/services/.../postgres.yml, docker/services/.../ensindexer.yml, docker/services/.../ensapi.yml, docker/services/.../ensrainbow.yml, docker/services/.../ensadmin.yml
Created modular per-service compose fragments (images/builds, ports, volumes, healthchecks, container names).
Env files
docker/envs/.env.docker.common, docker/envs/.env.docker.devnet, docker/envs/.env.docker.example
Added shared and devnet-specific environment files and an example .env template with defaults and provider placeholders.
App env examples
apps/ensindexer/.env.local.example, apps/ensrainbow/.env.local.example
Small env example edits: added comment to ENSIndexer example; changed ENSRainbow LABEL_SET_ID default to subgraph.
Scripts & orchestrator
package.json, packages/integration-test-env/src/orchestrator.ts, packages/integration-test-env/README.md
Updated npm devnet script and the integration-test orchestrator to use the new docker/ compose files and directory; README adjustments for local/CI commands.
Release metadata
.changeset/hip-poems-shave.md
Added changeset documenting the Docker restructure for affected packages.

Sequence Diagram(s)

sequenceDiagram
    participant Dev as Developer/CI
    participant Orch as orchestrator.ts
    participant DC as Docker Compose (docker/docker-compose.orchestrator.yml)
    participant Postgres as postgres container
    participant Devnet as devnet container

    Dev->>Orch: run integration tests (orchestrator)
    Orch->>DC: use compose file (docker/docker-compose.orchestrator.yml)
    DC->>Postgres: start postgres service
    DC->>Devnet: start devnet service
    Postgres-->>DC: healthcheck OK
    Devnet-->>DC: healthcheck OK
    DC-->>Orch: services healthy -> up returns
    Orch-->>Dev: signal ready to run tests
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

docs

Poem

🐰 I hopped through manifests, tidy and spry,

Docker stacks now sorted, no devnet surprise.
Base, devnet, CI—each has its lane,
Containers hum softly, order reclaimed. 🥕🐇

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add docker directory with several docker composes' clearly summarizes the main change—reorganizing Docker Compose configuration into a docker/ directory with multiple purpose-specific compose files.
Description check ✅ Passed The description covers all required template sections: Summary (reorganization of Docker files), Why (resolves #1923), Testing (manual tests and validation methods), Notes for Reviewer, and Pre-Review Checklist completed.
Linked Issues check ✅ Passed All primary objectives from #1923 are met: compose files moved under docker/ [base, devnet, orchestrator], purpose-specific variants created, extends used to reduce duplication, devnet excluded from base, CI compose implemented, and orchestrator.ts updated accordingly.
Out of Scope Changes check ✅ Passed All changes align with #1923 objectives: docker structure reorganization, service fragments via extends, environment variables setup, documentation updates, build script changes, and changelog entry are all directly related to the stated goal.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ll/docker

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Comment thread docker/docker-compose.devnet.yml Outdated
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 20, 2026

Greptile Summary

This PR reorganizes the Docker setup from a single root-level docker-compose.yml into a structured docker/ directory with purpose-specific compose files (docker-compose.yml, docker-compose.devnet.yml, docker-compose.orchestrator.yml), shared service fragment files under docker/services/, and committed env defaults under docker/envs/. The orchestrator is updated to point to the new docker-compose.orchestrator.yml, and documentation is updated throughout.

  • P1: packages/integration-test-env/README.md suggests docker compose -f docker/docker-compose.yml up postgres for local dev, but docker/docker-compose.yml marks envs/.env.docker.local as required: true for all four application services — Docker Compose validates this during config parsing and fails before starting postgres. Use docker-compose.devnet.yml instead, where .env.docker.local is optional.

Confidence Score: 4/5

Safe to merge after fixing the broken postgres command in the integration-test-env README

One P1 finding: the README developer guide points to docker-compose.yml for starting postgres, which will fail due to required env_file entries on other services. All other changes (compose restructuring, orchestrator update, service fragments, env defaults) are well-structured and correct.

packages/integration-test-env/README.md — postgres start command uses the wrong compose file

Important Files Changed

Filename Overview
packages/integration-test-env/README.md Developer guide updated but postgres start command points to docker-compose.yml which fails without .env.docker.local
docker/docker-compose.yml Base mainnet/sepolia stack; all services require .env.docker.local which is intentional but breaks docs reference
docker/docker-compose.devnet.yml Full devnet stack; all services use extends + env_file correctly; volumes named to avoid collision with base stack
docker/docker-compose.orchestrator.yml Minimal CI compose with devnet + postgres; env_file now correctly supplies postgres credentials via .env.docker.common
packages/integration-test-env/src/orchestrator.ts Correctly updated to use DOCKER_DIR + docker-compose.orchestrator.yml; path resolution is sound
docker/services/postgres.yml Added healthcheck using pg_isready with $$ escaping (correct for Docker Compose); no credentials inline (provided via env_file)
docker/envs/.env.docker.common Shared env defaults committed to repo; postgres credentials are defaults for local dev (intentional)

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    subgraph "docker/docker-compose.yml (mainnet/sepolia)"
        DC1_IDX[ensindexer] --> DC1_RB[ensrainbow]
        DC1_IDX --> DC1_PG[postgres]
        DC1_API[ensapi] --> DC1_PG
        DC1_ADM[ensadmin] --> DC1_API
    end

    subgraph "docker/docker-compose.devnet.yml (local dev)"
        DC2_IDX[ensindexer] --> DC2_RB[ensrainbow]
        DC2_IDX --> DC2_PG[postgres]
        DC2_IDX --> DC2_DV[devnet]
        DC2_API[ensapi] --> DC2_PG
        DC2_ADM[ensadmin] --> DC2_API
    end

    subgraph "docker/docker-compose.orchestrator.yml (CI)"
        DC3_DV[devnet]
        DC3_PG[postgres]
    end

    subgraph "docker/services/ (fragments via extends)"
        SVC_IDX[ensindexer.yml]
        SVC_API[ensapi.yml]
        SVC_RB[ensrainbow.yml]
        SVC_ADM[ensadmin.yml]
        SVC_PG[postgres.yml]
        SVC_DV[devnet.yml]
    end

    subgraph "docker/envs/"
        ENV_CMN[.env.docker.common]
        ENV_DEV[.env.docker.devnet]
        ENV_LOC[.env.docker.local - gitignored]
    end

    DC1_IDX -.extends.-> SVC_IDX
    DC2_IDX -.extends.-> SVC_IDX
    DC3_PG -.extends.-> SVC_PG
    DC1_PG -.extends.-> SVC_PG
    DC2_PG -.extends.-> SVC_PG

    ENV_CMN -->|required| DC1_IDX
    ENV_LOC -->|required| DC1_IDX
    ENV_CMN -->|required| DC2_IDX
    ENV_DEV -->|required| DC2_IDX
    ENV_LOC -->|optional| DC2_IDX
    ENV_CMN -->|required| DC3_PG
Loading

Comments Outside Diff (1)

  1. packages/integration-test-env/README.md, line 89-91 (link)

    P1 docker compose up postgres will fail without .env.docker.local

    docker/docker-compose.yml marks envs/.env.docker.local as required: true for every service (ensindexer, ensapi, ensrainbow, ensadmin). Docker Compose validates all env_file entries during config parsing — before any service-targeting filter is applied — so this command fails immediately if .env.docker.local doesn't exist, even though the developer only wants to start postgres.

    For local integration-test development, the devnet compose is the right file since it marks .env.docker.local as required: false:

Reviews (2): Last reviewed commit: "fix PR comments" | Re-trigger Greptile

Comment thread docker/README.md Outdated
Comment thread docker/docker-compose.orchestrator.yml
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/integration-test-env/src/orchestrator.ts (1)

14-17: ⚠️ Potential issue | 🟡 Minor

Stale design-decision comment.

The header comment still describes Phase 1 as starting Postgres+devnet "from the root docker-compose.yml". With this change the orchestrator now uses docker/docker-compose.orchestrator.yml. Please update the comment to reflect the new location so the file-level documentation stays accurate.

📝 Proposed tweak
- *   - Postgres and devnet are started from the root docker-compose.yml via
- *     testcontainers DockerComposeEnvironment, ensuring the orchestrator always
- *     uses the same images and configuration defined there.
+ *   - Postgres and devnet are started from docker/docker-compose.orchestrator.yml
+ *     via testcontainers DockerComposeEnvironment, ensuring the orchestrator
+ *     always uses the same images and configuration defined there.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/integration-test-env/src/orchestrator.ts` around lines 14 - 17,
Update the stale header comment in the file-level doc (the "Design decisions"
block in orchestrator.ts) to reflect that Phase 1 now starts Postgres and devnet
using docker/docker-compose.orchestrator.yml (not the root docker-compose.yml);
edit the sentence that references "root docker-compose.yml" to mention
"docker/docker-compose.orchestrator.yml" and ensure the comment still conveys
that Testcontainers' DockerComposeEnvironment is used so the orchestrator uses
the images/config from that compose file.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/ensindexer/.env.local.example`:
- Around line 246-247: Update the inline comment above LABEL_SET_ID to match the
project's casing and punctuation conventions by changing it to refer to
ENSRainbow's LABEL_SET_ID and ending the sentence with a period (i.e., use
"ENSRainbow's LABEL_SET_ID."). Ensure the symbol LABEL_SET_ID remains unchanged
and only the comment text is adjusted.

In `@docker/docker-compose.devnet.yml`:
- Around line 69-75: The devnet compose declares volumes named postgres_data and
ensrainbow_data that collide with base/mainnet stacks — rename these volumes to
stack-specific names (e.g., postgres_data_devnet, ensrainbow_data_devnet) and
update all volume references in the devnet compose services to use the new names
(ensure services referencing postgres_data and ensrainbow_data are updated);
also ensure any corresponding volume names in the main/base compose remain
unchanged (or explicitly set to mainnet names) and/or document/enforce distinct
docker-compose project names (-p) to avoid reuse; pay attention to ENS-related
env vars LABEL_SET_ID and ENSINDEXER_SCHEMA_NAME which assume devnet state so
their DB volume must be isolated.

In `@docker/docker-compose.yml`:
- Around line 34-40: The compose env_file configuration leaves
../apps/ensrainbow/.env.local optional while
apps/ensrainbow/scripts/entrypoint.sh requires DB_SCHEMA_VERSION, LABEL_SET_ID,
and LABEL_SET_VERSION; either make the env file required by changing the
env_file entry for ../apps/ensrainbow/.env.local to required: true, or add the
missing keys (DB_SCHEMA_VERSION, LABEL_SET_ID, LABEL_SET_VERSION) with sensible
defaults into ./.env.docker-compose so a fresh volume has the needed values at
startup; update the env_file block or .env.docker-compose accordingly to ensure
those variables are present for the ENSRainbow entrypoint.

In `@docker/README.md`:
- Line 13: The README contains typos and inaccurate references: change the
command `pnmp devnet` to the correct `pnpm devnet`, fix the sentence describing
`docker/.env.docker-compose` so grammar reads correctly (e.g., "Usually placed
after .env.local so will override it by design"), and update the reference "both
files" (appearing after a list of three env files) to correctly refer to "these
files" or "all three files" so the count matches; apply the same corrections at
the other occurrences noted (lines around the other mentions, e.g., the entries
referenced at 32 and 61).

In `@docker/services/ensadmin.yml`:
- Around line 10-14: Remove the hardcoded environment entries
ENSADMIN_PUBLIC_URL and NEXT_PUBLIC_SERVER_CONNECTION_LIBRARY from the service's
environment block so the values provided by the shared env_file are used
instead; locate the environment section for the ensadmin service and delete the
two lines setting ENSADMIN_PUBLIC_URL and NEXT_PUBLIC_SERVER_CONNECTION_LIBRARY
(following the same pattern used by ensindexer, ensapi, and ensrainbow) so
configuration comes exclusively from docker/.env.docker-compose.

In `@docker/services/postgres.yml`:
- Around line 1-8: Add a Docker healthcheck to the postgres service so Compose
can detect when Postgres is accepting connections: update the postgres service
(container name "postgres") to include a healthcheck using pg_isready (or a
small script that retries) with sensible interval/retries/timeout, and then
update any consumers that currently use depends_on: condition: service_started
to depend on service_healthy instead (or document that they can switch to
service_healthy); reference the postgres service and ensure the healthcheck
command exits non-zero on failure so Compose/Testcontainers
Wait.forHealthCheck() works reliably.

---

Outside diff comments:
In `@packages/integration-test-env/src/orchestrator.ts`:
- Around line 14-17: Update the stale header comment in the file-level doc (the
"Design decisions" block in orchestrator.ts) to reflect that Phase 1 now starts
Postgres and devnet using docker/docker-compose.orchestrator.yml (not the root
docker-compose.yml); edit the sentence that references "root docker-compose.yml"
to mention "docker/docker-compose.orchestrator.yml" and ensure the comment still
conveys that Testcontainers' DockerComposeEnvironment is used so the
orchestrator uses the images/config from that compose file.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 25be0611-90c1-4612-a130-b142d1f74705

📥 Commits

Reviewing files that changed from the base of the PR and between fc88ee5 and be08a83.

📒 Files selected for processing (17)
  • README.md
  • apps/ensindexer/.env.local.example
  • apps/ensrainbow/.env.local.example
  • docker-compose.yml
  • docker/.env.docker-compose
  • docker/README.md
  • docker/docker-compose.devnet.yml
  • docker/docker-compose.orchestrator.yml
  • docker/docker-compose.yml
  • docker/services/devnet.yml
  • docker/services/ensadmin.yml
  • docker/services/ensapi.yml
  • docker/services/ensindexer.yml
  • docker/services/ensrainbow.yml
  • docker/services/postgres.yml
  • package.json
  • packages/integration-test-env/src/orchestrator.ts
💤 Files with no reviewable changes (1)
  • docker-compose.yml

Comment thread apps/ensindexer/.env.local.example Outdated
Comment thread docker/docker-compose.devnet.yml
Comment thread docker/docker-compose.yml
Comment thread docker/README.md Outdated
Comment thread docker/services/ensadmin.yml Outdated
Comment thread docker/services/postgres.yml
Copy link
Copy Markdown
Contributor

@vercel vercel Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional Suggestions:

  1. Import path references incorrect location of docker-compose.yml file after it was moved from root to docker/ directory
  1. Comment references outdated "root docker-compose.yml" location that no longer exists
  1. Documentation references docker-compose.yml at monorepo root, but the file was moved to docker/ directory
  1. README references outdated docker-compose.yml location at monorepo root which has been moved to docker/ directory
  1. Docker compose commands are missing the -f docker/docker-compose.yml flag because the file has been moved from the root to the docker/ directory.
  1. Docker compose commands missing the -f docker/docker-compose.yml flag and documentation references pointing to old file location
  1. Docker compose commands in README are missing the -f flag to specify the location of the compose file, causing commands to fail when the files have been moved to the docker/ directory.

Fix on Vercel

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
docker/README.md (1)

13-32: ⚠️ Potential issue | 🟡 Minor

Fix the remaining README typo and file-count mismatch.

Line 13 has wil, and Line 32 says “both files” after listing three .env.local files.

📝 Proposed documentation fix
-| `docker/.env.docker-compose` | Shared env defaults (postgres credentials, internal service URLs). Usually is placed after .env.local so wil override it by design |
+| `docker/.env.docker-compose` | Shared env defaults (postgres credentials, internal service URLs). Usually placed after `.env.local`, so it will override it by design. |
@@
-Edit both files and set your RPC endpoints (e.g. `RPC_URL_1`, `ALCHEMY_API_KEY`) and any other required values.
+Edit these files and set your RPC endpoints (e.g. `RPC_URL_1`, `ALCHEMY_API_KEY`) and any other required values.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docker/README.md` around lines 13 - 32, Fix the README typo and file-count
mismatch: correct "wil" to "will" in the sentence about overriding .env.local,
and update the phrase "both files" to accurately refer to the three example env
files (e.g., "edit the files" or "edit these files") after the three cp lines
that list apps/ensindexer/.env.local, apps/ensapi/.env.local, and
apps/ensrainbow/.env.local; ensure the instructions consistently reference
"these files" or "all three files" so it matches the three cp commands.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docker/services/postgres.yml`:
- Around line 3-6: The shared Postgres service currently hardcodes
container_name: postgres and ports: "5432:5432" on the postgres service; remove
those keys from the shared Postgres fragment (delete the container_name and
ports entries for the postgres service) so the fragment no longer forces a fixed
container name or host port binding, and re-add the ports mapping only in the
human-facing compose files (docker-compose.yml and docker-compose.devnet.yml)
where binding 5432:5432 is an intentional local UX choice.

In `@docs/ensnode.io/src/content/docs/docs/contributing/index.mdx`:
- Around line 157-160: Remove the misleading "press `Ctrl + C`" instruction
since the previous step runs Docker Compose with `up -d`; update the paragraph
around the `docker compose -f docker/docker-compose.yml down` command to either
delete the Ctrl+C sentence entirely or explicitly qualify that Ctrl+C only
applies to non-detached runs (i.e., when not using `-d`), so readers are
correctly directed to run `docker compose ... down` for stopping and removing
containers started in detached mode.

---

Duplicate comments:
In `@docker/README.md`:
- Around line 13-32: Fix the README typo and file-count mismatch: correct "wil"
to "will" in the sentence about overriding .env.local, and update the phrase
"both files" to accurately refer to the three example env files (e.g., "edit the
files" or "edit these files") after the three cp lines that list
apps/ensindexer/.env.local, apps/ensapi/.env.local, and
apps/ensrainbow/.env.local; ensure the instructions consistently reference
"these files" or "all three files" so it matches the three cp commands.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 61ae11b7-9dbc-4734-9a2e-6e11e20b466e

📥 Commits

Reviewing files that changed from the base of the PR and between be08a83 and 4df59b3.

📒 Files selected for processing (13)
  • apps/ensindexer/.env.local.example
  • docker/README.md
  • docker/docker-compose.devnet.yml
  • docker/docker-compose.orchestrator.yml
  • docker/docker-compose.yml
  • docker/services/ensadmin.yml
  • docker/services/ensapi.yml
  • docker/services/ensindexer.yml
  • docker/services/postgres.yml
  • docs/ensnode.io/src/content/docs/docs/contributing/index.mdx
  • docs/ensnode.io/src/content/docs/docs/deploying/docker.mdx
  • packages/integration-test-env/README.md
  • packages/integration-test-env/src/orchestrator.ts

Comment thread docker/services/postgres.yml
Comment thread docs/ensnode.io/src/content/docs/docs/contributing/index.mdx
Copy link
Copy Markdown
Member

@shrugs shrugs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think moving from individual service .env files to a single docker-compose .env helps the mental model a lot. i'd even suggest we avoid sourcing the ./apps/*/.env.local files within the main docker-compose.yml? OR i'd suggest naming it docker-compose.dev.yml so that it is clear that it's for developers to run the local services with their local .env files

regardless, i'm not sure that sourcing both .env.local and .env.docker-compose makes sense — it should be one or the other?

Comment thread docker/docker-compose.devnet.yml Outdated
Comment thread docker/docker-compose.devnet.yml Outdated
Comment thread docker/envs/.env.docker.common
Comment thread docker/docker-compose.devnet.yml
Comment thread docker/docker-compose.devnet.yml Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

♻️ Duplicate comments (1)
docs/ensnode.io/src/content/docs/docs/contributing/index.mdx (1)

169-176: ⚠️ Potential issue | 🟡 Minor

Make stopping commands match the detached stack that was started.

Both workflows use up -d, so Ctrl + C is misleading. Also show down/down -v for the same compose file the user started, including devnet.

📝 Proposed documentation fix
-To stop the running applications, you can press `Ctrl + C` in the terminal where Docker Compose is running. To remove the containers and networks:
+To stop a detached stack and remove its containers and networks, run `down` with the same Compose file you used to start it:
 
 ```bash
+# local devnet
+docker compose -f docker/docker-compose.devnet.yml down
+
+# mainnet/sepolia
 docker compose -f docker/docker-compose.yml down

:::note[Postgres Volume]
-docker compose down will not delete the Postgres data volume, as it is a named volume. To fully delete it and start from scratch, use docker compose -f docker/docker-compose.yml down -v.
+docker compose ... down will not delete the Postgres data volume, as it is a named volume. To fully delete it and start from scratch, use the matching Compose file with down -v:
+
+bash +docker compose -f docker/docker-compose.devnet.yml down -v +docker compose -f docker/docker-compose.yml down -v +
:::


</details>

Run this read-only check to verify the stop section mirrors the documented start commands:

```shell
#!/bin/bash
# Description: Verify Docker Compose start/stop commands in the contributing guide.
# Expected: devnet and base start commands both have matching down/down -v guidance,
# and the detached workflow does not rely on Ctrl+C.

rg -n -C2 'docker compose -f docker/docker-compose(\.devnet)?\.yml (up -d|down|down -v)|Ctrl \+ C' \
  docs/ensnode.io/src/content/docs/docs/contributing/index.mdx
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/ensnode.io/src/content/docs/docs/contributing/index.mdx` around lines
169 - 176, The stop instructions currently mention "Ctrl + C" and only show
`docker compose -f docker/docker-compose.yml down`; update the section so it
mirrors the detached `up -d` starts by removing the Ctrl + C suggestion and
adding explicit `down` and `down -v` commands for both Compose files
(`docker/docker-compose.devnet.yml` and `docker/docker-compose.yml`), and update
the Postgres Volume note to advise using the matching compose file with `down
-v` (show both `docker compose -f docker/docker-compose.devnet.yml down -v` and
`docker compose -f docker/docker-compose.yml down -v`) so stop instructions
match the documented start commands.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docker/envs/.env.docker.example`:
- Around line 4-6: Replace the incorrect word "localization" in the devnet
instruction line "For devnet: no localization needed — defaults are in
.env.docker.devnet." with a clearer phrase such as "local configuration" or
"local setup" so the line reads e.g. "For devnet: no local configuration needed
— defaults are in .env.docker.devnet."; update the same sentence wherever it
appears to ensure consistency.

In `@docker/README.md`:
- Around line 18-21: Add a blank quoted line between the blockquote marker and
the fenced code block that contains the command "docker compose -f
docker/docker-compose.yml config" so the blockquote properly separates from the
triple-backtick fence; update the README block that starts with the quoted line
before the fenced "bash" code block to include an empty line with a leading ">"
to satisfy markdownlint.

In `@docker/services/ensindexer.yml`:
- Around line 10-16: The Docker healthcheck is probing /health which the Ponder
service does not expose; either update the healthcheck in the healthcheck block
to test an existing endpoint (e.g., change the test to curl --fail -s
http://localhost:42069/api/indexing-status) or add a /health route in the Ponder
app that returns a 200 OK (you can delegate it to the same handler as
/api/indexing-status); ensure the chosen endpoint reliably returns HTTP 200 for
healthy state so Docker's health check succeeds.

In `@docker/services/ensrainbow.yml`:
- Around line 13-19: The docker-compose healthcheck for the ensrainbow service
currently sets start_period: 20m which is shorter than the cold-start
expectation in apps/ensindexer/src/lib/ensrainbow/singleton.ts (30+ minutes);
update the ensrainbow healthcheck configuration (healthcheck -> start_period) to
a value >= 30m so Compose does not mark the service unhealthy before it finishes
its cold start and blocks services gated on service_healthy.

In `@docs/ensnode.io/src/content/docs/docs/deploying/docker.mdx`:
- Line 65: Update the note that references the compose file so it points to the
new compose path: replace the mention of `docker-compose.yml` with
`docker/docker-compose.yml` in the sentence about exposed container ports (the
sentence that also references ENSApi's `4334` and other services), leaving the
port numbers and service names unchanged; ensure the wording matches the rest of
the page which already points users to `docker/docker-compose.yml`.

---

Duplicate comments:
In `@docs/ensnode.io/src/content/docs/docs/contributing/index.mdx`:
- Around line 169-176: The stop instructions currently mention "Ctrl + C" and
only show `docker compose -f docker/docker-compose.yml down`; update the section
so it mirrors the detached `up -d` starts by removing the Ctrl + C suggestion
and adding explicit `down` and `down -v` commands for both Compose files
(`docker/docker-compose.devnet.yml` and `docker/docker-compose.yml`), and update
the Postgres Volume note to advise using the matching compose file with `down
-v` (show both `docker compose -f docker/docker-compose.devnet.yml down -v` and
`docker compose -f docker/docker-compose.yml down -v`) so stop instructions
match the documented start commands.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: a7b2c8ab-038d-4547-b37e-b68cd89e8c08

📥 Commits

Reviewing files that changed from the base of the PR and between 4df59b3 and b858d4d.

📒 Files selected for processing (21)
  • .changeset/hip-poems-shave.md
  • README.md
  • apps/ensindexer/.env.local.example
  • apps/ensrainbow/.env.local.example
  • docker-compose.yml
  • docker/README.md
  • docker/docker-compose.devnet.yml
  • docker/docker-compose.orchestrator.yml
  • docker/docker-compose.yml
  • docker/envs/.env.docker.common
  • docker/envs/.env.docker.devnet
  • docker/envs/.env.docker.example
  • docker/services/devnet.yml
  • docker/services/ensadmin.yml
  • docker/services/ensapi.yml
  • docker/services/ensindexer.yml
  • docker/services/ensrainbow.yml
  • docker/services/postgres.yml
  • docs/ensnode.io/src/content/docs/docs/contributing/index.mdx
  • docs/ensnode.io/src/content/docs/docs/deploying/docker.mdx
  • package.json
💤 Files with no reviewable changes (1)
  • docker-compose.yml

Comment thread docker/envs/.env.docker.example Outdated
Comment thread docker/services/ensindexer.yml
Comment thread docker/services/ensrainbow.yml
Comment thread docs/ensnode.io/src/content/docs/docs/deploying/docker.mdx Outdated
Comment thread docker/envs/.env.docker.example Outdated
Comment thread docs/ensnode.io/src/content/docs/docs/deploying/docker.mdx Outdated
Comment thread docker/README.md Outdated
Comment thread docker/services/ensrainbow.yml Outdated
Copy link
Copy Markdown
Member

@shrugs shrugs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with one concern

Comment thread docker/envs/.env.docker.example
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docker/docker-compose.devnet.yml`:
- Around line 79-85: The env_file entry for the postgres service uses a
different path style ("./envs/.env.docker.common") than the rest of the compose
files; update the postgres service's env_file value to use the normalized path
style ("envs/.env.docker.common") so it matches other env_file entries and keeps
diffs/greps consistent (look for the postgres service block and the env_file key
in the docker-compose.devnet.yml).

In `@docker/README.md`:
- Around line 18-22: The fenced code block containing the command "docker
compose -f docker/docker-compose.yml config" is missing a language identifier;
update that block by adding "bash" after the opening triple backticks so the
block reads as a bash code block and matches the other command blocks in the
README (locate the block containing the docker compose inspect command and add
the language identifier).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 29428e4b-60a3-41ea-b15d-7555421e46c3

📥 Commits

Reviewing files that changed from the base of the PR and between b858d4d and d8deeb5.

📒 Files selected for processing (6)
  • docker/README.md
  • docker/docker-compose.devnet.yml
  • docker/envs/.env.docker.example
  • docker/services/ensrainbow.yml
  • docs/ensnode.io/src/content/docs/docs/deploying/docker.mdx
  • docs/ensnode.io/src/content/docs/ensrainbow/deploying/docker.mdx

Comment thread docker/docker-compose.devnet.yml
Comment thread docker/README.md
@sevenzing sevenzing merged commit 3facf20 into main Apr 24, 2026
20 checks passed
@sevenzing sevenzing deleted the ll/docker branch April 24, 2026 19:06
@github-actions github-actions Bot mentioned this pull request Apr 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docker compose in monrepo

2 participants