.taskcluster.yml
author Kris Maglione <maglione.k@gmail.com>
Wed, 04 Oct 2017 20:06:28 -0700
changeset 386544 4f6ff8f40729503c749f1e7f966182807fa7993f
parent 380123 bda524beac249b64aa36016800502a34073bf35a
child 386740 215bc8a3310cde31dd6f09c72f8e5c84a904023f
permissions -rw-r--r--
Bug 1404198: Part 1 - Add non-virtual constructor for nsIObject(Input|Output)Stream and update existing callers. r=njn MozReview-Commit-ID: 3eoh6AwDJyz

# 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}"