# 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/.
"""
Support
for running hazard jobs via dedicated scripts
"""
from typing
import Literal, Optional, Union
from taskgraph.util.schema
import Schema
from gecko_taskgraph.transforms.job
import configure_taskdesc_for_run, run_job_using
from gecko_taskgraph.transforms.job.common
import (
add_tooltool,
docker_worker_add_artifacts,
setup_secrets,
)
class HazRunSchema(Schema, kw_only=
True):
using: Literal[
"hazard"]
# The command to run within the task image (passed through to the worker)
command: str
# The mozconfig to use; default in the script is used if omitted
mozconfig: Optional[str] =
None
# The set of secret names to which the task has access; these are prefixed
# with `project/releng/gecko/{treeherder.kind}/level-{level}/`. Setting
# this will enable any worker features required and set the task's scopes
# appropriately. `true` here means ['*'], all secrets. Not supported on
# Windows
secrets: Optional[Union[bool, list[str]]] =
None
# Base work directory used to set up the task.
workdir: Optional[str] =
None
@run_job_using(
"docker-worker",
"hazard", schema=HazRunSchema)
def docker_worker_hazard(config, job, taskdesc):
run = job[
"run"]
worker = taskdesc[
"worker"] = job[
"worker"]
worker.setdefault(
"artifacts", [])
docker_worker_add_artifacts(config, job, taskdesc)
worker.setdefault(
"required-volumes", []).append(
"{workdir}/workspace".format(**run)
)
add_tooltool(config, job, taskdesc)
setup_secrets(config, job, taskdesc)
env = worker[
"env"]
env.update({
"MOZ_BUILD_DATE": config.params[
"moz_build_date"],
"MOZ_SCM_LEVEL": config.params[
"level"],
})
# script parameters
if run.get(
"mozconfig"):
env[
"MOZCONFIG"] = run.pop(
"mozconfig")
run[
"using"] =
"run-task"
run[
"cwd"] = run[
"workdir"]
configure_taskdesc_for_run(config, job, taskdesc, worker[
"implementation"])