auto_cut_release.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. """Start a new minor release series."""
  10. import argparse
  11. import sys
  12. from materialize import MZ_ROOT, git, spawn
  13. from materialize.mz_version import MzVersion
  14. from materialize.release.util import doc_file_path
  15. def main():
  16. parser = argparse.ArgumentParser()
  17. parser.add_argument("release_version")
  18. parser.add_argument("next_version")
  19. parser.add_argument("next_date")
  20. args = parser.parse_args()
  21. remote = git.get_remote()
  22. latest_version = git.get_latest_version(version_type=MzVersion)
  23. release_version = MzVersion.parse_mz(f"{args.release_version}.0")
  24. next_version = MzVersion.parse_mz(f"{args.next_version}.0-dev.0")
  25. if latest_version >= release_version:
  26. print(
  27. f"Latest version ({latest_version}) is greater than or equal to release version ({release_version}); nothing to do"
  28. )
  29. return 0
  30. print("Pulling latest main...")
  31. spawn.runv(["git", "pull", remote, "main"])
  32. print("Creating temporary release branch...")
  33. git.create_branch(f"release-{release_version}")
  34. print(f"Bumping version to {release_version}...")
  35. spawn.runv([MZ_ROOT / "bin" / "bump-version", str(release_version)])
  36. print("Tagging release...")
  37. git.tag_annotated(str(release_version))
  38. print(f"Pushing release tag ({release_version}) to {remote}...")
  39. spawn.runv(["git", "push", remote, str(release_version)])
  40. print("Checking out main...")
  41. git.checkout("main")
  42. print(f"Bumping version on main to {next_version}...")
  43. spawn.runv([MZ_ROOT / "bin" / "bump-version", str(next_version)])
  44. # Create the release page in the docs for the next version after the one
  45. # that was just cut.
  46. print(f"Creating {args.next_version}.md in the docs...")
  47. next_version_doc_file = doc_file_path(args.next_version)
  48. if not next_version_doc_file.exists():
  49. next_version_doc_file.write_text(
  50. f"""---
  51. title: "Materialize {args.next_version}"
  52. date: {args.next_date}
  53. released: false
  54. _build:
  55. render: never
  56. ---
  57. """
  58. )
  59. git.add_file(str(next_version_doc_file))
  60. git.commit_all_changed(f"release: create doc file for {args.next_version}")
  61. print(f"Pushing to {remote}...")
  62. spawn.runv(["git", "push", remote, "main"])
  63. return 0
  64. if __name__ == "__main__":
  65. sys.exit(main())