Skip to content
This repository was archived by the owner on Mar 17, 2025. It is now read-only.

Commit 6387bc0

Browse files
committed
no message
1 parent a1f0a77 commit 6387bc0

File tree

3 files changed

+75
-28
lines changed

3 files changed

+75
-28
lines changed

.github/workflows/generate-changeset.yml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,15 @@ jobs:
180180
mkdir -p /tmp/release-notes
181181
182182
# Generate release notes from all changesets to a temporary file
183-
# Pass the branch parameter to filter changesets for this branch
184-
npm run release:notes -- --branch="${{ steps.target_branch.outputs.name }}" > /tmp/release-notes/temp_notes_raw.md
183+
# For develop branch, include all changesets (including those from milestone branches)
184+
if [[ "${{ steps.target_branch.outputs.name }}" == "develop" ]]; then
185+
echo "Generating release notes for develop branch (including milestone branch changesets)"
186+
npm run release:notes > /tmp/release-notes/temp_notes_raw.md
187+
else
188+
# For other branches, filter by branch
189+
echo "Generating release notes for ${{ steps.target_branch.outputs.name }} branch"
190+
npm run release:notes -- --branch="${{ steps.target_branch.outputs.name }}" > /tmp/release-notes/temp_notes_raw.md
191+
fi
185192
186193
# Remove the "Found X changesets" line and any lines starting with ">"
187194
grep -v "^>" /tmp/release-notes/temp_notes_raw.md | sed -n '/^Found/!p' > /tmp/release-notes/temp_notes.md

scripts/generate-release-notes.js

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,31 @@ async function isFirstTimeContributor(author, repoUrl, token) {
125125
}
126126
}
127127

128+
// Update the readChangesets function to handle milestone branch changesets
129+
async function readChangesets(options = {}) {
130+
const { branch } = options;
131+
132+
// Read all changesets
133+
const changesets = await readAllChangesets();
134+
135+
// If no branch filter is specified, return all changesets
136+
if (!branch) {
137+
return changesets;
138+
}
139+
140+
// Special case: if branch is 'develop', include changesets from milestone branches
141+
// This ensures that when milestone branches are merged to develop, their changesets are included
142+
if (branch === 'develop') {
143+
return changesets.filter(changeset =>
144+
changeset.branch === branch ||
145+
changeset.branch.startsWith('milestone/')
146+
);
147+
}
148+
149+
// Otherwise, filter by the specified branch
150+
return changesets.filter(changeset => changeset.branch === branch);
151+
}
152+
128153
// Generate release notes in markdown format
129154
async function generateMarkdownReleaseNotes(changesets, repoUrl, token) {
130155
// Categorize changesets
@@ -331,7 +356,7 @@ async function generateReleaseNotes() {
331356
const token = getGitHubToken();
332357

333358
// Read all changesets, filtering by branch if specified
334-
const changesets = await readAllChangesets(argv.branch);
359+
const changesets = await readChangesets({ branch: argv.branch });
335360

336361
// Log the number of changesets found
337362
console.log(`Found ${changesets.length} changesets${argv.branch ? ` for branch ${argv.branch}` : ''}.`);

scripts/utils/changesets.js

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -68,40 +68,55 @@ async function readChangeset(filePath) {
6868
}
6969

7070
/**
71-
* Read all changesets
71+
* Read all changesets from the .changesets directory
7272
*
73-
* @returns {Promise<Object[]>} Array of parsed changesets
73+
* @param {Object} options Options for reading changesets
74+
* @param {string} options.branch Branch to filter changesets by
75+
* @returns {Promise<Array>} Array of changeset objects
7476
*/
75-
async function readAllChangesets(branch = null) {
76-
const dir = getChangesetDir();
77+
async function readAllChangesets(options = {}) {
78+
const { branch } = options;
7779

78-
try {
79-
const files = await fs.readdir(dir);
80-
const changesets = await Promise.all(files.map(async file => {
81-
const filepath = path.join(dir, file);
82-
const content = await fs.readFile(filepath, 'utf8');
83-
const { data, content: description } = matter(content);
80+
// Get all changeset files
81+
const changesetDir = path.join(process.cwd(), '.changesets');
82+
const files = await fs.readdir(changesetDir);
83+
const changesetFiles = files.filter(file => file.endsWith('.md'));
84+
85+
// Read each changeset file
86+
const changesets = await Promise.all(
87+
changesetFiles.map(async file => {
88+
const filePath = path.join(changesetDir, file);
89+
const content = await fs.readFile(filePath, 'utf8');
8490

85-
return {
86-
...data,
87-
description: description.trim(),
88-
file
89-
};
90-
}));
91-
92-
if (branch) {
91+
// Parse the changeset content
92+
const changeset = parseChangeset(content);
93+
94+
// Add the filename to the changeset
95+
changeset.filename = file;
96+
97+
return changeset;
98+
})
99+
);
100+
101+
// If branch is specified, filter changesets by branch
102+
if (branch) {
103+
// Special case for develop branch - include milestone branch changesets
104+
if (branch === 'develop') {
93105
return changesets.filter(changeset =>
94-
!changeset.branch || changeset.branch === branch
106+
changeset.branch === branch ||
107+
changeset.branch === undefined || // Include changesets without branch info
108+
changeset.branch.startsWith('milestone/')
95109
);
96110
}
97111

98-
return changesets;
99-
} catch (error) {
100-
if (error.code === 'ENOENT') {
101-
return [];
102-
}
103-
throw error;
112+
// Otherwise, filter by the specified branch
113+
return changesets.filter(changeset =>
114+
changeset.branch === branch ||
115+
changeset.branch === undefined // Include changesets without branch info
116+
);
104117
}
118+
119+
return changesets;
105120
}
106121

107122
/**

0 commit comments

Comments
 (0)