From 51aa2ad1fad84e1991e602fb542455453d82f61a Mon Sep 17 00:00:00 2001 From: weareoutman Date: Wed, 19 Oct 2022 09:35:37 +0800 Subject: [PATCH] fix(): only auto-merge patch versions --- packages/dev-dependencies/patch.js | 5 ++ packages/dev-dependencies/patches/index.js | 1 + .../patches/onlyAutoMergePatchVersions.js | 23 ++++++++ .../onlyAutoMergePatchVersions.spec.js | 57 +++++++++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 packages/dev-dependencies/patches/onlyAutoMergePatchVersions.js create mode 100644 packages/dev-dependencies/patches/onlyAutoMergePatchVersions.spec.js diff --git a/packages/dev-dependencies/patch.js b/packages/dev-dependencies/patch.js index 52def1bdc6..f1d4667160 100644 --- a/packages/dev-dependencies/patch.js +++ b/packages/dev-dependencies/patch.js @@ -26,6 +26,7 @@ const { enableNextLibsRenovate, removeRenovateLegacyBaseBranches, migrateLazyBricksWithJest, + onlyAutoMergePatchVersions, } = require("./patches"); function initAndGetDevDependenciesVersion() { @@ -189,6 +190,10 @@ module.exports = async function patch() { updateBuildNextLibs(); } + if (semver.lt(currentRenewVersion, "1.14.125")) { + onlyAutoMergePatchVersions(); + } + updateDevDependenciesVersion(); }; diff --git a/packages/dev-dependencies/patches/index.js b/packages/dev-dependencies/patches/index.js index ac51b60cdb..51ada6ad1e 100644 --- a/packages/dev-dependencies/patches/index.js +++ b/packages/dev-dependencies/patches/index.js @@ -19,3 +19,4 @@ exports.addPreBuildScriptForBricks = require("./addPreBuildScriptForBricks"); exports.enableNextLibsRenovate = require("./enableNextLibsRenovate"); exports.removeRenovateLegacyBaseBranches = require("./removeRenovateLegacyBaseBranches"); exports.migrateLazyBricksWithJest = require("./migrateLazyBricksWithJest"); +exports.onlyAutoMergePatchVersions = require("./onlyAutoMergePatchVersions"); diff --git a/packages/dev-dependencies/patches/onlyAutoMergePatchVersions.js b/packages/dev-dependencies/patches/onlyAutoMergePatchVersions.js new file mode 100644 index 0000000000..0c2efa9bac --- /dev/null +++ b/packages/dev-dependencies/patches/onlyAutoMergePatchVersions.js @@ -0,0 +1,23 @@ +const path = require("path"); +const { readJson, writeJsonFile } = require("../utils"); + +function onlyAutoMergePatchVersions() { + const renovateJsonPath = path.resolve("renovate.json"); + const renovateJson = readJson(renovateJsonPath); + + const devAutoMergeGroup = renovateJson.packageRules.find( + (item) => + item.automerge === true && + Array.isArray(item.matchDepTypes) && + item.matchDepTypes.join(",") === "devDependencies" && + Array.isArray(item.matchUpdateTypes) && + item.matchUpdateTypes.join(",") !== "patch" + ); + + if (devAutoMergeGroup) { + devAutoMergeGroup.matchUpdateTypes = ["patch"]; + writeJsonFile(renovateJsonPath, renovateJson); + } +} + +module.exports = onlyAutoMergePatchVersions; diff --git a/packages/dev-dependencies/patches/onlyAutoMergePatchVersions.spec.js b/packages/dev-dependencies/patches/onlyAutoMergePatchVersions.spec.js new file mode 100644 index 0000000000..40febebf1b --- /dev/null +++ b/packages/dev-dependencies/patches/onlyAutoMergePatchVersions.spec.js @@ -0,0 +1,57 @@ +const onlyAutoMergePatchVersions = require("./onlyAutoMergePatchVersions"); +const { writeJsonFile, readJson } = require("../utils"); + +jest.mock("../utils"); + +describe("onlyAutoMergePatchVersions", () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it("should ignore if no dev auto merge group", () => { + readJson.mockReturnValueOnce({ + packageRules: [{}], + }); + onlyAutoMergePatchVersions(); + expect(writeJsonFile).not.toBeCalled(); + }); + + it("should ignore if matchUpdateTypes is already patch only", () => { + readJson.mockReturnValueOnce({ + packageRules: [ + { + matchDepTypes: ["devDependencies"], + matchUpdateTypes: ["patch"], + automerge: true, + }, + ], + }); + onlyAutoMergePatchVersions(); + expect(writeJsonFile).not.toBeCalled(); + }); + + it("should update matchUpdateTypes", () => { + readJson.mockReturnValueOnce({ + packageRules: [ + { + matchDepTypes: ["devDependencies"], + matchUpdateTypes: ["minior", "patch"], + automerge: true, + }, + ], + }); + onlyAutoMergePatchVersions(); + expect(writeJsonFile).toBeCalledWith( + expect.stringContaining("renovate.json"), + { + packageRules: [ + { + matchDepTypes: ["devDependencies"], + matchUpdateTypes: ["patch"], + automerge: true, + }, + ], + } + ); + }); +});