diff --git a/README.md b/README.md index 7e4402d..d015478 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,33 @@ -
- -![waka-readme](https://socialify.git.ci/athul/waka-readme/image?description=1&forks=1&name=1&pulls=1&stargazers=1&theme=Light) - -
- -# Dev Metrics in Readme [![Unit Tests](https://github.com/athul/waka-readme/actions/workflows/testing.yml/badge.svg?branch=master)](https://github.com/athul/waka-readme/actions/workflows/testing.yml) ![Python Version](https://img.shields.io/badge/Python-^3.11-blue) - -[WakaTime](https://wakatime.com) weekly metrics on your profile readme. - -![Project Preview](https://user-images.githubusercontent.com/8397274/87243943-e6b45c00-c457-11ea-94c9-2aa0bf241be8.png) +

+ waka-readme +

+ +# Dev Metrics in Readme [![Unit Tests](https://github.com/athul/waka-readme/actions/workflows/testing.yml/badge.svg?branch=master)](https://github.com/athul/waka-readme/actions/workflows/testing.yml) + +[WakaTime](https://wakatime.com) coding metrics on your profile readme. + + + + + new_secrets_actions + + :speech_balloon: **Forum** | [GitHub discussions][gh_discuss] ## New to WakaTime? -> Nope? Skip to [prep work](#prep-work). +> Nope? Skip to [#Prep work](#prep-work). -WakaTime gives you an idea of the time you spent on coding. This helps you boost your productivity and competitive edge. +WakaTime gives you an idea of the time you spent on coding. +This helps you boost your productivity and competitive edge (aka _flex_ :muscle:). 1. Head over to and create an account. 2. After logging in get your WakaTime API Key from . @@ -24,7 +35,7 @@ WakaTime gives you an idea of the time you spent on coding. This helps you boost 4. Paste in your API key to start telemetry. :information_source: **Info** | You can read [WakaTime help][waka_help] to know more about configurations. -Alternatively, you can also fetch data from WakaTime compatible services like [Wakapi][wakapi] or [Hakatime][hakatime]. +Alternatively, you can fetch data from WakaTime compatible services such as [Wakapi][wakapi] or [Hakatime][hakatime]. ## Prep Work @@ -39,24 +50,43 @@ A GitHub repository and a `README.md` file is required. We'll be making use of r `` and `` are placeholders and must be retained as is. Whereas "`waka`" can be replaced by any alphanumeric string. See [#Tweaks](#tweaks) section for more. -- Navigate to your repo's `Settings > Secrets` and add a new secret _named_ `WAKATIME_API_KEY` with your API key as it's _value_. +- Navigate to your repo's `Settings`: + - Go to `Secrets` (at `https://github.com/USERNAME/USERNAME/settings/secrets/actions/new` by replacing the `USERNAME` with your own username) and add a new secret "_Named_" `WAKATIME_API_KEY` with your API key as it's "_Secret_". - > Or use the url by replacing the `USERNAME` with your own username. - > - > ![new_secrets_actions][new_secrets_actions] + + + + new_secrets_actions + + - - If you're not using [profile repository][profile_readme], add another secret _named_ `GH_TOKEN` and insert your [GitHub token][gh_access_token]\* in place of _value_. + > If you're not using [profile repository][profile_readme], add another secret "_Named_" `GH_TOKEN` and in place of "_Secret_" insert your [GitHub token][gh_access_token]. -- Create a new workflow file (`waka-readme.yml`) inside `.github/workflows/` folder of your repository. You can create it from a template using the _actions tab_ of your repository too. -- Clear any existing contents, add the following lines and save the `waka-readme.yml` workflow file. + - Go to `Workflow permissions` under `Actions` (at `https://github.com/USERNAME/USERNAME/settings/actions` by replacing the `USERNAME` with your own username) and set `Read and write permissions`. + + + + + new_secrets_actions + + + +- Create a new workflow file named `waka-readme.yml` inside `.github/workflows/` folder of your repository. +- Clear all existing contents, add following lines and save the file. ```yml name: Waka Readme on: - workflow_dispatch: # for manual workflow trigger + # for manual workflow trigger + workflow_dispatch: schedule: - - cron: "0 0 * * *" # runs at every 12AM UTC + # runs at 12 AM UTC (5:30 AM IST) + - cron: "0 0 * * *" jobs: update-readme: @@ -66,17 +96,13 @@ A GitHub repository and a `README.md` file is required. We'll be making use of r - uses: athul/waka-readme@master with: WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }} - # following flags are required, only if this is not on - # profile readme, remove the leading `#` to use them - #GH_TOKEN: ${{ secrets.GH_TOKEN }} - #REPOSITORY: ``` Refer [#Example](#example) section for a full blown workflow file. ## Tweaks -There are many flags that you can tweak as you wish! +There are many flags that you can modify as you see fit. ### Meta Tweaks @@ -112,9 +138,9 @@ There are many flags that you can tweak as you wish! | `AUTHOR_NAME` | `NOT_SET`, author name | | `AUTHOR_EMAIL` | `NOT_SET`, author email | -All of these flags are _optional_. +The first option is the _default_ value of the _flag_, subsequent options are valid values available for the _flag_. -# Example +## Example **`waka-readme.yml`** @@ -122,9 +148,10 @@ All of these flags are _optional_. name: Waka Readme on: + # for manual workflow trigger workflow_dispatch: schedule: - # Runs at 12am UTC + # runs at 12 AM UTC (5:30 AM IST) - cron: "0 0 * * *" jobs: @@ -134,43 +161,38 @@ jobs: steps: - uses: athul/waka-readme@master with: - GH_TOKEN: ${{ secrets.GH_TOKEN }} - WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }} - # meta - API_BASE_URL: https://wakatime.com/api - REPOSITORY: athul/athul - # content - SHOW_TITLE: true - SECTION_NAME: waka - BLOCKS: -> - CODE_LANG: all_time - TIME_RANGE: true - LANG_COUNT: 10 - SHOW_TIME: true - SHOW_TOTAL: true - SHOW_MASKED_TIME: false - STOP_AT_OTHER: true - # commit - COMMIT_MESSAGE: Updated waka-readme graph with new metrics - TARGET_BRANCH: master - TARGET_PATH: README.md - COMMITTER_NAME: GitHubActionBot - COMMITTER_EMAIL: action-bot@github.org - AUTHOR_NAME: Athul - AUTHOR_EMAIL: athul@example.org + GH_TOKEN: ${{ secrets.GH_TOKEN }} # optional if on profile readme + WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }} # required + ### meta + API_BASE_URL: https://wakatime.com/api # optional + REPOSITORY: YOUR_GITHUB_USERNAME/YOUR_REPOSITORY_NAME # optional + ### content + SHOW_TITLE: true # optional + SECTION_NAME: waka # optional + BLOCKS: -> # optional + CODE_LANG: rust # optional + TIME_RANGE: all_time # optional + LANG_COUNT: 10 # optional + SHOW_TIME: true # optional + SHOW_TOTAL: true # optional + SHOW_MASKED_TIME: false # optional + STOP_AT_OTHER: true # optional + ### commit + COMMIT_MESSAGE: Updated waka-readme graph with new metrics # optional + TARGET_BRANCH: master # optional + TARGET_PATH: README.md # optional + COMMITTER_NAME: GitHubActionBot # optional + COMMITTER_EMAIL: action-bot@github.com # optional + AUTHOR_NAME: YOUR_NAME # optional + AUTHOR_EMAIL: YOUR@EMAIL.com # optional # you can populate email-id with secretes instead ``` -> Note: -> -> - Flags `REPOSITORY` and `GH_TOKEN` are required, ONLY if you're NOT using [profile readme][profile_readme]. -> - `WAKATIME_API_KEY` is a required secret. -> - Every other environment variables is optional. -> - The above example does not show proper default values, refer [#Tweaks](#tweaks) for the same. +_Rendered `markdown`:_ -**`README.md`** + -```md +```rust From: 10 July 2020 - To: 06 August 2022 Total Time: 1,464 hrs 54 mins @@ -183,6 +205,15 @@ Nim 64 hrs 31 mins >------------------------ 04.11 % Other 47 hrs 58 mins >------------------------ 03.05 % ``` + + +## Notes + +- Flags `REPOSITORY` and `GH_TOKEN` are required ONLY if, you are NOT using [profile readme][profile_readme]. +- If you are using `GH_TOKEN`, make sure set the [fine grained token](https://github.com/settings/tokens?type=beta) scope to repository contents with `read-and-write` access. See [#141 (comment)](https://github.com/athul/waka-readme/issues/141#issuecomment-1679831949). +- `WAKATIME_API_KEY` is a **required** secret. All other environment variables are optional. +- The above example does NOT show proper default values, refer [#Tweaks](#tweaks) for the same. + ## Why only the language stats (and not other data) from the API? I am a fan of minimal designs and the profile readme is a great way to show off your skills and interests. The WakaTime API, gets us a **lot of data** about a person's **coding activity including the editors and Operating Systems you used and the projects you worked on**. Some of these projects maybe secretive and should not be shown out to the public. Using up more data via the Wakatime API will clutter the profile readme and hinder your chances on displaying what you provide **value to the community** like the pinned Repositories. I believe that **Coding Stats is nerdiest of all** since you can tell the community that you are **_exercising these languages or learning a new language_**, this will also show that you spend some amount of time to learn and exercise your development skills. That's what matters in the end :heart: @@ -193,6 +224,5 @@ I am a fan of minimal designs and the profile readme is a great way to show off [waka_plugins]: https://wakatime.com/plugins [waka_help]: https://wakatime.com/help/editors [profile_readme]: https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme -[new_secrets_actions]: https://user-images.githubusercontent.com/52720626/151221742-bc37d139-2bb3-4554-b27c-46b107d1f408.png [gh_access_token]: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token [gh_discuss]: https://github.com/athul/waka-readme/discussions diff --git a/main.py b/main.py index 671899e..75165ad 100644 --- a/main.py +++ b/main.py @@ -28,24 +28,23 @@ """ # standard +from base64 import b64encode from dataclasses import dataclass -from random import SystemRandom -from functools import partial from datetime import datetime -from base64 import b64encode +from functools import partial import logging as logger +import os +from random import SystemRandom +import re +import sys from time import sleep from typing import Any -import sys -import re -import os # external +from faker import Faker from github import ContentFile, Github, GithubException, InputGitAuthor, Repository -from requests.exceptions import RequestException from requests import get as rq_get -from faker import Faker - +from requests.exceptions import RequestException ################### setup ################### diff --git a/pyproject.toml b/pyproject.toml index 15959ac..0262a6c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,20 +4,19 @@ [project] name = "waka-readme" -version = "0.2.3" +version = "0.2.4" description = "Wakatime Weekly Metrics on your Profile Readme." +authors = [{ name = "Athul Cyriac Ajay", email = "athul8720@gmail.com" }] license = { text = "MIT" } readme = "README.md" keywords = ["readme", "profile-page", "wakatime"] -authors = [{ name = "Athul Cyriac Ajay", email = "athul8720@gmail.com" }] -maintainers = [{ name = "Jovial Joe Jayarson" }] classifiers = [ "Development Status :: 5 - Production/Stable", "Programming Language :: Python", "Typing :: Typed", ] requires-python = ">=3.11" -dependencies = ["faker>=19.1.0", "pygithub>=1.59.0", "requests>=2.31.0"] +dependencies = ["faker>=19.3.0", "pygithub>=1.59.1", "requests>=2.31.0"] [project.urls] Homepage = "https://github.com/athul/waka-readme" @@ -25,32 +24,62 @@ Documentation = "https://github.com/athul/waka-readme#readme" Repository = "https://github.com/athul/waka-readme" Changelog = "https://github.com/athul/waka-readme/commits/master" - ############################# # Optional Dependencies # ############################# [project.optional-dependencies] dev = ["loguru>=0.7.0", "python-dotenv>=1.0.0"] -tooling = ["bandit>=1.7.5", "black>=23.7.0", "ruff>=0.0.278"] +tooling = [ + "bandit>=1.7.5", + "black>=23.7.0", + "ruff>=0.0.284", + "pyright>=1.1.323", +] #################### # Configurations # #################### +[tool.bandit] +exclude_dirs = [".github", "tests", ".venv", ".vscode"] + [tool.black] line-length = 100 target-version = ["py311"] -[tool.bandit] -exclude_dirs = [".github", ".pytest_cache", ".tox", ".vscode", "site", "tests"] +[tool.pyright] +exclude = ["**/__pycache__", ".venv/"] +pythonVersion = "3.11" +pythonPlatform = "All" +typeCheckingMode = "strict" [tool.ruff] +select = [ + # Pyflakes + "F", + # pycodestyle + "W", + "E", + # mccabe + # C90 + # isort + "I", + # pep8-naming + "N", + # pydocstyle + "D", +] line-length = 100 - -[tool.ruff.pydocstyle] -convention = "google" +target-version = "py311" +extend-exclude = ["**/__pycache__"] [tool.ruff.isort] +# case-sensitive = true +combine-as-imports = true force-sort-within-sections = true +force-wrap-aliases = true relative-imports-order = "closest-to-furthest" + +[tool.ruff.pydocstyle] +convention = "google" diff --git a/tests/__init__.py b/tests/__init__.py index 6463798..7e6ecd4 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,6 +1,4 @@ -""" -Initialize test module -""" +"""Initialize test module.""" # standard import logging diff --git a/tests/test_main.py b/tests/test_main.py index 8bc3fc4..4055bf0 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,12 +1,12 @@ """Unit Tests.""" # standard -from importlib import import_module from dataclasses import dataclass # , field +from importlib import import_module from itertools import product -import unittest -import sys import os +import sys +import unittest # from pathlib import Path # from inspect import cleandoc