From 02dbbf314b8db4ae45c957c201dfad84d44c4375 Mon Sep 17 00:00:00 2001
From: Julien Cristau <jcristau@mozilla.com>
Date: Tue, 15 Nov 2022 11:33:52 +0100
Subject: [PATCH] Fix trigger-nightly task after repository move

---
 taskcluster/ac_taskgraph/target_tasks.py | 36 +++++++++++++++++++++++-
 taskcluster/ci/trigger-nightly/kind.yml  | 10 +++----
 2 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/taskcluster/ac_taskgraph/target_tasks.py b/taskcluster/ac_taskgraph/target_tasks.py
index c20113385f6..94357766aae 100644
--- a/taskcluster/ac_taskgraph/target_tasks.py
+++ b/taskcluster/ac_taskgraph/target_tasks.py
@@ -3,10 +3,13 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 import os
+import re
 from redo import retry
 
-from taskgraph.target_tasks import _target_task
+from mozilla_version.maven import MavenVersion
+from taskgraph.target_tasks import _target_task, target_tasks_default
 from taskgraph.util.taskcluster import find_task_id
+from taskgraph.util.vcs import get_repository
 
 
 def index_exists(index_path, reason=""):
@@ -56,3 +59,34 @@ def target_tasks_release(full_task_graph, parameters, graph_config):
         return task.attributes.get("build-type", "") == "release"
 
     return [l for l, t in full_task_graph.tasks.items() if filter(t, parameters)]
+
+
+@_target_task("default")
+def target_tasks_ac_default(full_task_graph, parameters, graph_config):
+    def filter(task):
+        # Trigger the nightly cron hook when the GV major version changes
+        if task.kind != "trigger-nightly":
+            return True
+        repo = get_repository(os.getcwd())
+        if get_gv_version(repo, parameters["base_rev"]) != get_gv_version(
+            repo, parameters["head_rev"]
+        ):
+            return True
+        return False
+
+    return [
+        l
+        for l, t in full_task_graph.tasks.items()
+        if l in target_tasks_default(full_task_graph, parameters, graph_config)
+        and filter(t)
+    ]
+
+
+def get_gv_version(repo, revision):
+    gecko_kt = repo.run(
+        "show", f"{revision}:android-components/buildSrc/src/main/java/Gecko.kt"
+    )
+    match = re.search(r'version = "([^"]*)"', gecko_kt, re.MULTILINE)
+    if not match:
+        raise Exception(f"Couldn't parse geckoview version on commit {revision}")
+    return MavenVersion.parse(match.group(1)).major_number
diff --git a/taskcluster/ci/trigger-nightly/kind.yml b/taskcluster/ci/trigger-nightly/kind.yml
index 6a15b873a4f..9f64930fed8 100644
--- a/taskcluster/ci/trigger-nightly/kind.yml
+++ b/taskcluster/ci/trigger-nightly/kind.yml
@@ -32,16 +32,16 @@ tasks:
             command: 'curl --fail --verbose -X POST -d "{}" -H "Content-Type: application/json" ${TASKCLUSTER_PROXY_URL}/api/hooks/v1/hooks/project-releng/cron-task-${HOOK_PROJECT}%2fnightly/trigger'
         when:
             files-changed:
-                - 'buildSrc/src/main/java/Gecko.kt'
+                - 'android-components/buildSrc/src/main/java/Gecko.kt'
         scopes:
             by-level:
                 '3':
-                    - 'hooks:trigger-hook:project-releng/cron-task-mozilla-mobile-android-components/nightly'
+                    - 'hooks:trigger-hook:project-releng/cron-task-mozilla-mobile-firefox-android/nightly'
                 default:
-                    - 'hooks:trigger-hook:project-releng/cron-task-mozilla-releng-staging-android-components/nightly'
+                    - 'hooks:trigger-hook:project-releng/cron-task-mozilla-releng-staging-firefox-android/nightly'
         worker:
             env:
                 HOOK_PROJECT:
                     by-level:
-                        '3': 'mozilla-mobile-android-components'
-                        default: 'mozilla-releng-staging-android-components'
+                        '3': 'mozilla-mobile-firefox-android'
+                        default: 'mozilla-releng-staging-firefox-android'
-- 
GitLab