.taskcluster.yml
author Narcis Beleuzu <nbeleuzu@mozilla.com>
Fri, 12 Jan 2018 11:32:58 +0200
changeset 719795 c011bb60725113e3da91a813b8ef250cf2109b3d
parent 715914 5ce40a4ffe442f8f4cf4cd839f54bdc936567787
child 718531 e81c5b84127f46f51ac97d4ab731b847f2f0d2db
child 720079 4936907a3a91da2ca0908c31c66d6297bcde472a
permissions -rw-r--r--
Backed out 5 changesets (bug 1418425) for windows build bustage "mbsdiff.exe : fatal error LNK1120". on a CLOSED TREE Backed out changeset 8154486d3e00 (bug 1418425) Backed out changeset d32ae48690a7 (bug 1418425) Backed out changeset 772538a846cb (bug 1418425) Backed out changeset 29fd023f999f (bug 1418425) Backed out changeset 218077e82115 (bug 1418425)

# This file is rendered via JSON-e by
# - mozilla-taskcluster - https://docs.taskcluster.net/reference/integrations/mozilla-taskcluster/docs/taskcluster-yml
# - cron tasks - taskcluster/taskgraph/cron/decision.py
# - action tasks - taskcluster/taskgraph/actions/registry.py
version: 1
tasks:
  - $let:
      # sometimes the push user is just `ffxbld` or the like, but we want an email-like field..
      ownerEmail: {$if: '"@" in push.owner', then: '${push.owner}', else: '${push.owner}@noreply.mozilla.org'}
      # ensure there's no trailing `/` on the repo URL
      repoUrl: {$if: 'repository.url[-1] == "/"', then: {$eval: 'repository.url[:-1]'}, else: {$eval: 'repository.url'}}
    in:
      taskId: {$if: 'tasks_for != "action"', then: '${as_slugid("decision")}'}
      taskGroupId:
        $if: 'tasks_for == "action"'
        then:
          '${action.taskGroupId}'
        else:
          '${as_slugid("decision")}' # same as taskId; this is how automation identifies a decision tsak
      schedulerId: 'gecko-level-${repository.level}'

      created: {$fromNow: ''}
      deadline: {$fromNow: '1 day'}
      expires: {$fromNow: '1 year 1 second'} # 1 second so artifacts expire first, despite rounding errors
      metadata:
        $merge:
          - owner: "${ownerEmail}"
            source: "${repoUrl}/raw-file/${push.revision}/.taskcluster.yml"
          - $if: 'tasks_for == "hg-push"'
            then:
              name: "Gecko Decision Task"
              description: 'The task that creates all of the other tasks in the task graph'
            else:
              $if: 'tasks_for == "action"'
              then:
                name: "Action: ${action.title}"
                description: '${action.description}'
              else:
                name: "Decision Task for cron job ${cron.job_name}"
                description: 'Created by a [cron task](https://tools.taskcluster.net/tasks/${cron.task_id})'

      provisionerId: "aws-provisioner-v1"
      workerType: "gecko-${repository.level}-decision"

      tags:
        $if: 'tasks_for == "hg-push"'
        then: {createdForUser: "${ownerEmail}"}
        else:
          $if: 'tasks_for == "action"'
          then:
            createdForUser: '${ownerEmail}'
            kind: 'action-callback'

      routes:
        $if: 'tasks_for == "hg-push"'
        then:
          - "index.gecko.v2.${repository.project}.latest.firefox.decision"
          - "index.gecko.v2.${repository.project}.revision.${push.revision}.firefox.decision"
          - "index.gecko.v2.${repository.project}.pushlog-id.${push.pushlog_id}.decision"
          - "tc-treeherder.v2.${repository.project}.${push.revision}.${push.pushlog_id}"
          - "notify.email.${ownerEmail}.on-failed"
          - "notify.email.${ownerEmail}.on-exception"
        else:
          - "tc-treeherder.v2.${repository.project}.${push.revision}.${push.pushlog_id}"
          - $if: 'tasks_for == "action"'
            then: "index.gecko.v2.${repository.project}.pushlog-id.${push.pushlog_id}.actions.${ownTaskId}"
            else: "index.gecko.v2.${repository.project}.latest.firefox.decision-${cron.job_name}"

      scopes:
        $if: 'tasks_for == "hg-push"'
        then:
          - 'assume:repo:${repoUrl[8:]}:*'
          - 'queue:route:notify.email.${ownerEmail}.*'
        else:
          $if: 'tasks_for == "action"'
          then:
            - '${action.repo_scope}'
          else:
            - 'assume:repo:${repoUrl[8:]}:cron:${cron.job_name}'

      dependencies: []
      requires: all-completed

      priority: lowest
      retries: 5

      payload:
        env:
          # checkout-gecko uses these to check out the source; the inputs
          # to `mach taskgraph decision` are all on the command line.
          $merge:
            - GECKO_BASE_REPOSITORY: 'https://hg.mozilla.org/mozilla-unified'
              GECKO_HEAD_REPOSITORY: '${repoUrl}'
              GECKO_HEAD_REF: '${push.revision}'
              GECKO_HEAD_REV: '${push.revision}'
              GECKO_COMMIT_MSG: {$if: 'tasks_for != "action"', then: '${push.comment}'}
              HG_STORE_PATH: /builds/worker/checkouts/hg-store
              TASKCLUSTER_CACHES: /builds/worker/checkouts
            - $if: 'tasks_for == "action"'
              then:
                ACTION_TASK_GROUP_ID: '${action.taskGroupId}'
                ACTION_TASK_ID: {$json: {$eval: 'taskId'}}
                ACTION_TASK: {$json: {$eval: 'task'}}
                ACTION_INPUT: {$json: {$eval: 'input'}}
                ACTION_CALLBACK: '${action.cb_name}'
                ACTION_PARAMETERS: {$json: {$eval: 'parameters'}}

        cache:
          level-${repository.level}-checkouts-sparse-v1: /builds/worker/checkouts

        features:
          taskclusterProxy: true
          chainOfTrust: true

        # Note: This task is built server side without the context or tooling that
        # exist in tree so we must hard code the hash
        # XXX Changing this will break Chain of Trust without an associated puppet and
        # scriptworker patch!
        image: 'taskcluster/decision:2.0.0@sha256:4039fd878e5700b326d4a636e28c595c053fbcb53909c1db84ad1f513cf644ef'

        maxRunTime: 1800

        command:
          - /builds/worker/bin/run-task
          - '--vcs-checkout=/builds/worker/checkouts/gecko'
          - '--sparse-profile=build/sparse-profiles/taskgraph'
          - '--'
          - bash
          - -cx
          - $let:
              extraArgs: {$if: 'tasks_for == "cron"', then: '${cron.quoted_args}', else: ''}
            in:
              $if: 'tasks_for == "action"'
              then: >
                cd /builds/worker/checkouts/gecko &&
                ln -s /builds/worker/artifacts artifacts &&
                ./mach --log-no-times taskgraph action-callback
              else: >
                cd /builds/worker/checkouts/gecko &&
                ln -s /builds/worker/artifacts artifacts &&
                ./mach --log-no-times taskgraph decision
                --pushlog-id='${push.pushlog_id}'
                --pushdate='${push.pushdate}'
                --project='${repository.project}'
                --message="$GECKO_COMMIT_MSG"
                --owner='${ownerEmail}'
                --level='${repository.level}'
                --base-repository="$GECKO_BASE_REPOSITORY"
                --head-repository="$GECKO_HEAD_REPOSITORY"
                --head-ref="$GECKO_HEAD_REF"
                --head-rev="$GECKO_HEAD_REV"
                ${extraArgs}

        artifacts:
          'public':
            type: 'directory'
            path: '/builds/worker/artifacts'
            expires: {$fromNow: '1 year'}

      extra:
        $merge:
          - treeherder:
              $merge:
                - machine:
                    platform: gecko-decision
                - $if: 'tasks_for == "hg-push"'
                  then:
                    symbol: D
                  else:
                    $if: 'tasks_for == "action"'
                    then:
                      groupName: 'action-callback'
                      groupSymbol: AC
                      symbol: "${action.symbol}"
                    else:
                      groupSymbol: cron
                      symbol: "${cron.job_symbol}"
          - $if: 'tasks_for == "action"'
            then:
              parent: '${action.taskGroupId}'
              action:
                name: '${action.name}'
                context:
                  taskGroupId: '${action.taskGroupId}'
                  taskId: {$eval: 'taskId'}
                  input: {$eval: 'input'}
                  parameters: {$eval: 'parameters'}
          - tasks_for: '${tasks_for}'