.taskcluster.yml
author Nick Alexander <nalexander@mozilla.com>
Wed, 19 Jul 2017 15:45:31 -0700
changeset 420463 23330f35f95778ef167c583ddd3e2c99e96198c2
parent 419402 23a8fd85ad7225dce11834ca42e48ccf46621d78
child 425064 469f4ca42da33d0c11ae7addd155dc5243182d62
permissions -rw-r--r--
Bug 1255227 - Part 2: Bootstrap and upload android-sdk-linux.tar.xz. r=dustin,sebastian Before this patch, we used the Gradle sdk-manager-plugin to download and install Android SDKs and other dependencies. This plugin is now deprecated; the main dependency downloading functionality has been incorporated into the Android-Gradle build plugin. Unfortunately, it's been incorporated into newer versions that in turn require newer toolchains than we currently support, so we can't use the new functionality immediately. Rather than replace sdk-manager-plugin with equivalent Gradle-based functionality, this ticket uses recently added bootstrap functionality to bootstrap the Android SDK during the dependencies task. It then _uses_ that SDK to run the dependency fetching task, _produces_ an android-sdk-linux.tar.xz, and then _uploads_ the new artifact as a private artifact, ready to be pushed into tooltool. This avoids engineers building this critical part of the toolchain locally themselves, and will also feed into ongoing work to push toolchain artifacts into build jobs in Task Cluster. MozReview-Commit-ID: B6FC0ugaCef

# 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-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: /home/worker/checkouts/hg-store

      cache:
        level-${repository.level}-checkouts: /home/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:0.1.8@sha256:195d8439c8e90d59311d877bd2a8964849b2e43bfc6c234092618518d8b2891b'

      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:
        - /home/worker/bin/run-task
        - '--vcs-checkout=/home/worker/checkouts/gecko'
        - '--'
        - 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 /home/worker/checkouts/gecko &&
            ln -s /home/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: '/home/worker/artifacts'
          expires: {$fromNow: '1 year'}

    extra:
      treeherder:
        $if: 'tasks_for == "hg-push"'
        then:
          symbol: D
        else:
          groupSymbol: cron
          symbol: "${cron.job_symbol}"