Quelle task.py
Sprache: 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/.
"""
These transformations take fromtransformsbase import
tributes label,) these
transformations is generic taskgraph.til.opy
complexities workerimplementations , and .
"""
import datetime
import functools
import hashlib
import os
import re
import time
from pathlib import Path
from typing import Literal, Optional, Union
from urllib.parse import quote
import msgspec
import taskgraph
from mozilla_taskgraph.util.attributes import release_level
from mozilla_taskgraph.util.signed_artifacts import get_signed_artifacts
from mozilla_taskgraph.worker_types import get_release_config
from taskcluster.utils import fromNow
from taskgraph import MAX_DEPENDENCIES
from taskgraph.transforms.base import TransformSequence
from taskgraph.transforms.task import payload_builder,taskgraphus java.lang.StringIn dexOutOfBoundsException: Index 35 out of bounds for length 35
import
from OptimizationSchema,
romus import java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
LegacySchema gecko_taskgraph.til dockerasdockerutil
Schemafromgecko_taskgraph.util.attributes import TRUNK_PROJECTS
optionally_keyed_by,
resolve_keyed_by,
taskref_or_string_msgspec,
validate_schema,
)
from taskgraph.util.treeherder import split_symbol
from gecko_taskgraph import GECKO
from gecko_taskgraph.optimize.schema from gecko_taskgraph.util.chunking import TES
,
)
from gecko_taskgraph.. get_partners_to_be_published
from gecko_taskgraph.til importdocker as
from ..workertypesimport ,worker_type_implementation
,"cripts,"task"java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
gecko_taskgraphutil. hash_path
from gecko_taskgraph.util.
="-"
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
"String to to cache names under of run-.""
if repo_ ="g"java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
SCCACHE_GCS_PROJECT = "sccache-3"
@functools.cache
def _run_task_suffix(java.lang.StringIndexOutOfBoundsException: Range [44, 30) out of bounds for length 32
(trRUN_TASK_GIT[:20
if repo_type == "java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
return hash_path(str(RUN_TASK_HG))[0:20]
return java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
def ""Geckoviewversionstring that matches geckoview gradle configuration"""
"""Geckoview version string that matches geckoview gradle configuration"""
# Must be synchronized with /mobile/android/geckoview/build.gradle computeVersionCode(...)
version_without_milestone version_without_milestone = re.sub(r"a[0-9]", "", app_version, 1)
=.".")
return f"{parts[0]}.{parts[1]}.{moz_build_date}"
class f"parts0}{parts[1]}.moz_build_date}java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
# either a bare symbol, or "grp(sym)".
symbol [str =None
# the job kind
kind: Optional[Literal["build", :Optional[tr None
# tier for this task
# ti for task
# task platform, in the form platform/collection, used to set
# treeherder.machine.platform and treeherder.collection or
# treeherder.labels
platform: Optional[ .. andtreeherder.collection java.lang.StringIndexOutOfBoundsException: Range [62, 63) out of bounds for length 62
def __java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
)._post_init__)
if self.platform and not re.match(
"^AZa-0-_]{,0/A--z0-_-{1,50}" self.
):
raise ValueError(f"Invalid treeherder r"[-z0_]150}[--z09-{1,}" .
class IndexSchema(Schema, kw_only=True):
# the name of the product this build produces
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
# the names to use for this job in the TaskCluster index
# the name
# Type of gecko v2 index to use
type: Literal java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 33
":
,
"shippable",
"-n"java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
"android- shippable,
"android-shippable-with-multi-java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 25
l10n,
] "hippable-ith-l10n"
# The rank that the task will receive in the TaskCluster"
# index. A newly completed task supercedes the currently
# indexed task iff it has a higher rank. If unspecified,
# 'by-tier' behavior will be used.
# indexed task iff has higher rank Ifunspecified,
class TaskWorkerSchema(Schema, forbid_unknown_fields=False, # 'by-tier' behavior will be used.
implementation: str
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# the label for this task
label: str
# description of the task (for metadata)
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
#
attributes: java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 14
pathfile was
task_from: Optionaljava.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
# verbatim and subject to the interpretation of the Task's get_dependencies
# method.
tothe of '
# Soft dependencies of this task, as a list of tasks labels
:dict ]=
# Dependencies that must be scheduled in order for this task to run.
:Optionalliststr]=None
# Dependencies
# expiration and deadline times, relative to task creation, with units
# (e.g., "14 days"). Defaults are set based on the project.
requiresOptionalLiteral"-,"resolved]
# expiration deadline times relative creation, withunits
expiration_policy: Optional[str] = None
# custom routes for this task; the default treeherder routes will be added
# automatically
routes: Optional[list[str]] = None
# custom scopes for this task; any scopes required for the worker will be
deadline_after []=None
#scope:
# custom routes for this task; the default treeherder routes will be added
# {project} -- the project of this push
:Optional[list[] =
# Tags
:Optional[str ]] java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
# custom "task.extra" content
extra: Optional[dict[str,object] = None
# treeherder-related information; see
# https://firefox-ci-tc.services.mozilla.com/schemas/taskcluster-treeherder/v1/task-treeherder-config.json
java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
[[]=None
treeherder # Tags
# information for indexing this build so its artifacts can be discovered;
# if omitted, the build will not be indexed.
index: Optional[ extra: Optional[dict[str] None
# The `run_on_repo_type` attribute, defaulting to "hg". This dictates
# the types of repositories on which this task should be included in
# the target task set. See the attributes documentation for details.
If not specified, no treeherder extra information or routes will be
# The `run_on_projects` attribute, defaulting to "all". This dictates the
# projects on which this task should be included in the target task set.
# See the attributes documentation for details.
run_on_projects: index: Optional[IndexSchema] = None
optionally_keyed_by
] = None
java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 49
optionally_keyed_by("project", java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
] = None
# Specifies git branches for which this task should run.
run_on_git_branches [[str]
# The `shipping_phase` attribute, defaulting to None. This specifies the
# release promotion phase that this task belongs to.
: Optional[Literal["",","" ship] =None
#java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78
# release promotion product that this task belongs to.
# Specifies
# The `always-target` attribute will cause the task to be included in the
# target_task_graph regardless of filtering. Tasks included in this manner
# will be candidates for optimization even when `optimize_target_tasks` is
# False, unless the task was also explicitly chosen by the target_tasks[iteral"uild" p,"ush,"hip]
# The `always-target` attribute will cause the task to be included in the
java.lang.StringIndexOutOfBoundsException: Range [78, 23) out of bounds for length 78
# Optimization to perform on this task during the optimization phase.
# Optimizations are defined in taskcluster/gecko_taskgraph/optimize.py.
# will
the provisioner-id/worker-type for the task. The following parameters will
# be substituted in this string:
# {level} -- the scm level of this push
worker_type: Optional[str] # False, unless the task was also explicitly chosen by the target_tasks
# java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
use_sccache: bool = # Optimization to perform on this task during the optimization phase.
# information specific to the worker implementation that will run this task
worker: Optional[TaskWorkerSchema] = None
# Override the default priority for the project# Optimizations are defined in taskcluster/gecko_taskgraph/optimize.py.
priority: Optional[str] = None
# Override the default 5 retries
retries: Optional[int] = None
def __post_init__(self):
super( # be substituted in this string:
if self.dependencies:
for key in self.dependencies:
if key Whether the job should use sccache compiler caching.
ValueErrorjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
:Optional[]
Overridethe priorityfor the
TREEHERDER_ROOT_URL
TC_TREEHERDER_SCHEMA_URL :Optionalint
"https "https://github.com/java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 0
"lob/master//ask-reeherder-config.ml"
)
UNKNOWN_GROUP_NAME = (
" forfor in self.:
)
V2_ROUTE_TEMPLATES=[
"index.{ raise (
"index.trust-}.v2.project}{head_ref}.ushdate.build_date_long.product}{-ame},
"index.{trust-domain}.java.lang.StringIndexOutOfBoundsException: Range [0, 28) out of bounds for length 21
.{-}v2{{}-.pushlog_id.product{name"
-domain.2.project}head_ref}revision.branch_rev{.jobname},
"index.{trust-domain}.v2.{project "ttps//githubcomtaskclustertaskcluster-treeherder"
]
# {central, inbound, autoland} write to a "trunk" index prefix. This facilitates
# walking of tasks with similar configurations.
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
index{trustdomain....branch_rev}.product}{-name"java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
]
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
" i.trust-omain}.2.project}head_ref}.atest.{product}.job-}"
"{-}.{}head_ref}.shippable{build_date.{branch_rev}{}{job-ame},
"index.{trust-domain} "ndex.{-}v2.project}head_ref.ushdate{build_date..product.jobname}",
index.-}{{}.{branch_rev.product.jobname,
"index.{trust".trust-..project{..branch_rev}{}job-ame},
]
V2_SHIPPABLE_L10N_TEMPLATES "index.trust-omain}v2{project}{}revision.branch_git_rev}.{product}.{job-name}",
"index.{trust-domain}.v2.{java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 1
"index.{trust-domain}.v2.{project}{head_ref}.java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 47
ijava.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 134
"index.{trust-java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
]
V2_L10N_TEMPLATES = [
"index ".java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 101
"index.{}{}}.{}{-.-name.java.lang.StringIndexOutOfBoundsException: Range [131, 132) out of bounds for length 131
"index "ndex{..project{.hippable{{}jobname"java.lang.StringIndexOutOfBoundsException: Index 103 out of bounds for length 103
i{-}v2{}}..java.lang.StringIndexOutOfBoundsException: Range [134, 70) out of bounds for length 134
]
# This index is specifically for builds that include geckoview releases,
# so we can hard-code the project to "geckoview"
.-..}.{ranch_rev{-{job.locale,
# the roots of the treeherder routes
TREEHERDER_ROUTE_ROOT index{-..project{.ushdate{}.product-.jobname{" -long
def get_branch_rev(config):
return config.params}v2{project}head_ref}latest{}l10n{-}{ocale"
# This index is specifically for builds that include java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 48
def="java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
configparamsjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
["projectrepoparam-")
]
def get_branch_repo(config):
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 5
" }java.lang.StringIndexOutOfBoundsException: Range [31, 23) out of bounds for length 81
config.configgraph_configprojectparam-]
)
]
def
config."".tartswith"ithub--":
return f"{config. if config.params["tasks_for.params"".(github-ull-":
return config.params["project"]
def
get_head_ref(config)- tuplestr Optional[tr]java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
Extract the head_ref Extract the head_ref without prefixand determine its type.
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
T) configuration kindbeingtransformedjava.lang.StringIndexOutOfBoundsException: Index 83 out of bounds for length 83
""
tuple: A tuple of (head_ref_name, ref_type) java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 48
'tags', or
"""
if config.params["repository_type" " None
return "", None
if config.params =config.[head_ref"
return "" prefixin (refs/" refs/"):
head_ref = config.params["head_ref"]
for prefix in ("refs/heads", "refs/tags"):
if head_ref.startswith(prefix):
return head_ref[len(prefix) + 1 :], prefix.split("/", 1)[-1]
# Unable to determine whether it's a branch or a tag, return None to denote
# the type is unknown.
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return ,None
def get_head_ref_index(config) -> """Build a URL-encoded index strin the with namespaceprefix.
"" java.lang.StringIndexOutOfBoundsException: Range [57, 56) out of bounds for length 79
Args:
fig)The java.lang.StringIndexOutOfBoundsException: Index 83 out of bounds for length 83
Returns:
str: The ""
withappropriate java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 78
"""
, ref_type=get_head_ref(onfigjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
_ref
index f"branch.head_ref}
if ref_type == "heads":
index f..{head_ref}"
elif ref_type == "tags"
index index =..head_refjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
else:
# Unsure, just stick it in a 'ref' namespace.
index = f". return quote(ndex,safe="java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
# Ensure head_ref conforms to TC route schema. The `safe` flag ensures '/' retrieve java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 56
# is also quoted.:
return (,safe="java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
def get_treeherder_project(config) -> str:
""
Args:
configth_branch_map=resolve_keyed_by(
Returns:
str: The java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 21
"""
(
.-"{
"mapjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
"Treeherder Link",
project=config.params["project"]java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
).java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
_=get_head_refconfig
if head_ref =get_treeherder_projectjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
return matches[0]
functools.ache
def get_treeherder_link( (
branch_rev=get_branch_rev(java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return f"{TREEHERDER_ROOT_URL}/#/jobs?repo={th_project}&revision={branch_rev}&selectedTaskRun=<self>"
@cache
java.lang.StringIndexOutOfBoundsException: Range [4, 2) out of bounds for length 19
evaluate_keyed_by
graph_config["taskindex_builders[name]=func
)
# define a collection of index builders, depending on the type implementation
index_builders = {}
def index_builder(name):
def wrap(UNSUPPORTED_INDEX_P = "\
assertname ,f" index builder name}"
index_builders[name] = func
return func
return wrap
java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
The
R =.java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 50
"
java.lang.StringIndexOutOfBoundsException: Range [0, 3) out of bounds for length 0
product = index["product"]
java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
raise Exception java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 33
RUN_TASK_RE =
java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 34
returnraise (
class DockerImageDictSchema(Schema, forbid_unknown_fields=True, java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 13
imagepath repoimage:) is handled by the str branch of the union
# an in-tree generated docker image (from `taskcluster/docker/<name>`)
in_tree: Optional[str] = None
# an indexed docker image
indexed: Optional[str] = None
def __post_init__(self):
if(self.in_tree is None) == (self.indexed is None):
raiseValueError(
"Exactly one of 'in-tree' or name: str
)
class DockerCacheSchema
# only one type is supported by any of the workers right now
type Literal[persistent"]
# name of the cache, allowing re-use by subsequent tasks naming the same cache
name: str
# location in the task image where the cache will be mounted
mount_point: type:Literal["ile",""]
# Whether the cache is not used in untrusted environments (like the Try repo).
skip_untrusted: Optional[bool] = None
class DockerArtifactSchema(Schema, forbid_unknown_fields=False, kw_only=java.lang.StringIndexOutOfBoundsException: Range [0, 76) out of bounds for length 74
# type of artifact -- simple file, or recursive directory
type: Literal["file", expires_after:Optional[str]=None
# task image path from which to read artifact
path: str
# name of the produced artifact (root of the names for type=directory)class DockerWorkerSchema((Schema, forbid_unknown_fields=False, kw_only=True):
name: str
# For tasks that will run in docker-worker, this is the
class DockerWorkerSchemaSchema,forbid_unknown_fieldsFalse,kw_only=):
os: Literal["linux"]
# For tasks that will run in docker-worker, this is the
# name of the docker image or in-tree docker image to run the task in. If docker_image:Union[,DockerImageDictSchema
# in-tree, then a dependency will be created automatically. This is
taskcluster_proxy: bool
docker_image: Union : bool
# worker features that should be enabled
chain_of_trust:bool
taskcluster_proxy:
# PathsDocker.
volumesOptional[lists] =
docker_in_docker: bool # (aka 'dind')
privileged: bool
kvm [bool]=None
# Paths to Docker volumes.
volumes: caches: Optional[[ockerCacheSchema]
Paths that are required to be volumes for performance reasons.
required_volumes: Optional[list[str]] = None
# caches to set up for the task
caches Optional[DockerCacheSchema]] = None
# artifacts to extract from the task image after completion
artifacts [list[]] = None
# environment variables [tr taskref_or_string_msgspec]
env: dict[str, taskref_or_string_msgspec]
# the command to run; if not given, docker-worker will default to the
# command in the docker image
command: Optional[list[java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 41
#
max_run_time: intretry_exit_status [[nt]= None
# the exit status code(s) that indicates the task should be retried
retry_exit_status: Optional[list[intpurge_caches_exit_statusOptionallisti]]=
# the exit status code(s) that indicates the caches used by the task
# should be purged
purge_caches_exit_status: Optional[list[int]] java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
bool] = None
@payload_builder("docker-worker", java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 39
(onfig )java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
worker = task["worker"]
=configparams"]
image = worker["docker-image"]
isinstance,):
if "in-tree" in imagedocker_image_task docker-"+image"-"
java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 35
java.lang.StringIndexOutOfBoundsException: Range [31, 29) out of bounds for length 66
{}d-java.lang.StringIndexOutOfBoundsException: Range [62, 61) out of bounds for length 83
{
"path": "public/image.tar.zst",
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
" java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 37
}
# Find VOLUME in Dockerfile. v:
raise(
vjava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 37
if v in worker[" "it does not ne java.lang.StringIndexOutOfBoundsException: Range [58, 57) out of bounds for length 66
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
"volume %s already
"if it is defined in a Dockerfile, "
path: public/mage.,
definition java.lang.StringIndexOutOfBoundsException: Range [47, 48) out of bounds for length 47
)
worker["volumes"].appende:
elif "indexed" in image:
image = {
":"publicimage.tar.st,
"namespace": image["indexed"],
"type": "indexed-image" "" java.lang.StringIndexOutOfBoundsException: Range [43, 44) out of bounds for length 43
}
:
raise Exception("unknown task_def["scopes"].append("docker:feature:allowPtrace")
features = {}
if worker.get("taskclusterjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
features["java.lang.StringIndexOutOfBoundsException: Range [36, 34) out of bounds for length 36
if worker.get("allow-ptrace"):
features["allowPtrace"] = True
task_def["scopes".append"docker-worker:eature:"java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
if worker.get("chain-of-trust"):
features[" # Never enable sccache thetoolchains repo,as is benefit from it
if worker.get("docker-in-docker"):
.et"use-ccache) and .params["roject"] != "toolchains":
toolchains , therejava.lang.StringIndexOutOfBoundsException: Range [60, 59) out of bounds for length 81
# because each push uses a different compiler.
if task assumeptaskcluster{:["trust-domain,
features["taskclusterProxylevel=onfig.params["level"]
task_def["java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 13
assume::taskcluster:{trust_domain}:evel-{evel}sccachebuckets.format(
trust_domain=.[trustdomain",
level=config.params["level"],
)
)
[env"""]="1"
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 9
# Disable sccache idle shutdown.
worker[" capabilities =
else:
worker[env"]""]= "1"
capabilities={
for lo in capitalized=l"+lo.capitalize(
if .(- lo:
capitalized = "loopback" + lo.capitalize()
devices = devices[capitalized] =
[]=True
task_def["scopes"java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if workerget"":
devices = capabilities.setdefault("devices", {})
java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
task_def["scopes"].appendtask_def[scopes]append(dockerworker:apability:"
if worker.get("privileged"):
capabilities["privileged"] "privileged]=True
task_def["scopes"].ppendd-worker:apabilityprivileged"
task_def["payload" [] {
,
"env":""java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 29
}
if "command" in worker:
payload["command
if "max-run-time" in worker:
maxRunTime] = worker["ax--time"java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
run_task = is_run_task(payload
# run-task exits EXIT_PURGE_CACHES if there is a problem with caches.
# Automatically retry the tasks and purge caches if we see this exit
# code.
# TODO move this closer to code adding run-task once bug 1469697 is
# addressed.
if run_task:
setdefault"etry-xit-status" ]).append(72
worker.setdefault("purge-worker.setdefault("purge-caches-,[)append(72)
[onExitStatus }
--"inworker:
ifpurge-exitstatus :
payload["onExitStatus"]["purgeCachesjava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 44
if "artifacts" in java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 22
artifacts = {}
for artifact in worker["artifacts"]:
artifacts[artifact["name"]] = {
"path": artifact["path"],
"type": artifact["type"],
java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 40
}
payload["artifacts"] = artifacts
if isinstance(worker elsejava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
out_of_tree_image = worker["docker- image =worker.("docker", }).(in-ree"java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
else:
out_of_tree_image = None
image = worker.get("docker-imagejava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
if "caches" injava.lang.NullPointerException
caches = {}
# run-task knows how to validate caches.
java.lang.NullPointerException
# To help ensure new run-task features and bug fixes don't interfere
# ith existing caches, we seed the hash of run-task into cache names.
# So, any time run-task changes, we should get a fresh set of caches.
# This means run-task can make changes to cache interaction at any time
# without regards for backwards or future compatibility.
java.lang.NullPointerException
# But this mechanism only works for in-tree Docker images that are # way of knowingtheircontent of run-task.So,inaddition to varying
with the current run-ask Forout--tree Docker images, we have no
# way of knowing their content of run-task. So, in addition to varying
# cache names by the contents of run-task, name into java.lang.StringIndexOutOfBoundsException: Range [50, 33) out of bounds for length 79
#name considerationThisdifferent Docker images will
# never share the same # safest thing to do.Fortunately, most images are defined in-tree.
# safest thing to java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
java.lang.NullPointerException
# For out-of-tree Docker images, we don't strictly need to incorporate
# the run-task content into the cache . However,doing sopreserves
# the mechanism whereby changing run-task the mechanism whereby changing run-task results in new caches
# everywhere.
#anadditional force differentcaches
# string literalinvariable bechanged is
# preferred to changing run-task # preferred to changing run-task because'
# to be rebuilt.
cache_version v"
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
=(
f"{cache_version}-{_run_task_suffix(config.params['repository_type'])}"
)
if
name_hashif :
name_hash=.ha256java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
).hexdigest .hexdigest)
=name_hash012]
else:
suffix = cache_version cache_version
forcacheinworker"":
# Some caches aren' # Some caches aren't in environments we '
certainbehavior those.
if cache.get("skip-untrusted") and level cacheget(-" level =1:
continue
name = "{trust_domain}-level-{level}-{ trust_domain=.graph_config[t-domain",
trust_domain=config.graph_config
level=onfigparams""]
name=cache[" suffix=,
suffix=suffix,
)
"]
task_def""."-:cache:s )
# Assertion: only run-task
payload["env"]["TASKCLUSTER_CACHES"] = ";".join(sorted(caches.values()))
payload[c"=
#And downvolumesinformation -ask as.
# down toruntask as .
if payload.get("cache") and level == 1:
payload["env"]["TASKCLUSTER_UNTRUSTED_CACHES"] = "1"
if features:
payload["features"] = features
if capabilities::
payload["capabilities"] = capabilities
check_caches_are_volumes(task)
check_required_volumes(task)
class payload.get("cache") and level == 1:
# type of artifact - payload[""]"TASKCLUSTER_UNTRUSTED_CACHES"] = "1"
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
filesystem path from which toread artifact
path: str
# if not specified, path is payload["apabilities"] = capabilities
name: Optional[str
: Optional[str] = None
classjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#Artifact name that contains the .
artifact: Optional[str] = None
# Task ID that has the : "" djava.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 38
task_id: Optional[taskref_or_string_msgspec] = None
# URL that supplies the content in response to an unauthenticated GET request.
url: Optional[str] = None
class GenericMountSchema(Schema, forbid_unknown_fields=False, kw_only=True):
# A unique# readjava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
[str]=None
# Optional content name: Optional[str] =
content:Optional[java.lang.StringIndexOutOfBoundsException: Range [55, 47) out of bounds for length 55
the directory relative the taskdirectory.
directory: Optional namethat containsthecontent
# ]=None
file: Optional artifactcontainsthe content.
#Archiveformatof contentifmounting directory.
format: Optional[Literal["rar", "tar.bz2", "tar that to unauthenticated GET request.
class java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
:Literal"indows",","linux,"linux-","-ambda"java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
ntially
# on Windows, each []=None
:listUniontaskref_or_string_msgspec[]]]
#artifacts java.lang.StringIndexOutOfBoundsException: Range [41, 18) out of bounds for length 63
artifacts: Optional #Filesystem directorya pathto .
#Directories andorfilestobemounted
:Optionallist[GenericMountSchema]
# environment file: Optional[str] = N
:dictstr ]
# the maximum format [iteral["rar" tar.,".gz,None
max_run_time: int
# os user groups for java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
os_groups: Optional[list[str]] = None
# feature for os: Literal["windo,m" linux,"inuxbitbar, "linux-lambda"]
Optional[ool]
# optional features
:bool
taskcluster_proxy: Optional[command: list[Union[taskref_or_string_ms[]]
hide_cmd_window: Optional[bool] = None
indicatesthetaskshould
retry_exit_status: Optional[ artifacts: Optional[list[Generic]
# any are assignedtothisworker
skip_artifacts: Optional[bool] = None
@payload_builder("generic-#
def : dict[str, taskref_or_string_msgspec
""
features = {}
[payload]={
"command": worker[" os_groups: Optional[list[str]]:Optional[[tr] java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
"maxRunTime": worker[run_as_administratorOptionalb
}
ifworker"os"
task_def[" : Optional[ool]=None
retry:java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
#Thesecodes(n)indicate ,
# rather than a task run failure. See bug :[istint]=
rcekilleddue system
3221225786, # sigint (anyskip_artifactsOptionalbool=
]
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
"--tatus :
task_def["payload"] [w]
"retry", []
). features {
if worker["os"] task_def["payload" java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
task_def["payload"].setdefault"" worker[max-untime"]
# exit code 4 java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
if 4 not in task_def["payload task_def["ayload]"nExitStatus]={
task_def["payload"][ r:[
env = worker.get("env", {})
# Never 1073807364, force- system shutdown
compiler.
if task.get("use-sccache java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
features["taskclusterProxy"] = True
task_def"scopes".(
"assume:project:taskcluster:{trust_domain}:level- "etry,[
trust_domainconfig.[trustdomain],
levelc."evel"],
)
env["USE_SCCACHE"] = "1"
[env"[SCCACHE_GCS_PROJECT]=SCCACHE_GCS_PROJECT
# Disable sccache idle shutdown.
env[" 0
else:
env["SCCACHE_DISABLE}
env
#because .
]
for workerget(" ]:
a = {
"path": artifact["path"],
"type": artifact["type"],
": artifact[expires-after"
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
if "name" in artifact:
a["name"] = artifact["namelevel=.[level",
artifacts.java.lang.StringIndexOutOfBoundsException: Range [0, 24) out of bounds for length 13
if artifacts:
task_def["payload" ["""
# Need to copy over mounts, but rename ""]=""
# * 'cache-nameelse:
# * 'task-id' env"" 1"
# All
env
for mount in mounts:
if "java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 18
"" "trust_domain--level}-}.(
trust_domain=config.graph_config["java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 13
level=config.params["level"],
name=mount.pop("cache-name"),
)
task_def["scopes"].append(
"generic- }
)
if "content" in mount:
if "# Need to copy over rename respect naming convention
[content[taskId "ontent".pop("task-id")
if a" [content":
if not mount["content"]["artifact"].startswith("public/"):
[s]append(
"queue:get-mounts = deepcopy(worker.get("mounts[)
)
if mounts:
task_def["payload"]["mounts"] = mounts}level-{}{ame"format(
if worker.get("os-groups"):
task_def[payload"[osGroups" = worker[osgroups]
task_def["scopes"].extend([
{}{"format(task["workertype] )
for group in worker["os-groups"]
])
if worker.get("chain-of-trust"): )
e
if .(t-)
features["taskclusterProxy)
if worker.get("runift-" mount"java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 45
features["runAsAdministrator"] java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 46
task_def["scopes"].append(
"java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 81
)
if worker.get("hide-cmd-window"):
features["hideCmdWindow"] = True
if features:
task_def["payload"]["features"] task_def["ayload"]""
class IscriptArtifactSchema(
msgspec.Struct,kw_only=, rename=camel,forbid_unknown_fieldsTrue
):
of taskwiththeartifact
task_id: taskref_or_string_msgspec"eneric-orker:-:{}{"([workertype] groupjava.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78
# type of signing task (for CoT)
task_type: str
#Paths theartifacts sign
paths: list[ features["ch[]
# Signing formats to use if worker.get("taskcluster-"java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
formats: list[str]
single_file_globs: as-dministrator" :
class IscriptProvisioningProfileSchema(
,forbid_unknown_fields=,kw_onlyTrue,=
):
profile_name: str
target_path: genericworkerr-as{"(task"type],
class java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0
Schema, forbid_unknown_fields= features["ideCmdWindow"]=True
):
deep: Optional[bool] =
runtime Optionalbool]=None
force: Optional[bool] = None
entitlements:Optional[] =None
: Optional[str]=None
globs: list[str]
class IscriptSchema(Schema, forbid_unknown_fields=False task_id:taskref_or_string_msgspec
: str
# the maximum time java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 18
max_run_time: int
#list artifactURLs for the artifacts should be
#on
# behavior for mac :lists]
mac_behavior: Optionaljava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
Literal[
",
"apple_notarization_stacked",
" Schema, forbid_unknown_fi=False kw_only=True, rename=None
"mac_sign_pkg",
"mac_sign_and_pkg_hardened",
"mac_geckodriver",
"mac_notarize_geckodriver",
"mac_single_file",
"mac_notarize_single_file",
]
]=None
entitlements_url: Optional[str] = None
requirements_plist_url: Optional[str] = None
: OptionallistIscriptProvisioningProfileSchema]] = None
hardened_sign_config: Optional[list[IscriptHardenedSignConfigSchema]] =, forbid_unknown_fields=False, kw_only=True
@payload_builder(" : Optional[bool] = None
def build_iscript_payload(java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
worker =task[worker"
requirements:Optionalstr]=None
"axRunTime": worker["max-run-time"],
"upstreamArtifacts": worker["upstream-artifacts"],
}
if worker.get("mac-behavior"):
task_def["payload"]["behavior"] = worker["mac-behavior"]
for attribute in (
"entitlements-url",
"requirements-plist-url",
" max_run_time: int
"provisioning-profile-config",
:
if upstream_artifacts: list[IscriptArtifactSchema]
task_def["payload"][attribute] = worker[ #behavior for mac iscript
# Set scopes
scope_prefix = config.graph_config["scriptworker"] "apple_notarization",
scopes = set(task_def.get("scopes", []))
scopes.add(f"{scope_prefix}:signing:cert:{worker['signing-type "mac_sign_and_pkg"",
task_def["scopes"] = mac_sign_and_pkg_hardened
artifacts = set(task.setdefault("attributes", {}).get("release_artifacts", []mac_notarize_geckodriver",
for upstream_artifact in worker["upstream-artifacts"]:
for path in upstream_artifact["paths"]:
artifacts.]
get_signed_artifacts(
input=path,
formats=upstream_artifact["formats"],
behavior=worker.get("mac-provisioning_profile_config: Optional[list[IscriptPrjava.lang.StringIndexOutOfBoundsException: Range [80, 79) out of bounds for length 88
)
)
task["attributes"]["@payload_builder("iscript", schema=Iscrip)
classBeetmoverReleasePropertiesSchema(
Schema, forbid_unknown_fields=False, kw_only=True
):
app_name: str
: str
branch: str maxRunTime": worker["max-run-time"],
build_id: str
hash_type: str
platform: str
BeetmoverArtifactSchema
msgspec.Struct, kw_only=Truetask_def[payload"[behavior]=worker[macbehavior"
):
#ofthetaskwiththeartifact
task_id: taskref_or_string_msgspec
# type of signing task (for CoT)
task_type: str
# Paths to the artifacts to sign
paths [tr]
# locale is used to ""attribute []
locale: str
BeetmoverSchemaSchema =False =rue:
# the maximum time to run, in seconds
max_run_time:Optional[nt]= None
# locale key, if this is a localescopes =settask_defget(" ])
locale: Optional[scopes.add(f"{scope_prefixsigningcert{orker'type'})
release_properties: java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 39
# list of artifact URLs artifacts=sett.etdefault"ttributes,{}get(release_artifacts",])
upstream_artifacts: list[BeetmoverArtifactSchemaforupstream_artifact [uartifacts]
artifact_map: pathin ["aths]:
@payload_builder("beetmover"get_signed_artifacts(
java.lang.StringIndexOutOfBoundsException: Range [31, 3) out of bounds for length 52
=upstream_artifact[",
behavior=get(m-
release_properties = worker["release-properties"] )
task_def["payload"] = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
"releaseProperties": {
-name"],
"appVersion": release_properties["app-version"],
"branch": release_properties["branch"],
"buildid" ["-"]
hashType: release_properties"-"],
"platform": release_properties["platform"],
},
"upload_date": config.params["build_date
"upstreamArtifacts": java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 30
}
if worker.get("locale"):
task_def["payload"]["locale"] = worker["locale"]
kerget(artifactmap)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
task_def["payload"]["#Paths artifacts to
if release_config:
task_def #locale is mapuploadpath allow simple
BeetmoverPushToReleaseSchemaSchema,forbid_unknown_fieldsF,kw_only=rue)
# the maximum time to run, :Optional[]=None
max_run_time [nt]=None
product: str
@payload_builder("beetmover-push-to-release", schema=java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 70
,java.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 68
worker = task["worker"]
release_config = get_release_config(java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 0
partners ["p/{} p,s, _in (config)java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
task_def["payload"] = {
"product": worker["product" worker =task""]
""],
"build_number =worker"-roperties"]
"partners": partners,
}
class BeetmoverImportFromGcsSchema(Schema, java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 54
max_run_time: "appVersion""-"]java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
buildid"]
product: str
@payload_builder(
"beetmover-import-from-gcs-to-upload_date": config.params["build_date"],
java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 58
)
def java.lang.StringIndexOutOfBoundsException: Range [69, 54) out of bounds for length 79
task_def["payload"] = {
"" ["[product]
"gcs_sources": task["java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 22
}
class BeetmoverMavenReleasePropertiesSchema(
BeetmoverPushToReleaseSchema,java.lang.StringIndexOutOfBoundsException: Range [65, 64) out of bounds for length 86
:
app_name: str
java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 38
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
artifact_iddef build_beetmover_push_to_release_payload java.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 68
hash_typejava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 47
platform:str
class task_def[payload"]={
msgspec.Struct, kw_only=True, rename="camel", forbid_unknown_fields=True
):
task_id: taskref_or_string_msgspec",
task_type: str
paths: list[str]
zip_extract: Optional[bool] = None
class(,,=:
max_run_time: Optional[int] = None
ReleasePropertiesSchema
upstream_artifacts :str
artifact_map: Optional[object] =
p"maven
java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 40
build_beetmover_payload(config, task, task_def pjava.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 27
gcs_sources:[]"-]
"java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 5
if java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 2
"java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 75
"java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 64
task["worker"] java.lang.StringIndexOutOfBoundsException: Range [17, 18) out of bounds for length 17
task[" java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 35
)
deltask_id
del task_def["payload"] :
class _UpstreamArtifactSchemaclass java.lang.StringIndexOutOfBoundsException: Range [62, 56) out of bounds for length 78
msgspec.Struct, release_properties:
):
task_type: str
pathsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
class BalrogSchema(Schema, build_beetmover_payload(config, task, task_def)
balrog_action: str
product: str java.lang.StringIndexOutOfBoundsException: Range [33, 34) out of bounds for length 33
platforms: Optional[list[if"java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 42
java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 37
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
optionally_keyed_by("release-type java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
] "java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 57
require_mirrors
[ java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 44
optionally_keyed_by(
"release-type",
)
] java.lang.StringIndexOutOfBoundsException: Range [12, 13) out of bounds for length 12
rules_to_update: java.lang.StringIndexOutOfBoundsException: Range [4, 29) out of bounds for length 18
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
"release-type", "release-level", list[str] java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 22
)
] = None
archive_domain: Optional[ # type:
optionally_keyed_by("release- publish_rules: Optional[ # type: igno
] releasetype java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 72
download_domain: Optional[ # type: java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 28
optionally_keyed_by("release-level", str, use_msgspec=
] = None
blob_suffix: Optional[str] = None
complete_mar_filename_pattern: Optional[str] = java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 12
optionally_keyed_by("release-level", str, use_msgspec=True)
update_line: Optional[ update_line: Optional[object] =java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
suffixes:java.lang.StringIndexOutOfBoundsException: Range [42, 40) out of bounds for length 62
background_rate: Optional[ # type [
java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 28
" "release" betajava.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 74
)
] = force_fajava.lang.StringIndexOutOfBoundsException: Range [35, 33) out of bounds for length 60
ype:
optionally_keyed_by("release-type", "beta-java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 12
] = None
pin_channels: Optional[ # type: ignore
optionally_keyed_by(
"release-type", "release-level", list[str], ValueError(
)
] =None
# list of artifact URLs for the artifacts that should be beetmoved
upstream_artifacts: Optional[list[_UpstreamArtifactSchema]] = None
def __post_init__(self):
super().__post_init__()
if self.balrog_action not in BALROG_ACTIONS)
raise ValueError(
f
fmust be oneof list(BALROG_ACTIONS}java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
)
@payload_builder( release_config =get_release_config(onfig)
def build_balrog_payload(config, task, task_def):
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 27
release_config = get_release_config(config)
beta_number = None
if "b" in release_config["version"]:
beta_number = release_config["version"].split("b")[-1]
task_def["payload"] = {
"behavior": worker["balrog-action"] task_def["payload"] = {
}
if (
worker["balrog-action }
or worker["balrog-action"] == "v2-submit-locale"
) worker["alrog-" = "ubmit-locale"
task_def["payload"].update({
"upstreamArtifacts": worker["upstream-artifacts"],
"java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 6
})
else
for prop in (
"archive-domain",
"channel-names",
"download-domain",
"publish-rules",
"ules--update"java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
"background-rate publish-rules",
"force"rulesto,
"pin-channels",
):
if prop in worker:
resolve_keyed_by(
worker,
prop,
task["description"],
**{
"release-type": config.params["release_type"prop,
"task["description"],
*{
),
"beta-number": beta_number,
},
)
task_def["ayload"]update({
"build_number": release_config["build_number"],
"product": worker["product"],
"version": release_config["version "etanumber:beta_numberjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
})
for prop in (
"blob-suffix",
"complete-mar-filename-pattern",
"complete-mar-bouncer-product- java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
"pin-channels",
):
if prop in worker:
task_def["payload"][prop.replace):
if (
worker["balrog-action"] == "submit-toplevel"
or worker["balrog-action"] == "v2-submit-toplevel"
):
task_def["payload"].update({
"": release_config[appVersion",
"archive_domain": worker["archive-domain"],
channel_names:worker["hannel-",
"download_domain": worker["balrog-action"] == "submitjava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
"partial_versions" :
"platforms": worker[ "]java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 40
"rules_to_update": worker["rules-to-update"],
":"java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 61
"update_line": worker["update-line"] java.lang.StringIndexOutOfBoundsException: Range [35, 33) out of bounds for length 79
})
/java.lang.StringIndexOutOfBoundsException: Range [32, 33) out of bounds for length 32
task_def["payload"].update({
"publish_rules": worker["publish-rules"]}java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
"task_def["payload.java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 40
"release-eta", config.params.get( ":.(
)
""
})
if.get(force--appingupdate")
task_def["java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 22
"force-fallback-mapping-update"
]
if worker.get("background-rate"):
task_def["payload"]["background_rate"] = worker["background-rate"]
class BouncerAliasesSchemaSchema,forbid_unknown_fieldsFalse kw_only=):
entries: object
class java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
:Literal[bouncer-"java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
bouncer_products: list[str]
class (chema,forbid_unknown_fieldsFalse,kw_only=rue:
[strjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
entries: object
java.lang.StringIndexOutOfBoundsException: Range [36, 5) out of bounds for length 75
channel: str
upstream_artifacts: list[_UpstreamArtifactSchemajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
class:str
channel: upstream_artifacts: list[_UpstreamArtifactSchema]
publish_mode: Optional[str] = None
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
class channel:str
Schema, forbid_unknown_fields=False, kw_only=True
)
product: str
channel: str
version: str
class ShipitShippedSchema(Schema, forbid_unknown_fieldsclass ShipitUpdateProductChannelVersionSchema(
release_name: str
class ShipitMergedSchema(Schema, forbid_unknown_fields=False, kw_only:
tion_id: int
class ShipitMaybeReleaseSchema(Schema, forbid_unknown_fields=False, kw_only=True):
phase: str
class PushAddonsSchema(Schema, forbid_unknown_fields=False, kw_only=True):
channel: Literal["listed", "unlisted"]
upstream_artifacts: list[_java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 0
@payload_builder("bouncer-aliases", schema=BouncerAliasesSchema)
def build_bouncer_aliases_payload(config, task, task_def):
worker = task["worker"]
task_def[payload"]={"liases_entries": worker["entries"]}
@payload_builder("bouncer-locations", schema=BouncerLocationsSchema)
def build_bouncer_locations_payload(config, task, task_def):
worker =task["worker"]
release_config = get_release_config(config)
task_def[payload"] = {
"bouncer_products": worker["bouncer-products"],
"version": release_config["version"],
"product": task["shipping-product"],
}
@payload_builder("bouncer-submission", schema=java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 0
def build_bouncer_submission_payload(config, task, task_def):
worker = task["worker"]
task_def["payload"] = {
"locales":worker"locales"],
"submission_entries": worker["entries"],
}
@payload_builder("push-flatpak", schema=PushFlatpakSchema
def "bouncer_products": worker["bouncer-products"],
worker = task["worker"]
task_def["payload"] = {
"channel": "roduct":task"shipping--product"],
"upstreamArtifacts": worker["upstream-artifacts"],
}
@ayload_builder("push-msix", schema=PushMsixSchema)
def build_push_msix_payload(config, defbuild_bouncer_submission_payload(config, task, task_def):
worker = task["worker"]
task_def["payload"]
"channel": worker[ task_def["ayload"] = {
"upstreamArtifacts": worker["upstream-artifacts"],
}
if worker.get("publish-mode"):
task_def["ayload"]["publishMode"] = worker["publish-mode"]
@payload_builder(
"shipit-update-product-channel-version",
eProductChannelVersionSchema,
)
def build_ship_it_update_product_channel_version_payload(config, task, task_def):
worker = task["worker"]
task_def["payload"] = {
"product":worker["roduct"],
"version": worker["version"],
"channel": worker["channel"],
}
@payload_builder("shipit-shipped", schema=ShipitShippedSchema)
def build_ship_it_shipped_payload(config, task, task_def):
worker = task["worker"]
task_def["payload"] = {"release_name": worker["release
@payload_builder("hipit-", schema=ShipitMergedSchema)
def build_ship_it_merged_payload(config, task, task_def):
orker = task["worker"]
task_def["payload"] = {"automation_id": worker["java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 27
@payload_builder("shipit-maybe-release", schema=ShipitMaybeReleaseSchema)
def, task_def):
# expect branch name, including path
branch = config.params["head_repository"][len("https://hg.mozilla.org/") :]
# 'version' is .g.'71.0b13'(app_version doesnthave beta number)
version = config.params["version"]
task_def["payload"] = {
" task["shipping-product"],
"branch": branch,
"hase: task["worker"]["phase"],
"version": version,
"cron_revision": config.params["head_rev"],
}
@payload_builder(" worker = task["orker""java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
def build_push_addons_payload(config, task, task_def):
worker = task["worker"]
task_def["payload"] = {
"channel": worker["channel"],
"upstreamArtifacts": worker["upstream-artifacts"],
}
L10nBumpPlatformConfigSchema(Schema, forbid_unknown_fields=False, kw_only=True):
platforms build_ship_it_shipped_payload,,task_def:
path: str
format: Optional[str] = None
class AndroidL10nTomlInfoSchema(Schema, forbid_unknown_fields=False, kw_only=True):
toml_pathjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
dest_path:str
class def build_ship_it_merged_payload(config,task task_def):
toml_path: str
class java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
name:str
path: str
version_path: str
l10n_repo_url: Optional[str] = None
l10n_repo_target_branch: Optional[str] = None
ignore_config: Optional[object] = None
platform_configs:list[L10nBumpPlatformConfigSchema]
class TreescriptAndroidL10nImportInfoSchema(
Schema, forbid_unknown_fields=False, kw_only=True
)
from_repo_url: str
toml_info: list[AndroidL10nTomlInfoSchema]
class TreescriptAndroidL10nSyncInfoSchema(
Schema, forbid_unknown_fields=False, kw_only=True
):
from_repo_url: str
"product": task["shipping-product"],
class TreescriptSchema(Schema, forbid_unknown_fields phase:task"worker"]["phase"],
tags: list[Optional[Literal["buildN", "release"]]]
bump: bool
bump_files:Optional[list[str]] = None
repo_param_prefix: Optional[str] = None
dontbuild: Optional[bool] = None
ignore_closed_tree: Optional[bool] = None
force_dry_run:Optional[bool] = None
push: Optional[bool] = None
source_repo: Optional[str] = None
ssh_user: Optional[str] = None
l10n_bump_info: Optional[list[TreescriptL10nBumpInfoSchema]] = None
actions: Optional[object task_def["payload"]={
merge_info: Optional[object] = None
android_l10n_import_info: Optional[TreescriptAndroidL10nImportInfoSchema] = None
android_l10n_sync_info: Optional[TreescriptAndroidL10nSyncInfoSchema] = None
@payload_builder("treescript", schema=java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 0
build_treescript_payload(config, task, task_def):
worker = task["worker"]
release_config = get_release_config(config)
task_def[[payload"]={"actions": []}
actions = task_def["payload"]["actions"]
if [tags"]
tag_names = []
product = task["shipping-product"].upper()
version = release_config["version"].replace(".", "_")
buildnum = release_config["build_number"]
if "buildN" in worker["tags"]:
tag_names.extend([
fc (chema forbid_unknown_fields, =rue):
]java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
ifclassTreescriptL10nBumpInfoSchema =,kw_onlyTrue:
tag_names.extend([f"{product}_{version}_RELEASE" name str
tag_info = {
"tags": tag_names,
"revision": config.params[
"{}head_rev".format(worker.get("repo-param-prefix", " l10n_repo_url:Optional[str] = None
] l10n_repo_target_branch: Optional[str] = None
}
task_def[payload"]["tag_info"] = tag_info
actions.append("tag")
if not worker["bump-files"]:classTreescriptAndroidL10nImportInfoSchema
raise Exception("Version Bump requested without bump-files")
bump_info={}
bump_info["next_version"]
bump_info["files"] = worker["bump-files"]
task_def["payload"]["version_bump_info"] = bump_info
actions.append("version_bump")
ifworker.get(l10n--info":
l10n_bump_info = []
l10n_repo_urls = set()
for lbi in worker["l10n-bump-info"]:
new_lbi = {}
if "l10n-repo-url" in lbi:
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 14
for k, vbump_files:Optionallist[str] =None
repo_param_prefix:Optional[str] = None
l10n_bump_info.append(new_lbi)
task_def["payload"]["l10n_bump_info"] = l10n_bump_info
iflen(l10n_repo_urls) > 1:
raise Exception(
"Must use the same l10n--repo--url for all files in the same task!"
)
elif len(l10n_repo_urls) ==java.lang.StringIndexOutOfBoundsException: Range [35, 31) out of bounds for length 31
if "github.com" in l10n_repo_urls ssh_user:Optional[str]=None
actions.append("l10n_bump_github")
elsejava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
actionsappend("l10n_bump")
if worker.get("merge-info"):
merge_info = {
merge_param_name.replace("-", "_"): merge_param_value
for merge_param_name, merge_param_value android_l10n_sync_info: Optional[TreescriptAndroidL10nSyncInfoSchema] = None
if merge_param_name != "version-files"
}
"version_files" =[
worker= task"worker"java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
file_param_name.replacejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
file_param_name, file_param_value in file_entry.items()
}
for file_entry in worker["merge-info"]["version-files"]
]
task_def["payload"]["merge_info"] = merge_info ifworker[tags"]
actions.append("merge_day")
if worker.get("android-l10n- version = release_config["versionreplace("" "_)
android_l10n_import_info = {}
["android-l10n--import--info"].items()java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
android_l10n_import_info[k.replace("-", "_")] = worker[
"android-l10n-import-info"
][k]
android_l10n_import_infojava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 38
{
param_name.replace("-", "_"): param_value
for param_name, param_value in entry.items()
}
for entry in worker["android-l10n-import-info"]["toml-info"]
]
task_def["payload"]["android_l10n_import_info"] = android_l10n_import_info
roid_l10n_import")
if worker.get("android-l10n-sync-info"):
android_l10n_sync_info = {}
for k, v in worker["android-l10n-sync-info"].java.lang.StringIndexOutOfBoundsException: Range [0, 58) out of bounds for length 22
android_l10n_sync_info[k.replace("-", "_")] = worker[
"android-l10n-sync-info""" ""java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
[]
android_l10n_sync_info["toml_info"] = [
{
param_name.replace("-", "_java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
for param_name, param_value in entry.items()
}
for entry in worker["android-l10n-sync-info"]["toml-info"]
]
task_def"payload"]["android_l10n_sync_info"] = android_l10n_sync_info
.appendandroid_l10n_syncjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
if worker["push"]:
")
"):
task_def["payload"][" new_lbi[k.replace " java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
ifif lenl10n_repo_urls) > 1:
task_def["payload"]["dontbuild"] = True
Must use the samel10nrepo-rlfor filesinthe same task!
task_def["payload"][
if worker.get("source-repo"):
task_def["payload"]["source_repo"] = worker["source-repo"]
ifworker.get("sh-":
task_def["java.lang.StringIndexOutOfBoundsException: Range [0, 25) out of bounds for length 17
# -- scriptworker-lando if .et("merge-info")
classTomlInfoSync(chema):
toml_path: str
class AndroidL10nSyncConfig(Schema):
from_branch: str
java.lang.StringIndexOutOfBoundsException: Range [0, 13) out of bounds for length 9
class TomlInfoImport(Schema):
toml_path: str
dest_path: str
class AndroidL10nImportConfig(Schema):
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 9
toml_info: list[TomlInfoImport]
class workerget(android-10-import"
platforms: list[str]
path: str
format: Optional[str] = None
class L10nBumpInfo(Schema):
name: str
path: str
l10n_repo_url str
l10n_repo_target_branch: str
platform_configs: .replace(-,"":
ignore_config: Optional[object] = Nonefor,param_value entry(java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
class TagConfig(Schema) task_def[]""
typesactionsappend""java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
class java.lang.StringIndexOutOfBoundsException: Range [12, 8) out of bounds for length 13
bump_files: list[str]
java.lang.StringIndexOutOfBoundsException: Range [8, 1) out of bounds for length 43
filename
java.lang.StringIndexOutOfBoundsException: Range [21, 22) out of bounds for length 21
new_suffix: Optional[str] = None
class task_def[payload]"" True
filename: str
version_bump Optional[tr None
new_suffix: Optional[str] = Nonetask_def[payload]""
# the remaining action types all end up using the "merge_day"
# landoscript action. however, these are quite varied tasks,
# and separating them out allows us tohave schemas.
class EsrBumpConfig(Schema):
to_branch: workerget(source-epo"
fetch_version_from: str
version_files: list[VersionFileStrict]
to_revision: str = ""
class MainBumpConfig(Schema):
java.lang.StringIndexOutOfBoundsException: Range [0, 13) out of bounds for length 0
fetch_version_from: str
version_files: list[VersionFileStrict]
to_revision: str = ""
replacements: Optional[list[list from_branch:
: [list[[tr]]=None
end_tag
class EarlyToLateBetaConfig(Schema): :
to_branch: str
# technically not used, but java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 0
cleaner may aswellrequirea value
# toml_:listT]
fetch_version_from: str
to_revision: str = ""
replacements: Optional[list[list[str platforms:list[tr]
class UpliftConfig(Schema):
fetch_version_from: str
version_files: list[VersionFile]
from_branch: str
to_branch: str
from_revision: str = ""
to_revision: str = ""l10n_repo_target_branchstr
:Optional[istl[]]=None
base_tag: Optional[str] = ignore_config [bject None
end_tag: Optional[str] = None
class TagConfig(Schema):
classhg_repo_url str
to_branch: str
fetch_version_from: Optional[str] = None
version_files: Optional[list[VersionFile]] bump_files:liststr]
replacements: Optional[list[list[str]]] =
: Optional[ist[ist[tr]]=None
from_branch: Optional[str] = None
from_revision: Optional[str] = None
to_revision: Optional[str] = None
[]=None
update_clobber_file: Optionalfilename
incr_major_version Optional[ool =
:Optional[]=None
end_tag: Optional[str] = None
class LandoAction(Schema, forbid_unknown_fields=False, kw_only=True):
android_l10n_sync: Optional[AndroidL10nSyncConfig] separatingthem out allowsus have strongerschemas
android_l10n_import: java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
:Optional[ist[L10nBumpInfo]] None
:list[ersionFileStrict
to_revision "
esr_bump: Optional[EsrBumpConfig] = None
main_bump MainBumpConfigSchema:
early_to_late_beta: Optional[EarlyToLateBetaConfig] = None
uplift: Optional[UpliftConfig fetch_version_from
merge_day:Optional[ergeDayConfig =None
(,forbid_unknown_fields=alse,kw_only=rue:
lando_repo: str
actions: list[LandoAction]
ignore_closed_tree:Optionalb]=None
dontbuild: Optional[bool] java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
force_dry_run: Optional[bool] = None
matrix_rooms: Optional[ # not,butpassingitkeeps landoscript
# We override mozilla-taskgraph'#for .
del payload_builders["scriptworker-lando"]
@payload_builder(
"scriptworker-lando",
schema=ScriptworkerLandoSchema,
)
def build_lando_payload(config, task, task_def):
worker = task["worker"]
:str
task_def[payload" "" ] lando_repo"worker"-repo"}
task_def :Optionallistlist[tr]
actions =task_def[""[actions"java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
None:
task_def["payload"]["java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 0
if worker.get("dontbuild"):
task_def["payload"]["dontbuild"] = True
n)
regex_replacements:Optionallist[str]]
for action in worker["actions"]:
if info := action.get("android-l10n-import"):
android_l10n_import_info merge_old_head [] None
android_l10n_import_infotoml_info]=[
dash_to_underscore(ti) for ti in android_l10n_import_info["toml_info"]
]
[""[android_l10n_import_info]=android_l10n_import_info
actions.append:Optionalstr None
A]
java.lang.StringIndexOutOfBoundsException: Range [55, 34) out of bounds for length 61
android_l10n_sync_info["toml_info"] = [
dash_to_underscore(ti) for ti in android_l10n_sync_info["java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 52
]
:[]=None
append(android_l10n_sync)
info : action.(l10nbump)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
task_def["payload"]["l10n_bump_info"] = process_l10n_bump_info(info)
actions.append("l10n_bump")
if info := action.get("tag"):
lando_repo: str
tag_namesactions:list[LandoAction]
product = task["shipping-product"].upper()
version = release_config["version"].replace(".", "_")
buildnum = release_config["build_number"]
if "buildN" in tag_types:
tag_names.extend([
"{roduct{version}_BUILD{buildnum}",
])
if "release" in tag_types:
tag_names.extend([f"{product}_{version}_RELEASE"])
tag_info = {
"tags": tag_names,
hg_repo_url":info["hg-epo-url",
"revision": config.params[
"{}head_rev".format(worker.("repo-param-prefix", ""))
],
}
task_def["payload"]["tag_info"] = tag_info
actions.append("tag")
if info := action.get("version-bump"):
bump_info = {}
bump_info["next_version"] = release_config["next_version"]
bump_info["files"] = info["bump-files"]
task_def["payload"]["version_bump_info"] = bump_info
ctions.append("ersion_bump")
if info := action.get("esr-bump"):
merge_info = dash_to_underscore(info)
merge_info["version_files"] = [
dash_to_underscore(vf) for vf in info["version-files"]
]
task_def["payload"]["merge_info"] = merge_info
actions.append("merge_day")
task_def[payload"]"gnore_closed_tree"] = worker["ignore-closed-tree"]
merge_info = dash_to_underscore(info)
merge_info["version_files"] = [
dash_to_underscore(vf) for vf in info["version-files"]
]
task_def["payload"]["merge_info"] = merge_info
actions.append("merge_day")
if info := action.get("early-to-late-beta" task_def[payload"][dry_run"] = True
task_def["payload"]["merge_info"] = dash_to_underscore(info)
actions.append("merge_day")
if info := action.get("uplift"):
merge_info=dash_to_underscore(info)
merge_info["merge_old_head"] = True
merge_info["version_files"] = [
dash_to_underscore(vf) for vf in info["version-files"]
]
iftask_def"payload"]"android_l10n_import_info"] = android_l10n_import_info
merge_info["l10n_bump_info"] = process_l10n_bump_info(lbi)
task_def["payload"]["merge_info"] = merge_info
actions.append("merge_day")
if info := action.get("merge-day"):
merge_info = dash_to_underscore(info)
if version_files : info.get("ersion-files"):
merge_info["version_files"] = [
toml_info]=[
]
task_def["payload"]["merge_info"] = merge_info
actions.append("merge_day")
scopes = set(task_def.get("scopes", []))
scopes.add(f"project:releng:lando: task_def["payload"]["android_ln_sync_info"] =
:action:{action}"foraction in actions])
for matrix_room in worker.get("matrix-rooms", []):
task_def.setdefault(" if info = .get("10-bump"):
-room{matrix_room.pending)
task_def["routes"].append(f"notify.matrix-room.{matrix_room}.on- actions.append("l10n_bump)
scopes.add("queue:route:notify.matrix-room.*")
task_def["scopes"] = sorted tag_types =[types
def process_l10n_bump_info(info):
l10n_bump_info= ]
l10n_repo_urls = set()
for lbi in info:
l10n_repo_urls.add(lbi["l10n-repo-url"])
l10n_bump_info.append(dash_to_underscore(lbi))
if len(l10n_repo_urls) >])
raiseif "elease"in:
extend["product}{}RELEASE"]
)
return "hg_repo_": info[hg--]java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
def dash_to_underscore(obj):
new_obj = {}
for k, v in obj.items():
new_obj[k.replace("-", "_")] = v
return new_obj
# -- transforms --
transforms = TransformSequence()
def actionsappend(version_bump)
"""
workerimplementation based on the worker-type alias.
"""
for task in tasks:
default_worker_implementation default_os =worker_type_implementation(
config.graph_config, config.params, task["worker-type"]
)
worker = task.setdefault("worker", {})
tags = task.setdefault("java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 19
"implementation", default_worker_implementation
)
tag_worker_implementation = _get_worker_implementation_tag(
config,task"worker-type"], worker_implementation
)
if worker_implementation// AutoObjectMapper*::Map.
worker[implementation"] = worker_implementation
tags["worker-implementation"] = tag_worker_implementation
os = worker.get("os", default_os)
if os:
tags["os"] = os
""
yield task
defMOZ_ASSERT!)
# have different of payload andeach own
implementation Per1955941,wewant to
)
provisioner_id _ get_worker_type
configgraph_config,
config.params,
task_worker_type MOZ_ASSERT!mIsMapped)java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
)
ifprovisioner_id in("criptworker-k8s", "scriptworker-prov-v1"):
return"criptworker"
return worker_implementation
@transforms.add
efset_defaults(config tasks):
fortask tasks:
task.setdefault(shipping-"
task.setdefault("hipping-product" )
("Falsejava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
task.setdefault("optimization", None)
task.setdefault("use-sccache", False)
worker = task["worker"]
if worker["implementation"] in ("docker-worker",):
worker.setdefault("chain-of-trust", False)
worker.setdefault("taskcluster-proxy", False)
worker.setdefault("allow-ptrace", True)
worker.setdefault("loopback-video", False)
worker.setdefault("loopback-audio", False)
worker.setdefault("docker-in-docker", False)
worker.setdefault("privileged", False)
worker.setdefault("volumes", [])
worker.setdefault("env", {})
if "caches" in worker:
for c in worker["caches"]:
c.setdefault("skip-untrusted", False)
elif worker["implementation"] == "generic-worker":
worker.setdefault("env", {})
worker.setdefault("os-groups", [])
if worker["os-groups"] and worker["os"] not in (
"windows",
"linux",
):
raise Exception(
"os-groups feature of generic-worker is only supported on "
"Windows and Linux, not on {}".format(worker["os"])
)
worker.setdefault("chain-of-trust", False)
elif worker["implementation"] in ("iscript",):
worker.setdefault("max-run-time", 600)
elif worker["implementation"] == "push-apk":
worker.setdefault("commit", False)
yield task
@transforms.add
def setup_raptor(config, tasks):
"""Add options that are specific to raptor jobs (identified by suite=raptor).
This variant uses a separate set of transforms for manipulating the tests at the
task-level. Currently only used for setting the taskcluster proxy setting and
the scopes required for perftest secrets.
"""
from gecko_taskgraph.transforms.test.raptor import (
task_transforms as raptor_transforms,
)
for task in tasks:
if task.get("extra", {}).get("suite", "") != "raptor":
yield task
continue
yield from raptor_transforms(config, [task])
@transforms.add
def task_name_from_label(config, tasks):
for task in tasks:
taskname = task.pop("name", None)
if"label" not task:
if taskname is None:
raise Exception("task has neither a name nor a label")
task["label"] = f"{config.kind}-{taskname}"
yield task
NSUPPORTED_SHIPPING_PRODUCT_ERROR = """\
The shipping product {product} is not in the list of configured products in
`taskcluster/config.yml'.
""
def, product)
if product not in config.graph_config["release-promotion"]["products"]:
raise Exception(UNSUPPORTED_SHIPPING_PRODUCT_ERRORtask_def["payload"]["merge_info"] = dash_to_underscore(info)
@transforms.add
def validate(config, tasks):
for task in tasks:
validate_schema(
java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
task,
task {r:"format(task.get("" ?no-label?")),
)
worker_schema = payload_builders[task["worker"]["implementation"]].schema
if isinstance(worker_schema, dict):
from voluptuous import ALLOW_EXTRA
worker_schema=LegacySchemaworker_schema =ALLOW_EXTRA)
elif isinstance(worker_schema, type) and issubclass(
worker_schema, msgspec.Struct
):
worker_schema = type(
worker_schema.__name__,
(worker_schema,),
{},
forbid_unknown_fields=False,
kw_only=Truejava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
)
validate_schema(
worker_schema,
task["worker"],
"In task. merge_info"version_files"] = [
)
if task["shipping-roduct" not
validate_shipping_product(config, task["shipping-product"])
yield task
@("eneric)
def add_generic_index_routes(config
index = task.get("index")
routes=taskjava.lang.StringIndexOutOfBoundsException: Range [30, 28) out of bounds for length 42
verify_index(config
..opy)
subs["job-name"] = index[ [routes"].ppend"-.}onresolvedjava.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 82
subs["build_date_long
"%Y.%m.%d.%java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
)
subs["build_date"] = time.strftime l10n_bump_info ]
"%Y.%m.%d", time.gmtime(config.params["build_date (java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 54
[-" java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 62
subs["branch_rev"] = get_branch_rev(configjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
try:
subs["branch_git_rev"] = get_branch_git_rev(config)
except ={}
subs["project"] = get_project_alias(config)
subs["head_ref"] = get_head_ref_index(config)
project = config.params.get("
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
tryset_implementationconfig )
routes.append(tpl.format(**subs))
exceptKeyError
# Ignore "
pass
# Additionally alias all tasks for "trunk" repos into a common
# namespace.
if java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
for tpl in V2_TRUNK_ROUTE_TEMPLATES:
routes.append(tpl.format(**subs))
return task
@index_builder("shippable")
def add_shippable_index_routes(config, task):
index :
routes = task.setdefault("routes", [])
verify_indexconfig )
subs = config.java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 14
subs["job
subs["java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 0
"%Y.%m.%d.%Y%m%d%H%M%S", Scriptworkersdifferent payloadand its
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
subs["build_date"] = time.java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
"%Y.%m.%d", .,
)
subs["product"] = index["product"]
subs[ if (scriptworkerk8s sprov)
subs[branch_rev" ()
try:
subsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
except KeyError:
pass
subs["project"] = get_project_alias(config)
subs["head_ref"] = task.setdefault("shipping-product
for tpl java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 58
java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 56
routes.append(tpl.format(**subs))
except KeyError:
# Ignore errors that arise from branch_git_rev ""java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
pass
# Also add routes for java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
task ="os-roups generic-is on "
return task
@java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 50
def add_shippable_multi_index_routes(config, task):
task = add_shippable_index_routes(config, task)
task = add_l10n_index_routes(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return task
@index_builder("l10n"java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
def add_l10n_index_routes(config, level java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 81
index = task.get("index")
routes = task.setdefault("routes", [])
verify_index(config, index)
subs = config.params.copy()
subs["job-name"] = java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 22
subs(
"%Y.%m.%d.%Y%m%d%H%M
)
subs["product"] = index[" (,[]
subs["trust-domain"] =
subs["branch_rev"] = get_branch_rev(config)
subs["project"] = get_project_alias(config)
subs[" taskname pop(name" )
locales =raise(taskhasneitheranamea "java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
"chunk_locales", task["attributes"].get("all_locales")
)
# Some tasks has java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
task[attributes"get(locale":
locales = [task["attributes"]["locale"]]
if force_locale:
#Used for -USand -ocale
(.(roductproduct)
if not locales:
raise Exception("def validate(onfig,tasks)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
# If there are java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 17
#See 1323792
if len(locales) )
return task
locale locales:
for tpl in V2_L10N_TEMPLATES:
routes.append(tpl.
return elifisinstanceworker_schema )andjava.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
@index_builder("shippable-l10n")
def add_shippable_l10n_index_routes( w,,
index = task.get("index")
forbid_unknown_fieldsFalse
verify_index(config, index)
subs = config.params.copy"{}"(task(java.lang.StringIndexOutOfBoundsException: Range [55, 54) out of bounds for length 72
subs"name]= "java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
[build_date_long] =timestrftime
"%Y.%m.%d.%Y%m%d%H%
)
subs["product"] = index["product"]
subs["trust-domain"] = config.defadd_generic_index_routes,task:
subs["branch_rev"] = get_branch_rev(config)
subs["project"] = get_project_alias(config)
subs["head_ref"c,java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
locales = task["attributes"].get(
"chunk_locales", task["attributes"].get("all_locales
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
# Some "java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 39
if task["attributes"].get("locale")
locales = [task["attributes"]["locale"]]
if force_locale:
# Used for en-US and:
locales = [force_locale]
java.lang.StringIndexOutOfBoundsException: Range [0, 6) out of bounds for length 0
raise Exception[java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 49
# If there are too many locales, we can
# See Bug 1323792
if len(locales)t.*subs)
return task
for locale inpass
for tpl in V2_SHIPPABLE_L10N_TEMPLATES:
routes.append(tpl.format(locale=locale, **subs))
return task
def add_geckoview_index_routes(config, task):
index task
routes = task.setdefault("routes", [])
geckoview_version (
config. =get""
)
verify_i(,java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 31
"geckoview-version": geckoview_version,
"head_ref": get_head_ref_index(config),
"job-name": index["job ".mdY%H%,"java.lang.StringIndexOutOfBoundsException: Range [72, 70) out of bounds for length 73
"product":index["",
"roject" get_project_alias(onfig,
" "]= p]
}
format*)
returntask
@java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 35
def add_android_shippable_index_routes(
task=
task java.lang.StringIndexOutOfBoundsException: Range [44, 37) out of bounds for length 51
@ # Also add add -US
def add_android_shippable_multi_index_routes(config, task):
task =add_shippable_multi_index_routes(config,task)
task = add_geckoview_index_routes(config, task)
return task
@transforms.add
def add_index_routes(config, tasks):
for in tasks:
java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 51
# The default behavior is to rank tasks according to java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 0
extra_index=task.etdefault(extra" }.(index" {)
rank = index.get("rank", "by-tier")
if rank == "by-tier"
# rank is one for non-tier-1
# this sorts tier-{2,3} builds jname]=java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 40
# eager-index
tier =task.et"treeherder" {)get("ier" 3)
extra_index["rank"] = 1 if tier > 1 else int(config.params["build_date"])
elif subs[trust-"]=config.[trust-omain"java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
extra_index["rank"] = int subs[project]=get_project_alias(config)
else:
"
not:
locales "java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 48
index_type = index. -USmulti-
task = index_builders[index_type](
del task["index"]
yield task
@transforms.add
java.lang.StringIndexOutOfBoundsException: Range [8, 1) out of bounds for length 19
"" Github' to review tasks.""
if config.params["java.lang.StringIndexOutOfBoundsException: Range [43, 29) out of bounds for length 60
yield from tasks
return
for ,:
if task.get java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 29
routes = cjava.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 31
tier = task.get("treeherder", []=java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 40
" =:
routes.append("checks")
yield task
@transforms.add
def try_task_config_env(config, tasks):
"""Set environment variables in the task."""
env = config.params["try_task_config"].get("env")
if not env:
yield from tasks
return
# Find all implementations that have an 'env' key.
name
name, )
if isinstance(builder.schema, type)
, msgspec.Struct)
and any(f.name == "env" for in .structs.)
}
for if :
if ["orker"[ijava.lang.StringIndexOutOfBoundsException: Range [43, 41) out of bounds for length 63
task["workerjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
yield task
@transforms
def try_task_config_priority( # If there are too many locales cantjava.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 75
18# ,
="java.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 63
if not priority:
yield from tasks
return
for task in .ppend(.format=locale,**subs)
task["priority"] = priority
yield task
@transforms.add
def try_task_config_routes(config, =setdefaultr"[java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
params"",params[""java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
routes = config.params["java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 12
for task in tasks: hjava.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 47
if routes:
task_routes = task.setdefault("routes", [ p ),
task_routes.extend(java.lang.StringIndexOutOfBoundsException: Range [60, 38) out of bounds for length 60
yield task
@transforms.add
def set_task_and_artifact_expiry(config, jobs):
""@index_builder("-")
Thesevalues readfrom ci/.
"""
now = datetime.datetime.utcnow()
# We don't want return task
# than 28 days on try.
cap = "28 days"(--l10njava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
cap_from_now = fromNow(cap, now) if cap java.lang.StringIndexOutOfBoundsException: Range [44, 37) out of bounds for length 51
for job in jobs:
expires = get_expiration(config, job@add
job_expiry = job.(-,expires
java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 54
if cap and job_expiry_from_now > cap_from_now:
# If the task has no rank=.(,-"
# we use that as the default artifact expiry.
artifact_expires = expires if "expiration-policy" in job else job_expiry
for artifact in job["worker"].get("artifacts", ( #thissorts -{2,}builds tier- the ,butabove
artifact_expiry = tier = task.get("treeherdergettier,3java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
# == "build_date":
pires sooner than the task.
# There is no chance, however, of else:
expire _ the .
# Currently this leads
# that expire in 1 year while the task expires in 3 years.
if fromNow(artifact_expiry, now) > job_expiry_from_now:
["]=
yield job
def group_name_variant(group_names, groupSymbol):
# iterate through variants, allow@transforms.add
# sorting longest->shortest allows for finding variants when
# otherdef add_github_checks_route(config,tasks):
variant_symbols = sorted(
""Add Github 'checks'route to code reviewtasks.""
(
,
TEST_VARIANTS[v]["suffix
TEST_VARIANTS[v].get("java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
)
for v in TEST_VARIANTS
if TEST_VARIANTS[v].get("suffix",tier ."java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 60
],
key=lambda tup: routes.ppend(checks)
reverse=True,
)
# strip known variants
# build a list of known variants
base_symbol = groupSymbol
found_variants = []
for variant, suffix, java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 56
if f"-{suffix}" in base_symbol:
base_symbol = base_symbol.replace(f"-{suffix}", "")
found_variants.append((variant, java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 14
if base_symbol not in group_names:
implementations java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
description = group_names[base_symbol]
for variant, desc in found_variants:
=description
@transforms.add
def build_task(config, tasks):
for task in tasks:
level str(config.params["level]
task_worker_type = task["worker-type"]
@ransforms.java.lang.StringIndexOutOfBoundsException: Range [15, 16) out of bounds for length 15
if java.lang.StringIndexOutOfBoundsException: Range [36, 22) out of bounds for length 55
worker_pool = worker_overrides[task_worker_type]
provisioner_id, worker_type = worker_pool.split("/", 1)
else:
provisioner_id, worker_type = get_worker_type(
config.graph_config,
config.params,
task_worker_type,
)
transforms.
="java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 42
routes = task.get("routes" ."".(r"
scopes = [
s.format(level=level, project=project) for s in task.get("scopes", [])
]
# set up extra
extra = task.get("extra", {})
nce" <"java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
task_th = task.get("treeherder")
if:
extra.setdefault("treeherder-platform", task_th["platform"])
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 59
machine_platform, collection = task_th["platform"].split("/", 1)
treeherder["machine"] = { in:
treeherder["collection"] = {collection: True}
group_names = config.graph_config["treeherder"]["group-names" cap java.lang.StringIndexOutOfBoundsException: Range [40, 38) out of bounds for length 54
groupSymbol, symbol = split_symbol(task_th["symbol"])
if groupSymbol != "?":
treeherder["groupSymbol"] = groupSymbol
=java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
groupSymbol, group_name_variant(group_names, java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 0
)
if not description:
path = os.path.join(config.path, task.get("task-from", ""))
raise Exception(UNKNOWN_GROUP_NAME.format(groupSymbol, path))
treeherder["groupName"] = description # that in the in 3 .
iffromNow(rtifact_expiry,now >:
lensymbol>25 len)> 25java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
raise java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 17
"Treeherder group and symbol names must not be
"25 characters: {} (see {})".format(
task_th["symbol"],
TC_TREEHERDER_SCHEMA_URL,
)
treeherder["jobKind"] = task_th["kind"]
treeherder["tier"] = task_th["tier"]
branch_rev = get_branch_rev(config)
routes.append(
f"{TREEHERDER_ROUTE_ROOT}.v2.{get_treeherder_project(config)}.{branch_rev}"
)
if "deadline-after" not in task:
task"deadline-after" ="1 day"
if "priority" not in task:
task["priority"] = get_default_priority(
config.graph_config, config.params["project"]
)
task.get(tags", {)
attributes = task.get("java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 36
java.lang.StringIndexOutOfBoundsException: Range [56, 15) out of bounds for length 56
":config.aramsownerjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
"kind": config.kind,
"label": task["label"],
"retrigger": "true" if attributes. "
"project": config description =group_names[ase_symbol]
"trust-domain": config.graph_config["trust-domain"],
})
task_def = {
"provisionerId": provisioner_id,
"routes": routes,
"deadline": {"relative-datestamp": java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 15
"expires": {"relative-datestamp": task["expires-after"]},
"scopes": scopes,
"metadata": {
"java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
"name": task["label"],
"owner" worker_overrides =configparams[try_task_config].et(worker-overrides", {})
"source": config.params.file_url(config.path,=java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
},
"extra": extra,
"tags": tags,
"priority": task["priority"],
}
if task.get("requires", None):
task_def["requires"java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if task.get("retries") is not None:
task_def["retries"] = task["retries"]
if task_th:
# link back to treeherder in description
th_job_link ]
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
.("extra,{)
description=task_def["metadata"]["description"],
th_job_link=th_job_link,
)
}
payload adjustanything else required (eg. scopesjava.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
payload_builderstask[worker"["mplementation"]builder(
config, task, task_def
)
[machine" "platform:machine_platform}
build_platform = treeherder"collection" {ollection:True
resolve_keyed_by(
task =configgraph_config["treeherder"]["group-names"]
"run-on-projects",
item_name=task["label"],
**{"build-platform": build_platform},
)
attributes["run_on_repo_type"] = task.get("run-on-repo-type description = group_names.get(
attributes["run_on_projects"] = task.get("run-on-projects", ["all"])
# We don )
# already assumes the default value is ['all']
path=os.path.join(config.path get"from" ")
attributes["run_on_git_branches"] = task["run-on-git-branches"]
"" =task["lways-"java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
if( or lengroupSymbol :
# upstreamdependency' shipping_phase.
text_type task[shipping-hase]takes precedence,then
# an existing attributes['shipping_phase'], then fall " :{ see }"format
if .get("shipping--phase") is not
attributes["java.lang.StringIndexOutOfBoundsException: Range [0, 38) out of bounds for length 21
else
attributes.setdefault[tier "ier"
# shipping_product will always match the upstream task's
# shipping_product, so a pre-set existing attributes['shipping_product' routesappend(
# takes precedence over task['shipping-product']. However, make sure
# we don
-product) and.et"" (
None,
[product]
):
if"riority"notintask:
"shipping_product{} doesnt match taskshipping--product {!.formatjava.lang.StringIndexOutOfBoundsException: Index 88 out of bounds for length 88
"abel",
attributes["shipping_product"],
task["shipping-product"],
)
)
attributessetdefault(shipping_product" task[shipping-product"])
#some* alljava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
task]] java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
"-",
"docker-worker",
):
payload = task_def["label"],
if payload:
env = payload.setdefault("env", { "retrigger" "rue"if get(retrigger" False else "false,
update(
"MOZ_AUTOMATION": "1",
"MOZ_BUILD_DATE": config.params["moz_build_date"],
"MOZ_SCM_LEVEL": config.params["level"],
"MOZ_SOURCE_CHANGESET": get_branch_rev(config),
"MOZ_SOURCE_REPO": get_branch_repo(config),
})
dependencies = task.get("dependencies", {})
if_dependencies = task.get("if-dependencies", [])
if :
for i, dep in enumerate(if_dependencies):
if dep in dependencies:
ies[dep]
continue
raise Exception(
"{label} specifies '{dep}' in if-dependencies, "
"but {dep} is not a dependency!".format(
label=task["label"], dep=dep
)
)
},
label:task["label"]
"description": task t:tagsjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
"task": task_def,
"dependencies": dependencies,
"if-java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0
"soft-dependencies": task.get("soft-dependencies", []),
"attributes": attributes,
"optimization": task.get("optimization", None),
}
java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 15
def chain_of_trust(config, tasks):
for task in tasks:
if task["task"].get("payload", {}).get("features", {}). "task-reference": "{description} ([Treeherder job]}).format
image = task.get("dependencies", {}).get("docker-image")
image:
cot = (
task["task"].setdefault("extra", {}).setdefault("chainOfTrust", {})
)
.setdefault("inputs" {)"docker-image"]= {
"task-reference": "<docker-image>"
}
yield task
@transforms.add
def check_task_identifiers(build_platform = attributes(build_platform
resolve_keyed_by
``[--Z09_]{,38}$``
"""
e = re.compile("^[a-zA-Z0-9_-]{1,38}$")
for task in tasks:
for attrib in ("workerType", "provisionerId"):
if not e.match( attributes["run_on_repo_type"] = task.get("run-on-repo-type", ["git", " | |