message: Avoid conflicts by reverting 1.x version num commit from last v1 release
diff: @@ -239,24 +239,55 @@ def main():
  # Create the new branch and push it to the remote
  print('Creating branch ' + new_branch_name)
  - run_git('checkout', '-b', new_branch_name, ORIGIN + '/' + args.source_branch)
  if args.perform_v2_to_v1_backport:
  + # If we're performing a backport, start from the v1 branch
  + print(f'Creating {new_branch_name} from the {ORIGIN}/v1 branch')
  + run_git('checkout', '-b', new_branch_name, f'{ORIGIN}/v1')
  +
  + # Revert the commit that we made as part of the last release that updated the version number and
  + # changelog to refer to 1.x.x variants. This avoids merge conflicts in the changelog and
  + # package.json files when we merge in the v2 branch.
  + # This commit will not exist the first time we release the v1 branch from the v2 branch, so we
  + # use `git log --grep` to conditionally revert the commit.
  + print('Reverting the 1.x.x version number and changelog updates from the last release to avoid conflicts')
  + v1_update_commits = run_git('log', '--grep', '^Update version and changelog for v', '--format=%H').split()
  +
  + if len(v1_update_commits) > 0:
  + print(f' Reverting {v1_update_commits[0]}')
  + # Only revert the newest commit as older ones will already have been reverted in previous
  + # releases.
  + run_git('revert', v1_update_commits[0], '--no-edit')
  +
  + # Also revert the "Update checked-in dependencies" commit created by Actions.
  + update_dependencies_commit = run_git('log', '--grep', '^Update checked-in dependencies', '--format=%H').split()[0]
  + print(f' Reverting {update_dependencies_commit}')
  + run_git('revert', update_dependencies_commit, '--no-edit')
  +
  + else:
  + print(' Nothing to revert.')
  +
  + print(f'Merging {ORIGIN}/{args.source_branch} into the release prep branch')
  + run_git('merge', f'{ORIGIN}/{args.source_branch}', '--no-edit')
  +
  # Migrate the package version number from a v2 version number to a v1 version number
  print(f'Setting version number to {version}')
  subprocess.run(['npm', 'version', version, '--no-git-tag-version'])
  - run_git('reset', 'HEAD~1')
  run_git('add', 'package.json', 'package-lock.json')
  # Migrate the changelog notes from v2 version numbers to v1 version numbers
  print('Migrating changelog notes from v2 to v1')
  - subprocess.run(['sed', '-i', 's/## 2./## 1./g', 'CHANGELOG.md'])
  + subprocess.run(['sed', '-i', 's/## 2\./## 1\./g', 'CHANGELOG.md'])
  # Amend the commit generated by `npm version` to update the CHANGELOG
  run_git('add', 'CHANGELOG.md')
  - run_git('commit', '--amend', '-m', f'Update version and changelog for v{version}')
  + run_git('commit', '-m', f'Update version and changelog for v{version}')
  else:
  - # We don't need to do this for a v1 release, since the changelog has already been updated in the v2 branch.
  + # If we're performing a standard release, there won't be any new commits on the target branch,
  + # as these will have already been merged back into the source branch. Therefore we can just
  + # start from the source branch.
  + run_git('checkout', '-b', new_branch_name, f'{ORIGIN}/{args.source_branch}')
  +
  print('Updating changelog')
  update_changelog(version)
  