Removed xmlrpc/pingomatic ping service#1
Conversation
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.
📝 WalkthroughWalkthroughThe 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
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
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. Comment |
There was a problem hiding this comment.
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.
| await Promise.all([ | ||
| emailAddressService.init(), | ||
| identityTokens.init(), | ||
| memberAttribution.init(), |
There was a problem hiding this comment.
🧩 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 -A2Repository: 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 -100Repository: 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.
| emailAnalytics.init(), | ||
| webhooks.listen(), | ||
| scheduling.init({ | ||
| apiUrl: urlUtils.urlFor('api', {type: 'admin'}, true) | ||
| }), | ||
| scheduling.init(), | ||
| comments.init(), |
There was a problem hiding this comment.
🧩 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=jsRepository: 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 -20Repository: 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.
Benchmark PR from agentic-review-benchmarks#1
Summary by CodeRabbit
privacy.useRpcPingconfiguration option has been removed from development settings.✏️ Tip: You can customize this high-level summary in your review settings.