@ -7,10 +7,9 @@ from __future__ import print_function
import arrow
import datetime
import json
import os
import taskcluster
from lib . util import convert_camel_case_into_kebab_case, lower_case_first_letter
from lib . util import upper_case_first_letter, convert_camel_case_into_kebab_case, lower_case_first_letter
DEFAULT_EXPIRES_IN = ' 1 year '
DEFAULT_APK_ARTIFACT_LOCATION = ' public/target.apk '
@ -41,26 +40,29 @@ class TaskBuilder(object):
self . date = arrow . get ( date_string )
self . trust_level = trust_level
def craft_assemble_ nightly_task( self , architectures , is_staging = Fals e) :
def craft_assemble_ release_task( self , architectures , track , is_staging , version_nam e) :
artifacts = {
' public/target. {} .apk ' . format ( arch ) : {
" type " : ' file ' ,
" path " : ' /opt/fenix/app/build/outputs/apk/ '
' { }/nightly/app- {} -nightly-unsigned.apk ' . format ( arch , arch ) ,
' { arch}/ {track} /app- {arch} - {track} -unsigned.apk ' . format ( arch = arch , track = track ) ,
" expires " : taskcluster . stringDate ( taskcluster . fromNow ( DEFAULT_EXPIRES_IN ) ) ,
}
for arch in architectures
}
sentry_secret = ' {} project/mobile/fenix/sentry ' . format (
' garbage/staging/ ' if is_staging else ' '
)
leanplum_secret = ' {} project/mobile/fenix/leanplum ' . format (
' garbage/staging/ ' if is_staging else ' '
)
adjust_secret = ' {} project/mobile/fenix/adjust ' . format (
' garbage/staging/ ' if is_staging else ' '
)
def secret_index ( name ) :
if is_staging :
return ' garbage/staging/project/mobile/fenix/ {} ' . format ( name )
elif track == ' nightly ' :
# TODO: Move nightly secrets to "project/mobile/fenix/nightly/..."
return ' project/mobile/fenix/ {} ' . format ( name )
else :
return ' project/mobile/fenix/ {} / {} ' . format ( track , name )
sentry_secret = secret_index ( ' sentry ' )
leanplum_secret = secret_index ( ' leanplum ' )
adjust_secret = secret_index ( ' adjust ' )
pre_gradle_commands = (
' python automation/taskcluster/helper/get-secret.py -s {} -k {} -f {} ' . format (
@ -69,12 +71,14 @@ class TaskBuilder(object):
for secret , key , target_file in (
( sentry_secret , ' dsn ' , ' .sentry_token ' ) ,
( leanplum_secret , ' production ' , ' .leanplum_token ' ) ,
( adjust_secret , ' Greenfield ' , ' .adjust_token ' ) ,
( adjust_secret , ' adjust ' , ' .adjust_token ' ) ,
)
)
capitalized_track = upper_case_first_letter ( track )
gradle_commands = (
' ./gradlew --no-daemon -PcrashReports=true -Ptelemetry=true clean test assembleNightly ' ,
' ./gradlew --no-daemon -PcrashReports=true -Ptelemetry=true -PversionName= {} clean test assemble {} ' . format (
version_name , capitalized_track ) ,
)
command = ' && ' . join (
@ -89,8 +93,8 @@ class TaskBuilder(object):
]
return self . _craft_build_ish_task (
name = ' Build task' ,
description = ' Build Fenix from source code' ,
name = ' Build {} task' . format ( capitalized_track ) ,
description = ' Build Fenix {} from source code' . format ( capitalized_track ) ,
command = command ,
scopes = [
" secrets:get: {} " . format ( secret ) for secret in ( sentry_secret , leanplum_secret , adjust_secret )
@ -100,9 +104,9 @@ class TaskBuilder(object):
treeherder = {
' jobKind ' : ' build ' ,
' machine ' : {
' platform ' : ' android-all ' ,
' platform ' : ' android-all ' ,
} ,
' symbol ' : ' NA ' ,
' symbol ' : ' {} -A ' . format ( track ) ,
' tier ' : 1 ,
} ,
)
@ -175,7 +179,7 @@ class TaskBuilder(object):
return self . _craft_clean_gradle_task (
name = ' lint ' ,
description = ' Running lint for aarch64 release variant ' ,
gradle_task = ' lint Aarch64Nightly ' ,
gradle_task = ' lint Debug ' ,
treeherder = {
' jobKind ' : ' test ' ,
' machine ' : {
@ -277,13 +281,13 @@ class TaskBuilder(object):
}
return self . _craft_default_task_definition (
worker_type = ' mobile-signing-dep-v1 ' if signing_type == ' dep -signing ' else ' mobile-signing-v1 ' ,
worker_type = ' mobile-signing-dep-v1 ' if signing_type == ' dep ' else ' mobile-signing-v1 ' ,
provisioner_id = ' scriptworker-prov-v1 ' ,
dependencies = [ assemble_task_id ] ,
routes = routes ,
scopes = [
" project:mobile:fenix:releng:signing:format: {} " . format ( signing_format ) ,
" project:mobile:fenix:releng:signing:cert: {} ". format ( signing_type ) ,
" project:mobile:fenix:releng:signing:cert: {} -signing ". format ( signing_type ) ,
] ,
name = name ,
description = description ,
@ -365,7 +369,7 @@ class TaskBuilder(object):
return self . _craft_signing_task (
name = ' sign: {} ' . format ( variant ) ,
description = ' Dep-signing variant {} ' . format ( variant ) ,
signing_type = " dep -signing " ,
signing_type = " dep " ,
assemble_task_id = assemble_task_id ,
apk_paths = [ " public/target.apk " ] ,
routes = routes ,
@ -380,24 +384,26 @@ class TaskBuilder(object):
} ,
)
def craft_ nightly _signing_task(
self , build_task_id , apk_paths , is_staging= Tru e,
def craft_ release _signing_task(
self , build_task_id , apk_paths , track, is_staging = Fals e,
) :
index_release = ' staging-signed-nightly ' if is_staging else ' signed-nightly '
capitalized_track = upper_case_first_letter ( track )
index_release = ' staging. {} ' . format ( track ) if is_staging else track
routes = [
" index.project.mobile.fenix. {} .nightly. {} . {} . {} .latest " . format (
" index.project.mobile.fenix. v2. {} .{} . {} . {} .latest " . format (
index_release , self . date . year , self . date . month , self . date . day
) ,
" index.project.mobile.fenix. {} .nightly .{} . {} . {} .revision. {} " . format (
" index.project.mobile.fenix. v2. {} .{} . {} . {} .revision. {} " . format (
index_release , self . date . year , self . date . month , self . date . day , self . commit
) ,
" index.project.mobile.fenix. {} .nightly .latest" . format ( index_release ) ,
" index.project.mobile.fenix. v2. {} .latest" . format ( index_release ) ,
]
return self . _craft_signing_task (
name = " Signing task" ,
description = " Sign release builds of Fenix" ,
signing_type = " dep -signing " if is_staging else " release-signing " ,
name = " Signing {} task" . format ( capitalized_track ) ,
description = " Sign {} builds of Fenix " . format ( capitalized_track ) ,
signing_type = " dep " if is_staging else track ,
assemble_task_id = build_task_id ,
apk_paths = apk_paths ,
routes = routes ,
@ -406,17 +412,17 @@ class TaskBuilder(object):
' machine ' : {
' platform ' : ' android-all ' ,
} ,
' symbol ' : ' Ns ' ,
' symbol ' : ' {} -s ' . format ( track ) ,
' tier ' : 1 ,
} ,
)
def craft_push_task (
self , signing_task_id , apks , is_staging= Tru e
self , signing_task_id , apks , track, is_staging = Fals e
) :
payload = {
" commit " : True ,
" google_play_track " : ' nightly ' ,
" google_play_track " : track ,
" upstreamArtifacts " : [
{
" paths " : apks ,
@ -444,7 +450,7 @@ class TaskBuilder(object):
' machine ' : {
' platform ' : ' android-all ' ,
} ,
' symbol ' : ' gp' ,
' symbol ' : ' {} - gp' . format ( track ) ,
' tier ' : 1 ,
} ,
)