@ -46,21 +46,11 @@ class TaskBuilder(object):
self . date = arrow . get ( date_string )
self . date = arrow . get ( date_string )
self . trust_level = trust_level
self . trust_level = trust_level
def craft_assemble_release_task ( self , architectures , build_type , is_staging , version_name ) :
def craft_assemble_release_task ( self , variant , is_staging , version_name ) :
artifacts = {
' public/build/ {} /target.apk ' . format ( arch ) : {
" type " : ' file ' ,
" path " : ' /opt/fenix/app/build/outputs/apk/ '
' {arch} / {build_type} /app- {arch} - {build_type} -unsigned.apk ' . format ( arch = arch , build_type = build_type ) ,
" expires " : taskcluster . stringDate ( taskcluster . fromNow ( DEFAULT_EXPIRES_IN ) ) ,
}
for arch in architectures
}
if is_staging :
if is_staging :
secret_index = ' garbage/staging/project/mobile/fenix '
secret_index = ' garbage/staging/project/mobile/fenix '
else :
else :
secret_index = ' project/mobile/fenix/ {} ' . format ( build_type)
secret_index = ' project/mobile/fenix/ {} ' . format ( variant . build_type )
pre_gradle_commands = (
pre_gradle_commands = (
' python automation/taskcluster/helper/get-secret.py -s {} -k {} -f {} ' . format (
' python automation/taskcluster/helper/get-secret.py -s {} -k {} -f {} ' . format (
@ -70,11 +60,11 @@ class TaskBuilder(object):
( ' sentry_dsn ' , ' .sentry_token ' ) ,
( ' sentry_dsn ' , ' .sentry_token ' ) ,
( ' leanplum ' , ' .leanplum_token ' ) ,
( ' leanplum ' , ' .leanplum_token ' ) ,
( ' adjust ' , ' .adjust_token ' ) ,
( ' adjust ' , ' .adjust_token ' ) ,
( ' firebase ' , ' app/src/ {} /res/values/firebase.xml ' . format ( build_type) ) ,
( ' firebase ' , ' app/src/ {} /res/values/firebase.xml ' . format ( variant. build_type) ) ,
)
)
)
)
capitalized_build_type = upper_case_first_letter ( build_type)
capitalized_build_type = upper_case_first_letter ( variant. build_type)
gradle_commands = (
gradle_commands = (
' ./gradlew --no-daemon -PversionName= " {} " clean test assemble {} ' . format (
' ./gradlew --no-daemon -PversionName= " {} " clean test assemble {} ' . format (
version_name , capitalized_build_type ) ,
version_name , capitalized_build_type ) ,
@ -98,14 +88,14 @@ class TaskBuilder(object):
scopes = [
scopes = [
" secrets:get: {} " . format ( secret_index )
" secrets:get: {} " . format ( secret_index )
] ,
] ,
artifacts = artifacts,
artifacts = variant. artifacts( ) ,
routes = routes ,
routes = routes ,
treeherder = {
treeherder = {
' jobKind ' : ' build ' ,
' jobKind ' : ' build ' ,
' machine ' : {
' machine ' : {
' platform ' : ' android-all ' ,
' platform ' : ' android-all ' ,
} ,
} ,
' symbol ' : ' {} -A ' . format ( build_type) ,
' symbol ' : ' {} -A ' . format ( variant. build_type) ,
' tier ' : 1 ,
' tier ' : 1 ,
} ,
} ,
)
)
@ -115,19 +105,19 @@ class TaskBuilder(object):
' echo " https://fake@sentry.prod.mozaws.net/368 " > .sentry_token ' ,
' echo " https://fake@sentry.prod.mozaws.net/368 " > .sentry_token ' ,
' echo " -- " > .adjust_token ' ,
' echo " -- " > .adjust_token ' ,
' echo " -:- " > .leanplum_token ' ,
' echo " -:- " > .leanplum_token ' ,
' ./gradlew --no-daemon clean assemble {} ' . format ( variant . for_gradle_command ) ,
' ./gradlew --no-daemon clean assemble {} ' . format ( variant . name ) ,
) )
) )
return self . _craft_build_ish_task (
return self . _craft_build_ish_task (
name = ' assemble: {} ' . format ( variant . raw ) ,
name = ' assemble: {} ' . format ( variant . name ) ,
description = ' Building and testing variant {} ' . format ( variant . raw ) ,
description = ' Building and testing variant {} ' . format ( variant . name ) ,
command = command ,
command = command ,
artifacts = _craft_artifacts_from_variant( variant ) ,
artifacts = variant. artifacts ( ) ,
treeherder = {
treeherder = {
' groupSymbol ' : variant . build_type ,
' groupSymbol ' : variant . build_type ,
' jobKind ' : ' build ' ,
' jobKind ' : ' build ' ,
' machine ' : {
' machine ' : {
' platform ' : variant . platform ,
' platform ' : ' android-all ' ,
} ,
} ,
' symbol ' : ' A ' ,
' symbol ' : ' A ' ,
' tier ' : 1 ,
' tier ' : 1 ,
@ -135,49 +125,33 @@ class TaskBuilder(object):
)
)
def craft_assemble_pr_task ( self , variant ) :
def craft_assemble_pr_task ( self , variant ) :
assemble_gradle_command = ' assemble {} ' . format ( variant . for_gradle_command )
return self . _craft_clean_gradle_task (
return self . _craft_clean_gradle_task (
name = ' assemble: {} ' . format ( variant . raw ) ,
name = ' assemble: {} ' . format ( variant . name ) ,
description = ' Building and testing variant {} ' . format ( variant . raw ) ,
description = ' Building and testing variant {} ' . format ( variant . name ) ,
gradle_task = assemble_gradle_command ,
gradle_task = ' assemble {} ' . format ( variant . name ) ,
artifacts = _craft_artifacts_from_variant( variant ) ,
artifacts = variant. artifacts ( ) ,
treeherder = {
treeherder = {
' groupSymbol ' : variant . build_type ,
' groupSymbol ' : variant . build_type ,
' jobKind ' : ' build ' ,
' jobKind ' : ' build ' ,
' machine ' : {
' machine ' : {
' platform ' : variant . platform ,
' platform ' : ' android-all ' ,
} ,
} ,
' symbol ' : ' A ' ,
' symbol ' : ' A ' ,
' tier ' : 1 ,
' tier ' : 1 ,
}
}
)
)
def craft_test_pr_task ( self , variant , run_coverage = False ) :
def craft_test_pr_task ( self , variant ) :
test_gradle_command = ' -Pcoverage jacoco {} TestReport ' . format ( variant . for_gradle_command ) \
command = ' test {} UnitTest ' . format ( variant . name )
if ( run_coverage and variant . abi == ' aarch64 ' ) \
else ' test {} UnitTest ' . format ( variant . for_gradle_command )
post_gradle_command = ( ' automation/taskcluster/upload_coverage_report.sh ' if run_coverage else ' ' , )
if variant . abi == ' aarch64 ' :
command = ' && ' . join (
cmd
for commands in ( ( test_gradle_command , ) , post_gradle_command )
for cmd in commands
if cmd
)
else :
command = test_gradle_command
return self . _craft_clean_gradle_task (
return self . _craft_clean_gradle_task (
name = ' test: {} ' . format ( variant . raw ) ,
name = ' test: {} ' . format ( variant . name ) ,
description = ' Building and testing variant {} ' . format ( variant . raw ) ,
description = ' Building and testing variant {} ' . format ( variant . name ) ,
gradle_task = command ,
gradle_task = command ,
treeherder = {
treeherder = {
' groupSymbol ' : variant . build_type ,
' groupSymbol ' : variant . build_type ,
' jobKind ' : ' test ' ,
' jobKind ' : ' test ' ,
' machine ' : {
' machine ' : {
' platform ' : variant . platform ,
' platform ' : ' android-all ' ,
} ,
} ,
' symbol ' : ' T ' ,
' symbol ' : ' T ' ,
' tier ' : 1 ,
' tier ' : 1 ,
@ -491,27 +465,27 @@ class TaskBuilder(object):
) :
) :
staging_prefix = ' .staging ' if is_staging else ' '
staging_prefix = ' .staging ' if is_staging else ' '
routes = [
routes = [
" index.project.mobile.fenix.v2 {} .performance-test. {} . {} . {} .latest .{} " . format (
" index.project.mobile.fenix.v2 {} .performance-test. {} . {} . {} .latest " . format (
staging_prefix , self . date . year , self . date . month , self . date . day , variant . abi
staging_prefix , self . date . year , self . date . month , self . date . day
) ,
) ,
" index.project.mobile.fenix.v2 {} .performance-test. {} . {} . {} .revision. {} .{} ". format (
" index.project.mobile.fenix.v2 {} .performance-test. {} . {} . {} .revision. {} ". format (
staging_prefix , self . date . year , self . date . month , self . date . day , self . commit , variant . abi
staging_prefix , self . date . year , self . date . month , self . date . day , self . commit
) ,
) ,
" index.project.mobile.fenix.v2 {} .performance-test.latest .{} " . format ( staging_prefix , variant . abi ) ,
" index.project.mobile.fenix.v2 {} .performance-test.latest " . format ( staging_prefix ) ,
]
]
return self . _craft_signing_task (
return self . _craft_signing_task (
name = ' sign: {} ' . format ( variant . raw ) ,
name = ' sign: {} ' . format ( ' forPerformanceTest ' ) ,
description = ' Dep-signing variant {} ' . format ( variant . raw ) ,
description = ' Dep-signing variant {} ' . format ( ' forPerformanceTest ' ) ,
signing_type = " dep " ,
signing_type = " dep " ,
assemble_task_id = assemble_task_id ,
assemble_task_id = assemble_task_id ,
apk_paths = [ DEFAULT_APK_ARTIFACT_LOCATION ] ,
apk_paths = variant . upstream_artifacts ( ) ,
routes = routes ,
routes = routes ,
treeherder = {
treeherder = {
' groupSymbol ' : variant . build_type ,
' groupSymbol ' : ' forPerformanceTest ' ,
' jobKind ' : ' other ' ,
' jobKind ' : ' other ' ,
' machine ' : {
' machine ' : {
' platform ' : variant . platform ,
' platform ' : ' android-all ' ,
} ,
} ,
' symbol ' : ' As ' ,
' symbol ' : ' As ' ,
' tier ' : 1 ,
' tier ' : 1 ,
@ -553,7 +527,7 @@ class TaskBuilder(object):
)
)
def craft_push_task (
def craft_push_task (
self , signing_task_id , apk s, channel , is_staging = False , override_google_play_track = None
self , signing_task_id , apk _path s, channel , is_staging = False , override_google_play_track = None
) :
) :
payload = {
payload = {
" commit " : True ,
" commit " : True ,
@ -561,7 +535,7 @@ class TaskBuilder(object):
" certificate_alias " : ' fenix ' if is_staging else ' fenix- {} ' . format ( channel ) ,
" certificate_alias " : ' fenix ' if is_staging else ' fenix- {} ' . format ( channel ) ,
" upstreamArtifacts " : [
" upstreamArtifacts " : [
{
{
" paths " : apk s,
" paths " : apk _path s,
" taskId " : signing_task_id ,
" taskId " : signing_task_id ,
" taskType " : " signing "
" taskType " : " signing "
}
}
@ -596,11 +570,11 @@ class TaskBuilder(object):
def craft_raptor_tp6m_cold_task ( self , for_suite ) :
def craft_raptor_tp6m_cold_task ( self , for_suite ) :
def craft_function ( signing_task_id , mozharness_task_id , variant , gecko_revision , force_run_on_64_bit_device = False ) :
def craft_function ( signing_task_id , mozharness_task_id , abi , gecko_revision , force_run_on_64_bit_device = False ) :
return self . _craft_raptor_task (
return self . _craft_raptor_task (
signing_task_id ,
signing_task_id ,
mozharness_task_id ,
mozharness_task_id ,
variant ,
abi ,
gecko_revision ,
gecko_revision ,
name_prefix = ' raptor tp6m-cold- {} ' . format ( for_suite ) ,
name_prefix = ' raptor tp6m-cold- {} ' . format ( for_suite ) ,
description = ' Raptor tp6m cold on Fenix ' ,
description = ' Raptor tp6m cold on Fenix ' ,
@ -610,12 +584,12 @@ class TaskBuilder(object):
)
)
return craft_function
return craft_function
def craft_raptor_youtube_playback_task ( self , signing_task_id , mozharness_task_id , variant , gecko_revision ,
def craft_raptor_youtube_playback_task ( self , signing_task_id , mozharness_task_id , abi , gecko_revision ,
force_run_on_64_bit_device = False ) :
force_run_on_64_bit_device = False ) :
return self . _craft_raptor_task (
return self . _craft_raptor_task (
signing_task_id ,
signing_task_id ,
mozharness_task_id ,
mozharness_task_id ,
variant ,
abi ,
gecko_revision ,
gecko_revision ,
name_prefix = ' raptor youtube playback ' ,
name_prefix = ' raptor youtube playback ' ,
description = ' Raptor YouTube Playback on Fenix ' ,
description = ' Raptor YouTube Playback on Fenix ' ,
@ -629,7 +603,7 @@ class TaskBuilder(object):
self ,
self ,
signing_task_id ,
signing_task_id ,
mozharness_task_id ,
mozharness_task_id ,
variant ,
abi ,
gecko_revision ,
gecko_revision ,
name_prefix ,
name_prefix ,
description ,
description ,
@ -638,19 +612,19 @@ class TaskBuilder(object):
group_symbol = None ,
group_symbol = None ,
force_run_on_64_bit_device = False ,
force_run_on_64_bit_device = False ,
) :
) :
worker_type = ' gecko-t-bitbar-gw-perf-p2 ' if force_run_on_64_bit_device or variant. abi == ' aarch64 ' else ' gecko-t-bitbar-gw-perf-g5 '
worker_type = ' gecko-t-bitbar-gw-perf-p2 ' if force_run_on_64_bit_device or abi == ' aarch64 ' else ' gecko-t-bitbar-gw-perf-g5 '
if force_run_on_64_bit_device :
if force_run_on_64_bit_device :
treeherder_platform = ' android-hw-p2-8-0-arm7-api-16 '
treeherder_platform = ' android-hw-p2-8-0-arm7-api-16 '
elif variant. abi == ' arm ' :
elif abi == ' arm ' :
treeherder_platform = ' android-hw-g5-7-0-arm7-api-16 '
treeherder_platform = ' android-hw-g5-7-0-arm7-api-16 '
elif variant. abi == ' aarch64 ' :
elif abi == ' aarch64 ' :
treeherder_platform = ' android-hw-p2-8-0-android-aarch64 '
treeherder_platform = ' android-hw-p2-8-0-android-aarch64 '
else :
else :
raise ValueError ( ' Unsupported architecture " {} " ' . format ( variant. abi) )
raise ValueError ( ' Unsupported architecture " {} " ' . format ( abi) )
task_name = ' {} : {} {} ' . format (
task_name = ' {} : forPerformanceTest {} ' . format (
name_prefix , variant . raw , ' (on 64-bit-device) ' if force_run_on_64_bit_device else ' '
name_prefix , ' (on 64-bit-device) ' if force_run_on_64_bit_device else ' '
)
)
apk_url = ' {} / {} /artifacts/ {} ' . format ( _DEFAULT_TASK_URL , signing_task_id ,
apk_url = ' {} / {} /artifacts/ {} ' . format ( _DEFAULT_TASK_URL , signing_task_id ,
@ -667,7 +641,7 @@ class TaskBuilder(object):
" --download-symbols=ondemand " ,
" --download-symbols=ondemand " ,
] ]
] ]
# Bug 1558456 - Stop tracking youtube-playback-test on motoG5 for >1080p cases
# Bug 1558456 - Stop tracking youtube-playback-test on motoG5 for >1080p cases
if variant. abi == ' arm ' and test_name == ' raptor-youtube-playback ' :
if abi == ' arm ' and test_name == ' raptor-youtube-playback ' :
params_query = ' & ' . join ( ARM_RAPTOR_URL_PARAMS )
params_query = ' & ' . join ( ARM_RAPTOR_URL_PARAMS )
add_extra_params_option = " --test-url-params= {} " . format ( params_query )
add_extra_params_option = " --test-url-params= {} " . format ( params_query )
command [ 0 ] . append ( add_extra_params_option )
command [ 0 ] . append ( add_extra_params_option )
@ -744,16 +718,6 @@ class TaskBuilder(object):
)
)
def _craft_artifacts_from_variant ( variant ) :
return {
DEFAULT_APK_ARTIFACT_LOCATION : {
' type ' : ' file ' ,
' path ' : variant . apk_absolute_path ( ) ,
' expires ' : taskcluster . stringDate ( taskcluster . fromNow ( DEFAULT_EXPIRES_IN ) ) ,
}
}
def schedule_task ( queue , taskId , task ) :
def schedule_task ( queue , taskId , task ) :
print ( " TASK " , taskId )
print ( " TASK " , taskId )
print ( json . dumps ( task , indent = 4 , separators = ( ' , ' , ' : ' ) ) )
print ( json . dumps ( task , indent = 4 , separators = ( ' , ' , ' : ' ) ) )