Skip to content

Latest commit

 

History

History
424 lines (384 loc) · 15.4 KB

README.md

File metadata and controls

424 lines (384 loc) · 15.4 KB

🈷️ Most used languages

This plugin can display which languages you use across all repositories you contributed to.

Supported features
→ Full specification
📗 Classic template 📘 Repository template 📙 Terminal template
👤 Users 👥 Organizations 📓 Repositories
🔑 (scopeless) read:org (optional) read:user (optional) repo (optional)
Indepth analysis (clone and analyze repositories)
Recently used (analyze recent activity events)
Default algorithm
Default algorithm (with details)

➡️ Available options

TypeDescription

plugin_languages

Enable languages plugin

type: boolean
default: no

plugin_languages_ignored

Ignored languages

type: array (comma-separated)

plugin_languages_skipped

Skipped repositories

⏩ Inherits repositories_skipped
type: array (comma-separated)

plugin_languages_limit

Display limit

type: number (0 ≤ 𝑥 ≤ 8)
zero behaviour: disable
default: 8

plugin_languages_threshold

Display threshold (percentage)

type: string
default: 0%

plugin_languages_other

Group unknown, ignored and over-limit languages into a single "Other" category

If this option is enabled, "Other" category will not be subject to plugin_languages_threshold. It will be automatically hidden if empty.

✨ On master/main
type: boolean
default: no

plugin_languages_colors

Custom languages colors

type: array (comma-separated)
default: github

plugin_languages_aliases

Custom languages names

type: string

plugin_languages_sections

Displayed sections

🌐 Web instances must configure settings.json
type: array (comma-separated)
default: most-used
allowed values:
  • most-used
  • recently-used

plugin_languages_details

Additional details

Note that lines is only available when plugin_languages_indepth is enabled

🌐 Web instances must configure settings.json
type: array (comma-separated)
allowed values:
  • bytes-size
  • percentage
  • lines

plugin_languages_indepth

Indepth mode (⚠️ read documentation first)

🌐 Web instances must configure settings.json
type: boolean
default: false

plugin_languages_analysis_timeout

Indepth mode - Analysis timeout

🌐 Web instances must configure settings.json
type: number (1 ≤ 𝑥 ≤ 30)
default: 15

plugin_languages_categories

Indepth mode - Displayed categories (most-used section)

🌐 Web instances must configure settings.json
type: array (comma-separated)
default: markup, programming
allowed values:
  • data
  • markup
  • programming
  • prose

plugin_languages_recent_categories

Indepth mode - Displayed categories (recently-used section)

🌐 Web instances must configure settings.json
type: array (comma-separated)
default: markup, programming
allowed values:
  • data
  • markup
  • programming
  • prose

plugin_languages_recent_load

Events to load (recently-used section)

🌐 Web instances must configure settings.json
type: number (100 ≤ 𝑥 ≤ 1000)
default: 300

plugin_languages_recent_days

Events maximum age (day, recently-used section)

🌐 Web instances must configure settings.json
type: number (0 ≤ 𝑥 ≤ 365)
zero behaviour: disable
default: 14

🔎 indepth mode

The default algorithm use the top languages provided of each repository you contributed to. 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 accurates 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 lines option in plugin_languages_details

⚠️ This feature significantly increase workflow time

⚠️ Since this mode iterates over each 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_timeout can 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

📅 Recently used languages

This 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

🥽 Controling which languages are displayed

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

🎨 Using custom colors

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:

  • A predefined set from colorsets.json (support limited to 8 languages max)
  • ${language}:${color} to change the color of a language (case insensitive)
  • ${n}:${color} to change the color of the the n-th language

Both 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

✍️ Using custom languages name

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

ℹ️ Examples workflows

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