diff --git a/.renovaterc.json5 b/.renovaterc.json5 index 92b7e7f860..f81ac22756 100644 --- a/.renovaterc.json5 +++ b/.renovaterc.json5 @@ -3,7 +3,7 @@ "extends": [ "github>AmadeusITGroup/otter//tools/renovate/base", "github>AmadeusITGroup/otter//tools/renovate/group/design-factory", - "github>AmadeusITGroup/otter//tools/renovate/managers/github-node-version.json5", + "github>AmadeusITGroup/otter//tools/renovate/branching-strategy/release-branches", ":labels(dependencies)" ], "timezone": "Europe/Paris", diff --git a/tools/renovate/README.md b/tools/renovate/README.md index 5ac008d2b8..970be6bfd0 100644 --- a/tools/renovate/README.md +++ b/tools/renovate/README.md @@ -9,20 +9,24 @@ Otter framework provides a set of Renovate presets to facilitate the setup and r ## Available presets -| Preset | Parameters | Description | -|-------------------------------|------------------------------------|----------------------------------------------------------------------------------------------------| -| **group/design-factory** | | Group the dependencies related to Design Factory | -| **group/otter** | | Group the dependencies related to Otter | -| **group/sdk-spec** | spec-package-name | Create a dedicated group for the SDK spec (when fetching the spec from an NPM repository) | -| **tasks/base** | | Trigger post-install script when upgrading the package manager | -| **tasks/otter-ng-update** | package-manager (optional) | Trigger the migration scripts when upgrading the Otter dependencies | -| **tasks/sdk-regenerate** | package-manager (optional) | Regenerate the SDK when upgrading the SDK dependencies | -| **tasks/sdk-spec-regenerate** | package-manager, spec-package-name | Regenerate the SDK when upgrading the SDK spec (when fetching the spec from an NPM repository) | -| **tasks/yarn-pnp** | | **(Yarn only)** Upgrade Yarn SDKs when upgrading the version of Yarn (only relevant with PnP) | -| **base** | | Base configuration recommended for any project | -| **otter-project** | | **(Yarn only)** Additional configuration recommended for an Otter-based project | -| **sdk** | | **(Yarn only)** Additional configuration recommended for an SDK project | -| **sdk-spec-upgrade** | spec-package-name | **(Yarn only)** Additional configuration recommended when fetching the spec from an NPM repository | +| Preset | Parameters | Description | +| --------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------- | +| **group/design-factory** | | Group the dependencies related to Design Factory | +| **group/otter** | | Group the dependencies related to Otter | +| **group/sdk-spec** | spec-package-name | Create a dedicated group for the SDK spec (when fetching the spec from an NPM repository) | +| **group/angular** | | Group all Angular dependencies | +| **group/typescript** | | Group all Typescript dependenciesmanager | +| **tasks/base** | | Trigger post-install script when upgrading the package manager | +| **tasks/otter-ng-update** | package-manager (optional) | Trigger the migration scripts when upgrading the Otter dependencies | +| **tasks/sdk-regenerate** | package-manager (optional) | Regenerate the SDK when upgrading the SDK dependencies | +| **tasks/sdk-spec-regenerate** | package-manager, spec-package-name | Regenerate the SDK when upgrading the SDK spec (when fetching the spec from an NPM repository) | +| **branching-strategy/release-branches** | | Rules to reduce impacted updates on release branches | +| **branching-strategy/trunk-based** | | Rules to apply on trunk-based development | +| **tasks/yarn-pnp** | | **(Yarn only)** Upgrade Yarn SDKs when upgrading the version of Yarn (only relevant with PnP) | +| **base** | | Base configuration recommended for any project | +| **otter-project** | | **(Yarn only)** Additional configuration recommended for an Otter-based project | +| **sdk** | | **(Yarn only)** Additional configuration recommended for an SDK project | +| **sdk-spec-upgrade** | spec-package-name | **(Yarn only)** Additional configuration recommended when fetching the spec from an NPM repository | ## Recommended setup @@ -39,6 +43,7 @@ Otter framework provides a set of Renovate presets to facilitate the setup and r ``` If you are using npm package manager instead of yarn: + ```json5 { "$schema": "https://docs.renovatebot.com/renovate-schema.json", @@ -46,6 +51,8 @@ If you are using npm package manager instead of yarn: "github>AmadeusITGroup/otter//tools/renovate/base", "github>AmadeusITGroup/otter//tools/renovate/group/otter", "github>AmadeusITGroup/otter//tools/renovate/tasks/base", + "github>AmadeusITGroup/otter//tools/renovate/branching-strategy/release-branches", + // or "github>AmadeusITGroup/otter//tools/renovate/branching-strategy/trunk-based" if your repo is based on Trunk-based Development "github>AmadeusITGroup/otter//tools/renovate/tasks/otter-ng-update(npm)" ] } @@ -64,6 +71,7 @@ If you are using npm package manager instead of yarn: ``` If you are using Renovate to update your swagger spec files: + ```json5 { "$schema": "https://docs.renovatebot.com/renovate-schema.json", @@ -76,6 +84,7 @@ If you are using Renovate to update your swagger spec files: ``` If you are using npm package manager instead of yarn: + ```json5 { "$schema": "https://docs.renovatebot.com/renovate-schema.json", diff --git a/tools/renovate/base.json b/tools/renovate/base.json index 66f9cecc1f..93fc3d23be 100644 --- a/tools/renovate/base.json +++ b/tools/renovate/base.json @@ -8,7 +8,11 @@ "group:recommended", "group:test", "group:linters", - "helpers:pinGitHubActionDigestsToSemver" + "helpers:pinGitHubActionDigestsToSemver", + ":automergeMinor", + "github>AmadeusITGroup/otter//tools/renovate/group/angular", + "github>AmadeusITGroup/otter//tools/renovate/group/typescript", + "github>AmadeusITGroup/otter//tools/renovate/managers/github-node-version.json5" ], "hostRules": [ { @@ -28,7 +32,8 @@ ], "updateInternalDeps": true, "postUpdateOptions": [ - "yarnDedupeHighest" + "yarnDedupeHighest", + "npmDedupe" ], "labels": [ "dependencies" @@ -41,83 +46,5 @@ "before 4am on monday" ] }, - "packageRules": [ - { - "matchPackagePatterns": [ - "*" - ], - "automerge": true, - "rangeStrategy": "replace" - }, - { - "matchPackagePatterns": [ - "^@angular", - "^ng-packagr", - "^@schematics", - "angular", - "^@ngrx", - "^zone.js", - "^@nrwl", - "^@nx", - "^nx" - ], - "groupName": "Angular dependencies", - "groupSlug": "angular-dependencies" - }, - { - "matchPackagePatterns": [ - "typescript", - "tslib" - ], - "groupName": "Typescript dependencies", - "groupSlug": "typescript-dependencies" - }, - { - "matchPackageNames": [ - "typescript" - ], - "rangeStrategy": "in-range-only" - }, - { - "matchUpdateTypes": [ - "major" - ], - "matchBaseBranches": [ - "main", - "master", - "/^release/" - ], - "enabled": false - }, - { - "matchUpdateTypes": [ - "major", - "minor" - ], - "matchBaseBranches": [ - "/^release/" - ], - "enabled": false - }, - { - "matchPackageNames": [ - "typescript" - ], - "matchBaseBranches": [ - "/.*-next$/" - ], - "rangeStrategy": "replace" - }, - { - "matchUpdateTypes": [ - "major" - ], - "matchBaseBranches": [ - "/.*-next$/" - ], - "groupName": "Major dependencies", - "groupSlug": "major-dependencies", - "enabled": true - } - ] + "packageRules": [] } diff --git a/tools/renovate/branching-strategy/readme.md b/tools/renovate/branching-strategy/readme.md new file mode 100644 index 0000000000..3d8851a3a7 --- /dev/null +++ b/tools/renovate/branching-strategy/readme.md @@ -0,0 +1,10 @@ +# Renovate branching strategy rules + +This folder contains the 2 set of rules according to the branching strategy put in place in the repository: + +- [Release Branches](./release-branches.json) reducing the breaking changes and minor updates on release branches +- [Trunk Based Development](./trunk-based.json) permissive regarding the update on current main branch. + +> [!WARNING] +> The major updates of any Node.Js version are currently allowed in [Release Branches rules](./release-branches.json). +> This will be reduced to only the Node.Js version used in Github Actions when the [issue relative to custom manager](https://github.com/renovatebot/renovate/issues/21760) will be fixed. diff --git a/tools/renovate/branching-strategy/release-branches.json b/tools/renovate/branching-strategy/release-branches.json new file mode 100644 index 0000000000..01980e80c7 --- /dev/null +++ b/tools/renovate/branching-strategy/release-branches.json @@ -0,0 +1,72 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "description": "Rules to reduce impacted updates on release branches", + "packageRules": [ + { + "matchPackagePatterns": [ + "*" + ], + "rangeStrategy": "replace" + }, + { + "matchPackageNames": [ + "typescript" + ], + "rangeStrategy": "in-range-only" + }, + { + "matchUpdateTypes": [ + "major" + ], + "matchBaseBranches": [ + "main", + "master", + "/^release/" + ], + "enabled": false + }, + { + "matchUpdateTypes": [ + "major" + ], + "matchDatasources": [ + "node-version" + ], + "matchBaseBranches": [ + "main", + "master" + ], + "enabled": true + }, + { + "matchUpdateTypes": [ + "major", + "minor" + ], + "matchBaseBranches": [ + "/^release/" + ], + "enabled": false + }, + { + "matchPackageNames": [ + "typescript" + ], + "matchBaseBranches": [ + "/.*-next$/" + ], + "rangeStrategy": "replace" + }, + { + "matchUpdateTypes": [ + "major" + ], + "matchBaseBranches": [ + "/.*-next$/" + ], + "groupName": "Major dependencies", + "groupSlug": "major-dependencies", + "enabled": true + } + ] +} diff --git a/tools/renovate/branching-strategy/trunk-based.json b/tools/renovate/branching-strategy/trunk-based.json new file mode 100644 index 0000000000..2d3a6c0b62 --- /dev/null +++ b/tools/renovate/branching-strategy/trunk-based.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "description": "Rules to apply on trunk-based development", + "packageRules": [ + { + "matchBaseBranches": [ + "main", + "master", + "develop" + ], + "rangeStrategy": "replace" + } + ] +} diff --git a/tools/renovate/group/angular.json b/tools/renovate/group/angular.json new file mode 100644 index 0000000000..89433e1d13 --- /dev/null +++ b/tools/renovate/group/angular.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "description": "Group all Angular dependencies", + "packageRules": [ + { + "matchPackagePatterns": [ + "^@angular", + "^ng-packagr", + "^@schematics", + "angular", + "^@ngrx", + "^zone.js", + "^@nrwl", + "^@nx", + "^nx" + ], + "groupName": "Angular dependencies", + "groupSlug": "angular-dependencies" + } + ] +} diff --git a/tools/renovate/group/design-factory.json b/tools/renovate/group/design-factory.json index a87938f0db..91c32d5340 100644 --- a/tools/renovate/group/design-factory.json +++ b/tools/renovate/group/design-factory.json @@ -5,6 +5,7 @@ { "matchPackagePatterns": [ "bootstrap", + "^@ng-select", "^ag-grid-", "^@design-factory", "^@agnos-ui", diff --git a/tools/renovate/group/typescript.json b/tools/renovate/group/typescript.json new file mode 100644 index 0000000000..8ca88b02f1 --- /dev/null +++ b/tools/renovate/group/typescript.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "description": "Group all Typescript dependencies", + "packageRules": [ + { + "matchPackagePatterns": [ + "typescript", + "tslib" + ], + "groupName": "Typescript dependencies", + "groupSlug": "typescript-dependencies" + } + ] +} diff --git a/tools/renovate/managers/github-node-version.json5 b/tools/renovate/managers/github-node-version.json5 index 2d028d9aae..c052b2cd0d 100644 --- a/tools/renovate/managers/github-node-version.json5 +++ b/tools/renovate/managers/github-node-version.json5 @@ -19,26 +19,5 @@ "datasourceTemplate": "node-version", "versioningTemplate": "node" } - ], - "packageRules": [ - { - // TODO: replace the following matchers to `matchManagers` when https://github.com/renovatebot/renovate/issues/21760 is fixed - "matchDatasources": [ - "node-version" - ], - "matchFileNames": [ - "**/.github/workflows/**/*.y{a,}ml", - "**/__dot__github/workflows/**/*.y{a,}ml", - "**/__empty__.github/workflows/**/*.y{a,}ml", - "**/action.y{a,}ml" - ], - - "matchBaseBranches": [ - "main", - "master", - "develop" - ], - "enable": true - } ] } diff --git a/tools/renovate/otter-project.json b/tools/renovate/otter-project.json index d4bc3d26e5..fe21d036aa 100644 --- a/tools/renovate/otter-project.json +++ b/tools/renovate/otter-project.json @@ -4,6 +4,7 @@ "extends": [ "github>AmadeusITGroup/otter//tools/renovate/group/otter", "github>AmadeusITGroup/otter//tools/renovate/tasks/base", + "github>AmadeusITGroup/otter//tools/renovate/branching-strategy/release-branches", "github>AmadeusITGroup/otter//tools/renovate/tasks/otter-ng-update(yarn)", "github>AmadeusITGroup/otter//tools/renovate/tasks/yarn-pnp" ] diff --git a/tools/renovate/sdk.json b/tools/renovate/sdk.json index b12ae98199..56a3af87c6 100644 --- a/tools/renovate/sdk.json +++ b/tools/renovate/sdk.json @@ -4,6 +4,7 @@ "extends": [ "github>AmadeusITGroup/otter//tools/renovate/group/otter", "github>AmadeusITGroup/otter//tools/renovate/tasks/base", + "github>AmadeusITGroup/otter//tools/renovate/branching-strategy/release-branches", "github>AmadeusITGroup/otter//tools/renovate/tasks/sdk-regenerate(yarn)", "github>AmadeusITGroup/otter//tools/renovate/tasks/yarn-pnp" ]