# 📊 Metrics [](https://www.producthunt.com/posts/github-metrics?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-github-metrics) ![Build](https://github.com/lowlighter/metrics/workflows/Build/badge.svg) [![Metrics (examples)](https://github.com/lowlighter/lowlighter/actions/workflows/metrics.yml/badge.svg)](https://github.com/lowlighter/lowlighter/actions/workflows/metrics.yml) Generate your metrics that you can embed everywhere, including your GitHub profile readme! It works for both user and organization accounts, and even for repositories! *âš ī¸ This is the documentation of **v3.5-beta** (`@master` branch) which includes [unreleased features](https://github.com/lowlighter/metrics/compare/latest...master), see documentation of **v3.4** (`@latest` branch) [here](https://github.com/lowlighter/metrics/blob/latest/README.md).*
For user accounts For organization accounts
And you can customize these heavily with plugins, templates and hundreds of options!
🧩 26 plugins
📰 Recent activity 🏅 Repository contributors
With number of contributions
đŸŽŸī¸ Follow-up of issues and pull requests đŸŽĢ Gists
💡 Coding habits 🙋 Introduction
Charts version
Account version
Repository version
📅 Isometric commit calendar đŸˆˇī¸ Most used languages
Full year version
With both total bytes size and percentage version
📜 Repository licenses 👨‍đŸ’ģ Lines of code changed
With licenses ratio
🧑‍🤝‍🧑 People plugin đŸ—‚ī¸ Active projects
Followed people version
Special thanks version
Repository template version
🎭 Comment reactions 🌇 GitHub Skyline 3D calendar
✨ Stargazers over last weeks 🌟 Recently starred repositories
📌 Starred topics 🧮 Repositories traffic
Mastered and known technologies version
🌸 Anilist watch list and reading list đŸŽŧ Music plugin
Manga version
Favorites characters version
đŸŽŧ Favorite tracks version
Recently listened version
âąī¸ Website performances âœ’ī¸ Recent posts
Detailed version
With screenshot version
With posts descriptions and cover images version
đŸ—¨ī¸ Stackoverflow plugin 🐤 Latest tweets
With tweets attachments version
⏰ WakaTime plugin 💉 Nightscout
More to come soon!
đŸ–ŧī¸ 3+ templates
📗 Classic 📘 Repository
📙 Terminal 📕 Community templates
See documentation 🌍
## đŸĻ‘ Interested to get your own? Try it now at [metrics.lecoq.io](https://metrics.lecoq.io/) with your GitHub username! Some plugins are not are not available at [metrics.lecoq.io](https://metrics.lecoq.io/), for a fully-featured experience use it as a [GitHub Action](https://github.com/marketplace/actions/github-metrics-as-svg-image) instead! # 📜 How to use? ## âš™ī¸ Using GitHub Action on your profile repository (~5 min setup) Setup a GitHub Action which runs periodically and pushes your generated metrics image to your repository. See all supported options in [action.yml](action.yml). Assuming your username is `my-github-user`, you can then embed rendered metrics in your readme like below: ```markdown ![Metrics](https://github.com/my-github-user/my-github-user/blob/master/github-metrics.svg) ![Metrics](https://github.com/my-github-user/my-github-user/blob/main/github-metrics.svg) ```
đŸ’Ŧ How to setup? (click to expand) ### 0. Setup your personal repository Create a repository with the same name as your GitHub login (if it's not already done). ![Setup personal repository](.github/readme/imgs/setup_personal_repository.png) Its `README.md` will be displayed on your user profile: ![GitHub Profile Example](.github/readme/imgs/example_github_profile.png) ### 1. Create a GitHub personal token From the `Developer settings` of your account settings, select `Personal access tokens` to create a new token. No additional scopes are needed for basic metrics, but you may have to grant additional scope depending on what features you're planning to use: - `public_repo` scope for some plugins - `read:org` scope for all organizations related metrics - `repo` scope for all private repositories related metrics ![Setup a GitHub personal token](.github/readme/imgs/setup_personal_token.png) A scope-less token can still display private contributions by enabling `Include private contributions on my profile` in your account settings: ![Enable "Include private contributions on my profile`"](.github/readme/imgs/setup_private_contributions.png) If a plugin has not enough scopes to operate (and `plugins_errors_fatal` isn't enabled), it'll be reported in the rendering like below: ![Plugin error example](https://github.com/lowlighter/lowlighter/blob/master/metrics.plugin.error.svg) ### 2. Put your GitHub personal token in your repository secrets Go to the `Settings` of your repository to create a new secret and paste your freshly generated GitHub token there. ![Setup a repository secret](.github/readme/imgs/setup_repository_secret.png) ### 3. Create a GitHub Action workflow in your repository Create a new workflow from the `Actions` tab of your repository and paste the following: ```yaml name: Metrics on: # Schedule updates (each hour) schedule: [{cron: "0 * * * *"}] # Lines below let you run workflow manually and on each commit (optional) push: {branches: ["master", "main"]} workflow_dispatch: jobs: github-metrics: runs-on: ubuntu-latest steps: # See action.yml for all options - uses: lowlighter/metrics@latest with: # Your GitHub token token: ${{ secrets.METRICS_TOKEN }} # GITHUB_TOKEN is a special auto-generated token restricted to current repository, which is used to push files in it committer_token: ${{ secrets.GITHUB_TOKEN }} ``` See all supported options in [action.yml](action.yml). Rendered metrics will be committed to your repository on each run. ![Action update example](.github/readme/imgs/example_action_update.png) #### Choosing between `@latest`, `@master` or a fork If you wish to use new features as they're being released, you can switch from `@latest` to `@master`. As the latter is used as a development branch, jobs may fail from time to time (although we try to mitigate this). When using a token with additional permissions, it is advised to fork this repository and use it instead to minimize security risks: ```yaml - uses: my-github-username/metrics@master # If you make changes on your fork, be sure not leave @latest as tag! ``` In this case, please consider watching new releases to stay up-to-date and enjoy latest features! `@latest` will be updated on each release soon after [Planned for next release](https://github.com/lowlighter/metrics/projects/1#column-12378679) is emptied. Metrics doesn't introduce breaking changes **from an user point of view** (i.e. your workflows will always be valid) so you can follow release cycles without worrying. #### Examples workflows Metrics displayed on this page are rendered from this [workflow](https://github.com/lowlighter/lowlighter/blob/master/.github/workflows/metrics.yml) so you can check it out for some code examples about plugins usage. You can also take a look at this [user workflow](https://github.com/lowlighter/lowlighter/blob/master/.github/workflows/personal.yml) if you want. ### 4. Embed link into your README.md Update your README.md to embed your metrics: ```markdown ![Metrics](https://github.com/my-github-user/my-github-user/blob/master/github-metrics.svg) ![Metrics](https://github.com/my-github-user/my-github-user/blob/main/github-metrics.svg) ```
## 💕 Using the shared instance (~1 min setup, but with limitations) For convenience, you can use the shared instance available at [metrics.lecoq.io](https://metrics.lecoq.io) without any additional setup. ```markdown ![Metrics](https://metrics.lecoq.io/my-github-user) ``` This is mostly intended for previews, to enjoy all features consider using GitHub Action instead.
đŸ’Ŧ Fair use (click to expand) To ensure service availability, shared instance has a few limitations: * Images are cached for 15 minutes * Rendered metrics **won't be updated** during this time window when queried * You can manually update rendering againg your metrics on [metrics.lecoq.io](https://metrics.lecoq.io) * A rate limiter is enabled to prevent denial of service (it doesn't affect already cached metrics) * Some plugins may not be available Service is provided free of charge, so please be gentle with it 🙂
## đŸ—ī¸ Deploying your own web instance (~15 min setup, depending on your sysadmin knowledge) Setup a metrics instance on your server if you don't want to use GitHub Actions and [metrics.lecoq.io](https://metrics.lecoq.io). See all supported options in [settings.example.json](settings.example.json). Assuming your username is `my-github-user`, you can then embed rendered metrics in your readme like below: ```markdown ![Metrics](https://my-personal-domain.com/my-github-user) ```
đŸ’Ŧ How to setup? (click to expand) ### 0. Prepare your server You'll need a server with a recent version [NodeJS](https://nodejs.org) (see used version in [Dockerfile](Dockerfile#L1-L2)). ### 1. Create a GitHub personal token From the `Developer settings` of your account settings, select `Personal access tokens` to create a new token. No additional scopes are needed. ![Setup a GitHub personal token](.github/readme/imgs/setup_personal_token.png) ### 2. Install dependencies Clone repository, install dependencies and copy configuration example to `settings.json`: ```shell git clone https://github.com/lowlighter/metrics.git cd metrics/ npm install --only=prod cp settings.example.json settings.json ``` ### 3. Configure your instance and start it Edit `settings.json` to configure your instance. ```javascript { //GitHub API token "token":"GITHUB_TOKEN", //Other options... } ``` See all supported options in [settings.example.json](settings.example.json). If you plan to make your web instance public, it is advised to restrict its access thanks to rate limiter and access list. Once you've finished configuring metrics, start your instance: ```shell npm start ``` Access your server with provided port in `setting.json` from your browser to ensure everything is working. ### 4. Embed link into your README.md Edit your repository readme and add your metrics image from your server domain: ```markdown ![Metrics](https://my-personal-domain.com/my-github-user) ``` ### 6. (optional) Setup your instance as a service To ensure that your instance will restart if it reboots or crashes, you should set it up as a service. This is described below for Linux-like systems which support *systemd*. Create a new service file `/etc/systemd/system/github_metrics.service` and paste the following after editing paths inside: ```ini [Unit] Description=Metrics After=network-online.target Wants=network-online.target [Service] Type=simple WorkingDirectory=/path/to/metrics ExecStart=/usr/bin/node /path/to/metrics/index.mjs [Install] WantedBy=multi-user.target ``` Reload services, enable it, start it and check if it is up and running: ```shell systemctl daemon-reload systemctl enable github_metrics systemctl start github_metrics systemctl status github_metrics ```
🔗 HTTP parameters Most of options from [action.yml](action.yml) are actually supported by web instance, though syntax is slightly different. All underscores (`_`) must be replaced by dots (`.`) and `plugin_` prefixes must be dropped. For example, to configure pagespeed plugin you'd use the following: ``` https://my-personal-domain.com/my-github-user?pagespeed=1&pagespeed.detailed=1&pagespeed.url=https%3A%2F%2Fexample.com ``` Note that url parameters must be [encoded](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/encodeURIComponent). As for `base` content, which is enabled by default, sections are available through "`base.
`". For example, to display only `repositories` section, use: ``` https://my-personal-domain.com/my-github-user?base=0&base.repositories=1 ```
# 📚 Documentation ### 🧰 Template/plugin compatibily matrix
Template\Plugin đŸ—ƒī¸ 📰 🏅 đŸŽŸī¸ đŸŽĢ 💡 🙋 📅 đŸˆˇī¸ 📜 👨‍đŸ’ģ 🧑‍🤝‍🧑 đŸ—‚ī¸ 🎭 🌇 ✨ 🌟 📌 🧮 🌸 đŸŽŧ âąī¸ âœ’ī¸ đŸ—¨ī¸ 🐤 ⏰ 💉
📗 Classic âœ”ī¸ âœ”ī¸ ❌ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ ❌ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸
📘 Repository âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ ❌ ❌ âœ”ī¸ ❌ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ âœ”ī¸ ❌ ❌ âœ”ī¸ ❌ ❌ âœ”ī¸ ❌ ❌ âœ”ī¸ ❌ ❌ ❌ ❌ ❌
📙 Terminal âœ”ī¸ ❌ ❌ ❌ âœ”ī¸ ❌ ❌ ❌ âœ”ī¸ ❌ âœ”ī¸ ❌ ❌ ❌ ❌ ❌ ❌ ❌ âœ”ī¸ ❌ ❌ âœ”ī¸ ❌ ❌ ❌ ❌ ❌
## đŸ–ŧī¸ Templates Templates lets you change general appearance of rendered metrics. See their respective documentation for more informations about how to setup them: * [📗 Classic](/source/templates/classic/README.md) * [📘 Repository](/source/templates/repository/README.md) * [📙 Terminal](/source/templates/terminal/README.md) * [📕 Community templates](/source/templates/community/README.md) ## 🧩 Plugins Plugins are features which provide additional content and lets you customize your rendered metrics. See their respective documentation for more informations about how to setup them: * **Core** * [đŸ—ƒī¸ Base content](/source/plugins/base/README.md) * [🧱 Core](/source/plugins/core/README.md) * **Github** * [📰 Recent activity](/source/plugins/activity/README.md) * [🏅 Repository contributors](/source/plugins/contributors/README.md) * [đŸŽŸī¸ Follow-up of issues and pull requests](/source/plugins/followup/README.md) * [đŸŽĢ Gists](/source/plugins/gists/README.md) * [💡 Coding habits](/source/plugins/habits/README.md) * [🙋 Introduction](/source/plugins/introduction/README.md) * [📅 Isometric commit calendar](/source/plugins/isocalendar/README.md) * [đŸˆˇī¸ Most used languages](/source/plugins/languages/README.md) * [📜 Repository licenses](/source/plugins/licenses/README.md) * [👨‍đŸ’ģ Lines of code changed](/source/plugins/lines/README.md) * [🧑‍🤝‍🧑 People plugin](/source/plugins/people/README.md) * [đŸ—‚ī¸ Active projects](/source/plugins/projects/README.md) * [🎭 Comment reactions](/source/plugins/reactions/README.md) * [🌇 GitHub Skyline 3D calendar](/source/plugins/skyline/README.md) * [✨ Stargazers over last weeks](/source/plugins/stargazers/README.md) * [🌟 Recently starred repositories](/source/plugins/stars/README.md) * [📌 Starred topics](/source/plugins/topics/README.md) * [🧮 Repositories traffic](/source/plugins/traffic/README.md) * **Social** * [🌸 Anilist watch list and reading list](/source/plugins/anilist/README.md) * [đŸŽŧ Music plugin](/source/plugins/music/README.md) * [âąī¸ Website performances](/source/plugins/pagespeed/README.md) * [âœ’ī¸ Recent posts](/source/plugins/posts/README.md) * [đŸ—¨ī¸ Stackoverflow plugin](/source/plugins/stackoverflow/README.md) * [🐤 Latest tweets](/source/plugins/tweets/README.md) * [⏰ WakaTime plugin](/source/plugins/wakatime/README.md) * **Health** * [💉 Nightscout](/source/plugins/nightscout/README.md) ### đŸĻ Organizations metrics While metrics targets mainly user accounts, it's possible to render metrics for organization accounts. ![Metrics (organization account)](https://github.com/lowlighter/lowlighter/blob/master/metrics.organization.svg)
đŸ’Ŧ Metrics for organizations (click to expand) Setup is the same as for user accounts, though you'll need to add `read:org` scope, **whether you're member of target organization or not**. ![Add read:org scope to personal token](.github/readme/imgs/setup_token_org_read_scope.png) You'll also need to set `user` option with your organization name. If you're encounting errors and your organization is using single sign-on, try to [authorize your personal token](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on). Most of plugins supported by user accounts will work with organization accounts, but note that rendering metrics for organizations consume way more APIs requests. To support private repositories, add full `repo` scope to your personal token. #### â„šī¸ Example workflow ```yaml - uses: lowlighter/metrics@latest with: # ... other options token: ${{ secrets.METRICS_TOKEN }} # A personal token from an user account with read:org scope committer_token: ${{ secrets.GITHUB_TOKEN }} # GitHub auto-generated token user: organization-name # Organization name ```
đŸ’Ŧ Organizations memberships for user accounts (click to expand) Only public memberships can be displayed by metrics by default. You can manage your membership visibility in the `People` tab of your organization: ![Publish organization membership](.github/readme/imgs/setup_public_membership_org.png) For organization memberships, add `read:org` scope to your personal token. ![Add read:org scope to personal token](.github/readme/imgs/setup_token_org_read_scope.png)
## đŸ’Ē Customizing and contributing Metrics is built to be easily customizable. Fork this repository, switch used action from `lowlighter/metrics@latest` to your fork and start coding! To report a bug fill an [issue](https://github.com/lowlighter/metrics/issues) describing it. To suggest new features or requesting help to setup metrics, check out [discussions](https://github.com/lowlighter/metrics/discussions). If you want to contribute, submit a [pull request](https://github.com/lowlighter/metrics/pulls). Be sure to read [CONTRIBUTING.md](CONTRIBUTING.md) for more information about this. ## 📜 License ``` MIT License Copyright (c) 2020 lowlighter ``` ![License details](https://github.com/lowlighter/lowlighter/blob/master/metrics.licenses.svg) ![Sponsors](https://github.com/lowlighter/lowlighter/blob/master/metrics.sponsors.svg) ## 📖 Useful references * [GitHub GraphQL API](https://docs.github.com/en/graphql) * [GitHub GraphQL Explorer](https://docs.github.com/en/free-pro-team@latest/graphql/overview/explorer) * [GitHub Rest API](https://docs.github.com/en/rest) * [GitHub Octicons](https://github.com/primer/octicons) * See [GitHub Logos and Usage](https://github.com/logos) for more information. ### ✨ Inspirations * [anuraghazra/github-readme-stats](https://github.com/anuraghazra/github-readme-stats) * [jstrieb/github-stats](https://github.com/jstrieb/github-stats) * [ankurparihar/readme-pagespeed-insights](https://github.com/ankurparihar/readme-pagespeed-insights) * [jasonlong/isometric-contributions](https://github.com/jasonlong/isometric-contributions) * [jamesgeorge007/github-activity-readme](https://github.com/jamesgeorge007/github-activity-readme) * [vvo/sourcekarma](https://github.com/vvo/sourcekarma)