.taskcluster.yml
author Emilio Cobos Álvarez <emilio@crisal.io>
Thu, 21 Dec 2017 00:10:49 -0600
changeset 397127 73d7cbc68383e859a039873298a4990a11b460df
parent 396877 2a6ba78c9e0130f38aef82e7b6d7f88f26bfc517
child 397802 5ce40a4ffe442f8f4cf4cd839f54bdc936567787
permissions -rw-r--r--
servo: Merge #19617 - style: Fix inheritance of animation and transition properties of mismatched length (from emilio:inherit-animation-stuff); r=hiro At least when the animation-name length is bigger than the animation properties, we mess up inheritance and only set properly the specified counts, then don't cycle it. The nicer fix for this is making these vectors properly, and move the cycling logic at used-value time (bug 1420928). Same for transitions. Bug: 1426246 Reviewed-by: hiro MozReview-Commit-ID: 3cguzIvfMFU Source-Repo: https://github.com/servo/servo Source-Revision: 9a4a2b07aa15efe3c41debb3ec199557694c4d62

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