diff --git a/go_presubmit_support.py b/go_presubmit_support.py
index 83988c0..f456355 100644
--- a/go_presubmit_support.py
+++ b/go_presubmit_support.py
@@ -12,24 +12,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
-def go_path(input_api):
-    go = input_api.os_path.join(input_api.change.RepositoryRoot(), "tools",
-                                "golang", "bin", "go")
-    if input_api.is_windows:
-        go += '.exe'
-
-    return go
-
-
 def RunGoTests(input_api, output_api):
     results = []
     try:
-        input_api.subprocess.check_call_out(
-            [go_path(input_api), "test", "./..."],
-            stdout=input_api.subprocess.PIPE,
-            stderr=input_api.subprocess.PIPE,
-            cwd=input_api.PresubmitLocalPath())
+        go = input_api.os_path.join(input_api.change.RepositoryRoot(), "tools",
+                                    "golang", "bin", "go")
+        if input_api.is_windows:
+            go += '.exe'
+        input_api.subprocess.check_call_out([go, "test", "./..."],
+                                            stdout=input_api.subprocess.PIPE,
+                                            stderr=input_api.subprocess.PIPE,
+                                            cwd=input_api.PresubmitLocalPath())
     except input_api.subprocess.CalledProcessError as e:
         results.append(output_api.PresubmitError('%s' % (e, )))
     return results
diff --git a/webgpu-cts/PRESUBMIT.py b/webgpu-cts/PRESUBMIT.py
deleted file mode 100644
index 1280d5c..0000000
--- a/webgpu-cts/PRESUBMIT.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright 2022 The Dawn & Tint Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import sys
-
-USE_PYTHON3 = True
-
-
-def _DoCommonChecks(input_api, output_api):
-    sys.path += [input_api.change.RepositoryRoot()]
-
-    from go_presubmit_support import go_path
-
-    results = []
-    try:
-        tools_path = input_api.os_path.join(input_api.change.RepositoryRoot(),
-                                            'tools')
-        cts_bin = input_api.os_path.join(tools_path, 'bin', 'cts')
-
-        cmd = [
-            go_path(input_api), 'build', '-o', cts_bin,
-            input_api.os_path.join('.', 'cmd', 'cts')
-        ]
-        input_api.subprocess.check_call_out(cmd,
-                                            stdout=input_api.subprocess.PIPE,
-                                            stderr=input_api.subprocess.PIPE,
-                                            cwd=input_api.os_path.join(
-                                                tools_path, 'src'))
-
-        cmd = [cts_bin, 'validate']
-        input_api.subprocess.check_call_out(
-            cmd,
-            stdout=input_api.subprocess.PIPE,
-            stderr=input_api.subprocess.PIPE,
-            cwd=input_api.change.RepositoryRoot())
-    except input_api.subprocess.CalledProcessError as e:
-        results.append(output_api.PresubmitError('%s' % (e, )))
-    return results
-
-
-CheckChangeOnUpload = _DoCommonChecks
-CheckChangeOnCommit = _DoCommonChecks
