Awesome
renovate-config
These are Shareable Config Presets for SpotOn. It contains wide-use Renovatebot configs, based on our toolset and mindset.
Usage
<!-- markdownlint-disable no-inline-html --> <details><summary>If Renovate has already been activated for repo</summary>-
Check to see if you have a
renovate.json
already. It can be in any of these possible locations. -
Change
renovate
config to:{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "local>SpotOnInc/renovate-config" ] }
After that, skip to step 3 below.
</details>Otherwise:
-
Manually update as much as you can before moving forward. You will have the best experience with Renovate if you start with a fully-updated repo.
-
Activate Renovatebot Github App for your repo or ask your GitHub org administrators to enable it.
-
Renovate will create an init PR for the new repo - open it and check that it has:
{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "local>SpotOnInc/renovate-config" ] }
-
(Optional) We recommend moving the config to
.github/renovate.json5
. -
(Optional) If you use
pre-commit
we recommend adding next check to repo.pre-commit-config.yaml
:- repo: https://github.com/pre-commit/mirrors-prettier rev: v3.1.0 hooks: - id: prettier # https://prettier.io/docs/en/options.html#parser files: '.json5$'
-
Be sure that the
Dependency graph
andDependabot alerts
are enabled for the repo. Details. -
Merge PR and relax. Renovate will create PRs based on provided schedules. By default, you will see Renovate PRs on Mondays.
Development notes
To change the default config, edit default.template.json5
and create a PR. The matching default.json
will be automatically generated and added after your PR is merged.
Note: If your new
default.json
config does not apply for more than 6 hours, create test repo and copy-paste the wholedefault.json
over and rename it torenovate.json
. Renovatebot will test the configuration and create issues if it found problems with the configuration. Or you can ask ChatGPT :)
New Releases
To create a new release, go here.
If there are no releases for more than 30 days and in main
present something that is ready to be released - the release will be automatically triggered.
Useful links
- How Renovate find/create/update PRs
TL;DR: Renovatebot checks branch names and PR titles. If PR is not found to match the branch - Renovatebot will create a new PR.
To recreate a closed PR, rename the closed PR.
Renovate App and presets configuration
-
- Organization level presets -
myorg/renovate-config/default.json
magic name - GitHub-hosted Presets
- Contributing to presets
- Preset Versioning
- Organization level presets -
-
Known limitations
Example: GitHub hosted app Mend checks each active repository roughly every three hours, if no activity has been seen before then (merged PRs, etc).- No rebasing if you have made edits (conflicting with pre-commit auto-fixes)
-
onboardingConfigFileName (self-hosted only).
Useful to change onboarding Renovate config file location.
Repos configuration
-
How to edit branch names, commit messages, PR titles, and PR content
-
Separate
patch
andminor
releases of dependencies into separate PRs.
More details here -
:pinVersions - maintain a single version only and not SemVer ranges
-
:rebaseStalePrs - Rebase existing PRs any time the base branch has been updated.
Custom check creation
-
Create a regex manager in your
renovate.json5
such as:{ regexManagers: [ { description: "", fileMatch: [""], // regex matchStrings: [ "", // Your regex will be here ], //One of https://docs.renovatebot.com/modules/datasource/ datasourceTemplate: "", packageNameTemplate: "{{packageName}}", // custom-prefix@ needed only in case you;d like provide some custom rules to theses packages depNameTemplate: "custom-prefix@{{packageName}}", // In case you'd like remove `v` prefix extractVersionTemplate: "^v?(?<version>.*)$", // One of https://docs.renovatebot.com/modules/versioning/, IE `semver`: versioningTemplate: "semver", }, ], //// By providing `packageRules` and `matchDepPatterns` you can customize your package updates from regexManager. // packageRules: [ // { // matchDepPatterns: ["^custom-prefix@"], // }, // ], }
and fill all fields except
matchStrings
. -
Find file with dependencies that you want to update and paste file content to regex101.com
-
Write regex for
matchStrings
which will catch:Note Renovate uses RE2 without back and forward lookup groups support, so PCRE2 with these limitations in mind works fine
- current package version (
<currentValue>
) - package source URL (
<packageName>
). What should be inside depends ondatasourceTemplate
which you will use.
For example, fordatasourceTemplate: "github-releases"
you need cutch to<packageName>
GithubPkgOrg/PkgRepo
string.
- current package version (
-
Copy regex from
regex101.com
tomatchStrings
section. Replace all\
with\\
. -
Test that all works as expected. It could be done by creating a temporary repo with your Renovate config and test file, with a non-latest version. Read Renovate logs, force PR creation, and check opened PR if needed.
<details><summary>Possible Final Result</summary>{ // For https://atmos.tools/core-concepts/components/vendoring/#schema-componentyaml regexManagers: [ { description: "Update Atmos Vendor Components", fileMatch: ["component.yaml$"], matchStrings: [ "spec:(.|\\n)*?source:(.|\\n)*?uri:.*\\.[a-z]+\\/(?<packageName>.*)\\.git(.|\\n)*?version:[\\s]*(?<currentValue>.*)", ], datasourceTemplate: "github-releases", packageNameTemplate: "{{packageName}}", depNameTemplate: "atmos-vendor@{{packageName}}", extractVersionTemplate: "^v?(?<version>.*)$", versioningTemplate: "semver", }, ], packageRules: [ { matchDepPatterns: ["^atmos-vendor@"], extends: ["schedule:monthly"], }, ], }