1*cf78ab8cSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*cf78ab8cSAndroid Build Coastguard Worker# 3*cf78ab8cSAndroid Build Coastguard Worker# Copyright 2024 - The Android Open Source Project 4*cf78ab8cSAndroid Build Coastguard Worker# 5*cf78ab8cSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the', help="License"); 6*cf78ab8cSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*cf78ab8cSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*cf78ab8cSAndroid Build Coastguard Worker# 9*cf78ab8cSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*cf78ab8cSAndroid Build Coastguard Worker# 11*cf78ab8cSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*cf78ab8cSAndroid Build Coastguard Worker# distributed under the License is distributed on an', help="AS IS" BASIS, 13*cf78ab8cSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*cf78ab8cSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*cf78ab8cSAndroid Build Coastguard Worker# limitations under the License. 16*cf78ab8cSAndroid Build Coastguard Worker 17*cf78ab8cSAndroid Build Coastguard Workerimport logging 18*cf78ab8cSAndroid Build Coastguard Workerimport platform 19*cf78ab8cSAndroid Build Coastguard Workerfrom typing import Mapping 20*cf78ab8cSAndroid Build Coastguard Worker 21*cf78ab8cSAndroid Build Coastguard Workerfrom tasks.compile_install_task import CompileInstallTask 22*cf78ab8cSAndroid Build Coastguard Workerfrom tasks.compile_task import CompileTask 23*cf78ab8cSAndroid Build Coastguard Workerfrom tasks.configure_task import ConfigureTask 24*cf78ab8cSAndroid Build Coastguard Workerfrom tasks.install_emulator_task import InstallEmulatorTask 25*cf78ab8cSAndroid Build Coastguard Workerfrom tasks.run_pytest_task import RunPyTestTask 26*cf78ab8cSAndroid Build Coastguard Workerfrom tasks.run_test_task import RunTestTask 27*cf78ab8cSAndroid Build Coastguard Workerfrom tasks.task import Task 28*cf78ab8cSAndroid Build Coastguard Workerfrom tasks.zip_artifact_task import ZipArtifactTask 29*cf78ab8cSAndroid Build Coastguard Worker 30*cf78ab8cSAndroid Build Coastguard WorkerTASK_LIST = [ 31*cf78ab8cSAndroid Build Coastguard Worker "Configure", 32*cf78ab8cSAndroid Build Coastguard Worker "Compile", 33*cf78ab8cSAndroid Build Coastguard Worker "CompileInstall", 34*cf78ab8cSAndroid Build Coastguard Worker "RunTest", 35*cf78ab8cSAndroid Build Coastguard Worker "ZipArtifact", 36*cf78ab8cSAndroid Build Coastguard Worker "InstallEmulator", 37*cf78ab8cSAndroid Build Coastguard Worker "RunPyTest", 38*cf78ab8cSAndroid Build Coastguard Worker "LocalRunAll", 39*cf78ab8cSAndroid Build Coastguard Worker] 40*cf78ab8cSAndroid Build Coastguard Worker 41*cf78ab8cSAndroid Build Coastguard Worker 42*cf78ab8cSAndroid Build Coastguard Workerdef log_enabled_tasks(tasks): 43*cf78ab8cSAndroid Build Coastguard Worker enabled_tasks = [ 44*cf78ab8cSAndroid Build Coastguard Worker task_name for task_name, task in tasks.items() if task.enabled 45*cf78ab8cSAndroid Build Coastguard Worker ] 46*cf78ab8cSAndroid Build Coastguard Worker logging.info(f"Enabled Tasks are {enabled_tasks}") 47*cf78ab8cSAndroid Build Coastguard Worker 48*cf78ab8cSAndroid Build Coastguard Worker 49*cf78ab8cSAndroid Build Coastguard Workerdef get_tasks(args, env) -> Mapping[str, Task]: 50*cf78ab8cSAndroid Build Coastguard Worker """A list of tasks that should be executed""" 51*cf78ab8cSAndroid Build Coastguard Worker 52*cf78ab8cSAndroid Build Coastguard Worker # Mapping of tasks 53*cf78ab8cSAndroid Build Coastguard Worker tasks = { 54*cf78ab8cSAndroid Build Coastguard Worker "Configure": ConfigureTask(args, env), 55*cf78ab8cSAndroid Build Coastguard Worker "Compile": CompileTask(args, env), 56*cf78ab8cSAndroid Build Coastguard Worker "CompileInstall": CompileInstallTask(args, env), 57*cf78ab8cSAndroid Build Coastguard Worker "RunTest": RunTestTask(args, env), 58*cf78ab8cSAndroid Build Coastguard Worker "ZipArtifact": ZipArtifactTask(args), 59*cf78ab8cSAndroid Build Coastguard Worker "InstallEmulator": InstallEmulatorTask(args), 60*cf78ab8cSAndroid Build Coastguard Worker "RunPyTest": RunPyTestTask(args), 61*cf78ab8cSAndroid Build Coastguard Worker } 62*cf78ab8cSAndroid Build Coastguard Worker 63*cf78ab8cSAndroid Build Coastguard Worker # Enable all tasks for buidlbots 64*cf78ab8cSAndroid Build Coastguard Worker if args.buildbot: 65*cf78ab8cSAndroid Build Coastguard Worker for task_name in [ 66*cf78ab8cSAndroid Build Coastguard Worker "Configure", 67*cf78ab8cSAndroid Build Coastguard Worker "CompileInstall", 68*cf78ab8cSAndroid Build Coastguard Worker "RunTest", 69*cf78ab8cSAndroid Build Coastguard Worker "ZipArtifact", 70*cf78ab8cSAndroid Build Coastguard Worker "InstallEmulator", 71*cf78ab8cSAndroid Build Coastguard Worker "RunPyTest", 72*cf78ab8cSAndroid Build Coastguard Worker ]: 73*cf78ab8cSAndroid Build Coastguard Worker tasks[task_name].enable(True) 74*cf78ab8cSAndroid Build Coastguard Worker return tasks 75*cf78ab8cSAndroid Build Coastguard Worker 76*cf78ab8cSAndroid Build Coastguard Worker if args.task: 77*cf78ab8cSAndroid Build Coastguard Worker # Enable user specified tasks 78*cf78ab8cSAndroid Build Coastguard Worker for args_task_name in args.task: 79*cf78ab8cSAndroid Build Coastguard Worker if args_task_name.lower() == "localrunall": 80*cf78ab8cSAndroid Build Coastguard Worker # We don't need installation process when running locally 81*cf78ab8cSAndroid Build Coastguard Worker for task_name in [ 82*cf78ab8cSAndroid Build Coastguard Worker "Configure", 83*cf78ab8cSAndroid Build Coastguard Worker "Compile", 84*cf78ab8cSAndroid Build Coastguard Worker "RunTest", 85*cf78ab8cSAndroid Build Coastguard Worker "InstallEmulator", 86*cf78ab8cSAndroid Build Coastguard Worker "RunPyTest", 87*cf78ab8cSAndroid Build Coastguard Worker ]: 88*cf78ab8cSAndroid Build Coastguard Worker tasks[task_name].enable(True) 89*cf78ab8cSAndroid Build Coastguard Worker break 90*cf78ab8cSAndroid Build Coastguard Worker elif args_task_name.lower() == "configure": 91*cf78ab8cSAndroid Build Coastguard Worker tasks["Configure"].enable(True) 92*cf78ab8cSAndroid Build Coastguard Worker elif args_task_name.lower() == "compile": 93*cf78ab8cSAndroid Build Coastguard Worker tasks["Compile"].enable(True) 94*cf78ab8cSAndroid Build Coastguard Worker elif args_task_name.lower() == "compileinstall": 95*cf78ab8cSAndroid Build Coastguard Worker tasks["CompileInstall"].enable(True) 96*cf78ab8cSAndroid Build Coastguard Worker elif args_task_name.lower() == "runtest": 97*cf78ab8cSAndroid Build Coastguard Worker tasks["RunTest"].enable(True) 98*cf78ab8cSAndroid Build Coastguard Worker elif args_task_name.lower() == "zipartifact": 99*cf78ab8cSAndroid Build Coastguard Worker tasks["ZipArtifact"].enable(True) 100*cf78ab8cSAndroid Build Coastguard Worker elif args_task_name.lower() == "installemulator": 101*cf78ab8cSAndroid Build Coastguard Worker tasks["InstallEmulator"].enable(True) 102*cf78ab8cSAndroid Build Coastguard Worker elif args_task_name.lower() == "fullbuild": 103*cf78ab8cSAndroid Build Coastguard Worker tasks["Configure"].enable(True) 104*cf78ab8cSAndroid Build Coastguard Worker tasks["Compile"].enable(True) 105*cf78ab8cSAndroid Build Coastguard Worker tasks["InstallEmulator"].enable(True) 106*cf78ab8cSAndroid Build Coastguard Worker elif args_task_name.lower() == "runpytest": 107*cf78ab8cSAndroid Build Coastguard Worker tasks["RunPyTest"].enable(True) 108*cf78ab8cSAndroid Build Coastguard Worker else: 109*cf78ab8cSAndroid Build Coastguard Worker logging.error(f"Unknown task: {args_task_name}") 110*cf78ab8cSAndroid Build Coastguard Worker else: 111*cf78ab8cSAndroid Build Coastguard Worker # If task argument isn't passed, only enable ConfigureTask 112*cf78ab8cSAndroid Build Coastguard Worker tasks["Configure"].enable(True) 113*cf78ab8cSAndroid Build Coastguard Worker return tasks 114