{ "extends": [ "github>tryghost/renovate-config" ], // Limit concurrent branches to keep Renovate runs within the 30-minute // Mend timeout and avoid overwhelming CI with dozens of queued jobs. // The shared preset disables rate limiting, but Ghost's monorepo is // large enough that unlimited branches cause timeouts during rebasing. "branchConcurrentLimit": 10, // Keep manually-closed immortal/grouped PRs closed unless explicitly // reopened from the Dependency Dashboard. "recreateWhen": "never", // pnpm lockfile generation has been hitting Mend's 3GB memory ceiling. // Renovate maintainers suggested starting with toolSettings.nodeMaxMemory // set to 1024MB to reduce pnpm's Node heap usage and keep the overall job // under the hosted runner limit. "toolSettings": { "nodeMaxMemory": 1024 }, // We have to disable platform based automerge (forcing renovate to do it manually) // as otherwise renovate wont follow our schedule "platformAutomerge": false, "timezone": "Etc/UTC", // Restrict Renovate runs to the automerge windows so branch updates // (rebasing, force-pushes) happen around the same times automerge // can actually complete, not during the working day when CI is busy. // Each block starts one hour earlier than the matching automerge // window so Renovate has time to rebase and open/refresh PRs before // automerge is eligible to run. "schedule": [ // Run all weekend "* * * * 0,6", // Run on Monday morning (Sun 23:00 is already covered by weekend) "* 0-12 * * 1", // Run on weekday evenings, starting 1 hour earlier than automerge "* 21-23 * * 1-5", // Run on early weekday mornings (previous day 23:00 is already // covered by the evening block above) "* 0-4 * * 2-6" ], "automergeSchedule": [ // Allow automerge all weekend "* * * * 0,6", // Allow automerge on Monday morning "* 0-12 * * 1", // Allow automerge overnight on weekday evenings (10pm-4:59am UTC) "* 22-23 * * 1-5", "* 0-4 * * 2-6" ], "ignoreDeps": [ // https://github.com/TryGhost/Ghost/commit/2b9e494dfcb95c40f596ccf54ec3151c25d53601 // `got` 10.x has a Node 10 bug that makes it pretty much unusable for now "got", // https://github.com/TryGhost/Ghost/commit/2b9e494dfcb95c40f596ccf54ec3151c25d53601 // `intl-messageformat` 6.0.0 introduced a breaking change in terms of // escaping that would be pretty difficult to fix for now "intl-messageformat", // https://github.com/TryGhost/Ghost/commit/b2fa84c7ff9bf8e21b0791f268f57e92759a87b1 // no reason given "moment", // https://github.com/TryGhost/Ghost/pull/10672 // https://github.com/TryGhost/Ghost/issues/10870 "moment-timezone", // https://github.com/TryGhost/Admin/pull/1111/files // Ignored because of a mobiledoc-kit issue but that's now in koenig, can probably be cleaned up "simple-dom", // https://github.com/TryGhost/Admin/pull/1111/files // https://github.com/TryGhost/Ghost/pull/10672 // These have been ignored since forever "ember-drag-drop", "normalize.css", "validator", // https://github.com/TryGhost/Ghost/commit/7ebf2891b7470a1c2ffeddefb2fe5e7a57319df3 // Changed how modules are loaded, caused a weird error during render "@embroider/macros", // https://github.com/TryGhost/Ghost/commit/a10ad3767f60ed2c8e56feb49e7bf83d9618b2ab // Caused linespacing issues in the editor, but now it's used in different places // So not sure if it's relevant - soon we will finish switching to react-codemirror "codemirror", // https://github.com/TryGhost/Ghost/commit/3236891b80988924fbbdb625d30cb64a7bf2afd1 // ember-cli-code-coverage@2.0.0 broke our code coverage "ember-cli-code-coverage", // https://github.com/TryGhost/Ghost/commit/1382e34e42a513c201cb957b7f843369a2ce1b63 // ember-cli-terser@4.0.2 has a regression that breaks our sourcemaps "ember-cli-terser" ], "ignorePaths": [ "test", "ghost/admin/lib/koenig-editor/package.json" ], "packageRules": [ // Always require dashboard approval for major updates // This was largely to avoid the noise of major updates which were ESM only // The idea was to check and accept major updates if they were NOT ESM // But this hasn't been workable with our capacity // Plus, ESM-only is an edge case in the grand scheme of dependencies { "description": "Require dashboard approval for major updates", "matchUpdateTypes": [ "major" ], "dependencyDashboardApproval": true }, // Group NQL packages separately from other TryGhost packages { "groupName": "NQL packages", "matchPackageNames": [ "@tryghost/nql", "@tryghost/nql-lang" ] }, // Split the broad shared TryGhost group into smaller logical lanes so // failures in one area (e.g. email rendering) don't block unrelated // internal package updates from merging. { "groupName": "TryGhost runtime packages", "matchPackageNames": [ "@tryghost/adapter-base-cache", "@tryghost/admin-api-schema", "@tryghost/api-framework", "@tryghost/bookshelf-plugins", "@tryghost/database-info", "@tryghost/debug", "@tryghost/domain-events", "@tryghost/errors", "@tryghost/http-cache-utils", "@tryghost/job-manager", "@tryghost/logging", "@tryghost/metrics", "@tryghost/mw-error-handler", "@tryghost/mw-vhost", "@tryghost/pretty-cli", "@tryghost/prometheus-metrics", "@tryghost/promise", "@tryghost/referrer-parser", "@tryghost/root-utils", "@tryghost/security", "@tryghost/social-urls", "@tryghost/tpl", "@tryghost/validator", "@tryghost/version", "@tryghost/zip" ] }, { "groupName": "TryGhost admin support packages", "matchPackageNames": [ "@tryghost/color-utils", "@tryghost/custom-fonts", "@tryghost/limit-service", "@tryghost/members-csv", "@tryghost/timezone-data" ] }, { "groupName": "TryGhost content and email packages", "matchPackageNames": [ "@tryghost/config-url-helpers", "@tryghost/content-api", "@tryghost/helpers", "@tryghost/html-to-mobiledoc", "@tryghost/html-to-plaintext", "@tryghost/nodemailer", "@tryghost/parse-email-address", "@tryghost/request", "@tryghost/string", "@tryghost/url-utils" ] }, { "groupName": "TryGhost test support packages", "matchPackageNames": [ "@tryghost/email-mock-receiver", "@tryghost/express-test", "@tryghost/webhook-mock-receiver" ] }, // Always automerge these packages: { "matchPackageNames": [ // This is a pre-1.0.0 package, but it provides icons // and is very very regularly updated and seems safe to update "lucide-react" ], "automerge": true }, // Allow internal Docker digest pins to automerge once the relevant // CI checks have gone green. { "description": "Automerge internal Docker digest updates after CI passes", "matchDatasources": [ "docker" ], "matchPackageNames": [ "ghost/traffic-analytics", "tinybirdco/tinybird-local" ], "matchUpdateTypes": [ "digest" ], "automerge": true, "automergeType": "pr" }, // Ignore all ember-related packages in admin // Our ember codebase is being replaced with react and // Most of the dependencies have breaking changes and it's too hard to update // Therefore, we'll leave these as-is for now { "groupName": "Disable ember updates", "matchFileNames": [ "ghost/admin/package.json" ], "matchPackageNames": [ // `ember-foo` style packages "/^ember(-|$)/", // scoped `@ember/*` packages "/^@ember\\//", // foo/ember-something style packages "/\\/ember(-|$)/" ], "enabled": false }, // Don't allow css preprocessor updates in admin { "groupName": "disable css", "matchFileNames": [ "ghost/admin/package.json" ], "matchPackageNames": [ "autoprefixer", "ember-cli-postcss", "/^postcss/", "/^css/" ], "enabled": false } ] }