.taskcluster.yml
author Steven MacLeod <steven@smacleod.ca>
Wed, 09 May 2018 13:56:23 -0400
changeset 60931 a9fc16e8d99b21aaf8078bc2e7b706439c2d4568
parent 60490 31ad23dc587d4d0adac4712ebf6d7514322d446f
child 60579 53cc6f56731c68ac11697bed0b5305c2a7865149
child 60621 363b4781eba992fbbd139a9ddbee12667479cc74
child 60622 b799032c416a2cb17aa5c84a1f98104cfd3b7666
child 60623 61fa8d25d4d626b1235684fe8dd60466b464662c
child 60625 9ba85dd06f789855074539cb3362299790ffa29c
child 60626 767c5677c80f0a568557ff6fe18c0f2f665a3b3f
child 60627 db2357252cde94c428a8cb7a92c5a9e0c6527f31
child 60628 250642a88ec3b84ac78856a222b77fbf873a3373
child 60629 80eb5c230399ca37b9dcabcaf5300ec9ce6cdaf6
child 60635 6d749f3ef7de493bfdb5e562ad7e59e75d738a0e
child 60736 9c108fe8d5645e7b28be62986fd02c0d93e3f268
child 61487 9e260ce9dba255dd1ff38b217e3070f9377401d5
child 61489 0d715e3cb1ea61e18ee6944eda51b76e1fb4e6e0
child 61490 4e676149444c38ddd07242c692af93d946e4fd3a
child 61491 56906045a0bae1908a7d986387bd6c4d63d00f69
child 61494 1423c1998aada14fb420aa35edf7df956aac5be7
child 61663 27e34a19848d890556826d5a5f6f820df99026cf
child 61665 9ded13a85b0e1bdd7a744290707e462112b23ef1
child 61674 81661ccfca068364a7ba6da1b3a7baa082bf0046
child 61680 05b33c6393a602aaa1e3649f920fdb5e81882d5f
child 61694 25e9d4a34f67dcb85418109be46e8972682b39bd
child 61697 c796d70985bd7357fab25da1c9d958b2146bf3cf
child 64254 c31c128cd17ad9aa55edb345ac89d29984e2b262
child 64394 1c2f8c1c9325fdb7aa36ce51e36e7ff56250b2d7
child 64427 3bc3f9169344572a8e7941fdc299d118952d7286
child 64428 7ca5fd04a42666283b654fb37ab62c41d395189a
child 64480 076f49a1ef6c8abbe0a7a899858641dc71eca3bb
child 64481 aca8a9a5051afa4f7a29b190aa37d5fd39d55adc
child 64589 169cb0cce356b053f9d17d3f65d8b67c5ffe9162
child 64590 4e4e6b7f49ce9270c795a0e1e5a47b576911c415
child 64591 01f23b0c0187d18491a5df82987a3da02febeb48
child 64789 75eb88a9d2a9605b27fde1354ec008bfa761c2ca
permissions -rw-r--r--
Bug 1460372 - Update .arcconfig to make history mutable. r=Fallen Reviewers: Fallen Reviewed By: Fallen Bug #: 1460372 Differential Revision: https://phabricator.services.mozilla.com/D1252

---
# This file is rendered via JSON-e by
# - mozilla-taskcluster - https://docs.taskcluster.net/reference/integrations/mozilla-taskcluster/docs/taskcluster-yml
# - 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: "Thunderbird 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:
        $flatten:
          - "tc-treeherder.v2.${repository.project}.${push.revision}.${push.pushlog_id}"
          - "tc-treeherder-stage.v2.${repository.project}.${push.revision}.${push.pushlog_id}"
          - $if: 'tasks_for == "hg-push"'
            then:
              - "index.comm.v2.${repository.project}.latest.taskgraph.decision"
              - "index.comm.v2.${repository.project}.revision.${push.revision}.taskgraph.decision"
              - "index.comm.v2.${repository.project}.pushlog-id.${push.pushlog_id}.decision"
              - "notify.email.${ownerEmail}.on-failed"
              - $if: '"mozilla@hocat.ca" in ownerEmail'
                # Until taskcluster is ready for general consumption, don't report exceptions from taskcluster.
                then: "notify.email.${ownerEmail}.on-exception"
            else:
              - $if: 'tasks_for == "action"'
                then: "index.comm.v2.${repository.project}.pushlog-id.${push.pushlog_id}.actions.$ownTaskId"
                else: "index.comm.v2.${repository.project}.latest.taskgraph.decision-${cron.job_name}"

      scopes:
        $if: 'tasks_for == "hg-push"'
        then:
          - 'assume:repo:${repoUrl[8:]}:branch:default'
          - '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: 'https://hg.mozilla.org/mozilla-central'
              GECKO_HEAD_REF: 'default'
              COMM_BASE_REPOSITORY: 'https://hg.mozilla.org/comm-central'
              COMM_HEAD_REPOSITORY: '${repoUrl}'
              COMM_HEAD_REF: '${push.revision}'
              COMM_HEAD_REV: '${push.revision}'
              HG_STORE_PATH: /buillds/worker/checkouts/hg-store
              TASKCLUSTER_CACHES: /builds/worker/checkouts
            - $if: 'tasks_for != "action"'
              then:
                COMM_COMMIT_MSG: '${push.comment}'
            - $if: 'tasks_for == "action"'
              then:
                ACTION_TASK_GROUP_ID: '${ownTaskId}'
                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-v2: /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.1.0@sha256:6db3b697d7a3c7aba440d72f04199331b872111cefff57206b8b8b1d53230360'

        maxRunTime: 1800

        # TODO use mozilla-unified for the base repository once the tc-vcs
        # tar.gz archives are created or tc-vcs isn't being used.
        command:
          - /builds/worker/bin/run-task
          - '--vcs-checkout=/builds/worker/checkouts/gecko'
          - '--sparse-profile=build/sparse-profiles/taskgraph'
          - '--comm-checkout=/builds/worker/checkouts/gecko/comm'
          - '--'
          - 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
                --root=comm/taskcluster/ci
              else: >
                cd /builds/worker/checkouts/gecko &&
                ln -s /builds/worker/artifacts artifacts &&
                ./mach --log-no-times taskgraph decision
                --root=comm/taskcluster/ci
                --pushlog-id='${push.pushlog_id}'
                --pushdate='${push.pushdate}'
                --project='${repository.project}'
                --message="$COMM_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"
                --comm-base-repository="$COMM_BASE_REPOSITORY"
                --comm-head-repository="$COMM_HEAD_REPOSITORY"
                --comm-head-ref="$COMM_HEAD_REF"
                --comm-head-rev="$COMM_HEAD_REV"
                --try-task-config-file=comm/try_task_config.json
                ${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'}
          - $if: 'tasks_for == "cron"'
            then:
              cron: {$json: {$eval: 'cron'}}
          - tasks_for: '${tasks_for}'