.taskcluster.yml
author Phil Ringnalda <philringnalda@gmail.com>
Wed, 20 Sep 2017 19:57:39 -0700
changeset 382104 d88e5dec2638ae6d34527726ff0a9cb8d9336036
parent 380123 bda524beac249b64aa36016800502a34073bf35a
child 386740 215bc8a3310cde31dd6f09c72f8e5c84a904023f
permissions -rw-r--r--
Backed out 12 changesets (bug 1383880) for decision task bustage CLOSED TREE Backed out changeset fd3615e7e0a3 (bug 1383880) Backed out changeset 8cceb6a82bfb (bug 1383880) Backed out changeset 571a6c9054a5 (bug 1383880) Backed out changeset ec2b8ba5a949 (bug 1383880) Backed out changeset 8e5847d9acda (bug 1383880) Backed out changeset b354fdf6e233 (bug 1383880) Backed out changeset ebdd6ccbcfca (bug 1383880) Backed out changeset ebcc9d20981a (bug 1383880) Backed out changeset 97eedc84d6e8 (bug 1383880) Backed out changeset a3116da52b4e (bug 1383880) Backed out changeset b3eb0c939720 (bug 1383880) Backed out changeset 7c07cb798530 (bug 1383880) MozReview-Commit-ID: EPDuQHr7w2y

# 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
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: '${as_slugid("decision")}'
    taskGroupId: '${as_slugid("decision")}' # same as tsakId; 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:
            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}"}

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

    scopes:
      $if: 'tasks_for == "hg-push"'
      then:
        - 'assume:repo:${repoUrl[8:]}:*'
        - 'queue:route:notify.email.${ownerEmail}.*'
      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.
        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: '${push.comment}'
        HG_STORE_PATH: /builds/worker/checkouts/hg-store
        TASKCLUSTER_CACHES: /builds/worker/checkouts

      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

      # 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'
        - '--'
        - bash
        - -cx
        - $let:
            extraArgs: {$if: 'tasks_for == "hg-push"', then: '', else: '${cron.quoted_args}'}
          # NOTE: the explicit reference to mozilla-central below is required because android-stuff
          # still uses tc-vcs, which does not support mozilla-unified
          # https://bugzilla.mozilla.org/show_bug.cgi?id=1383973
          in: >
            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='https://hg.mozilla.org/mozilla-central'
            --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:
      treeherder:
        $merge:
          - machine:
              platform: gecko-decision
          - $if: 'tasks_for == "hg-push"'
            then:
              symbol: D
            else:
              groupSymbol: cron
              symbol: "${cron.job_symbol}"