forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			107 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # This Source Code Form is subject to the terms of the Mozilla Public
 | |
| # License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | |
| 
 | |
| 
 | |
| from taskgraph.util.attributes import (
 | |
|     match_run_on_git_branches,
 | |
|     match_run_on_projects,
 | |
|     match_run_on_tasks_for,
 | |
| )
 | |
| 
 | |
| _target_task_methods = {}
 | |
| 
 | |
| _GIT_REFS_HEADS_PREFIX = "refs/heads/"
 | |
| 
 | |
| 
 | |
| def _target_task(name):
 | |
|     def wrap(func):
 | |
|         _target_task_methods[name] = func
 | |
|         return func
 | |
| 
 | |
|     return wrap
 | |
| 
 | |
| 
 | |
| def get_method(method):
 | |
|     """Get a target_task_method to pass to a TaskGraphGenerator."""
 | |
|     return _target_task_methods[method]
 | |
| 
 | |
| 
 | |
| def filter_out_cron(task, parameters):
 | |
|     """
 | |
|     Filter out tasks that run via cron.
 | |
|     """
 | |
|     return not task.attributes.get("cron")
 | |
| 
 | |
| 
 | |
| def filter_for_project(task, parameters):
 | |
|     """Filter tasks by project.  Optionally enable nightlies."""
 | |
|     run_on_projects = set(task.attributes.get("run_on_projects", []))
 | |
|     return match_run_on_projects(parameters["project"], run_on_projects)
 | |
| 
 | |
| 
 | |
| def filter_for_tasks_for(task, parameters):
 | |
|     run_on_tasks_for = set(task.attributes.get("run_on_tasks_for", ["all"]))
 | |
|     return match_run_on_tasks_for(parameters["tasks_for"], run_on_tasks_for)
 | |
| 
 | |
| 
 | |
| def filter_for_git_branch(task, parameters):
 | |
|     """Filter tasks by git branch.
 | |
|     If `run_on_git_branch` is not defined, then task runs on all branches"""
 | |
|     # We cannot filter out on git branches if we not on a git repository
 | |
|     if parameters.get("repository_type") != "git":
 | |
|         return True
 | |
| 
 | |
|     # Pull requests usually have arbitrary names, let's not filter git branches on them.
 | |
|     if parameters["tasks_for"] == "github-pull-request":
 | |
|         return True
 | |
| 
 | |
|     run_on_git_branches = set(task.attributes.get("run_on_git_branches", ["all"]))
 | |
|     git_branch = parameters["head_ref"]
 | |
|     if git_branch.startswith(_GIT_REFS_HEADS_PREFIX):
 | |
|         git_branch = git_branch[len(_GIT_REFS_HEADS_PREFIX) :]
 | |
| 
 | |
|     return match_run_on_git_branches(git_branch, run_on_git_branches)
 | |
| 
 | |
| 
 | |
| def filter_out_shipping_phase(task, parameters):
 | |
|     return task.attributes.get("shipping_phase") in (None, "build")
 | |
| 
 | |
| 
 | |
| def standard_filter(task, parameters):
 | |
|     return all(
 | |
|         filter_func(task, parameters)
 | |
|         for filter_func in (
 | |
|             filter_out_cron,
 | |
|             filter_out_shipping_phase,
 | |
|             filter_for_project,
 | |
|             filter_for_tasks_for,
 | |
|             filter_for_git_branch,
 | |
|         )
 | |
|     )
 | |
| 
 | |
| 
 | |
| @_target_task("default")
 | |
| def target_tasks_default(full_task_graph, parameters, graph_config):
 | |
|     """Target the tasks which have indicated they should be run on this project
 | |
|     via the `run_on_projects` attributes."""
 | |
|     return [
 | |
|         l for l, t in full_task_graph.tasks.items() if standard_filter(t, parameters)
 | |
|     ]
 | |
| 
 | |
| 
 | |
| @_target_task("codereview")
 | |
| def target_tasks_codereview(full_task_graph, parameters, graph_config):
 | |
|     """Target the tasks which have indicated they should be run on this project
 | |
|     via the `run_on_projects` attributes."""
 | |
|     return [
 | |
|         l
 | |
|         for l, t in full_task_graph.tasks.items()
 | |
|         if standard_filter(t, parameters) and t.attributes.get("code-review")
 | |
|     ]
 | |
| 
 | |
| 
 | |
| @_target_task("nothing")
 | |
| def target_tasks_nothing(full_task_graph, parameters, graph_config):
 | |
|     """Select nothing, for DONTBUILD pushes"""
 | |
|     return []
 | 
