{"action":"created","comment":{"url":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/comments/77635339","id":77635339,"diff_hunk":"@@ -30,9 +30,39 @@ The payload comprises of a command to run, environment variables to be set\n The worker will run the task, upload log files, and report back status to the\n Queue.\n \n-## Building Firefox Desktop for Windows\n+## Features\n \n-Please see [Building Firefox for Windows™ on Try using\n-TaskCluster](http://petemoore.github.io/general/taskcluster/2015/09/30/building-firefox-for-windows-on-try-using-taskcluster.html)\n-for a practical walkthrough of using the Generic Worker for building Firefox\n-Desktop for Windows™.\n+Features are capabilities that can be enabled in the generic worker for use by\n+a task.\n+\n+These features are enabled by declaring them within the task payload in the\n+`features` object.\n+\n+Note: Some features require additional information within the task definition.\n+Features may also require scopes.  Consult the documentation for each feature\n+to understand the requirements.\n+\n+Example:\n+\n+```js\n+{\n+  \"payload\": {\n+    \"features\": {\n+      \"generateCertificate\": true\n+    }\n+  }\n+}\n+```\n+\n+#### Feature: `generateCertificate`\n+\n+Enabling this feature will mean that the generic worker will publish an additional task artifact `public/logs/certificate.json.gpg`. This will be a clear text openpgp-signed json object, storing the SHA 256 hashes of the task artifacts, plus some information about the worker. This is signed by a openpgp private key, both generated and stored on the worker. This private key is never transmitted across the network, and therefore if you are able to verify the signature of this artifact, you can be confident that it really was created by the worker.\n+\n+Please note that the mechanism to locate the public key of the worker is specific to the worker type, and the workflow of the party that created that worker type (typically the Mozilla Release Engineering Team).","path":"src/manual/execution/workers/generic-worker.md","position":37,"original_position":37,"commit_id":"e80383da589d0fc2e52f8826c317fd2d4f60ab15","original_commit_id":"e80383da589d0fc2e52f8826c317fd2d4f60ab15","user":{"login":"djmitche","id":28673,"avatar_url":"https://avatars.githubusercontent.com/u/28673?v=3","gravatar_id":"","url":"https://api.github.com/users/djmitche","html_url":"https://github.com/djmitche","followers_url":"https://api.github.com/users/djmitche/followers","following_url":"https://api.github.com/users/djmitche/following{/other_user}","gists_url":"https://api.github.com/users/djmitche/gists{/gist_id}","starred_url":"https://api.github.com/users/djmitche/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/djmitche/subscriptions","organizations_url":"https://api.github.com/users/djmitche/orgs","repos_url":"https://api.github.com/users/djmitche/repos","events_url":"https://api.github.com/users/djmitche/events{/privacy}","received_events_url":"https://api.github.com/users/djmitche/received_events","type":"User","site_admin":false},"body":"Just describing that config here would be good.","created_at":"2016-09-06T13:38:36Z","updated_at":"2016-09-06T13:38:36Z","html_url":"https://github.com/taskcluster/taskcluster-docs/pull/123#discussion_r77635339","pull_request_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/123","_links":{"self":{"href":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/comments/77635339"},"html":{"href":"https://github.com/taskcluster/taskcluster-docs/pull/123#discussion_r77635339"},"pull_request":{"href":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/123"}}},"pull_request":{"url":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/123","id":84109241,"html_url":"https://github.com/taskcluster/taskcluster-docs/pull/123","diff_url":"https://github.com/taskcluster/taskcluster-docs/pull/123.diff","patch_url":"https://github.com/taskcluster/taskcluster-docs/pull/123.patch","issue_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/issues/123","number":123,"state":"open","locked":false,"title":"Bug 1287112 - chain of trust in generic worker","user":{"login":"petemoore","id":190790,"avatar_url":"https://avatars.githubusercontent.com/u/190790?v=3","gravatar_id":"","url":"https://api.github.com/users/petemoore","html_url":"https://github.com/petemoore","followers_url":"https://api.github.com/users/petemoore/followers","following_url":"https://api.github.com/users/petemoore/following{/other_user}","gists_url":"https://api.github.com/users/petemoore/gists{/gist_id}","starred_url":"https://api.github.com/users/petemoore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/petemoore/subscriptions","organizations_url":"https://api.github.com/users/petemoore/orgs","repos_url":"https://api.github.com/users/petemoore/repos","events_url":"https://api.github.com/users/petemoore/events{/privacy}","received_events_url":"https://api.github.com/users/petemoore/received_events","type":"User","site_admin":false},"body":"Added some docs about the new feature.","created_at":"2016-09-06T11:59:41Z","updated_at":"2016-09-06T13:38:36Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5dd62ef345d8b543ecf4221a1f4fe38d6b2c5300","assignee":{"login":"gregarndt","id":2592630,"avatar_url":"https://avatars.githubusercontent.com/u/2592630?v=3","gravatar_id":"","url":"https://api.github.com/users/gregarndt","html_url":"https://github.com/gregarndt","followers_url":"https://api.github.com/users/gregarndt/followers","following_url":"https://api.github.com/users/gregarndt/following{/other_user}","gists_url":"https://api.github.com/users/gregarndt/gists{/gist_id}","starred_url":"https://api.github.com/users/gregarndt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gregarndt/subscriptions","organizations_url":"https://api.github.com/users/gregarndt/orgs","repos_url":"https://api.github.com/users/gregarndt/repos","events_url":"https://api.github.com/users/gregarndt/events{/privacy}","received_events_url":"https://api.github.com/users/gregarndt/received_events","type":"User","site_admin":false},"assignees":[{"login":"gregarndt","id":2592630,"avatar_url":"https://avatars.githubusercontent.com/u/2592630?v=3","gravatar_id":"","url":"https://api.github.com/users/gregarndt","html_url":"https://github.com/gregarndt","followers_url":"https://api.github.com/users/gregarndt/followers","following_url":"https://api.github.com/users/gregarndt/following{/other_user}","gists_url":"https://api.github.com/users/gregarndt/gists{/gist_id}","starred_url":"https://api.github.com/users/gregarndt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gregarndt/subscriptions","organizations_url":"https://api.github.com/users/gregarndt/orgs","repos_url":"https://api.github.com/users/gregarndt/repos","events_url":"https://api.github.com/users/gregarndt/events{/privacy}","received_events_url":"https://api.github.com/users/gregarndt/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/123/commits","review_comments_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/123/comments","review_comment_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/issues/123/comments","statuses_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/statuses/e80383da589d0fc2e52f8826c317fd2d4f60ab15","head":{"label":"taskcluster:bug1287112","ref":"bug1287112","sha":"e80383da589d0fc2e52f8826c317fd2d4f60ab15","user":{"login":"taskcluster","id":6257436,"avatar_url":"https://avatars.githubusercontent.com/u/6257436?v=3","gravatar_id":"","url":"https://api.github.com/users/taskcluster","html_url":"https://github.com/taskcluster","followers_url":"https://api.github.com/users/taskcluster/followers","following_url":"https://api.github.com/users/taskcluster/following{/other_user}","gists_url":"https://api.github.com/users/taskcluster/gists{/gist_id}","starred_url":"https://api.github.com/users/taskcluster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taskcluster/subscriptions","organizations_url":"https://api.github.com/users/taskcluster/orgs","repos_url":"https://api.github.com/users/taskcluster/repos","events_url":"https://api.github.com/users/taskcluster/events{/privacy}","received_events_url":"https://api.github.com/users/taskcluster/received_events","type":"Organization","site_admin":false},"repo":{"id":16743730,"name":"taskcluster-docs","full_name":"taskcluster/taskcluster-docs","owner":{"login":"taskcluster","id":6257436,"avatar_url":"https://avatars.githubusercontent.com/u/6257436?v=3","gravatar_id":"","url":"https://api.github.com/users/taskcluster","html_url":"https://github.com/taskcluster","followers_url":"https://api.github.com/users/taskcluster/followers","following_url":"https://api.github.com/users/taskcluster/following{/other_user}","gists_url":"https://api.github.com/users/taskcluster/gists{/gist_id}","starred_url":"https://api.github.com/users/taskcluster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taskcluster/subscriptions","organizations_url":"https://api.github.com/users/taskcluster/orgs","repos_url":"https://api.github.com/users/taskcluster/repos","events_url":"https://api.github.com/users/taskcluster/events{/privacy}","received_events_url":"https://api.github.com/users/taskcluster/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/taskcluster/taskcluster-docs","description":"Documentation for taskcluster components","fork":false,"url":"https://api.github.com/repos/taskcluster/taskcluster-docs","forks_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/forks","keys_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/teams","hooks_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/hooks","issue_events_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/issues/events{/number}","events_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/events","assignees_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/assignees{/user}","branches_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/branches{/branch}","tags_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/tags","blobs_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/languages","stargazers_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/stargazers","contributors_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/contributors","subscribers_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/subscribers","subscription_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/subscription","commits_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/contents/{+path}","compare_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/merges","archive_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/downloads","issues_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/issues{/number}","pulls_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/labels{/name}","releases_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/releases{/id}","deployments_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/deployments","created_at":"2014-02-11T20:08:26Z","updated_at":"2016-05-23T00:49:58Z","pushed_at":"2016-09-06T11:59:41Z","git_url":"git://github.com/taskcluster/taskcluster-docs.git","ssh_url":"git@github.com:taskcluster/taskcluster-docs.git","clone_url":"https://github.com/taskcluster/taskcluster-docs.git","svn_url":"https://github.com/taskcluster/taskcluster-docs","homepage":"docs.taskcluster.net","size":8779,"stargazers_count":9,"watchers_count":9,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":21,"mirror_url":null,"open_issues_count":3,"forks":21,"open_issues":3,"watchers":9,"default_branch":"master"}},"base":{"label":"taskcluster:master","ref":"master","sha":"9bcdd578019e52f6c40b0d2630becadf4e2b59ce","user":{"login":"taskcluster","id":6257436,"avatar_url":"https://avatars.githubusercontent.com/u/6257436?v=3","gravatar_id":"","url":"https://api.github.com/users/taskcluster","html_url":"https://github.com/taskcluster","followers_url":"https://api.github.com/users/taskcluster/followers","following_url":"https://api.github.com/users/taskcluster/following{/other_user}","gists_url":"https://api.github.com/users/taskcluster/gists{/gist_id}","starred_url":"https://api.github.com/users/taskcluster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taskcluster/subscriptions","organizations_url":"https://api.github.com/users/taskcluster/orgs","repos_url":"https://api.github.com/users/taskcluster/repos","events_url":"https://api.github.com/users/taskcluster/events{/privacy}","received_events_url":"https://api.github.com/users/taskcluster/received_events","type":"Organization","site_admin":false},"repo":{"id":16743730,"name":"taskcluster-docs","full_name":"taskcluster/taskcluster-docs","owner":{"login":"taskcluster","id":6257436,"avatar_url":"https://avatars.githubusercontent.com/u/6257436?v=3","gravatar_id":"","url":"https://api.github.com/users/taskcluster","html_url":"https://github.com/taskcluster","followers_url":"https://api.github.com/users/taskcluster/followers","following_url":"https://api.github.com/users/taskcluster/following{/other_user}","gists_url":"https://api.github.com/users/taskcluster/gists{/gist_id}","starred_url":"https://api.github.com/users/taskcluster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taskcluster/subscriptions","organizations_url":"https://api.github.com/users/taskcluster/orgs","repos_url":"https://api.github.com/users/taskcluster/repos","events_url":"https://api.github.com/users/taskcluster/events{/privacy}","received_events_url":"https://api.github.com/users/taskcluster/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/taskcluster/taskcluster-docs","description":"Documentation for taskcluster components","fork":false,"url":"https://api.github.com/repos/taskcluster/taskcluster-docs","forks_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/forks","keys_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/teams","hooks_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/hooks","issue_events_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/issues/events{/number}","events_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/events","assignees_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/assignees{/user}","branches_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/branches{/branch}","tags_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/tags","blobs_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/languages","stargazers_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/stargazers","contributors_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/contributors","subscribers_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/subscribers","subscription_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/subscription","commits_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/contents/{+path}","compare_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/merges","archive_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/downloads","issues_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/issues{/number}","pulls_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/labels{/name}","releases_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/releases{/id}","deployments_url":"https://api.github.com/repos/taskcluster/taskcluster-docs/deployments","created_at":"2014-02-11T20:08:26Z","updated_at":"2016-05-23T00:49:58Z","pushed_at":"2016-09-06T11:59:41Z","git_url":"git://github.com/taskcluster/taskcluster-docs.git","ssh_url":"git@github.com:taskcluster/taskcluster-docs.git","clone_url":"https://github.com/taskcluster/taskcluster-docs.git","svn_url":"https://github.com/taskcluster/taskcluster-docs","homepage":"docs.taskcluster.net","size":8779,"stargazers_count":9,"watchers_count":9,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":21,"mirror_url":null,"open_issues_count":3,"forks":21,"open_issues":3,"watchers":9,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/123"},"html":{"href":"https://github.com/taskcluster/taskcluster-docs/pull/123"},"issue":{"href":"https://api.github.com/repos/taskcluster/taskcluster-docs/issues/123"},"comments":{"href":"https://api.github.com/repos/taskcluster/taskcluster-docs/issues/123/comments"},"review_comments":{"href":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/123/comments"},"review_comment":{"href":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/taskcluster/taskcluster-docs/pulls/123/commits"},"statuses":{"href":"https://api.github.com/repos/taskcluster/taskcluster-docs/statuses/e80383da589d0fc2e52f8826c317fd2d4f60ab15"}}}}
{"actor":{"display_login":"djmitche"}}