fix & feat: added week numbers; applied linting;
This commit is contained in:
parent
7563a7a8ed
commit
0dc06a87bd
14
README.md
14
README.md
@ -1,4 +1,5 @@
|
|||||||
# Dev Metrics in Readme
|
# Dev Metrics in Readme
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
----
|
----
|
||||||
@ -6,16 +7,17 @@
|
|||||||
[WakaTime](https://wakatime.com) Weekly Metrics on your Profile Readme:
|
[WakaTime](https://wakatime.com) Weekly Metrics on your Profile Readme:
|
||||||
|
|
||||||
## Prep Work
|
## Prep Work
|
||||||
|
|
||||||
1. You need to update the markdown file(.md) with 2 comments. You can refer [here](#update-your-readme) for updating it.
|
1. You need to update the markdown file(.md) with 2 comments. You can refer [here](#update-your-readme) for updating it.
|
||||||
2. You'll need a Wakatime API Key. You can get that from your Wakatime Account Settings
|
2. You'll need a WakaTime API Key. You can get that from your WakaTime Account Settings
|
||||||
- You can refer [here](#new-to-wakatime),if you're new to Wakatime
|
- You can refer [here](#new-to-wakatime), if you're new to WakaTime
|
||||||
-
|
|
||||||
3. **Optional** You'll need a GitHub API Token with `repo` scope from [here](https://github.com/settings/tokens) if you're running the action not in your Profile Repository
|
3. **Optional** You'll need a GitHub API Token with `repo` scope from [here](https://github.com/settings/tokens) if you're running the action not in your Profile Repository
|
||||||
- You can use [this](#other-repository-not-profile) example to work it out
|
- You can use [this](#other-repository-not-profile) example to work it out
|
||||||
4. You need to save the Wakatime API Key (and the GitHub API Token, if you need it) in the repository secrets. You can find that in the Settings of your Repository.Be sure to save those as the following.
|
4. You need to save the WakaTime API Key (and the GitHub API Token, if you need it) in the repository secrets. You can find that in the Settings of your Repository.Be sure to save those as the following.
|
||||||
- Wakatime-api-key as `WAKATIME_API_KEY = <your wakatime API Key>`and
|
- WakaTime-api-key as `WAKATIME_API_KEY = <your wakatime API Key>`and
|
||||||
- The GitHub Access Token as `GH_TOKEN=<your github access token>`
|
- The GitHub Access Token as `GH_TOKEN=<your github access token>`
|
||||||
5. You can follow either of the Two Examples according to your needs to get started with.
|
5. You can follow either of the Two Examples according to your needs to get started with.
|
||||||
|
|
||||||
> I strongly suggest you to run the Action in your Profile Repo since you won't be needing a GitHub Access Token
|
> I strongly suggest you to run the Action in your Profile Repo since you won't be needing a GitHub Access Token
|
||||||
|
|
||||||
This Action will run everyday at 00.00 UTC
|
This Action will run everyday at 00.00 UTC
|
||||||
@ -72,7 +74,7 @@ jobs:
|
|||||||
|
|
||||||
You'll need to get a [GitHub Access Token](https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token) with a `repo` scope and save it in the Repo Secrets `GH_TOKEN = <Your GitHub Access Token>`
|
You'll need to get a [GitHub Access Token](https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token) with a `repo` scope and save it in the Repo Secrets `GH_TOKEN = <Your GitHub Access Token>`
|
||||||
|
|
||||||
Here is Sample Worflow File for running it:
|
Here is Sample Workflow File for running it:
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
name: Waka Readme
|
name: Waka Readme
|
||||||
|
63
main.py
63
main.py
@ -1,26 +1,35 @@
|
|||||||
import base64
|
'''
|
||||||
import requests
|
WakaTime progress visualizer
|
||||||
|
'''
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
|
import base64
|
||||||
|
import datetime
|
||||||
|
import requests
|
||||||
from github import Github
|
from github import Github
|
||||||
|
|
||||||
|
|
||||||
START_COMMENT = '<!--START_SECTION:waka-->'
|
START_COMMENT = '<!--START_SECTION:waka-->'
|
||||||
END_COMMENT = '<!--END_SECTION:waka-->'
|
END_COMMENT = '<!--END_SECTION:waka-->'
|
||||||
listReg = f'{START_COMMENT}[\\s\\S]+{END_COMMENT}'
|
listReg = f"{START_COMMENT}[\\s\\S]+{END_COMMENT}"
|
||||||
|
this_week = datetime.datetime.now().strftime('%W')
|
||||||
|
|
||||||
user = os.getenv("INPUT_USERNAME")
|
user = os.getenv('INPUT_USERNAME')
|
||||||
waka_key = os.getenv("INPUT_WAKATIME_API_KEY")
|
waka_key = os.getenv('INPUT_WAKATIME_API_KEY')
|
||||||
ghtoken = os.getenv("INPUT_GH_TOKEN")
|
ghtoken = os.getenv('INPUT_GH_TOKEN')
|
||||||
|
|
||||||
|
|
||||||
def makeGraph(percent: float):
|
def make_graph(percent: float):
|
||||||
done_block = "█"
|
'''Make progress graph from API graph'''
|
||||||
empty_block = "░"
|
done_block = '█'
|
||||||
|
empty_block = '░'
|
||||||
pc_rnd = round(percent)
|
pc_rnd = round(percent)
|
||||||
return (f'{done_block*int(pc_rnd/4)}{empty_block*int( 25-int(pc_rnd/4))}')
|
return f"{done_block*int(pc_rnd/4)}{empty_block*int(25-int(pc_rnd/4))}"
|
||||||
|
|
||||||
|
|
||||||
def getStats():
|
def get_stats():
|
||||||
|
'''Gets API data and returns markdown progress'''
|
||||||
data = requests.get(
|
data = requests.get(
|
||||||
f"https://wakatime.com/api/v1/users/current/stats/last_7_days?api_key={waka_key}").json()
|
f"https://wakatime.com/api/v1/users/current/stats/last_7_days?api_key={waka_key}").json()
|
||||||
lang_data = data['data']['languages']
|
lang_data = data['data']['languages']
|
||||||
@ -28,29 +37,31 @@ def getStats():
|
|||||||
for l in lang_data[:5]:
|
for l in lang_data[:5]:
|
||||||
ln = len(l['name'])
|
ln = len(l['name'])
|
||||||
ln_text = len(l['text'])
|
ln_text = len(l['text'])
|
||||||
op = f"{l['name']}{' '*(12-ln)}{l['text']}{' '*(20-ln_text)}{makeGraph(l['percent'])} {l['percent']}"
|
op = f"{l['name']}{' '*(12-ln)}{l['text']}{' '*(20-ln_text)}{make_graph(l['percent'])} {l['percent']}"
|
||||||
data_list.append(op)
|
data_list.append(op)
|
||||||
data = " \n".join(data_list)
|
data = ' \n'.join(data_list)
|
||||||
return ("```text\n"+data+"\n```")
|
return '```text\n'+'Week #'+this_week+'\n'+data+'\n```'
|
||||||
|
|
||||||
|
|
||||||
def decodeReadme(data: str):
|
def decode_readme(data: str):
|
||||||
decodedBytes = base64.b64decode(data)
|
'''Decode the contets of old readme'''
|
||||||
return str(decodedBytes, "utf-8")
|
decoded_bytes = base64.b64decode(data)
|
||||||
|
return str(decoded_bytes, 'utf-8')
|
||||||
|
|
||||||
|
|
||||||
def generatenewReadme(stats: str, readme: str):
|
def generate_new_readme(stats: str, readme: str):
|
||||||
statsinReadme = f"{START_COMMENT}\n{stats}\n{END_COMMENT}"
|
'''Generate a new Readme.md'''
|
||||||
return re.sub(listReg, statsinReadme, readme)
|
stats_in_readme = f"{START_COMMENT}\n{stats}\n{END_COMMENT}"
|
||||||
|
return re.sub(listReg, stats_in_readme, readme)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
g = Github(ghtoken)
|
g = Github(ghtoken)
|
||||||
repo = g.get_repo(f"{user}/{user}")
|
repo = g.get_repo(f"{user}/{user}")
|
||||||
contents = repo.get_readme()
|
contents = repo.get_readme()
|
||||||
stats = getStats()
|
stats = get_stats()
|
||||||
rdmd = decodeReadme(contents.content)
|
rdmd = decode_readme(contents.content)
|
||||||
newreadme = generatenewReadme(stats=stats, readme=rdmd)
|
new_readme = generate_new_readme(stats=stats, readme=rdmd)
|
||||||
if newreadme != rdmd:
|
if new_readme != rdmd:
|
||||||
repo.update_file(path=contents.path, message="Updated with Dev Metrics",
|
repo.update_file(path=contents.path, message='Updated with Dev Metrics',
|
||||||
content=newreadme, sha=contents.sha, branch="master")
|
content=new_readme, sha=contents.sha, branch='master')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user