diff --git a/.env.template b/.env.template index d6c66ec..2faa63e 100755 --- a/.env.template +++ b/.env.template @@ -17,6 +17,7 @@ INPUT_SHOW_TIME= INPUT_SHOW_TOTAL= INPUT_SHOW_MASKED_TIME= INPUT_STOP_AT_OTHER= +INPUT_IGNORED_LANGUAGES= # commit INPUT_COMMIT_MESSAGE= INPUT_TARGET_BRANCH= diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b318680..933e019 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,6 +21,7 @@ INPUT_TIME_RANGE=last_7_days INPUT_SHOW_MASKED_TIME=false INPUT_LANG_COUNT=0 INPUT_STOP_AT_OTHER=true +INPUT_IGNORED_LANGUAGES= ``` **NEVER commit this `.env` file!** @@ -32,10 +33,8 @@ INPUT_STOP_AT_OTHER=true > Replace `podman` with `docker` everywhere, if you're using the latter. ```sh -# Build -$ podman-compose -p waka-readme -f ./docker-compose.yml up -d -# Logs -$ podman logs WakaReadmeDev +# Build and watch logs +$ podman-compose -p waka-readme -f ./docker-compose.yml up # Cleanup $ podman-compose -p waka-readme -f ./docker-compose.yml down ``` diff --git a/README.md b/README.md index d015478..c8166ac 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ A GitHub repository and a `README.md` file is required. We'll be making use of r name: WakaReadme DevMetrics runs-on: ubuntu-latest steps: - - uses: athul/waka-readme@master + - uses: athul/waka-readme@master # this action name with: WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }} ``` @@ -113,18 +113,19 @@ There are many flags that you can modify as you see fit. ### Content Tweaks -| Environment flag | Options (`Default`, `Other`, ...) | Description | -| ------------------ | ----------------------------------------------------------------------- | --------------------------------------------------------------------------------- | -| `SHOW_TITLE` | `false`, `true` | Add title to waka-readme stats blob | -| `SECTION_NAME` | `waka`, any alphanumeric string | The generator will look for section name to fill up the readme. | -| `BLOCKS` | `░▒▓█`, `⣀⣄⣤⣦⣶⣷⣿`, `-#`, `=>`, you can be creative | Ascii art used to build stats graph | -| `CODE_LANG` | `txt`, `python` `ruby` `json` , you can use other languages also | Language syntax based highlighted text | -| `TIME_RANGE` | `last_7_days`, `last_30_days`, `last_6_months`, `last_year`, `all_time` | String representing a dispensation from which stats are aggregated | -| `LANG_COUNT` | `5`, any plausible number | Number of languages to be displayed | -| `SHOW_TIME` | `true`, `false` | Displays the amount of time spent for each language | -| `SHOW_TOTAL` | `false`, `true` | Show total coding time | -| `SHOW_MASKED_TIME` | `false`, `true` | Adds total coding time including unclassified languages (overrides: `SHOW_TOTAL`) | -| `STOP_AT_OTHER` | `false`, `true` | Stop when language marked as `Other` is retrieved (overrides: `LANG_COUNT`) | +| Environment flag | Options (`Default`, `Other`, ...) | Description | +| ------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `SHOW_TITLE` | `false`, `true` | Add title to waka-readme stats blob | +| `SECTION_NAME` | `waka`, any alphanumeric string | The generator will look for section name to fill up the readme. | +| `BLOCKS` | `░▒▓█`, `⣀⣄⣤⣦⣶⣷⣿`, `-#`, `=>`, you can be creative | Ascii art used to build stats graph | +| `CODE_LANG` | `txt`, `python` `ruby` `json` , you can use other languages also | Language syntax based highlighted text | +| `TIME_RANGE` | `last_7_days`, `last_30_days`, `last_6_months`, `last_year`, `all_time` | String representing a dispensation from which stats are aggregated | +| `LANG_COUNT` | `5`, any plausible number | Number of languages to be displayed | +| `SHOW_TIME` | `true`, `false` | Displays the amount of time spent for each language | +| `SHOW_TOTAL` | `false`, `true` | Show total coding time | +| `SHOW_MASKED_TIME` | `false`, `true` | Adds total coding time including unclassified languages (overrides: `SHOW_TOTAL`) | +| `STOP_AT_OTHER` | `false`, `true` | Stop when language marked as `Other` is retrieved (overrides: `LANG_COUNT`) | +| `IGNORED_LANGUAGES` | , `Binary YAML JSON TOML` | Hide languages from your stats | ### Commit Tweaks @@ -159,7 +160,8 @@ jobs: name: WakaReadme DevMetrics runs-on: ubuntu-latest steps: - - uses: athul/waka-readme@master + # this action name + - uses: athul/waka-readme@master # do NOT replace with anything else with: GH_TOKEN: ${{ secrets.GH_TOKEN }} # optional if on profile readme WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }} # required @@ -177,6 +179,7 @@ jobs: SHOW_TOTAL: true # optional SHOW_MASKED_TIME: false # optional STOP_AT_OTHER: true # optional + IGNORED_LANGUAGES: YAML JSON TOML # optional ### commit COMMIT_MESSAGE: Updated waka-readme graph with new metrics # optional TARGET_BRANCH: master # optional @@ -213,6 +216,7 @@ Other 47 hrs 58 mins >------------------------ 03.05 % - 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. +- `IGNORED_LANGUAGES` is suggested for [.NET](https://dotnet.microsoft.com) users, as WakaTime assumes you're working with `Binary`, while debugging. ## Why only the language stats (and not other data) from the API? diff --git a/action.yml b/action.yml index 3625b45..cb9d092 100644 --- a/action.yml +++ b/action.yml @@ -62,6 +62,10 @@ inputs: description: "Stop data retrieval when language marked 'Other' is reached" default: "false" required: false + IGNORED_LANGUAGES: + description: "Ignore space separated, listed languages" + default: "" + required: false # commit tweaks COMMIT_MESSAGE: diff --git a/containerfile b/containerfile index 84d3db6..cc04221 100644 --- a/containerfile +++ b/containerfile @@ -16,6 +16,7 @@ ENV INPUT_GH_TOKEN \ INPUT_SHOW_TOTAL \ INPUT_SHOW_MASKED_TIME \ INPUT_STOP_AT_OTHER \ + INPUT_IGNORED_LANGUAGES \ # commit INPUT_COMMIT_MESSAGE \ INPUT_TARGET_BRANCH \ diff --git a/dockerfile b/dockerfile index 530d6cb..f18a221 100644 --- a/dockerfile +++ b/dockerfile @@ -16,6 +16,7 @@ ENV INPUT_GH_TOKEN \ INPUT_SHOW_TOTAL \ INPUT_SHOW_MASKED_TIME \ INPUT_STOP_AT_OTHER \ + INPUT_IGNORED_LANGUAGES \ # commit INPUT_COMMIT_MESSAGE \ INPUT_TARGET_BRANCH \ diff --git a/main.py b/main.py index 75165ad..ed87efc 100644 --- a/main.py +++ b/main.py @@ -149,6 +149,7 @@ class WakaInput: show_masked_time: str | bool = os.getenv("INPUT_SHOW_MASKED_TIME") or False language_count: str | int = os.getenv("INPUT_LANG_COUNT") or 5 stop_at_other: str | bool = os.getenv("INPUT_STOP_AT_OTHER") or False + ignored_languages: str = os.getenv("INPUT_IGNORED_LANGUAGES", "") # # optional meta target_branch: str = os.getenv("INPUT_TARGET_BRANCH", "NOT_SET") target_path: str = os.getenv("INPUT_TARGET_PATH", "NOT_SET") @@ -270,7 +271,7 @@ def make_graph(block_style: str, percent: float, gr_len: int, lg_nm: str = "", / return graph_bar -def prep_content(stats: dict[str, Any], language_count: int = 5, stop_at_other: bool = False, /): +def prep_content(stats: dict[str, Any], /): """WakaReadme Prepare Markdown. Prepared markdown content from the fetched statistics. @@ -306,17 +307,19 @@ def prep_content(stats: dict[str, Any], language_count: int = 5, stop_at_other: max((str(lng["name"]) for lng in lang_info), key=len) # and then do not for get to set `pad_len` to say 13 :) ) - if language_count == 0 and not stop_at_other: + language_count, stop_at_other = int(wk_i.language_count), bool(wk_i.stop_at_other) + if language_count == 0 and not wk_i.stop_at_other: logger.debug( "Set INPUT_LANG_COUNT to -1 to retrieve all language" + " or specify a positive number (ie. above 0)" ) return contents.rstrip("\n") + ignored_languages = set[str](igl.lower() for igl in wk_i.ignored_languages.strip().split()) for idx, lang in enumerate(lang_info): lang_name = str(lang["name"]) - # >>> add languages to filter here <<< - # if lang_name in {...}: continue + if ignored_languages and lang_name.lower() in ignored_languages: + continue lang_time = str(lang["text"]) if wk_i.show_time else "" lang_ratio = float(lang["percent"]) lang_bar = make_graph(wk_i.block_style, lang_ratio, wk_i.graph_length, lang_name) @@ -393,9 +396,7 @@ def churn(old_readme: str, /): sys.exit(1) # preparing contents try: - generated_content = prep_content( - waka_stats, int(wk_i.language_count), bool(wk_i.stop_at_other) - ) + generated_content = prep_content(waka_stats) except (AttributeError, KeyError, ValueError) as err: logger.error(f"Unable to read API data | {err}\n") sys.exit(1)