Bug 1486970 - Create revision and pushlog-id index routes for cron decision tasks. r=dustin,aki, a=ritu
authorJustin Wood <Callek@gmail.com>
Fri, 14 Sep 2018 16:47:09 +0000
changeset 481151 933eb444a83989de2bfc8b117d76276252118201
parent 481150 8258e7984a2cf7f13f2fe4bfe952b8b20b13e560
child 481161 8d8e12fa6cd267ef613ca94b9b2ebbfb57759b2e
push id1791
push userryanvm@gmail.com
push dateThu, 20 Sep 2018 20:41:47 +0000
treeherdermozilla-release@933eb444a839 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdustin, aki, ritu
bugs1486970
milestone62.0.2
Bug 1486970 - Create revision and pushlog-id index routes for cron decision tasks. r=dustin,aki, a=ritu This hardcodes the push info in .taskgraph.yml for cron so that we don't break Chain Of Trust (signing) on other branches (uplifts) when we adjust scriptworker to start passing in this data to json-e. This allows us to incrementally roll this out without needing a flag day, and will be needed on all production branches. Differential Revision: https://phabricator.services.mozilla.com/D4501
.taskcluster.yml
--- a/.taskcluster.yml
+++ b/.taskcluster.yml
@@ -4,16 +4,22 @@
 # - 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'}}
+      # Hardcode cron push info for now, so that we can transition to using real values without breaking callers of Chain of Trust
+      _pushId: {$if: 'tasks_for == "cron"', then: '-1', else: {$eval: 'push.pushlog_id'}}
+      # action tasks can fail because of no pushdate or push comment information in context, so include them in
+      # hardcodes (even though they don't use these variables)
+      _pushDate: {$if: 'tasks_for == "cron" || tasks_for == "action"', then: '0', else: {$eval: 'push.pushdate'}}
+      _pushComment: {$if: 'tasks_for == "cron" || tasks_for == "action"', then: '', else: {$eval: 'push.comment'}}
     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
@@ -48,36 +54,37 @@ tasks:
         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.v2.${repository.project}.${push.revision}.${_pushId}"
           - $if: 'tasks_for == "hg-push"'
             then:
               - "index.gecko.v2.${repository.project}.latest.taskgraph.decision"
               - "index.gecko.v2.${repository.project}.revision.${push.revision}.taskgraph.decision"
-              - "index.gecko.v2.${repository.project}.pushlog-id.${push.pushlog_id}.decision"
+              - "index.gecko.v2.${repository.project}.pushlog-id.${_pushId}.decision"
               - "notify.email.${ownerEmail}.on-failed"
               - "notify.email.${ownerEmail}.on-exception"
               # These are the old index routes for the decision task.
               # They are still here so external tools that referenced them continue to work.
               - "index.gecko.v2.${repository.project}.latest.firefox.decision"
               - "index.gecko.v2.${repository.project}.revision.${push.revision}.firefox.decision"
             else:
               $if: 'tasks_for == "action"'
               then:
               - "notify.email.taskcluster-notifications+action-task@mozilla.com.on-failed"
               - "notify.email.taskcluster-notifications+action-task@mozilla.com.on-exception"
-              - "index.gecko.v2.${repository.project}.pushlog-id.${push.pushlog_id}.actions.${ownTaskId}"
+              - "index.gecko.v2.${repository.project}.pushlog-id.${_pushId}.actions.${ownTaskId}"
               else:  # cron
               - "index.gecko.v2.${repository.project}.latest.taskgraph.decision-${cron.job_name}"
+              # These are the old index routes for the decision task.
               - "index.gecko.v2.${repository.project}.latest.firefox.decision-${cron.job_name}"
 
       scopes:
         $if: 'tasks_for == "hg-push"'
         then:
           - 'assume:repo:${repoUrl[8:]}:branch:default'
           - 'queue:route:notify.email.${ownerEmail}.*'
           - 'in-tree:hook-action:project-gecko/in-tree-action-${repository.level}-*'
@@ -99,17 +106,17 @@ tasks:
         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}'}
+              GECKO_COMMIT_MSG: {$if: 'tasks_for != "action"', then: '${_pushComment}'}
               HG_STORE_PATH: /builds/worker/checkouts/hg-store
               TASKCLUSTER_CACHES: /builds/worker/checkouts
             - $if: 'tasks_for == "action"'
               then:
                 ACTION_TASK_GROUP_ID: '${taskGroupId}'     # taskGroupId of the target task
                 ACTION_TASK_ID: {$json: {$eval: 'taskId'}} # taskId of the target task (JSON-encoded)
                 ACTION_INPUT: {$json: {$eval: 'input'}}
                 ACTION_CALLBACK: '${action.cb_name}'
@@ -142,18 +149,18 @@ tasks:
               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}'
+                --pushlog-id='${_pushId}'
+                --pushdate='${_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"