diff --git a/antifeatures.yml b/antifeatures.yml new file mode 100644 index 00000000..4628e479 --- /dev/null +++ b/antifeatures.yml @@ -0,0 +1,116 @@ +- id: tracking + icon: user-secret + title: + en: "Tracking" + fr: "Pistage" + description: + en: "Tracks you and/or reports your activity to upstream maintainer or third parties, either without your permission or by default." + fr: "Vous piste et/ou rapporte vos activités au mainteneur source ou à des tiers, sans votre permission ou par défaut." + +- id: non-free-network + icon: network-wired + title: + en: "Non-free Network Services" + fr : "Services réseau non libres" + description: + en: "Promotes or depends entirely on a non-free network service." + fr: "Promeut ou utilise des services réseau non libres." + +- id: non-free-addons + icon: puzzle-piece + title: + en: "Non-free Addons" + fr: "Extensions non libres" + description: + en: "Promotes other non-free applications or plugins." + fr: "Promeut d'autres applications ou plugins non libres." + +- id: non-free-dependencies + icon: book + title: + en: "Non-free dependencies" + fr: "Dépendances non libres" + description: + en: "Relies on software dependencies that are not free in order to run." + fr: "Dépend pour fonctionner de dépendances logicielles non libres." + +- id: non-free-assets + icon: file-image + title: + en: "Non-free assets" + fr: "Ressources non libres" + description: + en: "Contains and makes use of non-free assets. The most common case is apps using artwork - images, sounds, music, etc. - under a commercial license." + fr: "Contient ou utilise des médias non libres. Le cas le plus fréquent concerne des applications utilisant des œuvres (images, sons, musiques, etc.) sous une licence commerciale." + +- id: bad-security-reputation + icon: door-open + title: + en: "Bad security reputation" + fr: "Mauvaise réputation en matière de sécurité" + description: + en: "Has a bad security reputation, such as deprecated addons." + fr: "A une mauvaise réputation en matière de sécurité, en utilisant des plugins dépréciés par exemple." + +- id: deprecated-software + icon: face-frown + title: + en: "Upstream not maintained" + fr: "Application non maintenue" + description: + en: "This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc." + fr: "Ce logiciel n'est plus maintenu. Attendez-vous à ce qu'il ne fonctionne plus avec le temsp, et que l'on découvre des failles de sécurité qui ne seront pas corrigées, etc." + +- id: package-not-maintained + icon: user-slash + title: + en: "Package not maintained" + fr: "Paquet non maintenu" + description: + en: "This YunoHost package is not maintained and need adoption." + fr: "Ce package YunoHost n'est plus maintenu et doit être adopté." + +- id: paid-content + icon: coins + title: + en: "Paid content" + fr: "Contenu payant" + description: + en: "Promotes or depends, entirely or partially, on a paid service." + fr: "Promeut ou dépend, entièrement ou partiellement, d'un service payant." + +- id: arbitrary-limitations + icon: face-frown + title: + en: "Arbitrary limitations" + fr: "Limitations arbitraires" + description: + en: "Please refer to the README." + fr: "Se référer au fichier README." + +- id: replaced-by-another-app + icon: rotate + title: + en: "Replaced by another app" + fr: "Remplacé par une autre application" + description: + en: "Was replaced by another app. Please refer to the README." + fr: "A été remplacée par une autre application. Se référer au fichier README." + +- id: alpha-software + icon: flask + title: + en: "Alpha Software" + fr: "Logiciel en version alpha" + despcription: + en: "Early development stage. May contain changing or unstable features, bugs, and security vulnerability." + fr: "Le logiciel est au tout début de son développment. Il pourrait contenir des fonctionnalités changeantes ou instables, des bugs, et des failles de sécurité." + +- id: not-totally-free + icon: lock + title: + en: "Not totally free upstream" + fr: "Application sous licence libre restreinte" + description: + en: "The packaged app is under an overall free licence, but with clauses that restrict its use." + fr: "L'application packagée ests sous une licence globalement libre, mais avec des clauses qui pourrait restreindre son utilisation." diff --git a/apps.json b/apps.json index bc67b008..5d4f5546 100644 --- a/apps.json +++ b/apps.json @@ -3,6 +3,9 @@ "category": "games", "level": 8, "state": "working", + "antifeatures": [ + "non-free-assets" + ], "url": "https://github.com/YunoHost-Apps/20euros_ynh" }, "243": { @@ -93,6 +96,9 @@ "subtags": [ "download" ], + "antifeatures": [ + "non-free-network" + ], "url": "https://github.com/YunoHost-Apps/alltube_ynh" }, "ampache": { @@ -200,6 +206,9 @@ "subtags": [ "pictures" ], + "antifeatures": [ + "non-free-network" + ], "url": "https://github.com/YunoHost-Apps/bibliogram_ynh" }, "biboumi": { @@ -532,6 +541,9 @@ "category": "games", "level": 8, "state": "working", + "antifeatures": [ + "tracking" + ], "url": "https://github.com/YunoHost-Apps/Cubiks-2048_ynh" }, "dato": { @@ -1380,6 +1392,9 @@ "subtags": [ "videos" ], + "antifeatures": [ + "non-free-network" + ], "url": "https://github.com/YunoHost-Apps/invidious_ynh" }, "invoiceninja": { @@ -2180,6 +2195,9 @@ "subtags": [ "microblogging" ], + "antifeatures": [ + "non-free-network" + ], "url": "https://github.com/YunoHost-Apps/nitter_ynh" }, "noalyss": { @@ -3589,6 +3607,10 @@ "websites", "blog" ], + "antifeatures": [ + "non-free-addons", + "paid-content" + ], "url": "https://github.com/YunoHost-Apps/wordpress_ynh" }, "writefreely": { @@ -3644,6 +3666,9 @@ "subtags": [ "download" ], + "antifeatures": [ + "non-free-network" + ], "url": "https://github.com/YunoHost-Apps/youtube-dl-webui_ynh" }, "yunofav": { @@ -3733,6 +3758,9 @@ "subtags": [ "network" ], + "antifeatures": [ + "non-free-dependencies" + ], "url": "https://github.com/YunoHost-Apps/ztncui_ynh" }, "zusam": { diff --git a/list_builder.py b/list_builder.py index be49b1f1..59b9a268 100755 --- a/list_builder.py +++ b/list_builder.py @@ -149,9 +149,10 @@ def build_catalog(): # Current version 2 # ##################### categories = yaml.load(open("categories.yml").read()) + antifeatures = yaml.load(open("antifeatures.yml").read()) os.system("mkdir -p ./builds/default/v2/") with open("builds/default/v2/apps.json", 'w') as f: - f.write(json.dumps({"apps": result_dict, "categories": categories}, sort_keys=True)) + f.write(json.dumps({"apps": result_dict, "categories": categories, "antifeatures": antifeatures}, sort_keys=True)) #################### # Legacy version 1 # @@ -199,6 +200,7 @@ def build_catalog(): "broken": level <= 0, "good_quality": level >= 8, "bad_quality": level <= 5, + "antifeatures": infos["antifeatures"], } result_dict_doc = {k: infos_for_doc_catalog(v) for k, v in result_dict.items() if v["state"] in ["working", "validated"]} with open("builds/default/doc_catalog/apps.json", 'w') as f: @@ -217,7 +219,7 @@ def build_app_dict(app, infos): # If using head, find the most recent meaningful commit in logs if infos["revision"] == "HEAD": - relevant_files = ["manifest.json", "actions.json", "hooks/", "scripts/", "conf/", "sources/"] + relevant_files = ["manifest.json", "config_panel.toml", "hooks/", "scripts/", "conf/", "sources/"] most_recent_relevant_commit = "rev-list --full-history --all -n 1 -- " + " ".join(relevant_files) infos["revision"] = git(most_recent_relevant_commit, in_folder=this_app_cache) assert re.match(r"^[0-9a-f]+$", infos["revision"]), "Output was not a commit? '%s'" % infos["revision"] @@ -247,6 +249,7 @@ def build_app_dict(app, infos): 'featured': infos.get("featured", False), 'category': infos.get('category', None), 'subtags': infos.get('subtags', []), + 'antifeatures': list(set(manifest.get('antifeatures', []) + infos.get('antifeatures', []))) }