def release( version: Version, checkout: Optional[str], create_branch: Optional[str], tag: bool, affect_remote: bool, ) -> None: """Update documents for a release and create tags If both `-b` and `-c` are specified, the checkout happens before the branch creation, meaning that the new branch is created on the target of `-c`. For example make release:: mkrelease -b prepare-v0.1.2 -c v0.1.1-rc1 v0.1.2-dev Has the same git semantics as:: git checkout -b prepare-v0.1.2 v0.1.1-rc1 \b Arguments: version: The version to release. The `v` prefix is optional """ if git.is_dirty(): raise UIError("working directory is not clean, stash or commit your changes") the_tag = f"v{version}" confirm_version_is_next(version, affect_remote) if checkout is not None: git.checkout(checkout) if create_branch is not None: git.create_branch(create_branch) confirm_on_latest_rc(affect_remote) change_line(BIN_CARGO_TOML, "version", f'version = "{version}"') change_line( LICENSE, "Licensed Work:", f"Licensed Work: Materialize Version {version}", ) # Don't update the change date unless some code has changed if version.prerelease: future = four_years_hence() change_line(LICENSE, "Change Date", f"Change Date: {future}") ui.say("Updating Cargo.lock") spawn.runv(["cargo", "check", "-p", "materialized"]) spawn.runv(["cargo", "check", "-p", "materialized"]) spawn.runv(["cargo", "check", "-p", "materialized", "--locked"]) if tag: git.commit_all_changed(f"release: {the_tag}") git.tag_annotated(the_tag) else: git.commit_all_changed(f"Prepare next phase of development: {the_tag}") latest_tag = get_latest_tag(fetch=False) # we have made an actual release if latest_tag.prerelease is None and click.confirm( f"Update doc/user/config.toml marking v{latest_tag} as released" ): update_versions_list(latest_tag) git.commit_all_changed(f"Update released versions to include v{latest_tag}") matching = git.first_remote_matching("MaterializeInc/materialize") if tag: if matching is not None: spawn.runv(["git", "show", "HEAD"]) if affect_remote and ui.confirm( f"\nWould you like to push the above changes as: git push {matching} {the_tag}" ): spawn.runv(["git", "push", matching, the_tag]) else: ui.say("") ui.say( f"Next step is to push {the_tag} to the MaterializeInc/materialize repo" ) else: branch = git.rev_parse("HEAD", abbrev=True) ui.say("") ui.say(f"Create a PR with your branch: '{branch}'")
def main(version: str, checkout: Optional[str], create_branch: str, tag: bool) -> None: """Update documents for a release and create tags If both `-b` and `-c` are specified, the checkout happens before the branch creation, meaning that the new branch is created on the target of `-c`. For example make release:: mkrelease -b prepare-v0.1.2 -c v0.1.1-rc1 v0.1.2-dev Has the same git semantics as:: git checkout -b prepare-v0.1.2 v0.1.1-rc1 \b Arguments: version: The version to release. The `v` prefix is optional """ if git.is_dirty(): raise errors.MzConfigurationError( "working directory is not clean, stash or commit your changes") sys.exit(1) version = version.lstrip("v") the_tag = f"v{version}" confirm_version_is_next(version) if git.is_dirty(): raise errors.MzConfigurationError( "working directory is not clean, stash or commit your changes") sys.exit(1) if checkout is not None: git.checkout(checkout) if create_branch is not None: git.create_branch(create_branch) change_line(BIN_CARGO_TOML, "version", f'version = "{version}"') change_line( LICENSE, "Licensed Work:", f"Licensed Work: Materialize Version {version}", ) # Don't update the change date unless some code has changed if "-rc" in version or "-dev" in version: future = four_years_hence() change_line(LICENSE, "Change Date", f"Change Date: {future}") say("Updating Cargo.lock") spawn.runv(["cargo", "check", "-p", "materialized"]) if tag: git.commit_all_changed(f"release: {the_tag}") git.tag_annotated(the_tag) else: git.commit_all_changed(f"Prepare next phase of development: {the_tag}") matching = git.first_remote_matching("MaterializeInc/materialize") if tag: if matching is not None: if ui.confirm( f"\nWould you like me to run: git push {matching} {the_tag}" ): spawn.runv(["git", "push", matching, the_tag]) else: say("") say(f"Next step is to push {the_tag} to the MaterializeInc/materialize repo" ) else: branch = git.rev_parse("HEAD", abbrev=True) say("") say(f"Create a PR with your branch: '{branch}'")