Skip to content

Removed xmlrpc/pingomatic ping service#1

Open
tomerqodo wants to merge 2 commits intocoderabbit_full_base_removed_xmlrpc_pingomatic_ping_service_pr1from
coderabbit_full_head_removed_xmlrpc_pingomatic_ping_service_pr1
Open

Removed xmlrpc/pingomatic ping service#1
tomerqodo wants to merge 2 commits intocoderabbit_full_base_removed_xmlrpc_pingomatic_ping_service_pr1from
coderabbit_full_head_removed_xmlrpc_pingomatic_ping_service_pr1

Conversation

@tomerqodo
Copy link
Copy Markdown

@tomerqodo tomerqodo commented Jan 29, 2026

Benchmark PR from agentic-review-benchmarks#1

Summary by CodeRabbit

  • Removed Features
    • XML-RPC ping functionality has been removed. Posts will no longer automatically send pings to external services upon publication.
    • The privacy.useRpcPing configuration option has been removed from development settings.

✏️ Tip: You can customize this high-level summary in your review settings.

betschki and others added 2 commits January 25, 2026 11:55
Pingomatic is a legacy blog ping service that is no longer relevant for
modern SEO or content distribution. The service was disabled by default
and added unnecessary complexity to the codebase.
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jan 29, 2026

📝 Walkthrough

Walkthrough

The pull request removes XML-RPC ping functionality from Ghost core, including the xmlrpc service module, initialization logic in the boot sequence, the development configuration flag, and all associated unit tests.

Changes

Cohort / File(s) Summary
XML-RPC Service Removal
ghost/core/core/server/services/xmlrpc.js
Deleted entire XML-RPC service module that handled external service pinging on post publication events, including ping logic, error handling, response parsing, and event listener registration.
Test Cleanup
ghost/core/test/unit/server/services/xmlrpc.test.js
Removed all unit tests for XMLRPC functionality, including tests for listener initialization, ping invocation, conditional behavior, error handling, and XML response parsing.
Boot Sequence Update
ghost/core/core/boot.js
Removed xmlrpc service initialization from startup sequence, reintroduced emailAddressService.init(), and simplified scheduling.init() call by removing API URL argument.
Configuration Update
ghost/core/core/shared/config/env/config.development.json
Removed privacy.useRpcPing configuration flag from development environment settings.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 The RPC pings have hopped away,
No more external calls today,
Tests and service files are gone,
Ghost boots cleaner, moving on,
Simpler paths through startup's dawn! 🌅

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title accurately and concisely describes the main change: removal of the xmlrpc/pingomatic ping service, which is reflected across all modified files.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

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

✨ Finishing touches
  • 📝 Generate docstrings

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.

Copy link
Copy Markdown

@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

🤖 Fix all issues with AI agents
In `@ghost/core/core/boot.js`:
- Around line 366-369: scheduling.init() is being called without the required
options object (the adapter at core/server/adapters/scheduling/index.js expects
options.apiUrl), which causes a runtime error; fix by passing a proper options
object when calling scheduling.init() from core/boot.js that includes apiUrl
(e.g., derive it from the existing site/config URL used elsewhere), or
alternatively update the scheduling adapter's init(options) signature to accept
an optional parameter and default options.apiUrl to a sensible value to avoid
dereferencing undefined — reference scheduling.init() and the adapter at
core/server/adapters/scheduling/index.js when making the change.
- Around line 351-354: The emailAddressService.init() call is being started in
parallel inside Promise.all causing a race with emailService.init(); remove
emailAddressService.init() from the Promise.all and invoke await
emailAddressService.init() before the Promise.all block so
emailAddressService.init() completes prior to calling emailService.init(),
leaving the remaining initializers (identityTokens.init, memberAttribution.init,
etc.) inside Promise.all as before.

Comment thread ghost/core/core/boot.js
Comment on lines 351 to 354
await Promise.all([
emailAddressService.init(),
identityTokens.init(),
memberAttribution.init(),
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check the file structure and context around emailAddressService.init()
cat -n ghost/core/core/boot.js | sed -n '340,370p'

Repository: agentic-review-benchmarks/Ghost-combined-coderabbit

Length of output: 1285


🏁 Script executed:

#!/bin/bash
# Search for emailAddressService references and dependencies
rg -n "emailAddressService" --type=js -B2 -A2

Repository: agentic-review-benchmarks/Ghost-combined-coderabbit

Length of output: 34084


🏁 Script executed:

#!/bin/bash
# Search for services that might depend on emailAddressService during init
rg -n "\.init\(\)" --type=js -B1 -A1 | head -100

Repository: agentic-review-benchmarks/Ghost-combined-coderabbit

Length of output: 6996


Move emailAddressService.init() outside of Promise.all to ensure it completes before emailService initializes.

Line 349 explicitly documents that the email service depends on emailAddressService being ready. Currently, both are initialized in parallel within Promise.all (lines 352 and 365), which creates a race condition. emailService.init() may start before emailAddressService.init() completes.

Correct ordering
-    await Promise.all([
-        emailAddressService.init(),
-        identityTokens.init(),
+    await emailAddressService.init();
+    await Promise.all([
+        identityTokens.init(),
         memberAttribution.init(),
         mentionsService.init(),
         mentionsEmailReport.init(),
         staffService.init(),
         members.init(),
         tiers.init(),
         tagsPublic.init(),
         postsPublic.init(),
         membersEvents.init(),
         permissions.init(),
         audienceFeedback.init(),
         emailService.init(),
         emailAnalytics.init(),
         webhooks.listen(),
         scheduling.init(),
         comments.init(),
         linkTracking.init(),
🤖 Prompt for AI Agents
In `@ghost/core/core/boot.js` around lines 351 - 354, The
emailAddressService.init() call is being started in parallel inside Promise.all
causing a race with emailService.init(); remove emailAddressService.init() from
the Promise.all and invoke await emailAddressService.init() before the
Promise.all block so emailAddressService.init() completes prior to calling
emailService.init(), leaving the remaining initializers (identityTokens.init,
memberAttribution.init, etc.) inside Promise.all as before.

Comment thread ghost/core/core/boot.js
Comment on lines 366 to 369
emailAnalytics.init(),
webhooks.listen(),
scheduling.init({
apiUrl: urlUtils.urlFor('api', {type: 'admin'}, true)
}),
scheduling.init(),
comments.init(),
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check scheduling adapter init signature and all call sites
rg -n -C3 "scheduling\.init\(" --type=js
rg -n -C3 "adapters/scheduling" --type=js

Repository: agentic-review-benchmarks/Ghost-combined-coderabbit

Length of output: 7636


🏁 Script executed:

#!/bin/bash
# Find the scheduling adapter entry point and check init signature
find ghost/core/core/server/adapters/scheduling -name "index.js" -o -name "*.js" | head -20
cat ghost/core/core/server/adapters/scheduling/index.js 2>/dev/null || echo "index.js not found"
ls -la ghost/core/core/server/adapters/scheduling/

Repository: agentic-review-benchmarks/Ghost-combined-coderabbit

Length of output: 1439


🏁 Script executed:

#!/bin/bash
# Check post-scheduling module and its usage
cat ghost/core/core/server/adapters/scheduling/post-scheduling/index.js

# Search for ALL scheduling.init calls to see call pattern consistency
rg -n "scheduling\.init" --type=js -A2 -B2

# Check for any other references to scheduling service
rg -n "\.init\(\)" ghost/core/core/boot.js | head -20

Repository: agentic-review-benchmarks/Ghost-combined-coderabbit

Length of output: 2607


Fix scheduling.init() call - missing required options argument.

The adapter's init() function at ghost/core/core/server/adapters/scheduling/index.js requires an options parameter with an apiUrl property. The call at line 368 passes no arguments, causing a runtime error when the post-scheduling module tries to access options.apiUrl. Provide the required options object or make the parameter optional with a default value.

🤖 Prompt for AI Agents
In `@ghost/core/core/boot.js` around lines 366 - 369, scheduling.init() is being
called without the required options object (the adapter at
core/server/adapters/scheduling/index.js expects options.apiUrl), which causes a
runtime error; fix by passing a proper options object when calling
scheduling.init() from core/boot.js that includes apiUrl (e.g., derive it from
the existing site/config URL used elsewhere), or alternatively update the
scheduling adapter's init(options) signature to accept an optional parameter and
default options.apiUrl to a sensible value to avoid dereferencing undefined —
reference scheduling.init() and the adapter at
core/server/adapters/scheduling/index.js when making the change.

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.

2 participants