Skip to content

Sharable Config Presets for Renovatebot, especially useful for DevOps folks

License

Notifications You must be signed in to change notification settings

SpotOnInc/renovate-config

Repository files navigation

renovate-config

These are Shareable Config Presets for SpotOn. It contains wide-use Renovatebot configs, based on our toolset and mindset.

Usage

If Renovate has already been activated for repo
  1. Check to see if you have a renovate.json already. It can be in any of these possible locations.

  2. Change renovate config to:

    {
      "$schema": "https://docs.renovatebot.com/renovate-schema.json",
      "extends": [
        "local>SpotOnInc/renovate-config"
      ]
    }

After that, skip to step 3 below.


Otherwise:

  1. 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.

  2. Activate Renovatebot Github App for your repo or ask your GitHub org administrators to enable it.

  3. 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"
      ]
    }
  4. (Optional) We recommend moving the config to .github/renovate.json5.

  5. (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$'
  6. Be sure that the Dependency graph and Dependabot alerts are enabled for the repo. Details.

  7. 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 whole default.json over and rename it to renovate.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

Repos configuration

Custom check creation

  1. 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.

  2. Find file with dependencies that you want to update and paste file content to regex101.com

  3. 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 on datasourceTemplate which you will use.
      For example, for datasourceTemplate: "github-releases" you need cutch to <packageName> GithubPkgOrg/PkgRepo string.
    Catch fields example

    Regex catch example

  4. Copy regex from regex101.com to matchStrings section. Replace all \ with \\.

  5. 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.

    Possible Final Result
    {
      // 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"],
        },
      ],
    }

Troubleshooting