Skip to content

Commit c2a63a6

Browse files
fix: patch/replace @changesets/assemble-release-plan to disable major on peer dep change (#3184)
1 parent 550e33f commit c2a63a6

24 files changed

+4808
-1416
lines changed

.changeset/config.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"host-v5",
4646
"host-vue3",
4747
"3008-runtime-remote",
48-
"modernjs-ssr-*"
48+
"modernjs-ssr-*",
49+
"@changesets/assemble-release-plan"
4950
]
5051
}

.nxignore

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
*.md
2+
./assemble-release-plan

.prettierignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ pnpm-lock.yaml
1010
apps/website-new/docs
1111

1212
/.nx/workspace-data
13-
/.nx/cache
13+
/.nx/cache

package.json

+14-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,20 @@
5151
"build:packages": "npx nx affected -t build --parallel=10 --exclude='*,!tag:type:pkg'",
5252
"changegen": "./changeset-gen.js --path ./packages/enhanced --staged &&./changeset-gen.js --path ./packages/node --staged && ./changeset-gen.js --path ./packages/runtime --staged && ./changeset-gen.js --path ./packages/data-prefetch --staged && ./changeset-gen.js --path ./packages/nextjs-mf --staged",
5353
"commitgen:staged": "./commit-gen.js --path ./packages --staged",
54-
"commitgen:main": "./commit-gen.js --path ./packages"
54+
"commitgen:main": "./commit-gen.js --path ./packages",
55+
"changeset:status": "changeset status"
56+
},
57+
"pnpm": {
58+
"packageExtensions": {
59+
"@changesets/cli": {
60+
"dependencies": {
61+
"@changesets/assemble-release-plan": "workspace:*"
62+
}
63+
}
64+
},
65+
"overrides": {
66+
"@changesets/assemble-release-plan": "workspace:*"
67+
}
5568
},
5669
"dependencies": {
5770
"@storybook/addon-interactions": "^8.2.8",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
./dist

packages/assemble-release-plan/CHANGELOG.md

+410
Large diffs are not rendered by default.
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Assemble Release Plan
2+
3+
[![View changelog](https://img.shields.io/badge/changelogs.xyz-Explore%20Changelog-brightgreen)](https://changelogs.xyz/@changesets/assemble-release-plan)
4+
5+
Assemble a release plan for changesets from data about a repository.
6+
7+
Usage
8+
9+
```ts
10+
import assembleReleasePlan from "@changesets/assemble-release-plan";
11+
import readChangesets from "@changesets/read";
12+
import { read } from "@changesets/config";
13+
import { getPackages } from "@manypkg/get-packages";
14+
import { readPreState } from "@changesets/pre";
15+
16+
const packages = await getPackages(cwd);
17+
const preState = await readPreState(cwd);
18+
const config = await read(cwd, packages);
19+
const changesets = await readChangesets(cwd, sinceRef);
20+
21+
const releasePlan = assembleReleasePlan(changesets, packages, config, preState);
22+
```
23+
24+
Signature
25+
26+
```ts
27+
import { NewChangeset, Config, ReleasePlan } from "@changesets/types";
28+
import { Packages } from "@manypkg/get-packages";
29+
30+
assembleReleasePlan = (
31+
changesets: NewChangeset[],
32+
packages: Packages,
33+
config: Config
34+
) => ReleasePlan;
35+
```
36+
37+
This package exists so assembling a release plan can be done without reading from disc.
38+
This is useful primarily for testing within the changesets project, and when you cannot
39+
run commands within the repository you want a release plan for (some CI cases).
40+
41+
For most cases, you should use `@changesets/get-release-plan` which will read local changeset
42+
files, config, and workspaces, to assemble the release plan from.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module.exports = {
2+
presets: [
3+
[
4+
'@babel/preset-env',
5+
{
6+
targets: { node: 8 },
7+
},
8+
],
9+
],
10+
overrides: [{ test: '**/*.ts', presets: ['@babel/preset-typescript'] }],
11+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
{
2+
"name": "@changesets/assemble-release-plan",
3+
"version": "6.0.4",
4+
"private": true,
5+
"description": "Reads changesets and adds information on dependents that need bumping",
6+
"main": "dist/changesets-assemble-release-plan.cjs.js",
7+
"module": "dist/changesets-assemble-release-plan.esm.js",
8+
"exports": {
9+
".": {
10+
"types": {
11+
"import": "./dist/changesets-assemble-release-plan.cjs.mjs",
12+
"default": "./dist/changesets-assemble-release-plan.cjs.js"
13+
},
14+
"module": "./dist/changesets-assemble-release-plan.esm.js",
15+
"import": "./dist/changesets-assemble-release-plan.cjs.mjs",
16+
"default": "./dist/changesets-assemble-release-plan.cjs.js"
17+
},
18+
"./package.json": "./package.json"
19+
},
20+
"scripts": {
21+
"test": "jest",
22+
"build": "preconstruct build",
23+
"watch": "preconstruct watch",
24+
"postinstall": "preconstruct dev",
25+
"lint": "yarn eslint . --ext .ts,.tsx,.js",
26+
"types:check": "tsc",
27+
"changeset": "packages/cli/bin.js",
28+
"check-all": "yarn test && yarn types:check && yarn lint && yarn format",
29+
"version-packages": "changeset version && yarn format:fix",
30+
"release": "yarn build && changeset publish"
31+
},
32+
"license": "MIT",
33+
"repository": "https://github.com/changesets/changesets/tree/main/packages/assemble-release-plan",
34+
"dependencies": {
35+
"@changesets/errors": "^0.2.0",
36+
"@changesets/get-dependents-graph": "^2.1.2",
37+
"@changesets/should-skip-package": "^0.1.1",
38+
"@changesets/types": "^6.0.0",
39+
"@manypkg/get-packages": "^1.1.3",
40+
"semver": "^7.5.3"
41+
},
42+
"devDependencies": {
43+
"@changesets/config": "*",
44+
"@preconstruct/cli": "^2.8.1",
45+
"@babel/preset-typescript": "^7.26.0",
46+
"@babel/preset-env": "^7.26.0"
47+
},
48+
"preconstruct": {
49+
"packages": [
50+
"."
51+
],
52+
"exports": {
53+
"importConditionDefaultExport": "default"
54+
},
55+
"___experimentalFlags_WILL_CHANGE_IN_PATCH": {
56+
"importsConditions": true
57+
}
58+
}
59+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Get Release Info
2+
3+
This package does the end-to-end work of reading in the current set of changesets, and generating a release plan
4+
based on them.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { Linked } from '@changesets/types';
2+
import { Package } from '@manypkg/get-packages';
3+
import { InternalRelease } from './types';
4+
import { getCurrentHighestVersion, getHighestReleaseType } from './utils';
5+
6+
/*
7+
WARNING:
8+
Important note for understanding how this package works:
9+
10+
We are doing some kind of wacky things with manipulating the objects within the
11+
releases array, despite the fact that this was passed to us as an argument. We are
12+
aware that this is generally bad practice, but have decided to to this here as
13+
we control the entire flow of releases.
14+
15+
We could solve this by inlining this function, or by returning a deep-cloned then
16+
modified array, but we decided both of those are worse than this solution.
17+
*/
18+
export default function applyLinks(
19+
releases: Map<string, InternalRelease>,
20+
packagesByName: Map<string, Package>,
21+
linked: Linked,
22+
): boolean {
23+
let updated = false;
24+
25+
// We do this for each set of linked packages
26+
for (let linkedPackages of linked) {
27+
// First we filter down to all the relevant releases for one set of linked packages
28+
let releasingLinkedPackages = [...releases.values()].filter(
29+
(release) =>
30+
linkedPackages.includes(release.name) && release.type !== 'none',
31+
);
32+
33+
// If we proceed any further we do extra work with calculating highestVersion for things that might
34+
// not need one, as they only have workspace based packages
35+
if (releasingLinkedPackages.length === 0) continue;
36+
37+
let highestReleaseType = getHighestReleaseType(releasingLinkedPackages);
38+
let highestVersion = getCurrentHighestVersion(
39+
linkedPackages,
40+
packagesByName,
41+
);
42+
43+
// Finally, we update the packages so all of them are on the highest version
44+
for (let linkedPackage of releasingLinkedPackages) {
45+
if (linkedPackage.type !== highestReleaseType) {
46+
updated = true;
47+
linkedPackage.type = highestReleaseType;
48+
}
49+
if (linkedPackage.oldVersion !== highestVersion) {
50+
updated = true;
51+
linkedPackage.oldVersion = highestVersion;
52+
}
53+
}
54+
}
55+
56+
return updated;
57+
}

0 commit comments

Comments
 (0)