5 Commits

Author SHA1 Message Date
eric_G
318a1f6a93 Merge pull request #2111 from limaanto/master
Add crabfit
2024-03-10 13:17:12 +01:00
Antoine Lima
9c82874638 Add crabfit logo 2024-03-10 12:41:04 +01:00
Antoine Lima
468ea5229d Add crabfit to apps.toml 2024-03-10 10:53:47 +01:00
cri
17fe791c6d Translated using Weblate (Spanish)
Currently translated at 1.0% (1 of 95 strings)

Translation: YunoHost/store
Translate-URL: https://translate.yunohost.org/projects/yunohost/apps/es/
2024-03-09 22:10:57 +01:00
OniriCorpe
c39c97c15b Translated using Weblate (French)
Currently translated at 100.0% (95 of 95 strings)

Translation: YunoHost/store
Translate-URL: https://translate.yunohost.org/projects/yunohost/apps/fr/
2024-03-09 22:10:57 +01:00
10 changed files with 30 additions and 256 deletions

View File

@@ -1,30 +0,0 @@
name: Find deprecated softwares
on:
schedule:
- cron: '0 20 * * 1'
jobs:
black:
name: Find deprecated softwares
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: 3.11
- name: Install toml python lib
run: |
pip3 install toml tomlkit gitpython
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.GITHUB_TOKEN }}
title: "Flag deprecated apps in the catalog"
commit-message: ":coffin: Flag deprecated apps in the catalog"
body: |
This was done with tools/find_deprecated.py
base: ${{ github.head_ref }} # Creates pull request onto pull request or commit branch
branch: actions/deprecated

View File

@@ -37,7 +37,6 @@ level = 6
state = "working"
subtags = [ "microblogging", "pictures" ]
url = "https://github.com/YunoHost-Apps/acropolis_ynh"
antifeatures = ["deprecated-software"]
[actual]
category = "productivity_and_management"
@@ -60,7 +59,6 @@ level = 8
state = "working"
subtags = [ "db" ]
url = "https://github.com/YunoHost-Apps/adminer_ynh"
antifeatures = ["deprecated-software"]
[aeneria]
category = "iot"
@@ -75,7 +73,6 @@ potential_alternative_to = [ "Google Agenda", "Microsoft Outlook" ]
state = "working"
subtags = [ "calendar" ]
url = "https://github.com/YunoHost-Apps/agendav_ynh"
antifeatures = ["deprecated-software"]
[agora]
category = "wat"
@@ -188,7 +185,6 @@ category = "iot"
level = 8
state = "working"
url = "https://github.com/YunoHost-Apps/beehive_ynh"
antifeatures = ["deprecated-software"]
[biboumi]
category = "communication"
@@ -203,7 +199,6 @@ level = 7
state = "working"
subtags = [ "books" ]
url = "https://github.com/YunoHost-Apps/bicbucstriim_ynh"
antifeatures = ["deprecated-software"]
[blogotext]
category = "publishing"
@@ -212,7 +207,6 @@ potential_alternative_to = [ "Blogger", "Coldfusion", "Wix" ]
state = "working"
subtags = [ "blog" ]
url = "https://github.com/YunoHost-Apps/blogotext_ynh"
antifeatures = ["deprecated-software"]
[bludit]
category = "publishing"
@@ -337,7 +331,6 @@ category = "small_utilities"
level = 8
state = "working"
url = "https://github.com/YunoHost-Apps/cheky_ynh"
antifeatures = ["deprecated-software"]
[chitchatter]
category = "communication"
@@ -441,7 +434,6 @@ potential_alternative_to = [ "Disqus" ]
state = "working"
subtags = [ "website" ]
url = "https://github.com/YunoHost-Apps/commento_ynh"
antifeatures = ["deprecated-software"]
[compteur_du_gase]
category = "office"
@@ -495,7 +487,7 @@ subtags = [ "db" ]
url = "https://github.com/YunoHost-Apps/couchdb_ynh"
[couchpotato]
antifeatures = [ "package-not-maintained", "deprecated-software" ]
antifeatures = [ "package-not-maintained" ]
category = "multimedia"
level = 0
potential_alternative_to = [ "Netflix" ]
@@ -510,6 +502,13 @@ state = "working"
subtags = [ "wiki" ]
url = "https://github.com/YunoHost-Apps/cowyo_ynh"
[crabfit]
category = "productivity_and_management"
potential_alternative_to = [ "Doodle", "OpenSondage" ]
state = "working"
subtags = [ "poll" ]
url = "https://github.com/YunoHost-Apps/crabfit_ynh"
[cryptpad]
category = "office"
level = 8
@@ -665,7 +664,6 @@ level = 6
state = "working"
subtags = [ "pastebin" ]
url = "https://github.com/YunoHost-Apps/distbin_ynh"
antifeatures = ["deprecated-software"]
[django-fmd]
category = "iot"
@@ -845,7 +843,6 @@ category = "small_utilities"
level = 8
state = "working"
url = "https://github.com/YunoHost-Apps/encryptor-decryptor_ynh"
antifeatures = ["deprecated-software"]
[endi]
category = "productivity_and_management"
@@ -875,7 +872,6 @@ potential_alternative_to = [ "Google Sheets", "G Suite", "Microsoft Excel", "Off
state = "working"
subtags = [ "spreadsheet" ]
url = "https://github.com/YunoHost-Apps/ethercalc_ynh"
antifeatures = ["deprecated-software"]
[etherpad]
category = "office"
@@ -913,7 +909,6 @@ level = 8
state = "working"
subtags = [ "monitoring" ]
url = "https://github.com/YunoHost-Apps/facette_ynh"
antifeatures = ["deprecated-software"]
[facilmap]
category = "productivity_and_management"
@@ -955,7 +950,6 @@ potential_alternative_to = [ "WeTransfer" ]
state = "working"
subtags = [ "files" ]
url = "https://github.com/YunoHost-Apps/filepizza_ynh"
antifeatures = ["deprecated-software"]
[firefish]
category = "social_media"
@@ -1015,7 +1009,6 @@ potential_alternative_to = [ "Invision Community", "Vanilla", "vBulletin", "XenF
state = "working"
subtags = [ "forum" ]
url = "https://github.com/YunoHost-Apps/fluxbb_ynh"
antifeatures = ["deprecated-software"]
[focalboard]
category = "productivity_and_management"
@@ -1137,7 +1130,6 @@ level = 8
state = "working"
subtags = [ "website", "blog" ]
url = "https://github.com/YunoHost-Apps/getsimple_ynh"
antifeatures = ["deprecated-software"]
[ghost]
antifeatures = [ "arbitrary-limitations" ]
@@ -1369,7 +1361,6 @@ category = "system_tools"
level = 7
state = "working"
url = "https://github.com/Yunohost-Apps/httpsh_ynh"
antifeatures = ["deprecated-software"]
[hubzilla]
category = "social_media"
@@ -1458,6 +1449,7 @@ subtags = [ "videos" ]
url = "https://github.com/YunoHost-Apps/invidious_ynh"
[invoiceninja]
antifeatures = [ "deprecated-software" ]
category = "productivity_and_management"
level = 7
state = "working"
@@ -1490,7 +1482,7 @@ state = "working"
url = "https://github.com/YunoHost-Apps/jackett_ynh"
[jappix]
antifeatures = [ "package-not-maintained", "deprecated-software" ]
antifeatures = [ "package-not-maintained" ]
category = "communication"
level = 7
state = "working"
@@ -1661,7 +1653,7 @@ subtags = [ "text" ]
url = "https://github.com/YunoHost-Apps/languagetool_ynh"
[laverna]
antifeatures = [ "package-not-maintained", "deprecated-software" ]
antifeatures = [ "package-not-maintained" ]
category = "office"
level = 7
state = "working"
@@ -1742,7 +1734,6 @@ level = 7
state = "working"
subtags = [ "wiki" ]
url = "https://github.com/YunoHost-Apps/libreto_ynh"
antifeatures = ["deprecated-software"]
[libretranslate]
category = "small_utilities"
@@ -1790,7 +1781,6 @@ level = 6
state = "working"
subtags = [ "monitoring" ]
url = "https://github.com/YunoHost-Apps/linuxdash_ynh"
antifeatures = ["deprecated-software"]
[lionwiki-t2t]
category = "publishing"
@@ -1829,7 +1819,6 @@ potential_alternative_to = [ "Google Docs", "Microsoft Excel" ]
state = "working"
subtags = [ "spreadsheet" ]
url = "https://github.com/YunoHost-Apps/luckysheet_ynh"
antifeatures = ["deprecated-software"]
[lufi]
category = "synchronization"
@@ -2004,7 +1993,6 @@ level = 8
state = "working"
subtags = [ "chat" ]
url = "https://github.com/YunoHost-Apps/minchat_ynh"
antifeatures = ["deprecated-software"]
[mindmaps]
category = "office"
@@ -2012,7 +2000,6 @@ level = 8
state = "working"
subtags = [ "mindmap" ]
url = "https://github.com/YunoHost-Apps/mindmaps_ynh"
antifeatures = ["deprecated-software"]
[minetest]
category = "games"
@@ -2026,7 +2013,6 @@ category = "publishing"
level = 8
state = "working"
url = "https://github.com/YunoHost-Apps/mineweb_ynh"
antifeatures = ["deprecated-software"]
[minidlna]
category = "multimedia"
@@ -2139,7 +2125,6 @@ level = 8
state = "working"
subtags = [ "meeting" ]
url = "https://github.com/YunoHost-Apps/mumble-web_ynh"
antifeatures = ["deprecated-software"]
[mumbleserver]
category = "communication"
@@ -2375,7 +2360,6 @@ category = "wat"
level = 8
state = "working"
url = "https://github.com/YunoHost-Apps/osjs_ynh"
antifeatures = ["deprecated-software"]
[osticket]
category = "productivity_and_management"
@@ -2613,7 +2597,6 @@ level = 8
state = "working"
subtags = [ "website", "blog" ]
url = "https://github.com/YunoHost-Apps/pico_ynh"
antifeatures = ["deprecated-software"]
[pihole]
category = "system_tools"
@@ -3059,7 +3042,6 @@ category = "system_tools"
level = 6
state = "working"
url = "https://github.com/YunoHost-Apps/shellinabox_ynh"
antifeatures = ["deprecated-software"]
[shiori]
category = "small_utilities"
@@ -3082,7 +3064,6 @@ potential_alternative_to = [ "bitly" ]
state = "working"
subtags = [ "url_shortener" ]
url = "https://github.com/YunoHost-Apps/shuri_ynh"
antifeatures = ["deprecated-software"]
[signaturepdf]
category = "small_utilities"
@@ -3095,14 +3076,12 @@ category = "small_utilities"
level = 6
state = "working"
url = "https://github.com/YunoHost-Apps/simple-file-manager_ynh"
antifeatures = ["deprecated-software"]
[simple-hash-generator]
category = "small_utilities"
level = 8
state = "working"
url = "https://github.com/YunoHost-Apps/simple-hash-generator_ynh"
antifeatures = ["deprecated-software"]
[simple-torrent]
antifeatures = [ "deprecated-software" ]
@@ -3120,7 +3099,7 @@ subtags = [ "chat" ]
url = "https://github.com/YunoHost-Apps/simplex_ynh"
[simplytranslate]
antifeatures = [ "non-free-network", "deprecated-software" ]
antifeatures = [ "non-free-network" ]
category = "small_utilities"
level = 7
state = "working"
@@ -3132,7 +3111,6 @@ level = 8
state = "working"
subtags = [ "website" ]
url = "https://github.com/YunoHost-Apps/sitemagiccms_ynh"
antifeatures = ["deprecated-software"]
[slingcode]
category = "dev"
@@ -3140,7 +3118,6 @@ level = 8
state = "working"
subtags = [ "programming" ]
url = "https://github.com/YunoHost-Apps/slingcode_ynh"
antifeatures = ["deprecated-software"]
[snappymail]
category = "communication"
@@ -3229,7 +3206,6 @@ category = "system_tools"
level = 8
state = "working"
url = "https://github.com/YunoHost-Apps/ssh_chroot_dir_ynh"
antifeatures = ["deprecated-software"]
[statpingng]
category = "system_tools"
@@ -3259,7 +3235,6 @@ potential_alternative_to = [ "Google Slides", "Office 365", "Prezi", "SoZi" ]
state = "working"
subtags = [ "impress" ]
url = "https://github.com/YunoHost-Apps/strut_ynh"
antifeatures = ["deprecated-software"]
[superset]
category = "wat"
@@ -3316,7 +3291,7 @@ state = "working"
url = "https://github.com/YunoHost-Apps/tandoor_ynh"
[taskboard]
antifeatures = [ "package-not-maintained", "deprecated-software" ]
antifeatures = [ "package-not-maintained" ]
category = "productivity_and_management"
level = 7
potential_alternative_to = [ "Trello" ]
@@ -3502,7 +3477,6 @@ level = 8
state = "working"
subtags = [ "task" ]
url = "https://github.com/YunoHost-Apps/tyto_ynh"
antifeatures = ["deprecated-software"]
[ulogger]
category = "small_utilities"
@@ -3788,7 +3762,6 @@ level = 6
potential_alternative_to = [ "Mullvad" ]
state = "working"
url = "https://github.com/YunoHost-Apps/zeronet_ynh"
antifeatures = ["deprecated-software"]
[zerotier]
antifeatures = [ "not-totally-free-upstream", "non-free-network" ]

BIN
logos/crabfit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -8,19 +8,21 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-03-05 19:36+0100\n"
"PO-Revision-Date: 2024-02-21 06:05+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: es <LL@li.org>\n"
"PO-Revision-Date: 2024-03-09 17:32+0000\n"
"Last-Translator: cri <cri@cri.cl>\n"
"Language-Team: Spanish <https://translate.yunohost.org/projects/yunohost/"
"apps/es/>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.3.1\n"
"Generated-By: Babel 2.14.0\n"
#: app.py:150
msgid "App %(app_id) not found"
msgstr ""
msgstr "App %(app_id) no encontrada"
#: app.py:152
msgid "You must be logged in to be able to star an app"

View File

@@ -8,15 +8,16 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-03-05 19:36+0100\n"
"PO-Revision-Date: 2024-02-27 19:19+0000\n"
"PO-Revision-Date: 2024-03-09 04:14+0000\n"
"Last-Translator: OniriCorpe <oniricorpe@disroot.org>\n"
"Language-Team: French <https://translate.yunohost.org/projects/yunohost/apps/"
"fr/>\n"
"Language: fr\n"
"Language-Team: French "
"<https://translate.yunohost.org/projects/yunohost/apps/fr/>\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.3.1\n"
"Generated-By: Babel 2.14.0\n"
#: app.py:150
@@ -254,7 +255,7 @@ msgstr "Documentation officielle pour les admins"
#: templates/app.html:142
msgid "Official user documentation"
msgstr "Documentation officielle pour les utilisateur·ice·s"
msgstr "Documentation officielle d'utilisation"
#: templates/app.html:143
msgid "Official code repository"
@@ -394,8 +395,8 @@ msgid ""
"advise against their installation and advise users to find alternatives."
msgstr ""
"Cela signifie que le développeur ne les mettra plus à jour. Nous "
"décourageons fortement leur installation et conseillons aux utilisateurs "
"de se tourner vers des alternatives."
"décourageons fortement leur installation et vous conseillons de vous tourner "
"vers des alternatives."
#: templates/index.html:10
msgid "Application Store"
@@ -460,8 +461,8 @@ msgstr "Vous devez être connecté·e pour proposer une app pour la liste de sou
#: templates/wishlist_add.html:40
msgid "Due to abuses, only one proposal every 15 days per user is allowed."
msgstr ""
"En raison d'abus, la proposition d'app est limitée à une tous les 15 "
"jours par utilisateur·ice."
"En raison d'abus, la proposition d'app est limitée à une tous les 15 jours "
"par personne."
#: templates/wishlist_add.html:43
msgid ""
@@ -527,4 +528,3 @@ msgstr "Envoyer"
#~ msgid "Please check the license of the app your are proposing"
#~ msgstr "Merci de vérifier la licence de l'app que vous proposez"

View File

@@ -40,10 +40,6 @@ class GithubAPI:
"""Get a list of releases for project."""
return self.internal_api(f"repos/{self.upstream_repo}/releases")
def archived(self) -> bool:
"""Return the archival status for the repository"""
return self.internal_api(f"repos/{self.upstream_repo}")["archived"]
def url_for_ref(self, ref: str, ref_type: RefType) -> str:
"""Get a URL for a ref."""
if ref_type == RefType.tags:
@@ -57,7 +53,6 @@ class GithubAPI:
class GitlabAPI:
def __init__(self, upstream: str):
# Find gitlab api root...
upstream = upstream.rstrip("/")
self.forge_root = self.get_forge_root(upstream).rstrip("/")
self.project_path = upstream.replace(self.forge_root, "").lstrip("/")
self.project_id = self.find_project_id(self.project_path)
@@ -133,10 +128,6 @@ class GitlabAPI:
return retval
def archived(self) -> bool:
"""Return the archival status for the repository"""
return self.internal_api(f"projects/{self.project_id}").get("archived", False)
def url_for_ref(self, ref: str, ref_type: RefType) -> str:
name = self.project_path.split("/")[-1]
clean_ref = ref.replace("/", "-")
@@ -175,10 +166,6 @@ class GiteaForgejoAPI:
"""Get a list of releases for project."""
return self.internal_api(f"repos/{self.project_path}/releases")
def archived(self) -> bool:
"""Return the archival status for the repository"""
return self.internal_api(f"repos/{self.project_path}")["archived"]
def url_for_ref(self, ref: str, ref_type: RefType) -> str:
"""Get a URL for a ref."""
return f"{self.forge_root}/{self.project_path}/archive/{ref}.tar.gz"

View File

@@ -1,152 +0,0 @@
#!/usr/bin/env python3
import traceback
import argparse
import tomlkit
import multiprocessing
import datetime
import json
import sys
from functools import cache
import logging
from pathlib import Path
from typing import Optional
import toml
import tqdm
import github
# add apps/tools to sys.path
sys.path.insert(0, str(Path(__file__).parent.parent))
from appslib.utils import REPO_APPS_ROOT, get_catalog # noqa: E402 pylint: disable=import-error,wrong-import-position
from app_caches import app_cache_folder # noqa: E402 pylint: disable=import-error,wrong-import-position
from autoupdate_app_sources.rest_api import GithubAPI, GitlabAPI, GiteaForgejoAPI, RefType # noqa: E402,E501 pylint: disable=import-error,wrong-import-position
@cache
def get_github() -> tuple[Optional[tuple[str, str]], Optional[github.Github], Optional[github.InputGitAuthor]]:
try:
github_login = (REPO_APPS_ROOT / ".github_login").open("r", encoding="utf-8").read().strip()
github_token = (REPO_APPS_ROOT / ".github_token").open("r", encoding="utf-8").read().strip()
github_email = (REPO_APPS_ROOT / ".github_email").open("r", encoding="utf-8").read().strip()
auth = (github_login, github_token)
github_api = github.Github(github_token)
author = github.InputGitAuthor(github_login, github_email)
return auth, github_api, author
except Exception as e:
logging.warning(f"Could not get github: {e}")
return None, None, None
def upstream_last_update_ago(app: str) -> tuple[str, int | None]:
manifest_toml = app_cache_folder(app) / "manifest.toml"
manifest_json = app_cache_folder(app) / "manifest.json"
if manifest_toml.exists():
manifest = toml.load(manifest_toml.open("r", encoding="utf-8"))
upstream = manifest.get("upstream", {}).get("code")
elif manifest_json.exists():
manifest = json.load(manifest_json.open("r", encoding="utf-8"))
upstream = manifest.get("upstream", {}).get("code")
else:
raise RuntimeError(f"App {app} doesn't have a manifest!")
if upstream is None:
raise RuntimeError(f"App {app} doesn't have an upstream code link!")
api = None
try:
if upstream.startswith("https://github.com/"):
try:
api = GithubAPI(upstream, auth=get_github()[0])
except AssertionError as e:
logging.error(f"Exception while handling {app}: {e}")
return app, None
if upstream.startswith("https://gitlab.") or upstream.startswith("https://framagit.org"):
api = GitlabAPI(upstream)
if upstream.startswith("https://codeberg.org"):
api = GiteaForgejoAPI(upstream)
if not api:
autoupdate = manifest.get("resources", {}).get("sources", {}).get("main", {}).get("autoupdate")
if autoupdate:
strat = autoupdate["strategy"]
if "gitea" in strat or "forgejo" in strat:
api = GiteaForgejoAPI(upstream)
if api:
if api.archived():
# A stupid value that we know to be higher than the trigger value
return app, 1000
last_commit = api.commits()[0]
date = last_commit["commit"]["author"]["date"]
date = datetime.datetime.fromisoformat(date)
ago: datetime.timedelta = datetime.datetime.now() - date.replace(tzinfo=None)
return app, ago.days
except Exception:
logging.error(f"Exception while handling {app}", traceback.format_exc())
raise
raise RuntimeError(f"App {app} not handled (not github, gitlab or gitea with autoupdate). Upstream is {upstream}")
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("apps", nargs="*", type=str,
help="If not passed, the script will run on the catalog. Github keys required.")
parser.add_argument("-j", "--processes", type=int, default=multiprocessing.cpu_count())
args = parser.parse_args()
apps_dict = get_catalog()
if args.apps:
apps_dict = {app: info for app, info in apps_dict.items() if app in args.apps}
deprecated: list[str] = []
not_deprecated: list[str] = []
# for app, info in apps_dict.items():
with multiprocessing.Pool(processes=args.processes) as pool:
tasks = pool.imap_unordered(upstream_last_update_ago, apps_dict.keys())
for _ in tqdm.tqdm(range(len(apps_dict)), ascii=" ·#"):
try:
app, result = next(tasks)
except Exception as e:
print(f"Exception found: {e}")
continue
if result is None:
continue
if result > 365:
deprecated.append(app)
else:
not_deprecated.append(app)
catalog = tomlkit.load(open("apps.toml"))
for app, info in catalog.items():
antifeatures = info.get("antifeatures", [])
if app in deprecated:
if "deprecated-software" not in antifeatures:
antifeatures.append("deprecated-software")
elif app in not_deprecated:
if "deprecated-software" in antifeatures:
antifeatures.remove("deprecated-software")
else:
continue
# unique the keys
if antifeatures:
info["antifeatures"] = antifeatures
else:
if "antifeatures" in info.keys():
info.pop("antifeatures")
tomlkit.dump(catalog, open("apps.toml", "w"))
if __name__ == "__main__":
main()

View File

@@ -1711,12 +1711,6 @@ upstream = ""
website = "https://umap.openstreetmap.fr/"
draft = "https://github.com/YunoHost-Apps/umap_ynh"
[univer]
name = "Univer"
description = "Replacement of Luckysheet (deprecated, in yunohost packages)"
upstream = "https://github.com/dream-num/univer"
website = "https://univer.ai/"
[upmpdcli]
name = "upmpdcli"
description = ""