blob: 7dd770b2cda449568e3e7c3bff24f7ab8a0f251e [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2022 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
# Creates a new branch that bumps the llvm-project commit.
# Typical usage (from the iree/ repository):
# /path/to/here/bump_llvm.py
#
# In the default configuration, it will create a new branch
# "bump-llvm-YYYYMMDD"
# This will fail if the branch already exists, in which case, you can:
# * Specify an explicit branch name with --branch-name=my-integrate
# * Pass "--reuse-branch" if you are sure that you want to lose the current
# branch state. This is largely meant for developing this script or YOLO
# use.
#
# In order to not interfere with your personal preferences, a remote named
# 'UPSTREAM_AUTOMATION' is used (and setup if needed). Sorry if you use that
# name for your daily work.
#
# This then reverts any changes to the llvm-project submodule setup (i.e.
# resets it to llvm-project's repository and disables branch tracking) and
# resets the submodule to the curren HEAD commit, generating a nice commit
# message.
#
# The branch is then pushed to the main repository. GitHub will print the usual
# message to create a pull request, which you should do to kick off pre-merge
# checks. You should land changes to this branch until green (or get other
# people to do so).
#
# When satisfied, Squash and Merge, opting to delete the branch to keep things
# tidy.
import argparse
from datetime import date
import os
import sys
import iree_modules
import iree_utils
def main(args):
if not args.disable_setup_remote:
iree_utils.git_setup_remote(args.upstream_remote, args.upstream_repository)
iree_utils.git_check_porcelain()
print(f"Fetching remote repository: {args.upstream_remote}")
iree_utils.git_fetch(repository=args.upstream_remote)
# If re-using a branch, make sure we are not on that branch.
if args.reuse_branch:
iree_utils.git_checkout("main")
# Create branch.
branch_name = args.branch_name
if not branch_name:
branch_name = f"bump-llvm-{date.today().strftime('%Y%m%d')}"
print(f"Creating branch {branch_name} (override with --branch-name=)")
iree_utils.git_create_branch(branch_name,
checkout=True,
ref=f"{args.upstream_remote}/main",
force=args.reuse_branch)
# Reset the llvm-project submodule to track upstream.
# This will discard any cherrypicks that may have been committed locally,
# but the assumption is that if doing a main llvm version bump, the
# cherrypicks will be incorporated at the new commit. If not, well, ymmv
# and you will find out.
iree_utils.git_submodule_set_origin(
"third_party/llvm-project",
url="https://github.com/iree-org/iree-llvm-fork.git",
branch="--default")
# Remove the branch pin file, reverting us to pure upstream.
branch_pin_file = os.path.join(
iree_utils.get_repo_root(),
iree_modules.MODULE_INFOS["llvm-project"].branch_pin_file)
if os.path.exists(branch_pin_file):
os.remove(branch_pin_file)
# Update the LLVM submodule.
llvm_commit = args.llvm_commit
print(f"Updating LLVM submodule to {llvm_commit}")
llvm_root = iree_utils.get_submodule_root("llvm-project")
iree_utils.git_fetch(repository="origin",
ref="refs/heads/main",
repo_dir=llvm_root)
if llvm_commit == "HEAD":
llvm_commit = "origin/main"
iree_utils.git_reset(llvm_commit, repo_dir=llvm_root)
llvm_commit, llvm_summary = iree_utils.git_current_commit(repo_dir=llvm_root)
print(f"LLVM submodule reset to:\n {llvm_summary}\n")
# Create a commit.
print("Create commit...")
iree_utils.git_create_commit(
message=(f"Integrate llvm-project at {llvm_commit}\n\n"
f"* Reset third_party/llvm-project: {llvm_summary}"),
add_all=True)
# Push.
print("Pushing...")
iree_utils.git_push_branch(args.upstream_remote, branch_name)
def parse_arguments(argv):
parser = argparse.ArgumentParser(description="IREE LLVM-bump-inator")
parser.add_argument("--upstream-remote",
help="Upstream remote",
default="UPSTREAM_AUTOMATION")
parser.add_argument("--upstream-repository",
help="Upstream repository URL",
default="git@github.com:openxla/iree.git")
parser.add_argument("--disable-setup-remote",
help="Disable remote setup",
action="store_true",
default=False)
parser.add_argument("--llvm-commit", help="LLVM commit sha", default="HEAD")
parser.add_argument("--branch-name",
help="Integrate branch to create",
default=None)
parser.add_argument("--reuse-branch",
help="Allow re-use of an existing branch",
action="store_true",
default=False)
args = parser.parse_args(argv)
return args
if __name__ == "__main__":
main(parse_arguments(sys.argv[1:]))