15 Commits
0.1.2 ... 0.1.3

Author SHA1 Message Date
Stanley
67a3568c75 added more detailed readme (#21)
* added more detailed readme

* Update README.md

Co-authored-by: Athul Cyriac Ajay <athul8720@gmail.com>

Co-authored-by: Athul Cyriac Ajay <athul8720@gmail.com>
2020-07-23 10:16:03 +05:30
Athul Cyriac Ajay
580f6d4639 Add try-except if an empty list occurs and removed the exit function (#19)
* Add try-except if an empty list occurs and removed the exit fn

Closes #18

* Updated Try-except to print to readme
2020-07-22 22:40:00 +05:30
Jovial Joe Jayarson
fd7a6214c1 Fixes #15: Long Program Name (#16)
* fix: fixes long language issue

* fix: removed reduant line
2020-07-22 15:39:59 +05:30
athul
c487876563 Fixed Error Handler bug 2020-07-21 00:21:44 +05:30
Athul Cyriac Ajay
744bf5ae56 Add a try/except block for catching errors (#14)
* Add a try/except block for catching errors

* Refactored the try/except to catch the GitHub error
2020-07-20 11:18:23 +05:30
athul
0edb69508c Fixed the SHOW_TITLE bug 2020-07-18 21:38:48 +05:30
Athul Cyriac Ajay
5f04a7c728 Merge pull request #12 from athul/flag
Add a Flag for Weeks
2020-07-18 21:34:37 +05:30
athul
610c67b096 Fixed old code problem and add return types 2020-07-18 19:11:04 +05:30
Jovial Joe Jayarson
15c5dbcc49 fix: adds padding to float for neater look (#11) 2020-07-18 12:39:17 +05:30
Athul Cyriac Ajay
96f680b05f Merge pull request #8 from joe733/master
fix: Changed to week streak instead for week of the year
2020-07-18 09:40:51 +05:30
Jovial Joe Jayarson
49b64c7be8 fix: fixed month / year roll-over issue 2020-07-18 09:31:13 +05:30
Jovial Joe Jayarson
0cf0773d1c Merge branch 'master' of https://github.com/joe733/waka-readme 2020-07-18 09:15:59 +05:30
Jovial Joe Jayarson
d0c5208665 fix: added space before % 2020-07-18 09:15:18 +05:30
Jovial Joe Jayarson
b1a69733c8 Merge branch 'master' of https://github.com/joe733/waka-readme 2020-07-18 08:49:59 +05:30
Jovial Joe Jayarson
02b84ff4ca fix: week streak changed to last 7 days from today 2020-07-18 08:49:37 +05:30
3 changed files with 106 additions and 37 deletions

View File

@@ -48,28 +48,43 @@ WakaTime gives you an idea of the time you really spent on coding. This helps yo
> You wouldn't need an GitHub Access Token since GitHub Actions already makes one for you.
Here is a sample workflow file for you to get started:
Please follow the steps below:
```yml
name: Waka Readme
1. Go to your `<username>/<username>/actions`, hit `New workflow`, `set up a workflow yourself`, delete all the default content github made for you.
2. Copy the following code and paste it to your new workflow you created at step 1:
```yml
name: Waka Readme
on:
schedule:
# Runs at 12am UTC
- cron: '0 0 * * *'
on:
workflow_dispatch
schedule:
# Runs at 12am UTC
- cron: '0 0 * * *'
jobs:
update-readme:
name: Update this repo's README
runs-on: ubuntu-latest
steps:
- uses: athul/waka-readme@master
with:
WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }}
```
jobs:
update-readme:
name: Update this repo's README
runs-on: ubuntu-latest
steps:
- uses: athul/waka-readme@master
with:
WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }}
```
3. Go to your repo secrets by hitting `Settings => Secrets` tab in your profile repo. You can also enter the url https://github.com/USERNAME/USERNAME/settings/secrets . Please replace the `USERNAME` with your own username.
4. Create a new `Secret`. `Name`: `WAKATIME_API_KEY`, `Value`: Paste the Wakatime API key here. If you don't know what is the key, please go to [Account Settings in WakaTime](https://wakatime.com/settings/account) to find your API Key there.
5. Add a comment to your `README.md` like this:
```md
<!--START_SECTION:waka-->
<!--END_SECTION:waka-->
```
6. Go to Workflows menu (mentioned in step 1), click `Waka Readme`, click `Run workflow`.
7. Go to your profile page. you will be able to see it.
### Other Repository (not Profile)
*If you're executing the workflow on another repo other than `<username>/<username>`*
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>`
@@ -95,3 +110,27 @@ jobs:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
USERNAME: <username> # optional, it will automatically use the username of the owner of the repository who's executing the workflow.
```
## Extras
1. If you want to add the week in the Header of your stats, you can add `HEAD_FLAG: true` in your workflow file like this
```yml
- uses: athul/waka-readme@master
with:
WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
USERNAME: <username>
SHOW_TITLE: true
```
`SHOW_TITLE` flag can be set to true if you want to display the week number and days in the readme, by default it will be false. Here is an example output with `SHOW_TITLE` set to true.
```text
Week: 10 July, 2020 - 17 July, 2020
Python 8 hrs 52 mins ███████████████████░░░░░░ 75.87 %
Go 1 hr 15 mins ██░░░░░░░░░░░░░░░░░░░░░░░ 10.79 %
Markdown 52 mins █░░░░░░░░░░░░░░░░░░░░░░░░ 07.43 %
Docker 16 mins ░░░░░░░░░░░░░░░░░░░░░░░░░ 02.32 %
YAML 7 mins ░░░░░░░░░░░░░░░░░░░░░░░░░ 01.07 %
```

View File

@@ -15,6 +15,12 @@ inputs:
USERNAME:
description: 'Your GitHub username'
default: ${{ github.repository_owner }}
required: false
SHOW_TITLE:
description: "Displays the week number and days in Readme as title"
default: false
required: false
runs:

66
main.py
View File

@@ -5,10 +5,10 @@ WakaTime progress visualizer
import re
import os
import base64
import sys
import datetime
import requests
from github import Github
from github import Github, GithubException
START_COMMENT = '<!--START_SECTION:waka-->'
END_COMMENT = '<!--END_SECTION:waka-->'
@@ -17,16 +17,18 @@ listReg = f"{START_COMMENT}[\\s\\S]+{END_COMMENT}"
user = os.getenv('INPUT_USERNAME')
waka_key = os.getenv('INPUT_WAKATIME_API_KEY')
ghtoken = os.getenv('INPUT_GH_TOKEN')
show_title = os.getenv("INPUT_SHOW_TITLE")
def this_week():
'''Returns current week span'''
week_number = datetime.date.today().isocalendar()[1]
month = datetime.date.today().strftime('%B')
week_start = datetime.datetime.today().day - datetime.datetime.today().weekday()
week_end = week_start + 5
return f"Week #{week_number} : {month} {week_start} - {week_end}"
def make_graph(percent: float):
def this_week() -> str:
'''Returns a week streak'''
week_end = datetime.datetime.today() - datetime.timedelta(days=1)
week_start = week_end - datetime.timedelta(days=7)
print("Week header created")
return f"Week: {week_start.strftime('%d %B, %Y')} - {week_end.strftime('%d %B, %Y')}"
def make_graph(percent: float) -> str:
'''Make progress graph from API graph'''
done_block = ''
empty_block = ''
@@ -34,28 +36,46 @@ def make_graph(percent: float):
return f"{done_block*int(pc_rnd/4)}{empty_block*int(25-int(pc_rnd/4))}"
def get_stats():
def get_stats() -> str:
'''Gets API data and returns markdown progress'''
data = requests.get(
f"https://wakatime.com/api/v1/users/current/stats/last_7_days?api_key={waka_key}").json()
lang_data = data['data']['languages']
try:
lang_data = data['data']['languages']
except KeyError:
print("Please Add your WakaTime API Key to the Repository Secrets")
sys.exit(1)
data_list = []
for l in lang_data[:5]:
ln = len(l['name'])
ln_text = len(l['text'])
op = f"{l['name']}{' '*(12-ln)}{l['text']}{' '*(20-ln_text)}{make_graph(l['percent'])} {l['percent']}%"
data_list.append(op)
try:
pad = len(max([l['name'] for l in lang_data[:5]], key=len))
except ValueError:
print("The Data seems to be empty. Please wait for a day for the data to be filled in.")
return '```text\nNo Activity tracked this Week\n```'
for lang in lang_data[:5]:
lth = len(lang['name'])
ln_text = len(lang['text'])
# following line provides a neat finish
fmt_percent = format(lang['percent'], '0.2f').zfill(5)
data_list.append(
f"{lang['name']}{' '*(pad + 3 - lth)}{lang['text']}{' '*(16 - ln_text)}{make_graph(lang['percent'])} {fmt_percent} %")
print("Graph Generated")
data = ' \n'.join(data_list)
return '```text\n'+this_week()+'\n\n'+data+'\n```'
if show_title == 'true':
print("Stats with Weeks in Title Generated")
return '```text\n'+this_week()+'\n\n'+data+'\n```'
else:
print("Usual Stats Generated")
return '```text\n'+data+'\n```'
def decode_readme(data: str):
def decode_readme(data: str) -> str:
'''Decode the contets of old readme'''
decoded_bytes = base64.b64decode(data)
return str(decoded_bytes, 'utf-8')
def generate_new_readme(stats: str, readme: str):
def generate_new_readme(stats: str, readme: str) -> str:
'''Generate a new Readme.md'''
stats_in_readme = f"{START_COMMENT}\n{stats}\n{END_COMMENT}"
return re.sub(listReg, stats_in_readme, readme)
@@ -63,7 +83,11 @@ def generate_new_readme(stats: str, readme: str):
if __name__ == '__main__':
g = Github(ghtoken)
repo = g.get_repo(f"{user}/{user}")
try:
repo = g.get_repo(f"{user}/{user}")
except GithubException:
print("Authentication Error. Try saving a GitHub Token in your Repo Secrets or Use the GitHub Actions Token, which is automatically used by the action.")
sys.exit(1)
contents = repo.get_readme()
waka_stats = get_stats()
rdmd = decode_readme(contents.content)