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 492595 5bd0f4d6fed870fbe5697035707770522be60327
parent 492594 5f6eda63b4a1769165e61b8f989a7cfd20f99f9c
child 492596 80aaf77b813f333734fc05e60472a2b86f422d97
push id1815
push userffxbld-merge
push dateMon, 15 Oct 2018 10:40:45 +0000
treeherdermozilla-release@18d4c09e9378 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdustin, aki, ritu
bugs1486970
milestone63.0
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
@@ -8,16 +8,22 @@ tasks:
   # takes place.
   - $if: 'tasks_for in ["hg-push", "action", "cron"]'
     then:
       $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
@@ -58,36 +64,37 @@ tasks:
               kind: 'action-callback'
             else:
               $if: 'tasks_for == "cron"'
               then:
                 kind: cron-task
 
         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}-*'
@@ -109,17 +116,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}'
@@ -152,18 +159,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"