Skip to content

Commit d4077aa

Browse files
fix: simplify release notes staging to avoid git ref conflicts
1 parent 19e8e0e commit d4077aa

2 files changed

Lines changed: 12 additions & 67 deletions

File tree

‎scripts/release.js‎

Lines changed: 2 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -173,17 +173,6 @@ function runRelease({
173173

174174
const releaseNotesPath = dependencies.releaseNotesPath || path.join('docs', 'release-notes', 'RELEASE_NOTES.md');
175175
const updateNotes = dependencies.updateReleaseNotes || ((options = {}) => updateReleaseNotes({ rootDir: cwd, ...options }));
176-
const gitAdd = dependencies.gitAdd || ((files) => spawnSync('git', ['add', ...files], { stdio: 'inherit', cwd }));
177-
const gitCommitAmend = dependencies.gitCommitAmend || (() => spawnSync('git', ['commit', '--amend', '--no-edit'], { stdio: 'inherit', cwd }));
178-
const gitTag = dependencies.gitTag || ((tagName, tagMessage) => {
179-
const args = tagMessage
180-
? ['tag', '-f', '-a', tagName, '-m', tagMessage]
181-
: ['tag', '-f', tagName];
182-
return spawnSync('git', args, { stdio: 'inherit', cwd });
183-
});
184-
const getCommitMessage = dependencies.getCommitMessage || (() => spawnSync('git', ['log', '-1', '--pretty=%s'], { cwd, encoding: 'utf8' }));
185-
const buildTagName = dependencies.buildTagName || ((version) => `v${version}`);
186-
const loadPackage = dependencies.loadPackageJson || ((dir) => loadPackageJson(dir));
187176

188177
let notesUpdated = false;
189178
try {
@@ -193,40 +182,9 @@ function runRelease({
193182
}
194183

195184
if (notesUpdated) {
196-
const gitAddResult = gitAdd([releaseNotesPath]);
185+
const gitAddResult = spawnSync('git', ['add', releaseNotesPath], { stdio: 'inherit', cwd });
197186
if (!gitAddResult || typeof gitAddResult.status !== 'number' || gitAddResult.status !== 0) {
198-
console.warn('⚠️ Release notes updated but failed to stage changes. Please add them manually.');
199-
return releaseResult;
200-
}
201-
202-
const gitCommitResult = gitCommitAmend();
203-
if (!gitCommitResult || typeof gitCommitResult.status !== 'number' || gitCommitResult.status !== 0) {
204-
console.warn('⚠️ Release notes updated but failed to amend release commit. Please amend manually.');
205-
return releaseResult;
206-
}
207-
208-
const packageJson = loadPackage(cwd);
209-
const version = packageJson && packageJson.version;
210-
if (!version) {
211-
console.warn('⚠️ Cannot retag release: package.json version missing. Please update tag manually.');
212-
return releaseResult;
213-
}
214-
215-
const tagName = buildTagName(version);
216-
let tagMessage;
217-
try {
218-
const commitMessageResult = getCommitMessage();
219-
if (commitMessageResult && typeof commitMessageResult.status === 'number' && commitMessageResult.status === 0) {
220-
const output = typeof commitMessageResult.stdout === 'string' ? commitMessageResult.stdout : '';
221-
tagMessage = output.trim();
222-
}
223-
} catch (error) {
224-
console.warn(`⚠️ Unable to read release commit message: ${error.message}`);
225-
}
226-
227-
const gitTagResult = gitTag(tagName, tagMessage);
228-
if (!gitTagResult || typeof gitTagResult.status !== 'number' || gitTagResult.status !== 0) {
229-
console.warn(`⚠️ Failed to retag ${tagName}. Please update the tag manually before pushing.`);
187+
console.warn('⚠️ Release notes updated but failed to stage. Please add manually: git add ' + releaseNotesPath);
230188
}
231189
}
232190

‎test/release-helper.test.js‎

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -105,48 +105,35 @@ test('runRelease infers release type from argv', () => {
105105
assert.deepStrictEqual(args, ['--release-as', 'minor']);
106106
});
107107

108-
test('runRelease amends release commit when release notes update succeeds', () => {
108+
test('runRelease stages release notes when update succeeds', () => {
109109
const calls = [];
110110
const spawn = (...args) => {
111111
calls.push(args);
112112
return { status: 0 };
113113
};
114114

115-
let gitAddArgs;
116-
let gitCommitAmendCalled = false;
117-
let gitTagArgs;
118-
115+
let gitAddCalled = false;
119116
const result = runRelease({
120117
argv: [...DEFAULT_ARGV, 'patch'],
121118
env: {},
122119
spawn,
120+
cwd: '/tmp/test',
123121
dependencies: {
124122
updateReleaseNotes: () => true,
125-
gitAdd: (files) => {
126-
gitAddArgs = files;
127-
return { status: 0 };
128-
},
129-
gitCommitAmend: () => {
130-
gitCommitAmendCalled = true;
131-
return { status: 0 };
132-
},
133-
loadPackageJson: () => ({ version: '1.2.3' }),
134-
buildTagName: (version) => `v${version}`,
135-
getCommitMessage: () => ({ status: 0, stdout: 'chore(release): v1.2.3 🚀' }),
136-
gitTag: (...args) => {
137-
gitTagArgs = args;
138-
return { status: 0 };
139-
},
140123
isWorkingTreeClean: () => true
141124
}
142125
});
143126

144127
assert.ok(result);
145128
assert.strictEqual(result.status, 0);
146-
assert.deepStrictEqual(gitAddArgs, [path.join('docs', 'release-notes', 'RELEASE_NOTES.md')]);
147-
assert.ok(gitCommitAmendCalled);
148-
assert.deepStrictEqual(gitTagArgs, ['v1.2.3', 'chore(release): v1.2.3 🚀']);
149129
assert.strictEqual(calls.length, 2);
130+
131+
const [testCommand] = calls[0];
132+
assert.strictEqual(testCommand, 'npm');
133+
134+
const [execPath, [bin]] = calls[1];
135+
assert.strictEqual(execPath, process.execPath);
136+
assert.strictEqual(bin, require.resolve('standard-version/bin/cli.js'));
150137
});
151138

152139
test('runRelease throws if working tree is dirty', () => {

0 commit comments

Comments
 (0)