• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

safe-global / safe-events-service / 34856889837
86%

Build:
DEFAULT BRANCH: main
Ran 14 Sep 2026 02:39PM UTC
Jobs 2
Files 47
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

14 Sep 2026 02:38PM UTC coverage: 87.523% (+0.3%) from 87.256%
34856889837

push

github

web-flow
fix: Stop leaking AMQP connection managers on readiness checks (#594)

* fix: Stop leaking AMQP connection managers on readiness checks

getConnection() rebuilt the connection manager whenever it was
disconnected, but AmqpConnectionManager retries on its own. Every
readiness probe during a broker outage orphaned a manager that kept
retrying and was never closed.

The queue health indicator now turns any failure into a HealthCheckError,
so a missing AMQP_URL answers 503 instead of 500.

README and AGENTS documented a /health path that does not exist.

Refs PLA-1956

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* test: Compare the liveness body as a plain object

An HTTP response body is a plain object, so toStrictEqual failed against
a Health instance on the class check.

Refs PLA-1956

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix: Serialize AMQP connection creation

Two callers reaching connect() with no manager yet created one each, and
the second overwrote the first without closing it, leaving an orphaned
manager retrying in the background.

Concurrent callers now share a single in-flight attempt.

Refs PLA-1956

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix: Keep the AMQP provider recoverable on connection teardown

`disconnect` only cleared `connection` and `channelWrapper` when both `close`
calls resolved. A rejected `close` left a manager that is already closed and
never reconnects, so `/health/ready` stayed on `503` and events were no longer
consumed until a restart. Closing now runs in a `try/finally`.

`disconnect` also ignored an attempt in flight: it found both fields empty and
returned, and the attempt then installed a manager nobody closes. It now waits
for that attempt before closing.

`connect` is private, `getConnection` is the only entry point. The public method
closed the channel wrapper the consumer registered on in `onApplicationBootstrap`
and nothing registered it again, so calling it stopp... (continued)

281 of 326 branches covered (86.2%)

Branch coverage included in aggregate %.

23 of 23 new or added lines in 2 files covered. (100.0%)

673 of 764 relevant lines covered (88.09%)

19.36 hits per line

Jobs
ID Job ID Ran Files Coverage
1 run-test:cov - 34856889837.1 14 Sep 2026 02:39PM UTC 92
86.64
GitHub Action Run
2 run-test:e2e:cov - 34856889837.2 14 Sep 2026 02:39PM UTC 88
61.3
GitHub Action Run
Source Files on build 34856889837
  • Tree
  • List 47
  • Changed 23
  • Source Changed 2
  • Coverage Changed 23
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #34856889837
  • 2ae39aa5 on github
  • Prev Build on v1.5.0 (#32708779011)
  • Next Build on main (#34956010609)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc