Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/khaki-poets-clap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@tryghost/kg-default-nodes": patch
"@tryghost/koenig-lexical": patch
---

Updated Ghost docs links to new URLs
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ contact_links:
url: https://forum.ghost.org/c/Ideas
about: Please vote for & post new ideas in the the forum
- name: 📖 Documentation
url: https://ghost.org/docs/
url: https://docs.ghost.org/
about: Tutorials & reference guides for themes, the API and more
2 changes: 1 addition & 1 deletion .github/SUPPORT.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Please **_do not_** raise an issue on GitHub.
We have a **help** category in our **[forum](https://forum.ghost.org/)** where you can get quick answers,
help with debugging weird issues, and general help with any aspect of Ghost. There's also an **ideas** category for feature requests.

Our extensive **documentation** can be found at https://ghost.org/docs/.
Our extensive **documentation** can be found at [docs.ghost.org](https://docs.ghost.org/).

Please go to https://forum.ghost.org and signup to join our community.
You can create a new account, or signup using Google, Twitter or Facebook.
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@

The easiest way to get a production instance deployed is with our official **[Ghost(Pro)](https://ghost.org/pricing/)** managed service. It takes about 2 minutes to launch a new site with worldwide CDN, backups, security and maintenance all done for you.

For most people this ends up being the best value option because of [how much time it saves](https://ghost.org/docs/hosting/) — and 100% of revenue goes to the Ghost Foundation; funding the maintenance and further development of the project itself. So you’ll be supporting open source software _and_ getting a great service!
For most people this ends up being the best value option because of [how much time it saves](https://docs.ghost.org/hosting/) — and 100% of revenue goes to the Ghost Foundation; funding the maintenance and further development of the project itself. So you’ll be supporting open source software _and_ getting a great service!

 

Expand All @@ -59,23 +59,23 @@ npm install ghost-cli -g

 

Then, if installing locally add the `local` flag to get up and running in under a minute - [Local install docs](https://ghost.org/docs/install/local/)
Then, if installing locally add the `local` flag to get up and running in under a minute - [Local install docs](https://docs.ghost.org/install/local/)

```
ghost install local
```

 

or on a server run the full install, including automatic SSL setup using LetsEncrypt - [Production install docs](https://ghost.org/docs/install/ubuntu/)
or on a server run the full install, including automatic SSL setup using LetsEncrypt - [Production install docs](https://docs.ghost.org/install/ubuntu/)

```
ghost install
```

 

Check out our [official documentation](https://ghost.org/docs/) for more information about our [recommended hosting stack](https://ghost.org/docs/hosting/) & properly [upgrading Ghost](https://ghost.org/docs/update/), plus everything you need to develop your own Ghost [themes](https://ghost.org/docs/themes/) or work with [our API](https://ghost.org/docs/content-api/).
Check out our [official documentation](https://docs.ghost.org/) for more information about our [recommended hosting stack](https://docs.ghost.org/hosting/) & properly [upgrading Ghost](https://docs.ghost.org/update/), plus everything you need to develop your own Ghost [themes](https://docs.ghost.org/themes/) or work with [our API](https://docs.ghost.org/content-api/).

### Contributors & advanced developers

Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ Potential security vulnerabilities can be reported directly us at `security@ghos

The full, up-to-date details of our security policy and procedure can always be found in our documentation:

https://ghost.org/docs/security/
https://docs.ghost.org/security/

Please refer to this before emailing us. Thanks for helping make Ghost safe for everyone 🙏.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ function ContentApiModal() {
footer={
<div className="mx-8 flex w-full items-center justify-between">
<Button variant="outline" asChild>
<a href="https://ghost.org/docs/content-api/" rel="noopener noreferrer" target="_blank">
<a href="https://docs.ghost.org/content-api/" rel="noopener noreferrer" target="_blank">
Open docs <LucideIcon.ExternalLink className="size-3" />
</a>
</Button>
Expand Down
2 changes: 1 addition & 1 deletion apps/admin/src/settings/email/mailgun.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ const MailGun: React.FC<{ keywords: string[] }> = ({ keywords }) => {
The Mailgun API is used for bulk email newsletter delivery.{' '}
<a
className="text-green hover:text-green-400"
href="https://ghost.org/docs/faq/mailgun-newsletters/"
href="https://docs.ghost.org/faq/mailgun-newsletters/"
rel="noopener noreferrer"
target="_blank"
>
Expand Down
6 changes: 3 additions & 3 deletions apps/admin/src/settings/general/about.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ function AboutModal() {
<div className="text-red-500 dark:text-red-400">
You are running an unsupported database in production. Please{' '}
<a
href="https://ghost.org/docs/faq/supported-databases/"
href="https://docs.ghost.org/faq/supported-databases/"
rel="noopener noreferrer"
target="_blank"
>
Expand All @@ -118,7 +118,7 @@ function AboutModal() {
<div className="flex flex-col gap-1.5">
<a
className="flex items-center gap-2 hover:text-grey-900 dark:hover:text-grey-400"
href="https://ghost.org/docs/"
href="https://docs.ghost.org/"
rel="noopener noreferrer"
target="_blank"
>
Expand All @@ -134,7 +134,7 @@ function AboutModal() {
</a>
<a
className="flex items-center gap-2 hover:text-grey-900 dark:hover:text-grey-400"
href="https://ghost.org/docs/contributing/"
href="https://docs.ghost.org/contributing/"
rel="noopener noreferrer"
target="_blank"
>
Expand Down
2 changes: 1 addition & 1 deletion apps/admin/src/settings/general/publication-language.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ const PublicationLanguage: React.FC<{ keywords: string[] }> = ({ keywords }) =>
Default: English (<strong>en</strong>); find out more about
<a
className="text-primary"
href="https://ghost.org/docs/faq/translation/"
href="https://docs.ghost.org/faq/translation/"
rel="noopener noreferrer"
target="_blank"
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@
</p>
{{else if (not @publishOptions.mailgunIsConfigured)}}
<p class="gh-box gh-content-box" data-test-publish-type-error="no-mailgun">
Set up <a href="https://ghost.org/docs/newsletters/#bulk-email-configuration" target="_blank" rel="noreferrer noopener">Mailgun</a> to start sending newsletters!
Set up <a href="https://docs.ghost.org/newsletters/#bulk-email-configuration" target="_blank" rel="noreferrer noopener">Mailgun</a> to start sending newsletters!
</p>
{{/if}}
{{/if}}
4 changes: 2 additions & 2 deletions apps/ember-admin/app/components/gh-post-settings-menu.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@
{{#liquid-if (and (not this.post.showTitleAndFeatureImage) this.themeMissingShowTitleAndFeatureImage)}}
<div class="nav-list-item-notification">
Uh-oh. Looks like your theme doesn't support this feature.
<a href="https://ghost.org/docs/themes/helpers/">Learn more</a>
<a href="https://docs.ghost.org/themes/helpers/">Learn more</a>
</div>
{{/liquid-if}}
</div>
Expand Down Expand Up @@ -859,4 +859,4 @@
@modifier="total-overlay post-history" />
{{/if}}
</div>
</div>
</div>
8 changes: 4 additions & 4 deletions apps/ember-admin/app/components/modals/settings/about.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,13 @@

{{#if (and this.showSystemInfo this.showDatabaseWarning)}}
<div class="gh-env-error">
You are running an unsupported database in production. Please <a href="https://ghost.org/docs/faq/supported-databases/" target="_blank" rel="noopener noreferrer">upgrade to MySQL 8</a>.
You are running an unsupported database in production. Please <a href="https://docs.ghost.org/faq/supported-databases/" target="_blank" rel="noopener noreferrer">upgrade to MySQL 8</a>.
</div>
{{/if}}

<ul class="gh-about-links">
<li>
<a href="https://ghost.org/docs/" target="_blank" rel="noopener noreferrer">
<a href="https://docs.ghost.org/" target="_blank" rel="noopener noreferrer">
<span>
{{svg-jar "book-open" class="fill-middarkgrey hover-fill"}}
User documentation
Expand All @@ -57,7 +57,7 @@
</a>
</li>
<li>
<a href="https://ghost.org/docs/contributing/" target="_blank" rel="noopener noreferrer">
<a href="https://docs.ghost.org/contributing/" target="_blank" rel="noopener noreferrer">
<span>
{{svg-jar "brackets" class="stroke-middarkgrey hover-stroke"}}
Get involved
Expand All @@ -76,4 +76,4 @@
</div>
</div>
</div>
</div>
</div>
8 changes: 4 additions & 4 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Welcome to the Ghost codebase documentation! These docs are for anyone wanting
to work on the Ghost codebase. For self-hosting, themes, or using Ghost APIs,
see the [official Ghost documentation](https://ghost.org/docs/).
see the [official Ghost documentation](https://docs.ghost.org/).

## Quick Start

Expand Down Expand Up @@ -144,10 +144,10 @@ Docker Official Image.

## Additional Resources

- **[Official Documentation](https://ghost.org/docs/)** - User and developer docs
- **[Official Documentation](https://docs.ghost.org/)** - User and developer docs
- **[Ghost Forum](https://forum.ghost.org)** - Community support and discussions
- **[API Documentation](https://ghost.org/docs/content-api/)** - Content and Admin API reference
- **[Theme Documentation](https://ghost.org/docs/themes/)** - Theme development
- **[API Documentation](https://docs.ghost.org/content-api/)** - Content and Admin API reference
- **[Theme Documentation](https://docs.ghost.org/themes/)** - Theme development

## Getting Help

Expand Down
2 changes: 1 addition & 1 deletion docs/contributing/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ into another documentation surface.
| Relationships between bounded contexts | The root `CONTEXT-MAP.md` |
| Contribution policy and the contributor entry point | `.github/CONTRIBUTING.md` |
| Agent-only execution rules and constraints | The nearest `AGENTS.md` or repository skill |
| Product, API, theme, and self-hosting documentation | [ghost.org/docs](https://ghost.org/docs/) |
| Product, API, theme, and self-hosting documentation | [docs.ghost.org](https://docs.ghost.org/) |
| Proposals, company process, private operations, and temporary work | The internal Ghost workspace |

- Keep the root README focused on introducing Ghost and directing contributors
Expand Down
4 changes: 2 additions & 2 deletions docs/practices/error-handling.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ Ghost's JSON API renderer returns an `errors` array:
"type": "EmailError",
"details": null,
"property": null,
"help": "https://ghost.org/docs/newsletters/#bulk-email-configuration",
"help": "https://docs.ghost.org/newsletters/#bulk-email-configuration",
"code": "BULK_EMAIL_SEND_FAILED",
"id": "...",
"ghostErrorCode": null
Expand Down Expand Up @@ -117,7 +117,7 @@ throw new errors.EmailError({
err,
message: tpl(messages.sendFailed),
context: tpl(messages.providerRejectedRequest),
help: 'https://ghost.org/docs/newsletters/#bulk-email-configuration',
help: 'https://docs.ghost.org/newsletters/#bulk-email-configuration',
code: 'BULK_EMAIL_SEND_FAILED'
});
```
Expand Down
2 changes: 1 addition & 1 deletion ghost/core/content/settings/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

### routes.yaml

To find out more about `routes.yaml` configuration and how to use it visit [documentation](https://ghost.org/docs/themes/routing/).
To find out more about `routes.yaml` configuration and how to use it visit [documentation](https://docs.ghost.org/themes/routing/).

This is how the default `routes.yaml` file looks like:

Expand Down
47 changes: 34 additions & 13 deletions ghost/core/core/boot.js
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,7 @@ async function initServices({ ghostServer, config, prometheusClient }) {
const adapterManager = require('./server/services/adapter-manager').default;
const { withErrorCapture } = require('./server/adapters/scheduling/error-capture');

const assert = require('node:assert/strict');
const metrics = require('@tryghost/metrics');
const db = require('./server/data/db');
const models = require('./server/models');
Expand All @@ -381,6 +382,13 @@ async function initServices({ ghostServer, config, prometheusClient }) {
const schedulerAdapter = withErrorCapture(adapterManager.getAdapter('scheduling'));
schedulerAdapter.run();
await stripe.init();
giftService.init({
apiUrl,
schedulerAdapter,
internalKeys,
});
const giftDeliveryService = giftService.deliveryService;
assert(giftDeliveryService, 'Gift delivery service should be initialized');

await Promise.all([
identityTokens.init(),
Expand All @@ -403,6 +411,7 @@ async function initServices({ ghostServer, config, prometheusClient }) {
db,
domainEvents,
emailSuppressionList,
giftDeliveryService,
membersRepository: members.api.members,
models,
metrics,
Expand All @@ -420,11 +429,6 @@ async function initServices({ ghostServer, config, prometheusClient }) {
recommendationsService.init(),
statsService.init(),
explorePingService.init(),
giftService.init({
apiUrl,
schedulerAdapter,
internalKeys,
}),
machinePaymentsService.init(),
automationsService.init({
domainEvents,
Expand Down Expand Up @@ -490,6 +494,26 @@ async function initBackgroundServices({ config }) {
logging.error(err);
}

// Runs before activitypub.init for the same reason as the gift cleanup
// above: tokens and expired comped subscriptions would otherwise go
// uncleaned for the life of the process if an unrelated background
// service fails.
try {
const memberJobs = require('./server/services/members/jobs');
await memberJobs.scheduleTokenCleanupJob();
} catch (err) {
const logging = require('@tryghost/logging');
logging.error(err);
}

try {
const memberJobs = require('./server/services/members/jobs');
await memberJobs.scheduleExpiredCompCleanupJob();
} catch (err) {
const logging = require('@tryghost/logging');
logging.error(err);
}

const activitypub = require('./server/services/activitypub');
await activitypub.init();
// Load email analytics recurring jobs
Expand All @@ -502,14 +526,6 @@ async function initBackgroundServices({ config }) {
]);
}

try {
const memberJobs = require('./server/services/members/jobs');
await memberJobs.scheduleTokenCleanupJob();
} catch (err) {
const logging = require('@tryghost/logging');
logging.error(err);
}

const updateCheck = require('./server/services/update-check');
updateCheck.scheduleRecurringJobs();
if (config.get('updateCheck:forceUpdate')) {
Expand Down Expand Up @@ -658,11 +674,16 @@ async function bootGhost({ backend = true, frontend = true, server = true } = {}
require('./server/services/jobs-service/register-job-handlers').default;
const mediaInliner = require('./server/services/media-inliner');
const db = require('./server/data/db');
const models = require('./server/models');
const events = require('./server/lib/common/events');
const jobsService = jobsServiceWrapper.init();
registerJobHandlers({
jobsService,
db,
logging,
models,
events,
sentry,
mediaInliner: mediaInliner.getInstance(),
});
await jobsService.start();
Expand Down
Loading
Loading