Skip to content

ENSApi Integration Tests in CI#1729

Open
shrugs wants to merge 25 commits intomainfrom
feat/esn-test-env-integration-test
Open

ENSApi Integration Tests in CI#1729
shrugs wants to merge 25 commits intomainfrom
feat/esn-test-env-integration-test

Conversation

@shrugs
Copy link
Collaborator

@shrugs shrugs commented Mar 5, 2026

closes #1698

Reviewer Focus (Read This First)

  • packages/integration-test-env/src/ci.ts — the orchestrator. this is the main deliverable. review the phased startup, cleanup ordering, and abort-flag pattern.
  • cleanup correctness — execa handles subprocess cleanup on parent exit, but the reverse-order teardown and container stop logic is custom. verify the SIGINT/SIGTERM handling is sound.
  • CI workflow — the new integration-tests job in test_ci.yml. simple, but confirm the timeout-minutes and runner config are appropriate.

Problem & Motivation

  • ensapi has integration tests (*.integration.test.ts) that test the graphql api against a real stack, but there was no way to run them in CI.
  • running them requires postgres, the ens-test-env devnet, ensrainbow (with a pre-built label database), ensindexer (fully indexed), and ensapi — all coordinated in the right order.
  • without CI coverage, integration test regressions can only be caught locally.

What Changed (Concrete)

  1. new private workspace package @ensnode/integration-test-env at packages/integration-test-env/ — owns testcontainers, execa, and ensnode SDK dependencies
  2. ci.ts orchestrator script that starts postgres + devnet (parallel via testcontainers), downloads ensrainbow database, starts ensrainbow/ensindexer/ensapi from source, polls for indexing completion, runs pnpm test:integration, then
    cleans up
  3. new integration-tests job in .github/workflows/test_ci.yml with 10-minute timeout
  4. pnpm test:integration:ci script at monorepo root that delegates to the new package
  5. pnpm test:integration script at monorepo root using vitest integration config with --silent passed-only
  6. fixed pre-existing broken test: query.integration.test.ts v1 eth domain assertion — was toBeUndefined() with a TODO, now correctly asserts toMatchObject() with makeENSv1DomainId
  7. renamed ENSAPI_GRAPHQL_API_URLENSNODE_URL in integration test client config
  8. made download-prebuilt-database.sh executable (mode 0644 → 0755)
  9. added permissions: contents: read to the workflow file

Design & Planning

  • no upfront design doc. built iteratively: started with raw docker run commands, migrated to testcontainers for postgres (dynamic ports, built-in health checks), then added execa for subprocess management after debugging cleanup issues with
    raw spawn.

  • considered running ensrainbow/ensindexer/ensapi as Docker containers too, but running from source means CI tests the actual code in the PR.

  • considered using the ensrainbow Docker entrypoint.sh directly, but it has Docker-specific paths (/app/...), a netcat placeholder listener, and a sleep 2 that make it unsuitable for source-based runs.

  • Planning artifacts: none

  • Reviewed / approved by: n/a


Self-Review

  • Bugs caught: cleanup was not waiting for children to exit before stopping postgres → DB connection errors. fixed with reverse-order sequential teardown.
  • Logic simplified: replaced manual spawn + waitForExit + ChildProcess tracking with execa (cleanup: true, forceKillAfterDelay, reject: false, extendEnv).
  • Naming / terminology improved: ENSAPI_GRAPHQL_API_URLENSNODE_URL for consistency.
  • Dead or unnecessary code removed: removed testcontainers devDeps from ensapi package.json, removed test:integration:ci script from ensapi.

Cross-Codebase Alignment

  • Search terms used: OmnichainIndexingStatusIds, ENSNamespaceIds, ensTestEnvChain, ENSRAINBOW_DEFAULT_PORT, entrypoint.sh
  • Reviewed but unchanged: apps/ensrainbow/scripts/entrypoint.sh (considered reusing, too Docker-specific), packages/datasources/src/lib/chains.ts (confirmed devnet hardcodes localhost:8545), packages/ensnode-sdk/src/indexing-status/
    (confirmed OmnichainIndexingStatusIds exports)
  • Deferred alignment: ensrainbow database download/extract logic is duplicated between entrypoint.sh and ci.ts — should be extracted to a reusable script (follow-up)

Downstream & Consumer Impact

  • no public API changes

  • integration tests now run in CI on every PR — regressions will be caught automatically

  • ENSAPI_GRAPHQL_API_URL env var renamed to ENSNODE_URL in the integration test client (only used by integration tests, not production)

  • Public APIs affected: none

  • Docs updated: frontmatter in ci.ts documents design decisions

  • Naming decisions worth calling out: ENSNODE_URL replaces ENSAPI_GRAPHQL_API_URL


Testing Evidence

  • ran the full orchestrator locally — all integration tests pass (104/104)

  • ran in CI via the PR — verified the workflow job executes end-to-end

  • unit tests unaffected (pnpm test passes, 84/84 in ensapi)

  • Testing performed: local + CI end-to-end runs

  • Known gaps: no test for the orchestrator itself (it's the test runner). cleanup behavior under various failure modes was tested manually.

  • What reviewers have to reason about manually: whether the cleanup ordering and signal handling are correct in edge cases (crash during startup, crash during indexing, repeated Ctrl-C)


Scope Reductions

  • extract ensrainbow prepare-database.sh — the download + extract + validate logic is duplicated between entrypoint.sh and ci.ts. should be a shared script that both consume. deferred to keep this PR focused on CI plumbing.

  • Follow-ups: reusable prepare-database.sh in ensrainbow

  • Why they were deferred: entrypoint.sh refactoring is a separate concern and would expand the blast radius of this PR


Risk Analysis

  • devnet image pinned to main-f476641 — if that image is removed from ghcr, CI breaks. low risk since it's a published release.

  • fixed ports for devnet (8545/8000) — will conflict if another service uses those ports on the CI runner. acceptable because CI runners are ephemeral.

  • 10-minute timeout — if indexing or image pulls slow down, the job will fail. can be bumped.

  • testcontainers requires Docker — CI runner must have Docker available. blacksmith runners do.

  • Risk areas: devnet image availability, port conflicts on CI runners

  • Mitigations or rollback options: revert the workflow job to disable integration tests. the package is private and has no consumers.

  • Named owner if this causes problems: @shrugs


Pre-Review Checklist (Blocking)

  • I reviewed every line of this diff and understand it end-to-end
  • I'm prepared to defend this PR line-by-line in review
  • I'm comfortable being the on-call owner for this change
  • Relevant changesets are included (or explicitly not required)

@shrugs shrugs requested a review from a team as a code owner March 5, 2026 21:28
Copilot AI review requested due to automatic review settings March 5, 2026 21:28
@changeset-bot
Copy link

changeset-bot bot commented Mar 5, 2026

⚠️ No Changeset found

Latest commit: da7068d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

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

@vercel
Copy link
Contributor

vercel bot commented Mar 5, 2026

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

3 Skipped Deployments
Project Deployment Actions Updated (UTC)
admin.ensnode.io Skipped Skipped Mar 6, 2026 6:51pm
ensnode.io Skipped Skipped Mar 6, 2026 6:51pm
ensrainbow.io Skipped Skipped Mar 6, 2026 6:51pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 5, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The changes introduce a new integration test environment package that orchestrates multiple services (Postgres, devnet, ENSRainbow, ENSIndexer, ENSApi) for testing, along with CI workflow configuration updates and test assertions for v1 ETH domain support.

Changes

Cohort / File(s) Summary
CI Workflow & Scripts
.github/workflows/test_ci.yml, package.json
Added permissions block and new integration-tests job to CI workflow. Introduced test:integration:ci script to the root package.json for orchestrating CI integration tests.
Integration Test Environment
packages/integration-test-env/package.json, packages/integration-test-env/src/ci.ts
New package for integration test environment with startup script. Comprehensive orchestration script (332 lines) managing Postgres, devnet, ENSRainbow, ENSIndexer, and ENSApi services with health checks, error handling, and graceful cleanup.
Test Updates
apps/ensapi/package.json, apps/ensapi/src/graphql-api/schema/query.integration.test.ts
Updated test for v1 ETH domain: added imports (namehash, makeENSv1DomainId), computed V1\_ETH\_DOMAIN\_ID, and asserted domain existence with matching id, name, and label fields. Minor whitespace change in package.json test script.

Sequence Diagram(s)

sequenceDiagram
    participant Test as Integration Test Environment
    participant Postgres as Postgres DB
    participant Devnet as Devnet
    participant Rainbow as ENSRainbow
    participant Indexer as ENSIndexer
    participant API as ENSApi
    participant Runner as Test Runner

    Test->>Postgres: Start service
    activate Postgres
    Test->>Devnet: Start service
    activate Devnet
    Test->>Rainbow: Download & extract data
    Test->>Rainbow: Start service
    activate Rainbow
    Test->>Rainbow: Health check
    Rainbow-->>Test: Healthy
    Test->>Indexer: Start with env config
    activate Indexer
    Test->>Indexer: Poll indexing status
    Indexer-->>Test: Status check (Following/Completed)
    Test->>API: Start service
    activate API
    Test->>API: Health check
    API-->>Test: Healthy
    Test->>Runner: Execute integration tests
    activate Runner
    Runner-->>Test: Tests complete
    deactivate Runner
    Test->>Test: Cleanup & shutdown
    deactivate API
    deactivate Indexer
    deactivate Rainbow
    deactivate Devnet
    deactivate Postgres
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

🐰 A rabbit hops to orchestrate,
PostgreSQL and services await,
Health checks poll, containers gleam,
ENSIndexer joins the testing dream,
With cleanup grace, all systems align! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 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 (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding ENSApi integration tests to the CI pipeline, which aligns with the substantial modifications across workflow files, test infrastructure, and test suite updates.
Description check ✅ Passed PR description is comprehensive and well-structured, following the template with all required sections: Summary, Why, Testing, and Reviewer Focus.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/esn-test-env-integration-test

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


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.

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Mar 5, 2026

Greptile Summary

This PR wires up end-to-end integration tests for ENSApi into CI by adding a new integration-tests job and a custom orchestration script (ci.ts) that boots a full local stack — Postgres, a contracts-v2 devnet, ENSRainbow, ENSIndexer, and ENSApi — using testcontainers and Node child processes, then runs the existing test:integration suite against it. A pre-existing TODO in the integration test asserting that the v1 eth domain was absent from devnet is also resolved.

Key changes:

  • New integration-tests GitHub Actions job runs pnpm test:integration:ci on every push/PR
  • apps/ensapi/src/test/integration/ci.ts: orchestrates the full stack lifecycle (containers + child processes), polls indexing status, runs vitest, and performs cleanup on success, failure, and signals
  • apps/ensapi/package.json: adds test:integration:ci script and testcontainers / @testcontainers/postgresql dev dependencies
  • apps/ensrainbow/scripts/download-prebuilt-database.sh: made executable (mode 0644 → 0755)
  • query.integration.test.ts: removes a TODO placeholder and properly asserts the v1 eth domain exists in devnet

Issues found:

  • A service crash after its health check (e.g. ENSIndexer dying mid-index) only emits a log; pollIndexingStatus will silently spin for the full 5-minute timeout before surfacing a misleading error
  • The integration-tests CI job lacks a timeout-minutes cap, falling back to GitHub's 6-hour default for a job that should complete in under 30 minutes
  • Shell command strings in ci.ts interpolate path variables without quoting, which would break if any path contained spaces

Confidence Score: 3/5

  • Safe to merge with minor improvements; the orchestration logic is sound but has a silent-hang risk on service crashes and no CI timeout guard.
  • The core approach is solid and the happy path is well-structured. However, the service-crash-not-aborting issue can cause CI jobs to silently hang for 5 minutes before failing with a misleading error, which hurts developer experience and wastes runner time. The missing job timeout is a secondary robustness concern. These don't block merging but are worth addressing before the test suite grows.
  • apps/ensapi/src/test/integration/ci.ts — service exit handler and unquoted shell paths need attention

Important Files Changed

Filename Overview
apps/ensapi/src/test/integration/ci.ts New CI orchestrator script: spins up Postgres, devnet, ENSRainbow, ENSIndexer, and ENSApi using testcontainers + child processes, then runs the integration test suite. Two issues: service crashes after health-check don't abort the run early (causing up to 5-minute silent hangs), and shell command strings contain unquoted interpolated paths.
.github/workflows/test_ci.yml Appends a new integration-tests job that checks out the repo and runs pnpm test:integration:ci. Clean and minimal, but missing a timeout-minutes cap for a job whose happy-path can take ~20 minutes.
apps/ensapi/package.json Adds test:integration:ci script and testcontainers + @testcontainers/postgresql dev dependencies. Changes are straightforward and correct.
apps/ensapi/src/graphql-api/schema/query.integration.test.ts Resolves a prior TODO: the v1 eth domain now correctly exists in the devnet, so the placeholder toBeUndefined() assertion is replaced with a proper toMatchObject check using the newly added V1_ETH_DOMAIN_ID constant.
apps/ensrainbow/scripts/download-prebuilt-database.sh File mode changed from 0644 to 0755 (made executable). No content changes. Required so the script can be invoked directly from the shell.
pnpm-lock.yaml Lockfile updated to reflect the two new devDependencies (testcontainers and @testcontainers/postgresql at 11.12.0) and their transitive dependency tree.

Sequence Diagram

sequenceDiagram
    participant CI as GitHub Actions
    participant Script as ci.ts
    participant PG as PostgreSQL (testcontainer)
    participant Dev as Devnet (testcontainer)
    participant ER as ENSRainbow (child process)
    participant EI as ENSIndexer (child process)
    participant EA as ENSApi (child process)
    participant Tests as vitest (pnpm test:integration)

    CI->>Script: tsx src/test/integration/ci.ts
    Script->>PG: start PostgreSqlContainer
    PG-->>Script: DATABASE_URL
    Script->>Dev: start GenericContainer (devnet)
    Dev-->>Script: healthy (Wait.forHttp /health)
    Script->>Script: download & extract ENSRainbow DB
    Script->>ER: spawn pnpm serve
    Script->>Script: waitForHealth (ENSRainbow /health, 120s)
    Script->>EI: spawn pnpm start
    Script->>Script: waitForHealth (ENSIndexer /health, 120s)
    Script->>Script: pollIndexingStatus (300s)
    EI-->>Script: omnichain-following / omnichain-completed
    Script->>EA: spawn pnpm start
    Script->>Script: waitForHealth (ENSApi /health, 60s)
    Script->>Tests: execSync pnpm test:integration
    Tests-->>Script: pass / fail
    Script->>ER: SIGTERM
    Script->>EI: SIGTERM
    Script->>EA: SIGTERM
    Script->>Dev: container.stop()
    Script->>PG: container.stop()
    Script-->>CI: exit 0 / exit 1
Loading

Last reviewed commit: 9dd74a0

Copy link
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: 4

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

Inline comments:
In @.github/workflows/test_ci.yml:
- Around line 106-111: Add a Docker preflight step before the "Run integration
tests" step so the CI fails fast when Docker is unavailable; insert a step named
like "Docker preflight check" that runs a simple command (e.g., docker info or
docker ps) in the same job/runner and returns nonzero on failure, placed
immediately before the step that runs pnpm test:integration:ci which executes
apps/ensapi/src/test/integration/ci.ts, ensuring the workflow errors with an
explicit message when Docker is not available.
- Around line 103-111: The new GitHub Actions job "integration-tests" lacks an
explicit permissions block and currently inherits repo defaults; add a job-level
permissions entry for the integration-tests job to restrict GITHUB_TOKEN to
least-privilege read-only access (e.g., read-only for contents and any other
required scopes like packages or actions if needed) so the job no longer uses
broader inherited permissions; update the "integration-tests" job definition
(the job with name "Integration Tests (ens-test-env)" that runs pnpm
test:integration:ci) to include this permissions block.

In `@apps/ensapi/src/test/integration/ci.ts`:
- Line 155: The current log call uses DATABASE_URL directly (log(`Postgres is
ready (${DATABASE_URL})`)), which exposes credentials; change it to avoid
printing the full connection URI by either logging a redacted string or derived
safe fields (e.g., host/port/db name) instead. In the block where log(...) is
called, replace usage of DATABASE_URL with a redaction routine that strips
userinfo (username:password) or build a safe message like "Postgres is ready
(host=..., db=...)" by parsing DATABASE_URL before logging; ensure the symbol
log and the environment variable DATABASE_URL are the only touched identifiers.
- Around line 181-188: Replace the shell-interpolated execSync calls with Node's
execFileSync and pass the command and an argv array instead of a single template
string: call execFileSync('bash',
[`${ENSRAINBOW_DIR}/scripts/download-prebuilt-database.sh`, DB_SCHEMA_VERSION,
LABEL_SET_ID, LABEL_SET_VERSION], { cwd: ENSRAINBOW_DIR, stdio: 'inherit', env:
{ ...process.env, OUT_DIR: downloadTempDir } }) (and do the same for the other
execSync invocation around lines 197-199), so you avoid shell interpolation and
properly pass arguments; locate the usages of execSync in this file and replace
them with execFileSync with the described args and same options.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 834ee0c9-7f20-4bf3-abf8-ac02b006eda2

📥 Commits

Reviewing files that changed from the base of the PR and between ef7ab2a and 9dd74a0.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (5)
  • .github/workflows/test_ci.yml
  • apps/ensapi/package.json
  • apps/ensapi/src/graphql-api/schema/query.integration.test.ts
  • apps/ensapi/src/test/integration/ci.ts
  • apps/ensrainbow/scripts/download-prebuilt-database.sh

shrugs and others added 2 commits March 5, 2026 15:49
- use execFileSync instead of execSync to avoid shell injection
- add abort flag to detect spawned service crashes during polling
- log non-ok HTTP responses in waitForHealth
- don't log DATABASE_URL credentials, log port only
- mkdirSync before tar extraction
- remove try/catch around test execution (let errors propagate)
- add timeout-minutes and permissions to CI workflow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
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 @.github/workflows/test_ci.yml:
- Around line 109-115: The CI integration job timeout is too short
(timeout-minutes: 10) and causes false failures during long startup/indexing
waits; update the workflow step for the "Run integration tests" job (the block
containing timeout-minutes and the step named "Run integration tests" with
working-directory: apps/ensapi) to increase timeout-minutes to a larger value
(e.g., 30) so the orchestration script has enough time for
devnet/ENSRainbow/ENSIndexer/indexing/ENSApi startup before tests run.

In `@apps/ensapi/src/test/integration/ci.ts`:
- Around line 115-121: The exit handler for child processes only treats non-zero
exit codes as aborts; update the child.on("exit", ...) callback to also handle
signal-terminated exits by checking the signal parameter (when code === null and
signal !== null), set aborted = true, set abortReason to include the signal, and
call logError with a descriptive message including the signal so checkAborted(),
waitForHealth(), and pollIndexingStatus() will immediately detect and fail when
a child was killed by a signal.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 4811b1b4-bb2c-439e-924e-e8f566a1e840

📥 Commits

Reviewing files that changed from the base of the PR and between 9dd74a0 and 348ac48.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (3)
  • .github/workflows/test_ci.yml
  • apps/ensapi/package.json
  • apps/ensapi/src/test/integration/ci.ts

shrugs and others added 2 commits March 5, 2026 16:07
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel vercel bot temporarily deployed to Preview – ensnode.io March 5, 2026 22:09 Inactive
@vercel vercel bot temporarily deployed to Preview – ensrainbow.io March 5, 2026 22:09 Inactive
@vercel vercel bot temporarily deployed to Preview – admin.ensnode.io March 5, 2026 22:09 Inactive
Copy link
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 `@apps/ensapi/src/test/integration/ci.ts`:
- Around line 73-85: The health-check loop in waitForHealth is using fetch(url)
without a per-attempt timeout so a hung request can block the whole retry loop;
update waitForHealth to create an AbortController for each attempt, pass its
signal to fetch, and start a per-attempt setTimeout that calls
controller.abort() after a chosen per-attempt timeout (e.g., min(remainingTime,
5000ms)); ensure you clear that timer and ignore/handle the abort error in the
catch block, and continue the loop so the existing res.ok handling (and
log(`${label} ...` messages) still applies.
- Around line 97-125: spawnService currently attaches stdout/stderr/exit
handlers to the spawned child but misses a child.on("error") handler; add a
child.on("error", (err) => { ... }) handler that calls logError with the error
details, sets aborted = true and sets abortReason to include the label and
err.message (or err.toString()), and ensure any necessary cleanup (e.g., killing
the child or marking it as not running) is performed so the orchestration fails
fast on spawn failures; reference the existing child variable, spawnService,
logError, aborted, and abortReason when implementing this.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e723e0d9-a9bd-4ca4-8186-54500913cb0c

📥 Commits

Reviewing files that changed from the base of the PR and between 348ac48 and 7c6dd9b.

📒 Files selected for processing (1)
  • apps/ensapi/src/test/integration/ci.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 5 out of 8 changed files in this pull request and generated 2 comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

@vercel vercel bot temporarily deployed to Preview – ensnode.io March 5, 2026 23:25 Inactive
@vercel vercel bot temporarily deployed to Preview – admin.ensnode.io March 5, 2026 23:25 Inactive
@vercel vercel bot temporarily deployed to Preview – ensrainbow.io March 5, 2026 23:25 Inactive
…rors

when killing pnpm-managed processes during cleanup, pnpm exits non-zero
(ELIFECYCLE) rather than being signal-terminated, which triggered
setAborted() and logged false errors. setting cleanupInProgress at the
start of cleanup() prevents this.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings March 6, 2026 00:03
@vercel vercel bot temporarily deployed to Preview – ensnode.io March 6, 2026 00:03 Inactive
@vercel vercel bot temporarily deployed to Preview – ensrainbow.io March 6, 2026 00:03 Inactive
@vercel vercel bot temporarily deployed to Preview – admin.ensnode.io March 6, 2026 00:03 Inactive
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 7 out of 9 changed files in this pull request and generated 3 comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

pnpm doesn't forward SIGTERM to its child processes, so the actual node
servers (ensapi, ensindexer, ensrainbow) were left running as orphans
after pnpm exited. spawn with detached: true to create a new process
group per service, then kill(-pid) to terminate the whole group.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel vercel bot temporarily deployed to Preview – ensnode.io March 6, 2026 00:18 Inactive
@vercel vercel bot temporarily deployed to Preview – ensrainbow.io March 6, 2026 00:18 Inactive
@vercel vercel bot temporarily deployed to Preview – admin.ensnode.io March 6, 2026 00:18 Inactive
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 7 out of 9 changed files in this pull request and generated 2 comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

@vercel vercel bot temporarily deployed to Preview – ensnode.io March 6, 2026 18:51 Inactive
@vercel vercel bot temporarily deployed to Preview – admin.ensnode.io March 6, 2026 18:51 Inactive
@vercel vercel bot temporarily deployed to Preview – ensrainbow.io March 6, 2026 18:51 Inactive
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.

ENSApi Devnet Integration Test in CI

2 participants