π GitHub Stats Visualization π
Generate regularly updated visualizations of user and repository statistics from the GitHub GraphQL and REST APIs using GitHub Actions and Secrets. Customizable visualizations support dark and light mode and can adapt to device sizes.
A modification of
jstrieb/github-stats
visualizations with new and improved statistics and more options!
Note: my 'Avg contributions' stats is customized to only consider collaborative university project repos
GitHub Statistics Term | Description |
---|---|
All-time GitHub contributions | Count of all contributions (as defined by GitHub) to any and all repositories any time for a given user |
Lines of code changes* | Sum of all code additions and deletions to all repositories contributed to for a user, measured by lines |
Avg contributions [weighted]* | Average code changes per collaborative repository for a user [weighted relative to contributor count] |
Repos contributed [% collab]* | Count of all repositories contributed to by a user [including percent in collaboration with others] |
Repo views (as of YYYY-MM-DD)* | Sum of views to all repositories since created, if owned, or contributed to (from a given date) |
Repo collaborators* | Sum of collaborator and contributor counts for all repositories contributed to or owned for a user |
Repo forks* | Sum of all-time fork counts for all repositories contributed to or owned for a user |
Repo stars* | Sum of all-time star counts for all repositories contributed to or owned for a user |
# [+#] Implemented Languages* | Listed [and hidden] percentages of implemented languages relative to sizes of files contributed to |
* Customisable as instructed in the π Options section below
Click drop-down to view step-by-step instructions for generating your own GitHub statistics visualizations
- Click either link to start generating your own GitHub statistic visualizations:
- Generate your own copy of this repository without the commit history
- Note: the first GitHub Actions workflow initiated at creation of the copied repository is expected to fail
- Fork a copy of this repository with the commit history configured to sync changes
- Note: this copies all branches including the
action_branch
with statistics, but this can be overwritten
- Note: this copies all branches including the
- Generate your own copy of this repository without the commit history
- Generate a personal access token by following these steps:
- If you are logged in, click this link to: generate a new "classic" token
- Otherwise, to learn how to generate a personal access token: read these instructions
- Ensure it is a "classic" token being generated and not a "fine-grained" token
- Name the token
- Select your preferred 'Expiration' date
- Select
repo
for 'Full control of private repositories' - Select
read:user
to 'Read only ALL user profile data' - Click the 'Generate token' button
- Copy the generated token - there is only one opportunity provided for this
- If you are logged in, click this link to: generate a new "classic" token
- Create a repository secret for the personal access token by following these steps:
- If this is your copy of the repository, click this link to: create a new secret
- Otherwise, go to repository Settings, click the Secrets option, then click New repository secret
- Name the new secret:
ACCESS_TOKEN
- Enter the generated personal access token as the 'Value'
- If this is your copy of the repository, click this link to: create a new secret
- Manually generate GitHub statistics visualizations:
- This can be done using any of the following two GitHub Actions workflows:
- For the first time, or to reset stored statistics (although this is done with every push to the main):
- Click the link to: go to the Generate Git Stats Images GitHub Actions workflow
This is required if the
actions_branch
branch is not created, as it is created when run - Otherwise, for updating generated statistics visualizations (although this is automatically done ):
- Click the link to: go to the Auto Update Stats Images GitHub Actions workflow
This requires the
actions_branch
branch to first be created with generated statistics visualizations
- For the first time, or to reset stored statistics (although this is done with every push to the main):
- With the GitHub Actions page open, click the 'Run workflow' dropdown menu button
- Select
Branch: main
from the 'Use workflow from' dropdown list - Click the 'Run workflow' button
- Note: this could take some time
- This can be done using any of the following two GitHub Actions workflows:
- Following the successful completion of a workflow, generated statistics visualizations can be viewed:
- In the
generated_images
directory in theactions_branch
branch with the following image links:
- In the
- To display the generated statistics, static URLs can be used for images that are updated weekly:
- For generated language statistics visualizations (replacing
<username>
with your GitHub username):
![](https://raw.githubusercontent.com/<username>/GitStats/actions_branch/generated_images/languages.svg)
- For generated overview statistic visualizations (replacing
<username>
with your GitHub username):
![](https://raw.githubusercontent.com/<username>/GitStats/actions_branch/generated_images/overview.svg)
- For generated language statistics visualizations (replacing
Click drop-down to view optional repository Secrets for customizing GitHub statistic visualizations
-
For excluding repositories from being included entirely in the generated statistic visualizations.
Instructions:
- enter Value in the following format (separated by commas):
[owner/repo],[owner/repo],...,[owner/repo]
- example:
jstrieb/github-stats,rahul-jha98/github-stats-transparent,idiotWu/stats
- enter Value in the following format (separated by commas):
-
For ONLY including repositories in the generated statistic visualizations
- such as when there are fewer repositories to include than to exclude
Instructions:
- enter Value in the following format (separated by commas):
[owner/repo],[owner/repo],...,[owner/repo]
- example:
R055A/GitStats,R055A/R055A
-
For excluding undesired languages from being included in the generated statistic visualizations
Instructions:
- enter Value in the following format (separated by commas):
[language],[language],...,[language]
- example:
HTML,Jupyter Notebook,Makefile,Dockerfile
- enter Value in the following format (separated by commas):
-
For excluding any/all language statistics specific to a repository from being included in the generated visualizations
Instructions:
- enter Value in the following format (separated by commas):
[owner/repo--language...--language],[owner/repo--language...--language],...,[owner/repo--language...--language]
--language
denotes a language in the repository to be excluded from stats or exclude this for all repo languages
- example:
jstrieb/github-stats--python,rahul-jha98/github-stats-transparent,idiotWu/stats--python--shell
- enter Value in the following format (separated by commas):
-
Boolean option for including forked repositories in the generated statistic visualizations. These could repeat statistical calculations
false
by default
Instructions:
- enter Value in the following format:
<boolean>
- examples:
true
-
Boolean option for excluding non-owned repositories contributed to in the generated statistic visualizations
false
by default
Instructions:
- enter Value in the following format:
<boolean>
- examples:
true
-
Boolean option for excluding archived repositories in the generated statistic visualizations
false
by default
Instructions:
- enter Value in the following format:
<boolean>
- examples:
true
-
Boolean option for excluding private repositories in the generated statistic visualizations
- for when you want to keep those secrets locked away from prying eyes
false
by default
Instructions:
- enter Value in the following format:
<boolean>
- examples:
true
-
Boolean option for excluding public repositories in the generated statistic visualizations
false
by default
Instructions:
- enter Value in the following format:
<boolean>
- examples:
true
-
For including repositories that are otherwise not included in generated statistic visualizations when scraping by username
- such as repositories imported from, say, GitLab - hint: add emails used in imported repo commits to profile settings
Instructions:
- enter Value in the following format (separated by commas):
[owner/repo],[owner/repo],...,[owner/repo]
- example:
R055A/GitStats,R055A/R055A
-
For adding a constant value to the generated repository collaborators statistic
- such as for collaborators that are otherwise not represented
Instructions:
- enter Value in the following format:
<int>
- example:
4
-
For ONLY including collaborative repositories in the generated average contribution statistics calculations
- such as when there are fewer collaborative repositories to include than to exclude
Instructions:
- enter Value in the following format (separated by commas):
[owner/repo],[owner/repo],...,[owner/repo]
- example:
R055A/UniversityProject-A,R055A/UniversityProject-B
-
For excluding collaborative repositories from being included in the average contribution statistics calculations
- for example, such as for when
- contributions are made to a collaborative repo, but it is not one of your projects (open-source typo fix, etc)
- someone deletes and re-adds the entire codebase a few times too many
- your or someone else's performance is not fairly represented - missing data bias
- pirates, ninjas, etc.
Instructions:
- enter Value in the following format (separated by commas):
[owner/repo],[owner/repo],...,[owner/repo]
- example:
tera_open_source/bit_typo_fix,peer_repo/missing_or_no_git_co_author_credit,dude_collab/email_not_reg_on_github,dog_ate/my_repo,mars/attacks
- for example, such as for when
-
For including collaborative repositories that are otherwise not included in the average contribution statistics calculations
- for example, such as when
- nobody even bothered to join the repository as a collaborator let alone contribute anything
- the repository is imported and because it is ghosted there are no other contributions and, thus, none of the other collaborators are represented in the scraping
Instructions:
- enter Value in the following format (separated by commas):
[owner/repo],[owner/repo],...,[owner/repo]
- example:
imported_ghosted/large_A+_collab_project,slave_trade/larger_A++_project
- for example, such as when
-
Boolean for storing generated repository view statistic visualization data beyond the 14 day-limit GitHub API allows
true
by default
Instructions:
- enter Value in the following format:
<boolean>
- examples:
false
-
For adding a constant value to the generated repository view statistics
- such as for when the stored data is reset or when importing stat data from elsewhere
- requires being removed within 14 days after the first workflow is run (with
LAST_VIEWED
) - requires corresponding
LAST_VIEWED
andFIRST_VIEWED
Secrets
Instructions:
- enter Value in the following format:
<int>
- example:
5000
-
For updating the date the generated repository view statistics data is added to storage from
- such as for when the stored data is reset or when importing stat data from elsewhere
- requires being removed within 14 days after the first workflow is run (with
REPO_VIEWS
) - may require corresponding
REPO_VIEWS
andFIRST_VIEWED
Secrets
Instructions:
- enter Value in the following format:
YYYY-MM-DD
- example:
2020-10-01
-
For updating the 'as of' date the generated repository view statistics data is stored from
- such as for when the stored data is reset or when importing stat data from elsewhere
- may require corresponding
REPO_VIEWS
andLAST_VIEWED
Secrets
Instructions:
- enter Value in the following format:
YYYY-MM-DD
- example:
2021-03-31
There are a few things you can do to support the project (and that it is extended from):
- β¨ Star this repository (and/or π star
jstrieb/github-stats
and π followjstrieb
for more) - π Report any bugs π, glitches, or errors that you find π§
- πΈ Spare a donation to a worthy cause π₯Ή
The project was initially deployed in March 2021 to visualize a statistical representation of my historic university (collaborative) contributions and subsequently removed following negative feedback and other undesired consequences.
The deciding factor was when a co-collaborator for another project pushed my assigned task work before me (and any deadline, without prior notification regardless of the as-usual ever-committed sound planning and documentation, task management, and consistent communication otherwise), which coincidentally was very much the same API-fetching as in this repo, but for the first instance of the Data Engineering II course not starting until after the initial deployment of what this repository succeeds.
It is not the first time I have coincidentally completed assessment requirements unwittingly before beginning a course with undesirable consequences regardless of distinction in honest performance (almost at the cost of my life, although any true understanding is cause for that, it would seem; TLDR) π€. Basically, for all I do good (real or just remotely rationale) - which is all I do - especially for others, all I can do is bad in these environments. I had no time remaining to supplement considering I was single-handedly challenging/surviving years of ongoing extremely far worse circumstances (underlying to this and countless more problems) in parallel under remote pandemic lockdown conditions with already a typical 3x the average workload and 24/7 global timetable while then suffering from - the start of what would become years of multiple head-to-toe severe - infections following countless other correlating 24/7 seriously harmful and damaging issues.
Thus, I do not know if the push made before mine passed. Still, at least they pushed something instead of the likes of harassing me in attempts to help them defraud being involved in mine (no different than those otherwise defrauding me as not instead), or just blatantly waiting until the deadline had passed to claim against documented evidence falsely, and all other logic that I completed their task instead, or any other years-long backward misappropriation whether in parallel or continuing as far as thesis and beyond π§.
Ironically, I deployed this for a finally once fair understanding of my general position under such biased dishonest (and unimaginably far worse) circumstances spanning back as far as 2014 (although it is obvious the conspiracy has roots far beyond this). The Data Engineering II course was also the first case of individual project contributions having any significance in grading at that university. I left my old university because of such organised behaviour, although now all one needs is LLM (such as cheat-GPT), which the historic transition is instantly noticeable in behaviour as experienced.
GitStats is nothing personal, but only for reflective natural understanding in any circumstance, and is neither (the likes of) a planned jihad nor represents the statistics of any other collaborator. This can be seen for oneself by deploying individual GitStats repositories using this as a template (instructions are in this README.md). The statistics do not, however, represent correctness or underlying dynamics, etc., although I can confirm all my university contributions pass with distinction on average and only include code of significance (that is, exclude redundant configuration files, unchanged rewritting of the code base pushes & other git-misuse, etc.).