source/plugins/languages/README.md
</td>
<b>default:</b> no
</td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_ignored</code></h4></td> <td rowspan="2"><p>Ignored languages</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>array</code> <i>(comma-separated)</i> </td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_skipped</code></h4></td> <td rowspan="2"><p>Skipped repositories</p> </td> </tr> <tr> <td nowrap="nowrap">⏩ Inherits <code>repositories_skipped</code><b>type:</b> <code>array</code> <i>(newline-separated)</i>
</td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_limit</code></h4></td> <td rowspan="2"><p>Display limit</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>number</code> <i>(0 ≤ 𝑥 ≤ 8)</i><b>zero behaviour:</b> disable</br> <b>default:</b> 8
</td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_threshold</code></h4></td> <td rowspan="2"><p>Display threshold (percentage)</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>string</code><b>default:</b> 0%
</td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_other</code></h4></td> <td rowspan="2"><p>Group unknown, ignored and over-limit languages into "Other" category</p> <p>If this option is enabled, "Other" category will not be subject to <a href="/source/plugins/languages/README.md#plugin_languages_threshold"><code>plugin_languages_threshold</code></a>. It will be automatically hidden if empty.</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>boolean</code><b>default:</b> no
</td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_colors</code></h4></td> <td rowspan="2"><p>Custom languages colors</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>array</code> <i>(comma-separated)</i><b>default:</b> github
</td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_aliases</code></h4></td> <td rowspan="2"><p>Custom languages names</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>string</code> </td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_sections</code></h4></td> <td rowspan="2"><p>Displayed sections</p> <p>Note that <code>recently-used</code> is only available when <a href="/source/plugins/languages/README.md#plugin_languages_indepth"><code>plugin_languages_indepth</code></a> is enabled</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>array</code> <i>(comma-separated)</i><b>default:</b> most-used
<b>allowed values:</b><ul><li>most-used</li><li>recently-used</li></ul></td>
</tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_details</code></h4></td> <td rowspan="2"><p>Additional details</p> <p>Note that <code>lines</code> is only available when <a href="/source/plugins/languages/README.md#plugin_languages_indepth"><code>plugin_languages_indepth</code></a> is enabled</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>array</code> <i>(comma-separated)</i><b>allowed values:</b><ul><li>bytes-size</li><li>percentage</li><li>lines</li></ul></td>
</tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_indepth</code></h4></td> <td rowspan="2"><p>Indepth mode</p> <blockquote> <p>⚠️ read documentation first</p> </blockquote> </td> </tr> <tr> <td nowrap="nowrap">🌐 Web instances must configure <code>settings.json</code>: <ul> <li><i>metrics.cpu.overuse</i></li> <li><i>metrics.run.tempdir</i></li> <li><i>metrics.run.git</i></li> </ul> <b>type:</b> <code>boolean</code><b>default:</b> false
</td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_indepth_custom</code></h4></td> <td rowspan="2"><p>Indepth mode - Custom repositories</p> <p>Specify a list of additional repositories to analyze.</p> <p>Below are the supported syntax formats:</p> <ul> <li><code>owner/repo</code> (e.g. <code>lowlighter/metrics</code>)</li> <li><code>owner/repo@branch</code> (e.g. <code>lowlighter/metrics@main</code>)</li> <li><code>owner/repo@branch:commits</code> (e.g. <code>lowlighter/metrics@main:v1.0..v1.1</code>)<ul> <li>See <a href="https://git-scm.com/docs/git-rev-list#_description"><code>git rev-list</code></a> documentation for more information about <code>commits</code> syntax</li> </ul> </li> </ul> <p>It is possible to specify repositories that are not hosted on <a href="https://github.com">github.com</a> by passing a full url instead. In this case the repository must be accessible directly.</p> <blockquote> <p>ℹ️ This option bypass <a href="/source/plugins/languages/README.md#plugin_languages_skipped"><code>plugin_languages_skipped</code></a></p> </blockquote> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>array</code> <i>(comma-separated)</i> </td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_analysis_timeout</code></h4></td> <td rowspan="2"><p>Indepth mode - Analysis timeout</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>number</code> <i>(1 ≤ 𝑥 ≤ 60)</i><b>default:</b> 15
</td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_analysis_timeout_repositories</code></h4></td> <td rowspan="2"><p>Indepth mode - Analysis timeout (repositories)</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>number</code> <i>(0 ≤ 𝑥 ≤ 15)</i><b>zero behaviour:</b> disable</br> <b>default:</b> 7.5
</td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_categories</code></h4></td> <td rowspan="2"><p>Indepth mode - Displayed categories (most-used section)</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>array</code> <i>(comma-separated)</i><b>default:</b> markup, programming
<b>allowed values:</b><ul><li>data</li><li>markup</li><li>programming</li><li>prose</li></ul></td>
</tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_recent_categories</code></h4></td> <td rowspan="2"><p>Indepth mode - Displayed categories (recently-used section)</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>array</code> <i>(comma-separated)</i><b>default:</b> markup, programming
<b>allowed values:</b><ul><li>data</li><li>markup</li><li>programming</li><li>prose</li></ul></td>
</tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_recent_load</code></h4></td> <td rowspan="2"><p>Indepth mode - Events to load (recently-used section)</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>number</code> <i>(100 ≤ 𝑥 ≤ 1000)</i><b>default:</b> 300
</td> </tr> <tr> <td nowrap="nowrap"><h4><code>plugin_languages_recent_days</code></h4></td> <td rowspan="2"><p>Indepth mode - Events maximum age (day, recently-used section)</p> </td> </tr> <tr> <td nowrap="nowrap"><b>type:</b> <code>number</code> <i>(0 ≤ 𝑥 ≤ 365)</i><b>zero behaviour:</b> disable</br> <b>default:</b> 14
</td> </tr> </table> <!--/options-->indepth modeThe default algorithm uses the top languages from each repository you contributed to using GitHub GraphQL API (which is similar to the displayed languages bar on github.com). When working in collaborative projects with a lot of people, these numbers may be less representative of your actual work.
The plugin_languages_indepth option lets you use a more advanced algorithm for more accurate statistics.
Under the hood, it will clone your repositories, run linguist-js (a JavaScript port of GitHub linguist) and iterate over patches matching your commits_authoring setting.
Since git lets you use any email and username for commits, metrics may not be able to detect a commit ownership if it isn't the same as your GitHub personal data. By default, it will use your GitHub username, but you can configure additional matching usernames and email addresses using commits_authoring option.
Example: configuring indepth mode
- uses: lowlighter/metrics@latest
with:
plugin_languages: yes
plugin_languages_indepth: yes
commits_authoring: firstname lastname, username, [email protected]
💡 This feature unlocks the
linesoption inplugin_languages_details
⚠️ This feature significantly increase workflow time
⚠️ Since this mode iterates over each matching commit of each repository, it is not suited for large code base, especially those with a large amount of commits and the ones containing binaries. While
plugin_languages_analysis_timeoutandplugin_languages_analysis_timeout_repositoriescan be used to increase the default timeout for analysis, please be responsible and keep this feature disabled if it cannot work on your account to save GitHub resources and our planet 🌏
⚠️ Although metrics does not send any code to external sources, repositories are temporarily cloned on the GitHub Action runner. It is advised to keep this option disabled when working with sensitive data or company code. Use at your own risk, metrics and its authors cannot be held responsible for any resulting code leaks. Source code is available for auditing at analyzers.mjs.
🌐 Web instances must enable this feature in
settings.json
Below is a summary of the process used to compute indepth statistics:
commits_authoringplugin_languages_analysis_timeout is reachedplugin_languages_skippedplugin_languages_indepth_custom
git log --author and commits_authoring to search in commit headersgit log --grep and commits_authoring to search in commit bodyplugin_languages_indepth_custom (if applicable)plugin_languages_analysis_timeout_repositories is reachedgit verify-commit to check authenticity against imported GPG keysgit log --patch to extract added/deleted lines/bytes from each fileplugin_languages_categories optionplugin_languages_recent_load and plugin_languages_recent_days optionscommits_authoringplugin_languages_recent_categories optionThis feature uses a similar algorithm as indepth mode, but uses patches from your events feed instead.
It will fetch a specified amount of recent push events and perform linguistic analysis on it.
⚠️ Note that metrics won't be able to use more events than GitHub API is able to provide
Example: display recently used languages from 400 GitHub events from last 2 weeks
- uses: lowlighter/metrics@latest
with:
plugin_languages: yes
plugin_languages_sections: recently-used
plugin_languages_recent_load: 400
plugin_languages_recent_days: 14
🌐 Web instances must enable this feature in
settings.json
Several options lets you customize which languages should be displayed. It is possible to ignore completely languages or those lower than a given threshold, skip repositories, and filter by language categories.
Example: hide HTML and CSS languages, skip lowlighter/metrics repository
- uses: lowlighter/metrics@latest
with:
plugin_languages: yes
plugin_languages_ignored: html, css
plugin_languages_skipped: lowlighter/metrics
Example: hide languages with less than 2% usage
- uses: lowlighter/metrics@latest
with:
plugin_languages: yes
plugin_languages_threshold: 2%
💡 The threshold feature will automatically scale remaining languages so the total percentage is always 100%. However, other stats like bytes count and lines are not affected.
When using indepth mode, it is possible to hide languages per category.
Supported categories are data, markup, programming and prose.
Example: hide data and prose languages from stats
- uses: lowlighter/metrics@latest
with:
plugin_languages: yes
plugin_languages_categories: data, prose
plugin_languages_recent_categories: data, prose
The plugin uses GitHub language colors, but it may be hard to distinguish them depending on which languages you use.
It is possible to use custom colors using plugin_languages_colors option.
The following syntaxes are supported:
${language}:${color} to change the color of a language (case insensitive)${n}:${color} to change the color of the n-th languageBoth hexadecimal and named color are supported.
Example: using a predefined color set
- uses: lowlighter/metrics@latest
with:
plugin_languages: yes
plugin_languages_colors: rainbow
plugin_languages_limit: 8
Example: setting JavaScript to red, the first language to blue and the second one to #ff00aa
- uses: lowlighter/metrics@latest
with:
plugin_languages: yes
plugin_languages_colors: javascript:red, 0:blue, 1:#ff00aa
This plugin is limited by GitHub linguist capabilities, meaning that some languages may be mislabeled in some cases.
To mitigate this, it is possible to use plugin_languages_aliases option and provide a list of overrides using the following syntax: ${language}:${alias} (case insensitive).
Example: display JavaScript as JS and TypeScript as TS
- uses: lowlighter/metrics@latest
with:
plugin_languages: yes
plugin_languages_aliases: javascript:JS typescript:TS
name: Most used
uses: lowlighter/metrics@latest
with:
filename: metrics.plugin.languages.svg
token: ${{ secrets.METRICS_TOKEN }}
base: ""
plugin_languages: yes
plugin_languages_ignored: >-
html, css, tex, less, dockerfile, makefile, qmake, lex, cmake, shell,
gnuplot
plugin_languages_limit: 4
name: Most used (with details)
uses: lowlighter/metrics@latest
with:
filename: metrics.plugin.languages.details.svg
token: ${{ secrets.METRICS_TOKEN }}
base: ""
plugin_languages: yes
plugin_languages_ignored: >-
html, css, tex, less, dockerfile, makefile, qmake, lex, cmake, shell,
gnuplot
plugin_languages_details: bytes-size, percentage
plugin_languages_limit: 4
name: Recently used
uses: lowlighter/metrics@latest
with:
filename: metrics.plugin.languages.recent.svg
token: ${{ secrets.METRICS_TOKEN }}
base: ""
plugin_languages: yes
plugin_languages_ignored: >-
html, css, tex, less, dockerfile, makefile, qmake, lex, cmake, shell,
gnuplot
plugin_languages_sections: recently-used
plugin_languages_details: bytes-size, percentage
plugin_languages_limit: 4
name: Indepth analysis
uses: lowlighter/metrics@latest
with:
filename: metrics.plugin.languages.indepth.svg
token: ${{ secrets.METRICS_TOKEN }}
base: ""
plugin_languages: yes
plugin_languages_ignored: >-
html, css, tex, less, dockerfile, makefile, qmake, lex, cmake, shell,
gnuplot
plugin_languages_indepth: yes
plugin_languages_details: lines, bytes-size
plugin_languages_limit: 4
plugin_languages_analysis_timeout: 15