diff --git a/publish-version.mjs b/publish-version.mjs index dbcd592b9..68401bf40 100644 --- a/publish-version.mjs +++ b/publish-version.mjs @@ -9,7 +9,7 @@ async function run() { const lernaJson = JSON.parse(await fs.readFile('lerna.json', 'utf-8')); // read the current version from ./version.txt - const nextVersion = await fs.readFile('./version.txt', 'utf-8'); + const nextVersion = (await fs.readFile('./version.txt', 'utf-8')).trim(); const packages = lernaJson.packages; if (!packages) { @@ -60,14 +60,14 @@ async function run() { // Maybe we need to hook the netlify deploy preview // await execa('yarn', ['run', 'build']); - console.log('Committing and pushing changes...'); - await execa('git', ['add', '-A']); - await execa('git', ['commit', '-m', 'chore(version): version.json [skip ci]']); - await execa('git', ['push', 'origin', branchName]); - console.log('Setting the version using lerna...'); - // add a message to the commit to indicate that the version was set using lerna + // Stage all changes (version.json, peer dependency updates, .npmrc deletion) + // before lerna runs so they're included in lerna's commit + await execa('git', ['add', '-A']); + + // Run lerna version without pushing + // lerna will update package.json files and create a commit await execa('npx', [ 'lerna', 'version', @@ -76,12 +76,36 @@ async function run() { '--exact', '--force-publish', '--message', - 'chore(version): Update package versions [skip ci]', + `chore(version): Update package versions to ${nextVersion} [skip ci]`, '--conventional-commits', '--create-release', 'github', + '--no-push', ]); + // Stage any files that need to be included in the amended commit. Lerna commits the package.json + // files it modifies, but may not include other files that were staged before it ran (like + // version.json or .npmrc deletion). Since we're amending the commit to combine all version-related + // changes into a single commit, we need to ensure these files are included. + // + // Note: Peer dependency updates are already in the package.json files that lerna modified, + // so they will be included in lerna's commit automatically. + await execa('git', ['add', '-A']); + + // Amend the last commit to include all changes. The commit message is already set by lerna + // (line 79) and is the same, so we use --no-edit to keep the existing message. + // This combines the version.json commit and package version updates into one commit + await execa('git', ['commit', '--amend', '--no-edit']); + + console.log('Pushing changes...'); + + // Note: Force push is not necessary here because: + // 1. Lerna is called with --no-push, so the commit created by lerna is never pushed to remote + // 2. We amend the commit locally before pushing, so it's a new commit from the remote's perspective + // 3. This script runs on a single branch locally, so there's no history rewrite on the remote + // A regular push is sufficient since we're pushing a commit that doesn't exist on the remote yet + await execa('git', ['push', 'origin', branchName]); + console.log('Version set using lerna'); }