PageSourceSearch

https://stryker-mutator.io/assets/js/c79c3c9d.6483c931.js

js stryker-mutator.io collected 2026-10-02 03:23:23 UTC 12,359 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkstryker_mutator_github_io=self.webpackChunkstryker_mutator_github_io||[]).push([["1301"],{96740:function(e,r,t){t.r(r),t.d(r,{metadata:function(){return n},default:function(){return c},frontMatter:function(){return i},contentTitle:function(){return d},toc:function(){return l},assets:function(){return a}});var n=JSON.parse('{"id":"General/dashboard","title":"Stryker dashboard","description":"The Stryker dashboard is a dashboard for mutation testing//dashboard.stryker-mutator.io. It is free to use and open source. It has the following features:","source":"@site/docs/General/dashboard.md","sourceDirName":"General","slug":"/General/dashboard","permalink":"/docs/General/dashboard","draft":false,"unlisted":false,"editUrl":"https://github.com/stryker-mutator/stryker-mutator.github.io/edit/develop/docs/General/dashboard.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"title":"Stryker dashboard","sidebar_position":3},"sidebar":"docs","previous":{"title":"An example","permalink":"/docs/General/example"},"next":{"title":"FAQ","permalink":"/docs/General/faq"}}'),s=t(94686),o=t(23191);let i={title:"Stryker dashboard",sidebar_position:3},d,a={},l=[{value:"Enable the dashboard for your project",id:"enable-the-dashboard-for-your-project",level:2},{value:"Send your first report",id:"send-your-first-report",level:2},{value:"Send a report directly from Stryker",id:"send-a-report-directly-from-stryker",level:3},{value:"Retrieved from environment",id:"retrieved-from-environment",level:4},{value:"Send a report via curl",id:"send-a-report-via-curl",level:3}];function h(e){let r={a:"a",br:"br",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",section:"section",sup:"sup",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(r.p,{children:["The Stryker dashboard is a dashboard for mutation testing: ",(0,s.jsx)(r.a,{href:"https://dashboard.stryker-mutator.io",children:"https://dashboard.stryker-mutator.io"}),". It is free to use and open source. It has the following features:"]}),"\n",(0,s.jsxs)(r.p,{children:["\u{1F947} Supply a mutation score badge to pimp your readme",(0,s.jsx)(r.br,{}),"\n","\u{1F911} Free to use for open source",(0,s.jsx)(r.br,{}),"\n","\u{1F4CA} Hosts your mutation testing report in the cloud",(0,s.jsx)(r.br,{}),"\n","\u{1F30E} Supports all mutation testing frameworks*"]}),"\n",(0,s.jsxs)(r.p,{children:["* That support the ",(0,s.jsx)(r.a,{href:"https://github.com/stryker-mutator/mutation-testing-elements/tree/master/packages/report-schema",children:"mutation testing report schema"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"enable-the-dashboard-for-your-project",children:"Enable the dashboard for your project"}),"\n",(0,s.jsxs)(r.p,{children:["Enabling the dashboard for your project is as simple as navigating to ",(0,s.jsx)(r.a,{href:"https://dashboard.stryker-mutator.io",children:"https://dashboard.stryker-mutator.io"}),", logging in with your GitHub account and enabling it for your repository."]}),"\n",(0,s.jsx)(r.h2,{id:"send-your-first-report",children:"Send your first report"}),"\n",(0,s.jsxs)(r.p,{children:["Send your first report ",(0,s.jsx)(r.a,{href:"#send-a-report-directly-from-stryker",children:"directly from Stryker"}),", or manually via ",(0,s.jsx)(r.a,{href:"#send-a-report-via-curl",children:"a curl request"}),"."]}),"\n",(0,s.jsx)(r.h3,{id:"send-a-report-directly-from-stryker",children:"Send a report directly from Stryker"}),"\n",(0,s.jsx)(r.p,{children:"Current status:"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{}),(0,s.jsx)(r.th,{children:"Stryker"}),(0,s.jsx)(r.th,{children:"Stryker.NET"}),(0,s.jsx)(r.th,{children:"Stryker4s"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Full report"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Mutation score report"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsxs)(r.td,{children:[(0,s.jsx)(r.code,{children:"dashboard.*"})," settings"]}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"})]})]})]}),"\n",(0,s.jsxs)(r.p,{children:["Please visit ",(0,s.jsx)(r.a,{href:"https://github.com/stryker-mutator/stryker-net/blob/master/docs/reporters.md#dashboard-reporter",children:"Stryker.NET specific docs"})," for Stryker.NET."]}),"\n",(0,s.jsx)(r.p,{children:"Enabling the dashboard reporter works the same across all implementations of Stryker."}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["Enabling the dashboard reporter is done by adding ",(0,s.jsx)(r.code,{children:'"dashboard"'})," to the ",(0,s.jsx)(r.code,{children:'"reporters"'})," configuration."]}),"\n",(0,s.jsxs)(r.li,{children:["Configure the reporter:","\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:['Configuring the "project" is done via the ',(0,s.jsx)(r.code,{children:"dashboard.project"})," configuration key (default: retrieved from the environment)"]}),"\n",(0,s.jsxs)(r.li,{children:['Configuring the "module is done via the ',(0,s.jsx)(r.code,{children:"dashboard.module"})," configuration key."]}),"\n",(0,s.jsxs)(r.li,{children:['Configuring the "version" is done via the ',(0,s.jsx)(r.code,{children:"dashboard.version"})," configuration key. (default: retrieved from environment)"]}),"\n",(0,s.jsxs)(r.li,{children:['Configuring the "baseUrl" is done via the ',(0,s.jsx)(r.code,{children:"dashboard.baseUrl"}),' configuration key. It defaults to "',(0,s.jsx)(r.a,{href:"https://dashboard.stryker
1-mutator.io",children:"https://dashboard.stryker-mutator.io"}),'".']}),"\n",(0,s.jsxs)(r.li,{children:['Configuring the "reportType" is done via the ',(0,s.jsx)(r.code,{children:"dashboard.reportType"})," configuration key."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.li,{children:'Configuring the API key by setting the "STRYKER_DASHBOARD_API_KEY" variable.'}),"\n"]}),"\n",(0,s.jsx)(r.h4,{id:"retrieved-from-environment",children:"Retrieved from environment"}),"\n",(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.code,{children:"project"})," and ",(0,s.jsx)(r.code,{children:"version"})," settings can also be retrieved from your build servers environment. This is not supported for all CI providers or Stryker implementations. See the table below for the current support."]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{}),(0,s.jsx)(r.th,{children:"Stryker"}),(0,s.jsxs)(r.th,{children:["Stryker.NET",(0,s.jsx)(r.sup,{children:(0,s.jsx)(r.a,{href:"#user-content-fn-1",id:"user-content-fnref-1","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})]}),(0,s.jsx)(r.th,{children:"Stryker4s"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Travis"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"CircleCI"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Azure dev/ops"}),(0,s.jsx)(r.td,{children:"\u274C"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u274C"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"GitlabCI"}),(0,s.jsx)(r.td,{children:"\u274C"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u274C"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Github actions"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"}),(0,s.jsx)(r.td,{children:"\u2705"})]})]})]}),"\n",(0,s.jsx)(r.h3,{id:"send-a-report-via-curl",children:"Send a report via curl"}),"\n",(0,s.jsx)(r.p,{children:"You can send a report with an HTTP PUT request, like so:"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-sh",children:"curl -X PUT \\\n  $BASE_URL$/api/reports/$PROJECT$/$VERSION$ \\\n  -H 'Content-Type: application/json' \\\n  -H 'Host: dashboard.stryker-mutator.io' \\\n  -H 'X-Api-Key: $API_KEY$' \\\n  -d @mutation-testing-report.json\n"})}),"\n",(0,s.jsxs)(r.p,{children:["Multiple results per ",(0,s.jsx)(r.code,{children:"VERSION"})," are also supported using this url: ",(0,s.jsx)(r.code,{children:"$BASE_URL$/api/reports/$PROJECT$/$VERSION$?module=$MODULE_NAME$"})]}),"\n",(0,s.jsx)(r.p,{children:"The variables here are:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"BASE_URL"}),": ",(0,s.jsx)(r.code,{children:"https://dashboard.stryker-mutator.io"})," for production, ",(0,s.jsx)(r.code,{children:"https://stryker-dashboard-acceptance.azurewebsites.net/"})," for acceptance"]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"PROJECT"}),": The name registered with the dashboard. It is in the form of ",(0,s.jsx)(r.code,{children:"gitProvider/organization/repository"}),". At the moment the dashboard backend only supports ",(0,s.jsx)(r.code,{children:"github.com"})," as a git provider, but we will also support ",(0,s.jsx)(r.code,{children:"gitlab.com"}),"/",(0,s.jsx)(r.code,{children:"bitbucket.org"}),", etc. in the future. It can have an indefinite number of levels. Slashes (",(0,s.jsx)(r.code,{children:"/"}),") in this name are ",(0,s.jsx)(r.em,{children:"not"})," escaped. For example ",(0,s.jsx)(r.code,{children:"github.com/stryker-mutator/stryker-net"}),"."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"VERSION"}),': the version of the report. This should be filled with the branch name, git tag or git sha (although no validation is done). You can override a report of a specific version, like docker tags. Slashes in the version should not be encoded. For example, it\'s valid to use "feat/logging".']}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"API_KEY"}),": The API key that you retrieved by enabling the report on the dashboard.stryker
1-mutator.io website."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"mutation-testing-report.json"})," file: A valid report according to the ",(0,s.jsx)(r.a,{href:"https://github.com/stryker-mutator/mutation-testing-elements/tree/master/packages/report-schema",children:"mutation testing report schema"}),", or a mutation score only report in the form of ",(0,s.jsx)(r.code,{children:'{ "mutationScore": 42 }'})," (this way, you will have a mutation score badge, but no other information is stored)."]}),"\n",(0,s.jsxs)(r.li,{children:[(0,s.jsx)(r.code,{children:"MODULE"}),": Optional. If you want to store multiple reports for a version, you can use this value to separate them logically, for example, in a mono-repo setup where each package (or project or module) delivers a report."]}),"\n"]}),"\n","\n",(0,s.jsxs)(r.section,{"data-footnotes":!0,className:"footnotes",children:[(0,s.jsx)(r.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{id:"user-content-fn-1",children:["\n",(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.code,{children:"project"})," and ",(0,s.jsx)(r.code,{children:"version"})," are automatically retrieved if your project is using ",(0,s.jsx)(r.a,{href:"https://github.com/dotnet/sourcelink",children:"SourceLink"}),". ",(0,s.jsx)(r.a,{href:"#user-content-fnref-1","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21A9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function c(e={}){let{wrapper:r}={...(0,o.R)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},23191:function(e,r,t){t.d(r,{R:function(){return i},x:function(){return d}});var n=t(92990);let s={},o=n.createContext(s);function i(e){let r=n.useContext(o);return n.useMemo(function(){return"function"==typeof e?e(r):{...r,...e}},[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(o.Provider,{value:r},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.