]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
script/ptl-tool: avoid repo specific remotes entirely
authorPatrick Donnelly <pdonnell@redhat.com>
Thu, 11 Apr 2024 19:06:48 +0000 (15:06 -0400)
committerPatrick Donnelly <pdonnell@redhat.com>
Thu, 11 Apr 2024 19:20:20 +0000 (15:20 -0400)
So we don't need to configure the remote name or paths at all. Just use
universal ssh remote URLs instead.

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/script/ptl-tool.py

index ff7838e3e8b33909f684f08f5f07785d184d15d7..13eef79e072bf5d8dba8e00d40b61cd1cc8d9be1 100755 (executable)
@@ -29,8 +29,6 @@
 #
 # Some important environment variables:
 #
-#  - PTL_TOOL_BASE_REMOTE (the name for your upstream remote, default "upstream")
-#  - PTL_TOOL_BASE_PATH (where your upstream -- i.e. https://github.com/ceph/ceph/ -- branch refs are, default "refs/remotes/upstream/")
 #  - PTL_TOOL_GITHUB_USER (your github username)
 #  - PTL_TOOL_GITHUB_API_KEY (your github api key, or what is stored in ~/.github.key)
 #  - PTL_TOOL_REDMINE_USER (your redmine username)
 #  - PTL_TOOL_USER (your desired username embedded in test branch names)
 #
 #
-# Because developers often have custom names for the ceph upstream remote
-# (https://github.com/ceph/ceph.git), You will probably want to export the
-# PTL_TOOL_BASE_PATH environment variable in your shell rc files before using
-# this script:
-#
-#     export PTL_TOOL_BASE_PATH=refs/remotes/<remotename>/
-#
-# and PTL_TOOL_BASE_REMOTE as the name of your Ceph upstream remote (default: "upstream"):
-#
-#     export PTL_TOOL_BASE_REMOTE=<remotename>
-#
-#
 # You can use this tool to create a QA tracker ticket for you:
 #
 # $ python3 ptl-tool.py ... --create-qa --qa-release reef
@@ -163,8 +149,9 @@ from os.path import expanduser
 
 BASE_PROJECT = os.getenv("PTL_TOOL_BASE_PROJECT", "ceph")
 BASE_REPO = os.getenv("PTL_TOOL_BASE_REPO", "ceph")
-BASE_REMOTE = os.getenv("PTL_TOOL_BASE_REMOTE", "upstream")
-BASE_PATH = os.getenv("PTL_TOOL_BASE_PATH", "refs/remotes/upstream/")
+BASE_REMOTE_URL = os.getenv("PTL_TOOL_BASE_REMOTE_URL", f"https://github.com/{BASE_PROJECT}/{BASE_REPO}.git")
+CI_REPO = os.getenv("PTL_TOOL_CI_REPO", "ceph-ci")
+CI_REMOTE_URL = os.getenv("PTL_TOOL_CI_REMOTE_URL", f"git@github.com:{BASE_PROJECT}/{CI_REPO}.git")
 GITDIR = os.getenv("PTL_TOOL_GITDIR", ".")
 GITHUB_USER = os.getenv("PTL_TOOL_GITHUB_USER", os.getenv("PTL_TOOL_USER", getuser()))
 GITHUB_API_KEY = None
@@ -342,10 +329,6 @@ def build_branch(args):
         R = Redmine(REDMINE_ENDPOINT, username=REDMINE_USER, key=REDMINE_API_KEY)
         log.debug("connected")
 
-    # First get the latest base branch and PRs from BASE_REMOTE
-    remote = getattr(G.remotes, BASE_REMOTE)
-    remote.fetch()
-
     prs = args.prs
     if args.pr_label is not None:
         if args.pr_label == '' or args.pr_label.isspace():
@@ -371,14 +354,14 @@ def build_branch(args):
     else:
         log.info("Detaching HEAD onto base: {}".format(base))
         try:
-            base_path = args.base_path + base
-            base = next(ref for ref in G.refs if ref.path == base_path)
+            G.git.fetch(BASE_REMOTE_URL, base)
             # So we know that we're not on an old test branch, detach HEAD onto ref:
-            base.checkout()
-        except StopIteration:
+            c = G.commit('FETCH_HEAD')
+        except git.exc.GitCommandError:
+            log.debug("could not fetch %s from %s", base, BASE_REMOTE_URL)
             log.info(f"Trying to checkout uninterpreted base {base}")
             c = G.commit(base)
-            G.git.checkout(c)
+        G.git.checkout(c)
         assert G.head.is_detached
 
     qa_tracker_description = []
@@ -388,11 +371,12 @@ def build_branch(args):
         log.info("Merging PR #{pr}".format(pr=pr))
 
         remote_ref = "refs/pull/{pr}/head".format(pr=pr)
-        fi = remote.fetch(remote_ref)
-        if len(fi) != 1:
-            log.error("PR {pr} does not exist?".format(pr=pr))
+        try:
+            G.git.fetch(BASE_REMOTE_URL, remote_ref)
+        except git.exc.GitCommandError:
+            log.error("could not fetch %s from %s", remote_ref, BASE_REMOTE_URL)
             sys.exit(1)
-        tip = fi[0].ref.commit
+        tip = G.commit("FETCH_HEAD")
 
         endpoint = f"https://api.github.com/repos/{BASE_PROJECT}/{BASE_REPO}/pulls/{pr}"
         response = next(get(session, endpoint, paging=False))
@@ -444,7 +428,7 @@ def build_branch(args):
         if old_head != new_head:
             rev = f'{old_head}..{new_head}'
             for commit in G.iter_commits(rev=rev):
-                qa_tracker_description.append(f'* "commit {commit}":https://github.com/ceph/ceph-ci/commit/{commit} -- {commit.summary}')
+                qa_tracker_description.append(f'* "commit {commit}":{CI_REMOTE_URL}/commit/{commit} -- {commit.summary}')
 
     # If the branch is 'HEAD', leave HEAD detached (but use "main" for commit message)
     if branch == 'HEAD':
@@ -487,8 +471,8 @@ def build_branch(args):
         custom_fields.append({'id': REDMINE_CUSTOM_FIELD_ID_QA_RUNS, 'value': branch})
         custom_fields.append({'id': REDMINE_CUSTOM_FIELD_ID_QA_RELEASE, 'value': args.qa_release})
 
-        G.remotes.ci.push(tag)
-        origin_url = f'ceph/ceph-ci/commits/{tag.name}'
+        G.git.push(CI_REMOTE_URL, tag.name)
+        origin_url = f'{BASE_PROJECT}/{CI_REPO}/commits/{tag.name}'
         custom_fields.append({'id': REDMINE_CUSTOM_FIELD_ID_GIT_BRANCH, 'value': origin_url})
 
         issue_kwargs = {
@@ -521,7 +505,6 @@ def main():
     parser.add_argument('--debug-build', dest='debug_build', action='store_true', help='append -debug to branch name prompting ceph-build to build with CMAKE_BUILD_TYPE=Debug')
     parser.add_argument('--merge-branch-name', dest='merge_branch_name', action='store', default=False, help='name of the branch for merge messages')
     parser.add_argument('--base', dest='base', action='store', default=default_base, help='base for branch')
-    parser.add_argument('--base-path', dest='base_path', action='store', default=BASE_PATH, help='base for branch')
     parser.add_argument('--git-dir', dest='git', action='store', default=git_dir, help='git directory')
     parser.add_argument('--label', dest='label', action='store', default=default_label, help='label PRs for testing')
     parser.add_argument('--pr-label', dest='pr_label', action='store', help='label PRs for testing')