diff --git a/README.md b/README.md index 03c8174..0a62746 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,73 @@ -Dasharo Issues repository -======================= +# Dasharo Issues repository -This repository tracks issues and feature development progress for the [Dasharo -Project](https://dasharo.com/). +This repository tracks issues and feature development progress for the +[Dasharo Project](https://dasharo.com/). You can [file a new issue](https://github.com/Dasharo/dasharo-issues/issues/new/choose) or [view all issues](https://github.com/Dasharo/dasharo-issues/issues). -Notable issues --------------- +## Bug Bounty -* [Good first issue](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) -* [Help wanted](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) -* [Community-developed](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aissue+is%3Aopen+label%3Acommunity-dev) +You can find more details on the Bug Bounty program +[on our website](https://3mdeb.com/bug-bounty/). -Issues by variant ------------------ +Bounties are categorized per difficulty: +- [Warmup](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aissue%20state%3Aopen%20label%3Abounty-warmup) +- [Easy](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aissue%20state%3Aopen%20label%3Abounty-easy) +- [Medium](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aissue%20state%3Aopen%20label%3Abounty-medium) +- [Hard](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aissue%20state%3Aopen%20label%3Abounty-hard) -* [Dasharo Workstation](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22workstation%22) -* [Dasharo Secure Firewall](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22firewall%22) -* [Dasharo Trustworthy Server](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aopen+is%3Aissue+label%3A%22server%22) +You can also view all bounties +[here](https://github.com/Dasharo/dasharo-issues/issues?q=is%3Aissue%20state%3Aopen%20label%3Abounty-warmup%20OR%20label%3Abounty-easy%20OR%20label%3Abounty-medium%20OR%20label%3Abounty-hard%20OR%20label%3Abounty). -GitHub help ------------ + +## Issues per device + +Below is a list of open issues affecting specific devices: +- [Asus KGPE-D16](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22asus_kgpe-d16%22) +- [Dell OptiPlex 7010](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22dell_optiplex_9010%22) +- [Dell OptiPlex 9010](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22dell_optiplex_9010%22) +- [Hardkernel Odroid H4](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22hardkernel_odroid_h4%22) +- [MSI Pro Z690-A](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22MSI%20PRO%20Z690-A%20boards%22) +- [MSI Pro Z790-P](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22MSI%20PRO%20Z790-P%20boards%22) +- [NovaCustom NS5x 11th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_ns5x/7x_tgl%22) +- [NovaCustom NS5x 11th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_ns5x/7x_adl%22) +- [NovaCustom NS7x 11th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_ns5x/7x_tgl%22) +- [NovaCustom NS7x 12th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_ns5x/7x_adl%22) +- [NovaCustom NUC BOX 14th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_nuc_box%22) +- [NovaCustom NV4x 11th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_nv4x_tgl%22) +- [NovaCustom NV4x 12th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_nv4x_adl%22) +- [NovaCustom V54 14th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_v54_mtl%22) +- [NovaCustom V56 14th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_v56_mtl%22) +- [PC Engines APU2](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22pcengines_apu2%22) +- [PC Engines APU3](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22pcengines_apu2%22) +- [PC Engines APU4](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22pcengines_apu2%22) +- [PC Engines APU6](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22pcengines_apu2%22) +- [Protectli FW2B](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_bsw%22) +- [Protectli FW4B](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_bsw%22) +- [Protectli FW4C](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_bsw%22) +- [Protectli FW6](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_kbl%22) +- [Protectli V1210](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_jsl%22) +- [Protectli V1211](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_jsl%22) +- [Protectli V1410](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_jsl%22) +- [Protectli V1610](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_jsl%22) +- [Protectli VP2410](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_glk%22) +- [Protectli VP2420](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_ehl%22) +- [Protectli VP2430](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_adln%22) +- [Protectli VP2440](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_adln%22) +- [Protectli VP3210](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_adln%22) +- [Protectli VP3230](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_adln%22) +- [Protectli VP4630](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_cml%22) +- [Protectli VP4650](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_cml%22) +- [Protectli VP4670](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_cml%22) +- [Protectli VP6630](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_adl%22) +- [Protectli VP6650](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_adl%22) +- [Protectli VP6670](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22protectli_vault_adl%22) +- [QEMU Q35 Emulator](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22qemu_q35%22) +- [Raptor CS Talos II](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22raptor-cs_talos-2%22) + + +## GitHub help * [GitHub search syntax](https://help.github.com/articles/search-syntax/) * [GitHub search syntax related to issues](https://help.github.com/articles/searching-issues/) diff --git a/update_readme.py b/update_readme.py new file mode 100755 index 0000000..42ec33b --- /dev/null +++ b/update_readme.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 + +""" +update_readme_devices.py + +This script updates the `README.md` file in the Dasharo Issues repository by generating +a section that lists supported devices and links each one to its open issues on GitHub. + +It should be executed each time we add a new device (or drop existing one), to make sure +the list is up to date. + +It: +- Loads the `.github/advanced-issue-labeler.yml` policy file. +- Extracts all device labels and their associated keys. +- Generates a Markdown list of device names linking to GitHub issue searches. +- Replaces the content between `` and `` + in `README.md` with this list. + +Usage: + Run this script from the root of the repository: + python3 update_readme_devices.py +""" + +import yaml +import urllib.parse +import re + +REPO = "dasharo/dasharo-issues" +YAML_PATH = ".github/advanced-issue-labeler.yml" +README_PATH = "README.md" +START_MARKER = "" +END_MARKER = "" + +def load_policy_yaml(path): + with open(path, "r") as f: + return yaml.safe_load(f) + +def extract_device_entries(policy): + entries = [] + for section in policy.get("policy", []): + for sec in section.get("section", []): + if sec.get("id") == ["device"] and "other" in sec.get("block-list", []): + for item in sec.get("label", []): + label_name = item["name"] + for key in item.get("keys", []): + entries.append((key, label_name)) + return entries + +def generate_issue_search_url(repo, label_name): + quoted = urllib.parse.quote(f'"{label_name}"') + return f"https://github.com/{repo}/issues?q=is%3Aissue+state%3Aopen+label%3A{quoted}" + +def generate_readme_section(entries): + lines = ["## Issues per device", "\nBelow is a list of open issues affecting specific devices:"] + for device_name, label_name in sorted(entries, key=lambda x: x[0].lower()): + url = generate_issue_search_url(REPO, label_name) + lines.append(f"- [{device_name}]({url})") + return "\n".join(lines) + +def update_readme(readme_path, new_section): + with open(readme_path, "r") as f: + content = f.read() + + pattern = re.compile(rf"{START_MARKER}.*?{END_MARKER}", re.DOTALL) + replacement = f"{START_MARKER}\n{new_section}\n{END_MARKER}" + + if pattern.search(content): + updated = pattern.sub(replacement, content) + else: + updated = content.strip() + "\n\n" + replacement + + with open(readme_path, "w") as f: + f.write(updated) + +if __name__ == "__main__": + policy = load_policy_yaml(YAML_PATH) + entries = extract_device_entries(policy) + section = generate_readme_section(entries) + update_readme(README_PATH, section) + print("README.md updated with flat device issue links.")