From 1da80a6f467407339d75c0019c0a1dfa832630b4 Mon Sep 17 00:00:00 2001 From: cjdw Date: Wed, 10 Jul 2024 20:18:25 +0000 Subject: [PATCH 01/29] Translated readme-generator using Weblate (Indonesian) Currently translated at 56.4% (22 of 39 strings) Translation: YunoHost/readme-generator Translate-URL: https://translate.yunohost.org/projects/yunohost/readme-generator/id/ --- .../translations/id/LC_MESSAGES/messages.mo | Bin 0 -> 3084 bytes .../translations/id/LC_MESSAGES/messages.po | 55 +++++++++++------- 2 files changed, 35 insertions(+), 20 deletions(-) create mode 100644 tools/readme_generator/translations/id/LC_MESSAGES/messages.mo diff --git a/tools/readme_generator/translations/id/LC_MESSAGES/messages.mo b/tools/readme_generator/translations/id/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..fa1a986265546f7a946164a71bc1d84c2e2d7e92 GIT binary patch literal 3084 zcmb`J&2Jk;7{&)EP|SB}3lg9XA0;vM+N}Ulxee68ZW<|WqBsFcgyQk;cz5dEneEJM zT%R~{;lKrP;aG_a^n%0<#DPDdCk~wZHy|PL%&ymQN^(K0y7_r`XXkzAdEa@qf1Wt@ z4Z-mu&R1~W!+8ehR}bM2j^hs#@)Y<4_&sOnCD)87Ngfu`4rr;g$ zZSd4FLQa5Jz*oT@cnZ7)y0~A0$H6;b4g3*wdHeys3H}AX4xT~qC&6X#Iq*8z2Y113 z@Hg-~OpD#w%rl#3w zgu+JIpzf=rA^G^ja>TA=318y38D8MK6B)fVd!ojY>!ll+RM(WTRXWJ5MNs^6(N^;L zsOG66ZJwwmX$#}WOe9PmL&h`L6--^XoZp-Z0{UyIb5T7H|!38s$up3A^j za!7|F<_5{ozPoJn=i((yLUd#6RwZ$tj3Gw?QvRa zQ=<@%L43??ve?ocr%;%QfbSPz0wE&^Sywu2OjlT?R#CjFC5_bBT}&UKv~{vt$Ux67 zqWrP&bJ6mGRZWp(nE>fBAuX3o`kX>Ln;Eh`MCO9Ulm!V^9n34=oO_DS8uNh>me1YI z4A=j9WsmDU!N+6+^0Uyj9g|L{nhU9|yD`)%DOzyaQe=~}Ag}6Xr`7IuTmjB5#!QA8 z3whO)&(Y)i0~F-bv>asWq~~kSrHPcKYIvv~b3+X2MIudkK#{OP*EPwO+e2xdHmB$; zH8y!I=LA1g#YXf$J3?IRfz`VMnL+-vi#M`CbprrUe|;o@RqaCcw4GTD;w+H zCf^fI1g{N0Xwn;<)~458_u4IbZN1rDJ@?uA^-g7t8S8CnCJkIe=_b9py|zZLw@|Ok zoo;J&?MkcN-t6>xA7E%vI&X`!q&c6?<GJ9g&ZnY39kJ&)NdMfuHal_fAPrGIB$i6^*A&FHm(n)sn1hp^EOSgfJH@0h1t(Ks1Df*L0yEMV6HT% S*#Q6X$Y{Pzj_9GIT>l@LBEG=@ literal 0 HcmV?d00001 diff --git a/tools/readme_generator/translations/id/LC_MESSAGES/messages.po b/tools/readme_generator/translations/id/LC_MESSAGES/messages.po index 3ede36c5..b0a4fb2a 100644 --- a/tools/readme_generator/translations/id/LC_MESSAGES/messages.po +++ b/tools/readme_generator/translations/id/LC_MESSAGES/messages.po @@ -8,23 +8,26 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-03-31 19:33+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2024-07-11 14:56+0000\n" +"Last-Translator: cjdw \n" +"Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.4.3\n" "Generated-By: Babel 2.14.0\n" #: templates/ALL_README.md.j2:11 #, python-format msgid "Read the README in %(language)s" -msgstr "" +msgstr "Baca README dalam bahasa %(language)s" #: templates/README.md.j2:2 msgid "Packaging an app, starting from this example" -msgstr "" +msgstr "Memaket satu aplikasi, dimulai dari contoh ini" #: templates/README.md.j2:4 msgid "" @@ -32,22 +35,29 @@ msgid "" "github.com/new?template_name=example_ynh&template_owner=YunoHost) button on " "the Github repo" msgstr "" +"Salin aplikasi ini sebelum mengerjakannya, menggunakan tombol ['Gunakan " +"templat ini'](https://github.com/" +"new?template_name=example_ynh&template_owner=YunoHost) di repo Github" #: templates/README.md.j2:5 msgid "Edit the `manifest.toml` with app specific info" -msgstr "" +msgstr "Edit `manifest.toml` dengan info khas aplikasi" #: templates/README.md.j2:6 msgid "" "Edit the `install`, `upgrade`, `remove`, `backup` and `restore` scripts, and " "any relevant conf files in `conf/`" msgstr "" +"Edit skrip `install`, `upgrade`, `remove`, `backup` and `restore`, dan " +"setiap berkas conf yang relevan dalam `conf/`" #: templates/README.md.j2:7 msgid "" "Using the [script helpers documentation](https://yunohost.org/" "packaging_apps_helpers)" msgstr "" +"Menggunakan [dokumentasi pembantu skrip](https://yunohost.org/" +"packaging_apps_helpers)" #: templates/README.md.j2:8 msgid "" @@ -101,16 +111,16 @@ msgstr "" #: templates/README.md.j2:24 msgid "Maintenance status" -msgstr "" +msgstr "Status pemeliharaan" #: templates/README.md.j2:26 #, python-format msgid "Install %(application_name)s with YunoHost" -msgstr "" +msgstr "Pasang %(application_name)s dengan YunoHost" #: templates/README.md.j2:28 msgid "Read this README in other languages." -msgstr "" +msgstr "Baca README ini dengan bahasa yang lain." #: templates/README.md.j2:30 #, python-format @@ -118,57 +128,62 @@ msgid "" "This package allows you to install %(application_name)s quickly and simply " "on a YunoHost server." msgstr "" +"Paket ini memperbolehkan Anda untuk memasang %(application_name)s secara " +"cepat dan mudah pada server YunoHost." #: templates/README.md.j2:31 msgid "" "If you don't have YunoHost, please consult [the guide](https://yunohost.org/" "install) to learn how to install it." msgstr "" +"Bila Anda tidak mempunyai YunoHost, silakan berkonsultasi dengan " +"[panduan](https://yunohost.org/install) untuk mempelajari bagaimana untuk " +"memasangnya." #: templates/README.md.j2:33 msgid "Overview" -msgstr "" +msgstr "Ringkasan" #: templates/README.md.j2:37 msgid "Shipped version:" -msgstr "" +msgstr "Versi terkirim:" #: templates/README.md.j2:41 msgid "Demo:" -msgstr "" +msgstr "Demo:" #: templates/README.md.j2:45 msgid "Screenshots" -msgstr "" +msgstr "Tangkapan Layar" #: templates/README.md.j2:48 #, python-format msgid "Screenshot of %(application_name)s" -msgstr "" +msgstr "Tangkapan Layar pada %(application_name)s" #: templates/README.md.j2:53 msgid "Disclaimers / important information" -msgstr "" +msgstr "Sangkalan / informasi penting" #: templates/README.md.j2:59 msgid "Antifeatures" -msgstr "" +msgstr "Antifitur" #: templates/README.md.j2:66 msgid "Documentation and resources" -msgstr "" +msgstr "Dokumentasi dan sumber daya" #: templates/README.md.j2:68 msgid "Official app website:" -msgstr "" +msgstr "Website aplikasi resmi:" #: templates/README.md.j2:70 msgid "Official user documentation:" -msgstr "" +msgstr "Dokumentasi pengguna resmi:" #: templates/README.md.j2:72 msgid "Official admin documentation:" -msgstr "" +msgstr "Dokumentasi admin resmi:" #: templates/README.md.j2:74 msgid "Upstream app code repository:" From 46cb0c6484ba1774062796f74cde2977407edd53 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 15 Jul 2024 04:52:01 +0200 Subject: [PATCH 02/29] Add Docmost. to wishlist --- wishlist.toml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/wishlist.toml b/wishlist.toml index 3da5cf43..178fd196 100644 --- a/wishlist.toml +++ b/wishlist.toml @@ -497,6 +497,13 @@ upstream = "https://github.com/docker/distribution/" website = "" added_date = 1695656621 # 2023/09/25 + +[docmost] +name = "Docmost." +description = "Wiki and documentation software" +upstream = "https://github.com/docmost/docmost" +website = "https://docmost.com/" + [docspell] name = "Docspell" description = "Simple document organizer" From f50b1def76246aa3404c085051ba55ae395e5983 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 15 Jul 2024 14:22:56 +0000 Subject: [PATCH 03/29] Automatically add dates to the catalog files --- wishlist.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/wishlist.toml b/wishlist.toml index 178fd196..d8bdb57d 100644 --- a/wishlist.toml +++ b/wishlist.toml @@ -503,6 +503,7 @@ name = "Docmost." description = "Wiki and documentation software" upstream = "https://github.com/docmost/docmost" website = "https://docmost.com/" +added_date = 1721053354 # 2024/07/15 [docspell] name = "Docspell" From f40cffa8245e0fd371033bd290f1417376c4637c Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 13 Jul 2024 15:25:28 +0200 Subject: [PATCH 04/29] Add Graylog to wishlist --- wishlist.toml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/wishlist.toml b/wishlist.toml index d8bdb57d..fd353101 100644 --- a/wishlist.toml +++ b/wishlist.toml @@ -795,6 +795,13 @@ upstream = "https://github.com/graphhopper/graphhopper" website = "https://www.graphhopper.com/" added_date = 1695656621 # 2023/09/25 + +[graylog] +name = "Graylog" +description = "log management platform" +upstream = "https://github.com/Graylog2/graylog2-server" +website = "https://www.graylog.org/" + [greenlight] name = "Greenlight" description = "A really simple end-user interface for your BigBlueButton server" From 58d8e4c82804c551291807d4bd1ae01541719a8c Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 15 Jul 2024 14:29:20 +0000 Subject: [PATCH 05/29] Automatically add dates to the catalog files --- wishlist.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/wishlist.toml b/wishlist.toml index fd353101..b1975fb2 100644 --- a/wishlist.toml +++ b/wishlist.toml @@ -801,6 +801,7 @@ name = "Graylog" description = "log management platform" upstream = "https://github.com/Graylog2/graylog2-server" website = "https://www.graylog.org/" +added_date = 1721053741 # 2024/07/15 [greenlight] name = "Greenlight" From 7cbb39857e35029b84553e56e7cae4dfe25f4b63 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:30:09 +0200 Subject: [PATCH 06/29] Set caerp as notworking (#2467) Co-authored-by: OniriCorpe --- apps.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.toml b/apps.toml index 4b180a7d..355c1ddd 100644 --- a/apps.toml +++ b/apps.toml @@ -343,7 +343,7 @@ url = "https://github.com/YunoHost-Apps/cachet_ynh" added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 0 -state = "working" +state = "notworking" subtags = [ "accounting", "business_and_ngos" ] url = "https://github.com/Yunohost-Apps/caerp_ynh" From a0bafe760470291dbef940432c1d6b4aefff964d Mon Sep 17 00:00:00 2001 From: Mateusz <2871798+orhtej2@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:36:06 +0200 Subject: [PATCH 07/29] Bump `ynh` number on non-main-asset-only updates. --- .../autoupdate_app_sources.py | 22 +++++++++++++------ tools/autoupdate_app_sources/requirements.txt | 1 - 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/tools/autoupdate_app_sources/autoupdate_app_sources.py b/tools/autoupdate_app_sources/autoupdate_app_sources.py index 48c56d25..73893f10 100755 --- a/tools/autoupdate_app_sources/autoupdate_app_sources.py +++ b/tools/autoupdate_app_sources/autoupdate_app_sources.py @@ -256,6 +256,9 @@ class AppAutoUpdater: if state == State.up_to_date: return (State.up_to_date, "", "", "") + if main_version == "": + self.repo.manifest_raw = self.bump_version(self.repo.manifest_raw, self.current_version, bump_ynh_level=True) + if edit: self.repo.edit_manifest(self.repo.manifest_raw) @@ -580,19 +583,24 @@ class AppAutoUpdater: ] if is_main: - - def repl(m: re.Match) -> str: - return m.group(1) + new_version + '~ynh1"' - - content = re.sub( - r"(\s*version\s*=\s*[\"\'])([^~\"\']+)(\~ynh\d+[\"\'])", repl, content - ) + content = self.bump_version(content, new_version) for old, new in replacements: content = content.replace(old, new) return content + def bump_version(self, content: str, new_version: str, bump_ynh_level: bool = False) -> str: + ynh_level = 1 + if bump_ynh_level: + ynh_level = int(re.search(r"\s*version\s*=\s*[\"\'][^~\"\']+~ynh(\d+)[\"\']", content).group(1)) + 1 + + def repl(m: re.Match) -> str: + return m.group(1) + new_version + f'~ynh{ynh_level}"' + + return re.sub( + r"(\s*version\s*=\s*[\"\'])([^~\"\']+)(~ynh\d+[\"\'])", repl, content + ) def paste_on_haste(data): # NB: we hardcode this here and can't use the yunopaste command diff --git a/tools/autoupdate_app_sources/requirements.txt b/tools/autoupdate_app_sources/requirements.txt index 737faa31..4acb0cc1 100644 --- a/tools/autoupdate_app_sources/requirements.txt +++ b/tools/autoupdate_app_sources/requirements.txt @@ -2,4 +2,3 @@ requests PyGithub toml tqdm -GitPython \ No newline at end of file From 249c5f723fe78a92ca8421ea8673271320d4d704 Mon Sep 17 00:00:00 2001 From: Mateusz <2871798+orhtej2@users.noreply.github.com> Date: Sun, 14 Jul 2024 23:17:28 +0200 Subject: [PATCH 08/29] Provide links to changed assets - release notes, tag page, changelog between commits. --- .../autoupdate_app_sources.py | 59 +++++++++++++++---- tools/autoupdate_app_sources/rest_api.py | 35 ++++++++++- 2 files changed, 81 insertions(+), 13 deletions(-) diff --git a/tools/autoupdate_app_sources/autoupdate_app_sources.py b/tools/autoupdate_app_sources/autoupdate_app_sources.py index 73893f10..aa0c8f86 100755 --- a/tools/autoupdate_app_sources/autoupdate_app_sources.py +++ b/tools/autoupdate_app_sources/autoupdate_app_sources.py @@ -241,9 +241,10 @@ class AppAutoUpdater: if source == "main": main_version = version branch_name = f"ci-auto-update-{version}" - pr_title = commit_msg = f"Upgrade to v{version}" - if msg: - commit_msg += f"\n{msg}" + pr_title = f"Upgrade to v{version}" + + if msg: + commit_msg += f"\n- `{source}` v{version}: {msg}" self.repo.manifest_raw = self.replace_version_and_asset_in_manifest( self.repo.manifest_raw, @@ -257,7 +258,9 @@ class AppAutoUpdater: return (State.up_to_date, "", "", "") if main_version == "": - self.repo.manifest_raw = self.bump_version(self.repo.manifest_raw, self.current_version, bump_ynh_level=True) + self.repo.manifest_raw = self.bump_version( + self.repo.manifest_raw, self.current_version, bump_ynh_level=True + ) if edit: self.repo.edit_manifest(self.repo.manifest_raw) @@ -388,7 +391,7 @@ class AppAutoUpdater: f"Unknown update strategy '{strategy}' for '{name}', expected one of {STRATEGIES}" ) - result = self.get_latest_version_and_asset(strategy, asset, autoupdate) + result = self.get_latest_version_and_asset(strategy, asset, infos) if result is None: return None new_version, assets, more_info = result @@ -455,8 +458,9 @@ class AppAutoUpdater: return next(iter(matching_assets.items())) def get_latest_version_and_asset( - self, strategy: str, asset: Union[str, dict], autoupdate + self, strategy: str, asset: Union[str, dict], infos: dict[str, Any] ) -> Optional[tuple[str, Union[str, dict[str, str]], str]]: + autoupdate = infos.get("autoupdate") upstream = autoupdate.get("upstream", self.main_upstream).strip("/") version_re = autoupdate.get("version_regex", None) allow_prereleases = autoupdate.get("allow_prereleases", False) @@ -499,6 +503,11 @@ class AppAutoUpdater: latest_assets = latest_release["tarball_url"] # get the release changelog link latest_release_html_url = latest_release["html_url"] + if latest_release_html_url is None or latest_release_html_url == "": + latest_release_html_url = api.changelog_for_ref( + latest_version_orig, "", RefType.releases + ) + if asset == "tarball": latest_tarball = api.url_for_ref(latest_version_orig, RefType.tags) return latest_version, latest_tarball, latest_release_html_url @@ -536,7 +545,11 @@ class AppAutoUpdater: tags, self.app_id, version_re ) latest_tarball = api.url_for_ref(latest_version_orig, RefType.tags) - return latest_version, latest_tarball, "" + return ( + latest_version, + latest_tarball, + api.changelog_for_ref(latest_version, "", RefType.tags), + ) if revision_type == "commit": if self.latest_commit_weekly and datetime.now().weekday() != 0: @@ -555,7 +568,23 @@ class AppAutoUpdater: ) version_format = autoupdate.get("force_version", "%Y.%m.%d") latest_version = latest_commit_date.strftime(version_format) - return latest_version, latest_tarball, "" + return ( + latest_version, + latest_tarball, + api.changelog_for_ref( + latest_commit["sha"], self.get_old_ref(infos), RefType.commits + ), + ) + return None + + @staticmethod + def get_old_ref(infos: dict[str, Any]) -> str: + regex = r".*[\/-]([a-f0-9]+)\." + if isinstance(infos["url"], str): + return re.match(regex, infos["url"]).group(1) + if isinstance(infos["url"], dict): + for _, url in infos["url"]: + return re.match(regex, url).group(1) return None def replace_version_and_asset_in_manifest( @@ -590,10 +619,19 @@ class AppAutoUpdater: return content - def bump_version(self, content: str, new_version: str, bump_ynh_level: bool = False) -> str: + def bump_version( + self, content: str, new_version: str, bump_ynh_level: bool = False + ) -> str: ynh_level = 1 if bump_ynh_level: - ynh_level = int(re.search(r"\s*version\s*=\s*[\"\'][^~\"\']+~ynh(\d+)[\"\']", content).group(1)) + 1 + ynh_level = ( + int( + re.search( + r"\s*version\s*=\s*[\"\'][^~\"\']+~ynh(\d+)[\"\']", content + ).group(1) + ) + + 1 + ) def repl(m: re.Match) -> str: return m.group(1) + new_version + f'~ynh{ynh_level}"' @@ -602,6 +640,7 @@ class AppAutoUpdater: r"(\s*version\s*=\s*[\"\'])([^~\"\']+)(~ynh\d+[\"\'])", repl, content ) + def paste_on_haste(data): # NB: we hardcode this here and can't use the yunopaste command # because this script runs on the same machine than haste is hosted on... diff --git a/tools/autoupdate_app_sources/rest_api.py b/tools/autoupdate_app_sources/rest_api.py index d097bf35..89c64d64 100644 --- a/tools/autoupdate_app_sources/rest_api.py +++ b/tools/autoupdate_app_sources/rest_api.py @@ -10,6 +10,7 @@ import requests class RefType(Enum): tags = 1 commits = 2 + releases = 3 class GithubAPI: @@ -41,13 +42,19 @@ class GithubAPI: def url_for_ref(self, ref: str, ref_type: RefType) -> str: """Get a URL for a ref.""" - if ref_type == RefType.tags: + if ref_type == RefType.tags or ref_type == RefType.releases: return f"{self.upstream}/archive/refs/tags/{ref}.tar.gz" elif ref_type == RefType.commits: return f"{self.upstream}/archive/{ref}.tar.gz" else: raise NotImplementedError + def changelog_for_ref(self, new_ref: str, old_ref: str, ref_type: RefType) -> str: + """Get a changelog for a ref.""" + if ref_type == RefType.commits: + return f"{self.upstream}/compare/{old_ref}...{new_ref}" + else: + return f"{self.upstream}/releases/tag/{new_ref}" class GitlabAPI: def __init__(self, upstream: str): @@ -135,11 +142,24 @@ class GitlabAPI: return retval - def url_for_ref(self, ref: str, ref_type: RefType) -> str: + def url_for_ref(self, ref: str, _: RefType) -> str: name = self.project_path.split("/")[-1] clean_ref = ref.replace("/", "-") return f"{self.forge_root}/{self.project_path}/-/archive/{ref}/{name}-{clean_ref}.tar.bz2" + def changelog_for_ref(self, new_ref: str, old_ref: str, ref_type: RefType) -> str: + """Get a changelog for a ref.""" + if ref_type == RefType.commits: + return ( + f"{self.forge_root}/{self.project_path}/-/compare/{old_ref}...{new_ref}" + ) + elif ref_type == RefType.tags: + return f"{self.forge_root}/{self.project_path}/-/tags/{new_ref}" + elif ref_type == RefType.releases: + return f"{self.forge_root}/{self.project_path}/-/releases/{new_ref}" + else: + raise NotImplementedError + class GiteaForgejoAPI: def __init__(self, upstream: str): @@ -173,6 +193,15 @@ class GiteaForgejoAPI: """Get a list of releases for project.""" return self.internal_api(f"repos/{self.project_path}/releases") - def url_for_ref(self, ref: str, ref_type: RefType) -> str: + def url_for_ref(self, ref: str, _: RefType) -> str: """Get a URL for a ref.""" return f"{self.forge_root}/{self.project_path}/archive/{ref}.tar.gz" + + def changelog_for_ref(self, new_ref: str, old_ref: str, ref_type: RefType) -> str: + """Get a changelog for a ref.""" + if ref_type == RefType.commits: + return ( + f"{self.forge_root}/{self.project_path}/compare/{old_ref}...{new_ref}" + ) + else: + return f"{self.forge_root}/{self.project_path}/releases/tag/{new_ref}" From 5c5ed3f7fff5fde609ad7fd3a13013b8eb726137 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 16:36:06 +0200 Subject: [PATCH 09/29] :art: Format Python code with Black (#2475) Co-authored-by: OniriCorpe <6963387+OniriCorpe@users.noreply.github.com> --- tools/autoupdate_app_sources/rest_api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/autoupdate_app_sources/rest_api.py b/tools/autoupdate_app_sources/rest_api.py index 89c64d64..9c47ca00 100644 --- a/tools/autoupdate_app_sources/rest_api.py +++ b/tools/autoupdate_app_sources/rest_api.py @@ -56,6 +56,7 @@ class GithubAPI: else: return f"{self.upstream}/releases/tag/{new_ref}" + class GitlabAPI: def __init__(self, upstream: str): # Find gitlab api root... From f021bc1412b088b8c7c1dddbfb1c09dc479a7167 Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Mon, 15 Jul 2024 21:02:27 +0200 Subject: [PATCH 10/29] Update app levels according to CI results (#2465) * Update app levels according to CI results * revert miniflux level * Update apps.toml: revert netdata to level 8 --------- Co-authored-by: root Co-authored-by: OniriCorpe Co-authored-by: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> --- apps.toml | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/apps.toml b/apps.toml index 355c1ddd..0fcfaaef 100644 --- a/apps.toml +++ b/apps.toml @@ -245,7 +245,7 @@ added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "publishing" deprecated_date = 1717071136 # 2024/05/30 -level = 7 +level = 6 potential_alternative_to = [ "Blogger", "Coldfusion", "Wix" ] state = "working" subtags = [ "blog" ] @@ -543,7 +543,7 @@ url = "https://github.com/YunoHost-Apps/concrete5_ynh" [conduit] added_date = 1691780437 # 2023/08/11 category = "communication" -level = 7 +level = 8 potential_alternative_to = [ "Discord", "Facebook Messenger", "Signal", "Skype", "Telegram", "Whatsapp" ] state = "working" subtags = [ "chat" ] @@ -614,7 +614,7 @@ url = "https://github.com/YunoHost-Apps/crabfit_ynh" [cryptpad] added_date = 1674232499 # 2023/01/20 category = "office" -level = 6 +level = 8 potential_alternative_to = [ "Google Docs" ] state = "working" subtags = [ "text" ] @@ -689,7 +689,7 @@ url = "https://github.com/YunoHost-Apps/dendrite_ynh" [dex] added_date = 1674232499 # 2023/01/20 category = "system_tools" -level = 6 +level = 8 state = "working" subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/dex_ynh" @@ -851,7 +851,7 @@ url = "https://github.com/YunoHost-Apps/dolibarr_ynh" [domoticz] added_date = 1674232499 # 2023/01/20 category = "iot" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/domoticz_ynh" @@ -859,7 +859,7 @@ url = "https://github.com/YunoHost-Apps/domoticz_ynh" added_date = 1674232499 # 2023/01/20 branch = "main" category = "dev" -level = 8 +level = 0 state = "working" subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/dont-code_ynh" @@ -917,7 +917,7 @@ url = "https://github.com/YunoHost-Apps/easyappointments_ynh" [elabftw] added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" -level = 8 +level = 6 state = "working" url = "https://github.com/YunoHost-Apps/elabftw_ynh" @@ -977,7 +977,7 @@ url = "https://github.com/YunoHost-Apps/emailpoubelle_ynh" [emoncms] added_date = 1674232499 # 2023/01/20 category = "iot" -level = 8 +level = 6 state = "working" url = "https://github.com/YunoHost-Apps/emoncms_ynh" @@ -1030,7 +1030,7 @@ url = "https://github.com/YunoHost-Apps/ethercalc_ynh" [etherpad] added_date = 1694300530 # 2023/09/09 category = "office" -level = 6 +level = 7 potential_alternative_to = [ "G Suite", "Google Docs", "Microsoft Office", "Microsoft Word", "Office 365" ] state = "working" subtags = [ "text" ] @@ -1373,7 +1373,7 @@ url = "https://github.com/YunoHost-Apps/glance_ynh" [glitchsoc] added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 8 +level = 6 state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/glitchsoc_ynh" @@ -1389,7 +1389,7 @@ url = "https://github.com/YunoHost-Apps/glowingbear_ynh" [glpi] added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" -level = 6 +level = 8 potential_alternative_to = [ "Cherwell", "Freshdesk", "Ivanti", "Peregrine Systems (AssetCenter)", "Remedy (BMC Software)", "ServiceNow" ] state = "working" subtags = [ "task" ] @@ -1691,7 +1691,7 @@ url = "https://github.com/YunoHost-Apps/indexhibit_ynh" added_date = 1691920584 # 2023/08/13 branch = "main" category = "system_tools" -level = 7 +level = 6 state = "working" subtags = [ "db", "monitoring" ] url = "https://github.com/YunoHost-Apps/influxdb_v2_ynh" @@ -1909,7 +1909,7 @@ url = "https://github.com/YunoHost-Apps/kodi_ynh" [koel] added_date = 1694978602 # 2023/09/17 category = "multimedia" -level = 7 +level = 6 potential_alternative_to = [ "Airsonic", "Deezer", "SoundCloud", "Spotify" ] state = "working" subtags = [ "music" ] @@ -2208,7 +2208,7 @@ url = "https://github.com/YunoHost-Apps/mantis_ynh" [mastodon] added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 6 +level = 8 potential_alternative_to = [ "X" ] state = "working" subtags = [ "microblogging" ] @@ -2226,7 +2226,7 @@ url = "https://github.com/YunoHost-Apps/matomo_ynh" [matrix-appservice-irc] added_date = 1675621561 # 2023/02/05 category = "communication" -level = 7 +level = 6 state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/matrix-appservice-irc_ynh" @@ -2280,7 +2280,7 @@ url = "https://github.com/YunoHost-Apps/mautrix_facebook_ynh" [mautrix_signal] added_date = 1674232499 # 2023/01/20 category = "communication" -level = 7 +level = 6 potential_alternative_to = [ "Signal" ] state = "working" subtags = [ "chat" ] @@ -2486,7 +2486,7 @@ url = "https://github.com/YunoHost-Apps/motioneye_ynh" [movim] added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 6 +level = 8 potential_alternative_to = [ "Facebook Messenger", "Facebook", "MSN" ] state = "working" subtags = [ "microblogging" ] @@ -2831,7 +2831,7 @@ url = "https://github.com/YunoHost-Apps/owncast-emojiwall_ynh" [owncloud] added_date = 1674232499 # 2023/01/20 category = "synchronization" -level = 7 +level = 8 potential_alternative_to = [ "Apple iCloud", "Dropbox", "Google Drive", "Microsoft OneDrive" ] state = "working" subtags = [ "files" ] @@ -2840,7 +2840,7 @@ url = "https://github.com/YunoHost-Apps/owncloud_ynh" [owntracks] added_date = 1674232499 # 2023/01/20 category = "small_utilities" -level = 8 +level = 6 state = "working" url = "https://github.com/YunoHost-Apps/owntracks_ynh" @@ -2915,7 +2915,7 @@ url = "https://github.com/YunoHost-Apps/pelican_ynh" [penpot] added_date = 1708540527 # 2024/02/21 category = "dev" -level = 6 +level = 7 state = "working" subtags = [ "design" ] url = "https://github.com/YunoHost-Apps/penpot_ynh" @@ -3775,7 +3775,7 @@ url = "https://github.com/YunoHost-Apps/squid3_ynh" [ssbroom] added_date = 1674232499 # 2023/01/20 category = "communication" -level = 7 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/ssbroom_ynh" @@ -3881,7 +3881,7 @@ url = "https://github.com/YunoHost-Apps/syncthing_ynh" [tandoor] added_date = 1674232499 # 2023/01/20 category = "small_utilities" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/tandoor_ynh" @@ -3981,7 +3981,7 @@ url = "https://github.com/YunoHost-Apps/tinyfilemanager_ynh" [tldraw] added_date = 1674232499 # 2023/01/20 category = "office" -level = 6 +level = 8 potential_alternative_to = [ "Lucidchart" ] state = "working" subtags = [ "draw" ] @@ -4506,7 +4506,7 @@ url = "https://github.com/YunoHost-Apps/zusam_ynh" [zwave-js-ui] added_date = 1674232499 # 2023/01/20 category = "iot" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/zwave-js-ui_ynh" From 5af06b543ecaf4e1711467477e4b590f34cbd667 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Date: Fri, 19 Jul 2024 18:10:46 +0200 Subject: [PATCH 11/29] Add script to autopatch apps for helpers 2.1 (#2407) * Add script to autopatch apps for helpers 2.1 * helpers2.1: more patches for mysql/psql helpers * helpers2.1: misc fixes * helpers2.1: add searchandreplace for apt changes * helpers2.1: propagate additional recent changes + misc fixes * helpers2.1: replace check of PACKAGE_CHECK_EXEC with simpler ynh_in_ci_tests * helpers2.1: misc fixes * Update convert_to_helpers_2.1.py: fix sed -i syntax for MacOS where -i requires a suffix, even empty string... * Fix again for MacOS which definitely doesn't like 'append' in sed x_x * I love computers * Invalid escape sequence yada yada * Bunch of tricky issues where eg ynh_install_go becomes ynh_go_install becomes go_install due to the order of conflicting filters etc... * Misc fixes + Trash everything about fpm_usage/footprint + Autopatch upload_max_filesize/memory_limit + Encourge people to use ynh_app_setting_set_default instead of [ -z ${foo:-}] trick in upgrade * Fix invalid escape sequence * Fix invalid escape sequences again :grim: * Turns out we gotta have the absolute path to nodejs/npm/ruby in systemd confs after all because having PATH in Environment doesn't do the trick >_> * Automatically bump yunohost requirement to 11.2.16 * Make the script more idempotent * Delete scripts/config when there's no config_panel.toml * Typo when patching ynh_psql_execute_as_root --sql * Add an explicit FIXME / explanation when ynh_replace is used with positionals * Replace __USER__ by __APP__ x_x ... * Moar tweaks * Tweak REMOVEME / FIXME flag to be able to complain about it from the linter * Bump yunohost requirement to 11.2.17 * Autopatch now-unecessary chmod/chown * Recommend to always upgrade sources instead of 'if ynh_app_upstream_version_changed' * Require yunohost 11.2.18 * \--eval for mongo_exec doesnt exist anymore * Autorework the patches/ folder structure to match new expectation from ynh_setup_source * Autoremove ynh_abort_if_errors / ynh_clean_setup calls --- tools/helpers2.1/convert_to_helpers_2.1.py | 431 +++++++++++++++++++++ 1 file changed, 431 insertions(+) create mode 100644 tools/helpers2.1/convert_to_helpers_2.1.py diff --git a/tools/helpers2.1/convert_to_helpers_2.1.py b/tools/helpers2.1/convert_to_helpers_2.1.py new file mode 100644 index 00000000..73732e6e --- /dev/null +++ b/tools/helpers2.1/convert_to_helpers_2.1.py @@ -0,0 +1,431 @@ +#!/usr/bin/env python3 + +import argparse +import os +import re + + +def cleanup(): + + comment_blocks_to_cleanup = [ + r"#=+\s*\n# GENERIC START\S*\s*\n#=+\s*\n# IMPORT GENERIC HELPERS\n#=+\s*\n", + r"#=+\s*\n# EXPERIMENTAL HELPERS\s*\n#=+\s*\n", + r"#=+\s*\n# FUTURE OFFICIAL HELPERS\s*\n#=+\s*\n", + r"#=+\s*\n# PERSONAL HELPERS\s*\n#=+\s*\n", + r"#=+\s*\n# GENERIC FINALIZATION\s*\n", + r"#=+\s*\n# GENERIC FINALISATION\s*\n", + r"#=+\s*\n# STANDARD MODIFICATIONS\s*\n", + r"#=+\s*\n# STANDARD UPGRADE STEPS\s*\n", + r"#=+\s*\n# SPECIFIC UPGRADE\s*\n", + r"#=+\s*\n# CHECK VERSION\s*\n#=+\s*\n", + r"#=+\s*\n# DECLARE DATA AND CONF FILES TO BACKUP\s*\n#=+\s*\n", + ] + + removememaybes = [ + "ynh_legacy_permissions_exists", + "ynh_legacy_permissions_delete_all", + "ynh_webpath_available", + "ynh_webpath_register", + "ynh_psql_test_if_first_run", + "ynh_backup_before_upgrade", + "ynh_restore_upgradebackup", + "ynh_find_port", + "ynh_port_available", + "ynh_require_ram", + "--ignore_swap", + "--only_swap", + "ynh_print_log", + "ynh_print_OFF", + "ynh_print_ON", + "local legacy_args", + "ynh_abort_if_errors", + "ynh_clean_setup", + ] + + replaces = [ + # Unecessary exec_warn_less + (r"ynh_exec_warn_less ynh_secure_remove", "ynh_secure_remove"), + (r"ynh_exec_warn_less ynh_systemd_action", "ynh_systemctl"), + (r"ynh_exec_warn_less ynh_install_nodejs", "ynh_install_nodejs"), + (r"ynh_exec_warn_less ynh_install_go", "ynh_install_go"), + (r"ynh_exec_warn_less ynh_install_ruby", "ynh_install_ruby"), + (r"ynh_exec_warn_less ynh_composer_exec", "ynh_composer_exec"), + (r"ynh_exec_warn_less ynh_install_composer", "ynh_install_composer"), + # Setting get/set + (r" ?--app=? ?\"?\$app\"?", ""), + # Misc + (r"ynh_validate_ip4", "ynh_validate_ip --family=4"), + (r"ynh_validate_ip4", "ynh_validate_ip --family=6"), + (r"\$\(ynh_get_debian_release\)", "$YNH_DEBIAN_VERSION"), + (r"ynh_read_manifest --manifest\S*", "ynh_read_manifest"), + (r"--manifest_key", "--key"), + (r"COMMON VARIABLES\s*$", "COMMON VARIABLES AND CUSTOM HELPERS"), + (r"ynh_string_random ([0-9])", "ynh_string_random --length=\\1"), + (r"ynh_backup_if_checksum_is_different --file=?", "ynh_backup_if_checksum_is_different "), + (r"ynh_store_file_checksum --file=?", "ynh_store_file_checksum "), + (r"ynh_delete_file_checksum --file=?", "ynh_delete_file_checksum "), + (r"\[\[?.*PACKAGE_CHECK_EXEC.*eq.*1.*\]\]?", "ynh_in_ci_tests"), + (r"\[\[?.*PACKAGE_CHECK_EXEC.*=.*1.*\]\]?", "ynh_in_ci_tests"), + (r"\[\[?.*PACKAGE_CHECK_EXEC.*ne.*1.*\]\]?", "! ynh_in_ci_tests"), + (r"\[\[?.*PACKAGE_CHECK_EXEC.*eq.*0.*\]\]?", "! ynh_in_ci_tests"), + (r"\[\[?.*PACKAGE_CHECK_EXEC.*ne.*0.*\]\]?", "ynh_in_ci_tests"), + # ynh_setup_source + (r"--full_replace=1", "--full_replace"), + (r"sources/patches", "patches"), + (r"sources/extra_files/app", "sources"), + (r"sources/extra_files", "sources"), + (r'((chmod|chown).*\"?\$install_dir\"?)\s*$', "#REMOVEME? Assuming the install dir is setup using ynh_setup_source, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1"), + # Logging + (r"ynh_print_err", "ynh_print_warn"), + (r"ynh_exec_quiet ?", ""), + (r"ynh_exec_fully_quiet ?", ""), + (r"ynh_exec_warn_less", "ynh_hide_warnings"), + (r"--message=?", ""), + (r"--time ", ""), + (r"--last", ""), + (r"\s*--weight=?\S*", ""), + # rm + (r"ynh_secure_remove( --file=?)? ?", "ynh_safe_rm "), + # Conf / templating + (r"__NAME__", "__APP__"), + (r"__NAMETOCHANGE__", "__APP__"), + (r"ynh_render_template", "ynh_config_add --jinja"), + (r"ynh_add_config", "ynh_config_add"), + (r'--template="../conf/', '--template="'), + (r'ynh_replace_vars --file=', 'ynh_replace_vars '), + (r'ynh_replace_vars', '_ynh_replace_vars'), + (r'((chmod|chown)\s[^-+].*\"?(\$install_dir\"?/.*(config|.env|settings|credentials)\S*|\$data_dir\"?/\S+|/etc/(sudoers.d|cron.d|\$app)\"?/\S+|\$(config|cron_path)\"?))', "#REMOVEME? Assuming the file is setup using ynh_config_add, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1"), + # Upgrade stuff + (r"ynh_compare_current_package_version.*lt.*version\s?=?\"?([0-9\.]+~ynh[0-9])\"?", "ynh_app_upgrading_from_version_before \\1"), + (r"ynh_compare_current_package_version.*le.*version\s?=?\"?([0-9\.]+~ynh[0-9])\"?", "ynh_app_upgrading_from_version_before_or_equal_to \\1"), + (r"upgrade_type=\S*", ""), + (r'if \[\s+"?\$upgrade_type"?\s+==\s+"?UPGRADE_APP"? \]', "# FIXME: this is still supported but the recommendation is now to *always* re-setup the app sources wether or not the upstream sources changed\nif ynh_app_upstream_version_changed"), + # Backup/store + (r"ynh_restore\s*$", "ynh_restore_everything"), + # -> Specific trick to remove the --not_mandatory here, but replace it with || true for the other occurences + (r'ynh_restore_file --origin_path="\$data_dir" \S*', 'ynh_restore "$data_dir"'), + (r"ynh_restore_file", "ynh_restore"), + (r"--src_path=?", ""), + (r"--origin_path=?", ""), + (r"--is_big\S*", ""), + (r"--not_mandatory", "|| true"), + # Fail2ban + (r"--max_retry=\S*", ""), + (r"--ports\S*", ""), + (r"ynh_add_fail2ban_config --use_template", "ynh_config_add_fail2ban"), + (r"ynh_add_fail2ban_config", "ynh_config_add_fail2ban"), + (r"ynh_remove_fail2ban_config", "ynh_config_remove_fail2ban"), + # MySQL/Postgresql + (r"ynh_mysql_dump_db \S*\$db_name\"?\s", "ynh_mysql_dump_db "), + (r"ynh_psql_dump_db \S*\$db_name\"?\s", "ynh_psql_dump_db "), + (r"ynh_mysql_connect_as [^<\\]*\s", "ynh_mysql_db_shell "), + (r"ynh_psql_connect_as [^<\\]*\s", "ynh_psql_db_shell "), + (r'ynh_mysql_execute_as_root --sql=?', 'ynh_mysql_db_shell <<< '), + (r'ynh_psql_execute_as_root --sql=?', 'ynh_psql_db_shell <<< '), + (r'ynh_mysql_execute_as_root "', 'ynh_mysql_db_shell <<< "'), + (r'ynh_psql_execute_as_root "', 'ynh_psql_db_shell <<< "'), + (r"ynh_mysql_execute_as_root '", "ynh_mysql_db_shell <<< '"), + (r"ynh_psql_execute_as_root '", "ynh_psql_db_shell <<< '"), + (r"ynh_psql_execute_as_root --database=?", "ynh_psql_db_shell "), + (r"ynh_mysql_execute_as_root --database=?", "ynh_psql_db_shell "), + (r"--sql=", "<<< "), + (r'ynh_mysql_execute_file_as_root --database=\"?(\S+)\"? --file=\"?(\S+)\"?', 'ynh_mysql_db_shell "\\1" < "\\2"'), + (r'ynh_mysql_execute_file_as_root --file=\"?(\S+)\"? --database=\"?(\S+)\"?', 'ynh_mysql_db_shell "\\2" < "\\1"'), + (r'ynh_psql_execute_file_as_root --database=\"?(\S+)\"? --file=\"?(\S+)\"?', 'ynh_psql_db_shell "\\1" < "\\2"'), + (r'ynh_psql_execute_file_as_root --file=\"?(\S+)\"? --database=\"?(\S+)\"?', 'ynh_psql_db_shell "\\2" < "\\1"'), + (r'sql_db_shell "?\$db_name"?', "sql_db_shell "), + (r'--database="?\$db_name"?', ""), + (r'--database="?\$app"?', ""), + (r"ynh_mysql_setup_db", "# FIXMEhelpers2.1 ynh_mysql_create_db"), + (r"ynh_mysql_remove_db", "# FIXMEhelpers2.1 ynh_mysql_drop_db && ynh_mysql_drop_user"), + (r"ynh_psql_setup_db", "# FIXMEhelpers2.1 ynh_psql_create_db"), + (r"ynh_psql_remove_db", "# FIXMEhelpers2.1 ynh_psql_drop_db && ynh_psql_drop_user"), + # PHP / composer + (r" ?--phpversion=\S*", ""), + (r" ?--composerversion=\S*", ""), + (r" ?--usage=\S*", ""), + (r" ?--footprint=\S*", ""), + (r"--group=www-data", "# FIXMEhelpers2.1 : --group=www-data to be replaced with php_group=www-data to be added in _common.sh"), + (r"YNH_COMPOSER_VERSION=", "composer_version="), + (r' --workdir="\$install_dir"', ""), + (r'--workdir=\$install_dir ', ""), + (r'--workdir', "# FIXMEhelpers2.1 (replace with composer_workdir=... prior to calling this helper, default is $intall_dir) --workdir"), + (r'phpversion', "php_version"), + (r'PHPVERSION', "PHP_VERSION"), + (r"ynh_add_fpm_config", "ynh_config_add_phpfpm"), + (r"ynh_remove_fpm_config", "ynh_config_remove_phpfpm"), + (r"ynh_install_composer", "ynh_composer_install\nynh_composer_exec install --no-dev "), + (r'--install_args="?([^"]+)"?(\s|$)', "\\1\\2"), + (r'--commands="([^"]+)"(\s|$)', "\\1\\2"), + (r"(^fpm_usage=)", "#REMOVEME? Everything about fpm_usage is removed in helpers2.1... | \\1"), + (r"(^.*\$fpm_usage)", "#REMOVEME? Everything about fpm_usage is removed in helpers2.1... | \\1"), + (r"(^fpm_footprint=)", "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1"), + (r"(^.*\$fpm_footprint)", "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1"), + (r"(^set__fpm_footprint)", "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1"), + (r"(^fpm_free_footprint=)", "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1"), + (r"(^.*\$fpm_free_footprint)", "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1"), + (r"(^set__fpm_free_footprint)", "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1"), + # Nodejs + (r'"?\$?ynh_node"?', "node"), + (r"NODEJS_VERSION=", "nodejs_version="), + (r"ynh_install_nodejs \S*", "ynh_nodejs_install"), + (r"ynh_install_nodejs", "ynh_nodejs_install"), + (r"ynh_remove_nodejs", "ynh_nodejs_remove"), + (r"ynh_use_nodejs", ""), + (r'"?\$ynh_node_load_PATH"?', ""), + (r'"?\$ynh_node_load_path"?', ""), + (r'"?\$?ynh_npm"?', "npm"), + (r'(export )?COREPACK_ENABLE_DOWNLOAD_PROMPT=0', ""), + (r'env\s+npm', "npm"), + (r'env\s+pnpm', "pnpm"), + (r'env\s+yarn', "yarn"), + (r'env\s+corepack', "corepack"), + # Ruby + (r'"?\$?ynh_ruby"?', "ruby"), + (r'"?\$?ynh_gem"?', "gem"), + (r"RUBY_VERSION=", "ruby_version="), + (r"ynh_install_ruby \S*", "ynh_ruby_install"), + (r"ynh_install_ruby", "ynh_ruby_install"), + (r"ynh_remove_ruby", "ynh_ruby_remove"), + (r"ynh_use_ruby", ""), + (r'"?\$ynh_ruby_load_PATH"?', ""), + (r'"?\$ynh_ruby_load_path"?', ""), + # Go + (r"^\s*GO_VERSION=", "go_version="), + (r'"?\$?ynh_go"?', "go"), + (r"ynh_install_go \S*", "ynh_go_install"), + (r"ynh_install_go", "ynh_go_install"), + (r"ynh_remove_go", "ynh_go_remove"), + (r"ynh_use_go", ""), + # Mongodb + (r"YNH_MONGO_VERSION", "mongo_version"), + (r"ynh_install_mongo \S*", "ynh_install_mongo"), + (r" --eval", ""), + # ynh_replace_string + (r"ynh_replace_string", "ynh_replace"), + (r"ynh_replace_special_string", "ynh_replace_regex"), + (r"--match_string", "--match"), + (r"--replace_string", "--replace"), + (r"--target_file", "--file"), + (r"(ynh_replace ('|\"))", "# FIXMEhelpers2.1: ynh_replace used with positional args. Please add the keywords: --match=, --replace=, --file=\n\\1"), + # Nginx + (r"ynh_add_nginx_config", "ynh_config_add_nginx"), + (r"ynh_remove_nginx_config", "ynh_config_remove_nginx"), + (r"ynh_change_url_nginx_config", "ynh_config_change_url_nginx"), + # Systemd + (r'--log_path="/var/log/\$app/\$app.log"', ""), + (r'--service="?\$app"?(\s|$)', "\\1"), + (r"--service_name", "--service"), + (r"--line_match", "--wait_until"), + (r' --template="systemd.service"', ""), + (r"ynh_add_systemd_config", "ynh_config_add_systemd"), + (r"ynh_remove_systemd_config --service=?", "ynh_config_remove_systemd"), + (r"ynh_remove_systemd_config", "ynh_config_remove_systemd"), + (r"ynh_systemd_action", "ynh_systemctl"), + # Logrotate + (r"ynh_use_logrotate", "ynh_config_add_logrotate"), + (r"ynh_remove_logrotate", "ynh_config_remove_logrotate"), + (r"--specific_user\S*", ""), + (r"--logfile=?", ""), + (r" ?--non-?append", ""), + (r'((chmod|chown).*\"?/var/log/\"?\$app)', "#REMOVEME? Assuming ynh_config_add_logrotate is called, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1"), + # Apt + (r"ynh_package_is_installed (--package=)?", "_ynh_apt_package_is_installed"), + (r"ynh_package_version (--package=)?", "_ynh_apt_package_version"), + (r"ynh_package_install", "_ynh_apt_install"), + (r"ynh_install_extra_app_dependencies", "ynh_apt_install_dependencies_from_extra_repository"), + (r"ynh_install_app_dependencies", "ynh_apt_install_dependencies"), + (r"ynh_remove_app_dependencies", "ynh_apt_remove_dependencies"), + (r"ynh_package_autopurge", "_ynh_apt autoremove --purge"), + # Exec as / sudo + (r'ynh_exec_as "?\$app"?( env)?', "ynh_exec_as_app"), + (r'sudo -u "?\$app"?( env)?', "ynh_exec_as_app"), + # Cringy messages? + ("Modifying a config file...", "Updating configuration..."), + ("Updating a configuration file...", "Updating configuration..."), + ("Adding a configuration file...", "Adding $app's configuration..."), + ("Restoring the systemd configuration...", "Restoring $app's systemd service..."), + ("Configuring a systemd service...", "Configuring $app's systemd service..."), + ("Stopping a systemd service...", "Stopping $app's systemd service..."), + ("Starting a systemd service...", "Starting $app's systemd service..."), + # Recommend ynh_app_setting_set_default + (r"( *if \[.*-z.*:-}.*\].*\n?.*then\n\s+(\S+)=(.+)\n\s+ynh_app_setting_set.*\n\s*fi\n)", "# FIXMEhelpers2.1: maybe replace with: ynh_app_setting_set_default --key=\\2 --value=\\3\n\\1"), + # Trailing spaces + (r"\s+$", "\n"), + ] + + replaces = [(re.compile(pattern, flags=re.M), replace) for pattern, replace in replaces] + comment_blocks_to_cleanup = [re.compile(pattern, flags=re.M) for pattern in comment_blocks_to_cleanup] + + for s in [ + "_common.sh", + "install", + "remove", + "upgrade", + "backup", + "restore", + "change_url", + "config", + ]: + + script = f"scripts/{s}" + + if not os.path.exists(script): + continue + + content = open(script).read() + + if s == "remove": + content = re.sub(r'(ynh_secure_remove .*/var/log/\$app.*)', r"#REMOVEME? (Apps should not remove their log dir during remove ... this should only happen if --purge is used, and be handled by the core...) \1", content) + + for pattern in comment_blocks_to_cleanup: + content = pattern.sub("", content) + + for pattern, replace in replaces: + content = pattern.sub(replace, content) + + for remove in removememaybes: + content = content.replace(remove, r"#REMOVEME? " + remove) + + open(script, "w").write(content) + + + # Specific PHP FPM conf patch + if os.path.exists("conf/extra_php-fpm.conf"): + + content = open("conf/extra_php-fpm.conf").read() + + pattern_upload_max_filesize = r"\nphp_\S*\[upload_max_filesize\] = (\S*)" + pattern_post_max_size = r"\nphp_\S*\[post_max_size\] = (\S*)" + pattern_memory_limit = r"\nphp_\S*\[memory_limit\] = (\S*)" + + upload_max_filesize = re.findall(pattern_upload_max_filesize, "\n" + content) + memory_limit = re.findall(pattern_memory_limit, "\n" + content) + + if memory_limit: + content = re.sub(pattern_memory_limit, "", content) + memory_limit = memory_limit[0] + install = open("scripts/install").read() + install = re.sub("(source /usr/share/yunohost/helpers)", "\\1\n\nynh_app_setting_set --key=php_memory_limit --value=" + memory_limit, install) + open("scripts/install", "w").write(install) + upgrade = open("scripts/upgrade").read() + upgrade = re.sub("(source /usr/share/yunohost/helpers)", "\\1\n\nynh_app_setting_set_default --key=php_memory_limit --value=" + memory_limit, upgrade) + open("scripts/upgrade", "w").write(upgrade) + + if upload_max_filesize: + content = re.sub(pattern_upload_max_filesize, "", content) + content = re.sub(pattern_post_max_size, "", content) + + upload_max_filesize = upload_max_filesize[0] + if upload_max_filesize != "50M": + install = open("scripts/install").read() + install = re.sub("(source /usr/share/yunohost/helpers)", "\\1\n\nynh_app_setting_set --key=php_upload_max_filesize --value=" + upload_max_filesize, install) + open("scripts/install", "w").write(install) + upgrade = open("scripts/upgrade").read() + upgrade = re.sub("(source /usr/share/yunohost/helpers)", "\\1\n\nynh_app_setting_set_default --key=php_upload_max_filesize --value=" + upload_max_filesize, upgrade) + open("scripts/upgrade", "w").write(upgrade) + + new_conf_is_empty = all(line.strip() == "" or line.strip()[0] == ";" for line in content.split("\n")) + if new_conf_is_empty: + os.system("git rm --quiet -f conf/extra_php-fpm.conf") + else: + open("conf/extra_php-fpm.conf", "w").write(content) + + + conf_replaces = [ + (r"__NAME__", "__APP__"), + (r"__NAMETOCHANGE__", "__APP__"), + (r"__USER__", "__APP__"), + ("__YNH_NODE__", "__NODEJS_DIR__/node"), + ("__YNH_NPM__", "__NODEJS_DIR__/npm"), + ("__YNH_NODE_LOAD_PATH__", "PATH=__PATH_WITH_NODEJS__"), + ("__YNH_RUBY_LOAD_PATH__", "PATH=__PATH_WITH_RUBY__"), + ("__YNH_GO_LOAD_PATH__", "PATH=__PATH_WITH_GO__"), + ("__YNH_RUBY__", "__RUBY_DIR__/ruby"), + ("__PHPVERSION__", "__PHP_VERSION__"), + ] + + for currentpath, folders, files in os.walk("conf"): + for file in files: + path = os.path.join(currentpath, file) + try: + content = open(path).read() + except UnicodeDecodeError: + # Not text? + continue + for pattern, replace in conf_replaces: + content = content.replace(pattern, replace) + + open(path, "w").write(content) + + git_cmds = [ + "git rm --quiet sources/extra_files/*/.gitignore 2>/dev/null", + "git rm --quiet sources/patches/.gitignore 2>/dev/null", + "git mv sources/extra_files/* sources/ 2>/dev/null", + "git mv sources/app/* sources/ 2>/dev/null", + "git mv sources/patches patches/ 2>/dev/null", + "test -e conf/app.sh && git rm --quiet conf/app.src", + "test -e check_process && git rm --quiet check_process", + "test -e scripts/actions && git rm -rf --quiet scripts/actions", + "test -e config_panel.json && git rm --quiet config_panel.json", + "test -e config_panel.toml.example && git rm --quiet config_panel.toml.example", + "git rm $(find ./ -name .DS_Store) 2>/dev/null", + r"grep -q '\*\~' .gitignore 2>/dev/null || echo '*~' >> .gitignore", + r"grep -q '\*.sw\[op\]' .gitignore || echo '*.sw[op]' >> .gitignore", + r"grep -q '\.DS_Store' .gitignore || echo '.DS_Store' >> .gitignore", + "git add .gitignore", + ] + + for cmd in git_cmds: + os.system(cmd) + + # If there's a config panel but the only options are the stupid php usage/footprint stuff + if os.path.exists("config_panel.toml") and os.system(r"grep -oE '^\s*\[\S+\.\S+\.\S+]' config_panel.toml | grep -qv php_fpm_config") != 0: + os.system("git rm --quiet -f config_panel.toml") + os.system("git rm --quiet -f scripts/config") + + # Remove scripts/config if no config panel ... most of the time this is only the example config script :| + if os.path.exists("scripts/config") and not os.path.exists("config_panel.toml"): + os.system("git rm --quiet -f scripts/config") + + webapp_serving_raw_assets_probably = False + if os.path.exists("conf/nginx.conf"): + nginx_conf = open("conf/nginx.conf").read() + if "alias " in nginx_conf or "root " in nginx_conf: + webapp_serving_raw_assets_probably = True + + if os.path.isdir("patches"): + for file in os.listdir("patches"): + if "-" not in file: + continue + source_name, patch_name = file.split("-", 1) + if source_name == "app": + source_name = "main" + os.system(f"mkdir -p 'patches/{source_name}'") + os.system(f"git mv patches/{file} patches/{source_name}/{patch_name}") + + # Add helpers_version = '2.1' after yunohost requirement in manifest + raw_manifest = open("manifest.toml", "r").read() + if "helpers_version" not in raw_manifest: + raw_manifest = re.sub('(yunohost = .*)', '\\1\nhelpers_version = "2.1"', raw_manifest) + raw_manifest = re.sub(r'yunohost = ">= 11\..*"', 'yunohost = ">= 11.2.18"', raw_manifest) + if webapp_serving_raw_assets_probably: + raw_manifest = re.sub(r'( *)\[resources.install_dir\]', '\\1[resources.install_dir]\n\\1group = "www-data:r-x"', raw_manifest) + + open("manifest.toml", "w").write(raw_manifest) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Attempt to automatically apply changes to use YunoHost helpers v2.1 on a v2 app" + ) + parser.add_argument("app_path", help="Path to the app to convert") + + args = parser.parse_args() + + if not os.path.exists(args.app_path + "/manifest.toml"): + raise Exception("There is no manifest.toml. Is this really an app directory ?") + + os.chdir(args.app_path) + + cleanup() From e0c947972f27a659ff2bfeb25c2c1f15efd80be4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 18:14:13 +0200 Subject: [PATCH 12/29] Format Python code with Black (#2478) Co-authored-by: alexAubin <4533074+alexAubin@users.noreply.github.com> --- tools/helpers2.1/convert_to_helpers_2.1.py | 236 ++++++++++++++++----- 1 file changed, 181 insertions(+), 55 deletions(-) diff --git a/tools/helpers2.1/convert_to_helpers_2.1.py b/tools/helpers2.1/convert_to_helpers_2.1.py index 73732e6e..041ca886 100644 --- a/tools/helpers2.1/convert_to_helpers_2.1.py +++ b/tools/helpers2.1/convert_to_helpers_2.1.py @@ -61,7 +61,10 @@ def cleanup(): (r"--manifest_key", "--key"), (r"COMMON VARIABLES\s*$", "COMMON VARIABLES AND CUSTOM HELPERS"), (r"ynh_string_random ([0-9])", "ynh_string_random --length=\\1"), - (r"ynh_backup_if_checksum_is_different --file=?", "ynh_backup_if_checksum_is_different "), + ( + r"ynh_backup_if_checksum_is_different --file=?", + "ynh_backup_if_checksum_is_different ", + ), (r"ynh_store_file_checksum --file=?", "ynh_store_file_checksum "), (r"ynh_delete_file_checksum --file=?", "ynh_delete_file_checksum "), (r"\[\[?.*PACKAGE_CHECK_EXEC.*eq.*1.*\]\]?", "ynh_in_ci_tests"), @@ -74,7 +77,10 @@ def cleanup(): (r"sources/patches", "patches"), (r"sources/extra_files/app", "sources"), (r"sources/extra_files", "sources"), - (r'((chmod|chown).*\"?\$install_dir\"?)\s*$', "#REMOVEME? Assuming the install dir is setup using ynh_setup_source, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1"), + ( + r"((chmod|chown).*\"?\$install_dir\"?)\s*$", + "#REMOVEME? Assuming the install dir is setup using ynh_setup_source, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1", + ), # Logging (r"ynh_print_err", "ynh_print_warn"), (r"ynh_exec_quiet ?", ""), @@ -92,17 +98,29 @@ def cleanup(): (r"ynh_render_template", "ynh_config_add --jinja"), (r"ynh_add_config", "ynh_config_add"), (r'--template="../conf/', '--template="'), - (r'ynh_replace_vars --file=', 'ynh_replace_vars '), - (r'ynh_replace_vars', '_ynh_replace_vars'), - (r'((chmod|chown)\s[^-+].*\"?(\$install_dir\"?/.*(config|.env|settings|credentials)\S*|\$data_dir\"?/\S+|/etc/(sudoers.d|cron.d|\$app)\"?/\S+|\$(config|cron_path)\"?))', "#REMOVEME? Assuming the file is setup using ynh_config_add, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1"), + (r"ynh_replace_vars --file=", "ynh_replace_vars "), + (r"ynh_replace_vars", "_ynh_replace_vars"), + ( + r"((chmod|chown)\s[^-+].*\"?(\$install_dir\"?/.*(config|.env|settings|credentials)\S*|\$data_dir\"?/\S+|/etc/(sudoers.d|cron.d|\$app)\"?/\S+|\$(config|cron_path)\"?))", + "#REMOVEME? Assuming the file is setup using ynh_config_add, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1", + ), # Upgrade stuff - (r"ynh_compare_current_package_version.*lt.*version\s?=?\"?([0-9\.]+~ynh[0-9])\"?", "ynh_app_upgrading_from_version_before \\1"), - (r"ynh_compare_current_package_version.*le.*version\s?=?\"?([0-9\.]+~ynh[0-9])\"?", "ynh_app_upgrading_from_version_before_or_equal_to \\1"), + ( + r"ynh_compare_current_package_version.*lt.*version\s?=?\"?([0-9\.]+~ynh[0-9])\"?", + "ynh_app_upgrading_from_version_before \\1", + ), + ( + r"ynh_compare_current_package_version.*le.*version\s?=?\"?([0-9\.]+~ynh[0-9])\"?", + "ynh_app_upgrading_from_version_before_or_equal_to \\1", + ), (r"upgrade_type=\S*", ""), - (r'if \[\s+"?\$upgrade_type"?\s+==\s+"?UPGRADE_APP"? \]', "# FIXME: this is still supported but the recommendation is now to *always* re-setup the app sources wether or not the upstream sources changed\nif ynh_app_upstream_version_changed"), + ( + r'if \[\s+"?\$upgrade_type"?\s+==\s+"?UPGRADE_APP"? \]', + "# FIXME: this is still supported but the recommendation is now to *always* re-setup the app sources wether or not the upstream sources changed\nif ynh_app_upstream_version_changed", + ), # Backup/store (r"ynh_restore\s*$", "ynh_restore_everything"), - # -> Specific trick to remove the --not_mandatory here, but replace it with || true for the other occurences + # -> Specific trick to remove the --not_mandatory here, but replace it with || true for the other occurences (r'ynh_restore_file --origin_path="\$data_dir" \S*', 'ynh_restore "$data_dir"'), (r"ynh_restore_file", "ynh_restore"), (r"--src_path=?", ""), @@ -120,8 +138,8 @@ def cleanup(): (r"ynh_psql_dump_db \S*\$db_name\"?\s", "ynh_psql_dump_db "), (r"ynh_mysql_connect_as [^<\\]*\s", "ynh_mysql_db_shell "), (r"ynh_psql_connect_as [^<\\]*\s", "ynh_psql_db_shell "), - (r'ynh_mysql_execute_as_root --sql=?', 'ynh_mysql_db_shell <<< '), - (r'ynh_psql_execute_as_root --sql=?', 'ynh_psql_db_shell <<< '), + (r"ynh_mysql_execute_as_root --sql=?", "ynh_mysql_db_shell <<< "), + (r"ynh_psql_execute_as_root --sql=?", "ynh_psql_db_shell <<< "), (r'ynh_mysql_execute_as_root "', 'ynh_mysql_db_shell <<< "'), (r'ynh_psql_execute_as_root "', 'ynh_psql_db_shell <<< "'), (r"ynh_mysql_execute_as_root '", "ynh_mysql_db_shell <<< '"), @@ -129,42 +147,93 @@ def cleanup(): (r"ynh_psql_execute_as_root --database=?", "ynh_psql_db_shell "), (r"ynh_mysql_execute_as_root --database=?", "ynh_psql_db_shell "), (r"--sql=", "<<< "), - (r'ynh_mysql_execute_file_as_root --database=\"?(\S+)\"? --file=\"?(\S+)\"?', 'ynh_mysql_db_shell "\\1" < "\\2"'), - (r'ynh_mysql_execute_file_as_root --file=\"?(\S+)\"? --database=\"?(\S+)\"?', 'ynh_mysql_db_shell "\\2" < "\\1"'), - (r'ynh_psql_execute_file_as_root --database=\"?(\S+)\"? --file=\"?(\S+)\"?', 'ynh_psql_db_shell "\\1" < "\\2"'), - (r'ynh_psql_execute_file_as_root --file=\"?(\S+)\"? --database=\"?(\S+)\"?', 'ynh_psql_db_shell "\\2" < "\\1"'), + ( + r"ynh_mysql_execute_file_as_root --database=\"?(\S+)\"? --file=\"?(\S+)\"?", + 'ynh_mysql_db_shell "\\1" < "\\2"', + ), + ( + r"ynh_mysql_execute_file_as_root --file=\"?(\S+)\"? --database=\"?(\S+)\"?", + 'ynh_mysql_db_shell "\\2" < "\\1"', + ), + ( + r"ynh_psql_execute_file_as_root --database=\"?(\S+)\"? --file=\"?(\S+)\"?", + 'ynh_psql_db_shell "\\1" < "\\2"', + ), + ( + r"ynh_psql_execute_file_as_root --file=\"?(\S+)\"? --database=\"?(\S+)\"?", + 'ynh_psql_db_shell "\\2" < "\\1"', + ), (r'sql_db_shell "?\$db_name"?', "sql_db_shell "), (r'--database="?\$db_name"?', ""), (r'--database="?\$app"?', ""), (r"ynh_mysql_setup_db", "# FIXMEhelpers2.1 ynh_mysql_create_db"), - (r"ynh_mysql_remove_db", "# FIXMEhelpers2.1 ynh_mysql_drop_db && ynh_mysql_drop_user"), + ( + r"ynh_mysql_remove_db", + "# FIXMEhelpers2.1 ynh_mysql_drop_db && ynh_mysql_drop_user", + ), (r"ynh_psql_setup_db", "# FIXMEhelpers2.1 ynh_psql_create_db"), - (r"ynh_psql_remove_db", "# FIXMEhelpers2.1 ynh_psql_drop_db && ynh_psql_drop_user"), + ( + r"ynh_psql_remove_db", + "# FIXMEhelpers2.1 ynh_psql_drop_db && ynh_psql_drop_user", + ), # PHP / composer (r" ?--phpversion=\S*", ""), (r" ?--composerversion=\S*", ""), (r" ?--usage=\S*", ""), (r" ?--footprint=\S*", ""), - (r"--group=www-data", "# FIXMEhelpers2.1 : --group=www-data to be replaced with php_group=www-data to be added in _common.sh"), + ( + r"--group=www-data", + "# FIXMEhelpers2.1 : --group=www-data to be replaced with php_group=www-data to be added in _common.sh", + ), (r"YNH_COMPOSER_VERSION=", "composer_version="), (r' --workdir="\$install_dir"', ""), - (r'--workdir=\$install_dir ', ""), - (r'--workdir', "# FIXMEhelpers2.1 (replace with composer_workdir=... prior to calling this helper, default is $intall_dir) --workdir"), - (r'phpversion', "php_version"), - (r'PHPVERSION', "PHP_VERSION"), + (r"--workdir=\$install_dir ", ""), + ( + r"--workdir", + "# FIXMEhelpers2.1 (replace with composer_workdir=... prior to calling this helper, default is $intall_dir) --workdir", + ), + (r"phpversion", "php_version"), + (r"PHPVERSION", "PHP_VERSION"), (r"ynh_add_fpm_config", "ynh_config_add_phpfpm"), (r"ynh_remove_fpm_config", "ynh_config_remove_phpfpm"), - (r"ynh_install_composer", "ynh_composer_install\nynh_composer_exec install --no-dev "), + ( + r"ynh_install_composer", + "ynh_composer_install\nynh_composer_exec install --no-dev ", + ), (r'--install_args="?([^"]+)"?(\s|$)', "\\1\\2"), (r'--commands="([^"]+)"(\s|$)', "\\1\\2"), - (r"(^fpm_usage=)", "#REMOVEME? Everything about fpm_usage is removed in helpers2.1... | \\1"), - (r"(^.*\$fpm_usage)", "#REMOVEME? Everything about fpm_usage is removed in helpers2.1... | \\1"), - (r"(^fpm_footprint=)", "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1"), - (r"(^.*\$fpm_footprint)", "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1"), - (r"(^set__fpm_footprint)", "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1"), - (r"(^fpm_free_footprint=)", "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1"), - (r"(^.*\$fpm_free_footprint)", "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1"), - (r"(^set__fpm_free_footprint)", "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1"), + ( + r"(^fpm_usage=)", + "#REMOVEME? Everything about fpm_usage is removed in helpers2.1... | \\1", + ), + ( + r"(^.*\$fpm_usage)", + "#REMOVEME? Everything about fpm_usage is removed in helpers2.1... | \\1", + ), + ( + r"(^fpm_footprint=)", + "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1", + ), + ( + r"(^.*\$fpm_footprint)", + "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1", + ), + ( + r"(^set__fpm_footprint)", + "#REMOVEME? Everything about fpm_footprint is removed in helpers2.1... | \\1", + ), + ( + r"(^fpm_free_footprint=)", + "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1", + ), + ( + r"(^.*\$fpm_free_footprint)", + "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1", + ), + ( + r"(^set__fpm_free_footprint)", + "#REMOVEME? Everything about fpm_free_footprint is removed in helpers2.1... | \\1", + ), # Nodejs (r'"?\$?ynh_node"?', "node"), (r"NODEJS_VERSION=", "nodejs_version="), @@ -175,11 +244,11 @@ def cleanup(): (r'"?\$ynh_node_load_PATH"?', ""), (r'"?\$ynh_node_load_path"?', ""), (r'"?\$?ynh_npm"?', "npm"), - (r'(export )?COREPACK_ENABLE_DOWNLOAD_PROMPT=0', ""), - (r'env\s+npm', "npm"), - (r'env\s+pnpm', "pnpm"), - (r'env\s+yarn', "yarn"), - (r'env\s+corepack', "corepack"), + (r"(export )?COREPACK_ENABLE_DOWNLOAD_PROMPT=0", ""), + (r"env\s+npm", "npm"), + (r"env\s+pnpm", "pnpm"), + (r"env\s+yarn", "yarn"), + (r"env\s+corepack", "corepack"), # Ruby (r'"?\$?ynh_ruby"?', "ruby"), (r'"?\$?ynh_gem"?', "gem"), @@ -207,7 +276,10 @@ def cleanup(): (r"--match_string", "--match"), (r"--replace_string", "--replace"), (r"--target_file", "--file"), - (r"(ynh_replace ('|\"))", "# FIXMEhelpers2.1: ynh_replace used with positional args. Please add the keywords: --match=, --replace=, --file=\n\\1"), + ( + r"(ynh_replace ('|\"))", + "# FIXMEhelpers2.1: ynh_replace used with positional args. Please add the keywords: --match=, --replace=, --file=\n\\1", + ), # Nginx (r"ynh_add_nginx_config", "ynh_config_add_nginx"), (r"ynh_remove_nginx_config", "ynh_config_remove_nginx"), @@ -228,12 +300,18 @@ def cleanup(): (r"--specific_user\S*", ""), (r"--logfile=?", ""), (r" ?--non-?append", ""), - (r'((chmod|chown).*\"?/var/log/\"?\$app)', "#REMOVEME? Assuming ynh_config_add_logrotate is called, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1"), + ( + r"((chmod|chown).*\"?/var/log/\"?\$app)", + "#REMOVEME? Assuming ynh_config_add_logrotate is called, the proper chmod/chowns are now already applied and it shouldn't be necessary to tweak perms | \\1", + ), # Apt (r"ynh_package_is_installed (--package=)?", "_ynh_apt_package_is_installed"), (r"ynh_package_version (--package=)?", "_ynh_apt_package_version"), (r"ynh_package_install", "_ynh_apt_install"), - (r"ynh_install_extra_app_dependencies", "ynh_apt_install_dependencies_from_extra_repository"), + ( + r"ynh_install_extra_app_dependencies", + "ynh_apt_install_dependencies_from_extra_repository", + ), (r"ynh_install_app_dependencies", "ynh_apt_install_dependencies"), (r"ynh_remove_app_dependencies", "ynh_apt_remove_dependencies"), (r"ynh_package_autopurge", "_ynh_apt autoremove --purge"), @@ -244,18 +322,28 @@ def cleanup(): ("Modifying a config file...", "Updating configuration..."), ("Updating a configuration file...", "Updating configuration..."), ("Adding a configuration file...", "Adding $app's configuration..."), - ("Restoring the systemd configuration...", "Restoring $app's systemd service..."), + ( + "Restoring the systemd configuration...", + "Restoring $app's systemd service...", + ), ("Configuring a systemd service...", "Configuring $app's systemd service..."), ("Stopping a systemd service...", "Stopping $app's systemd service..."), ("Starting a systemd service...", "Starting $app's systemd service..."), # Recommend ynh_app_setting_set_default - (r"( *if \[.*-z.*:-}.*\].*\n?.*then\n\s+(\S+)=(.+)\n\s+ynh_app_setting_set.*\n\s*fi\n)", "# FIXMEhelpers2.1: maybe replace with: ynh_app_setting_set_default --key=\\2 --value=\\3\n\\1"), + ( + r"( *if \[.*-z.*:-}.*\].*\n?.*then\n\s+(\S+)=(.+)\n\s+ynh_app_setting_set.*\n\s*fi\n)", + "# FIXMEhelpers2.1: maybe replace with: ynh_app_setting_set_default --key=\\2 --value=\\3\n\\1", + ), # Trailing spaces (r"\s+$", "\n"), ] - replaces = [(re.compile(pattern, flags=re.M), replace) for pattern, replace in replaces] - comment_blocks_to_cleanup = [re.compile(pattern, flags=re.M) for pattern in comment_blocks_to_cleanup] + replaces = [ + (re.compile(pattern, flags=re.M), replace) for pattern, replace in replaces + ] + comment_blocks_to_cleanup = [ + re.compile(pattern, flags=re.M) for pattern in comment_blocks_to_cleanup + ] for s in [ "_common.sh", @@ -276,7 +364,11 @@ def cleanup(): content = open(script).read() if s == "remove": - content = re.sub(r'(ynh_secure_remove .*/var/log/\$app.*)', r"#REMOVEME? (Apps should not remove their log dir during remove ... this should only happen if --purge is used, and be handled by the core...) \1", content) + content = re.sub( + r"(ynh_secure_remove .*/var/log/\$app.*)", + r"#REMOVEME? (Apps should not remove their log dir during remove ... this should only happen if --purge is used, and be handled by the core...) \1", + content, + ) for pattern in comment_blocks_to_cleanup: content = pattern.sub("", content) @@ -289,7 +381,6 @@ def cleanup(): open(script, "w").write(content) - # Specific PHP FPM conf patch if os.path.exists("conf/extra_php-fpm.conf"): @@ -306,10 +397,20 @@ def cleanup(): content = re.sub(pattern_memory_limit, "", content) memory_limit = memory_limit[0] install = open("scripts/install").read() - install = re.sub("(source /usr/share/yunohost/helpers)", "\\1\n\nynh_app_setting_set --key=php_memory_limit --value=" + memory_limit, install) + install = re.sub( + "(source /usr/share/yunohost/helpers)", + "\\1\n\nynh_app_setting_set --key=php_memory_limit --value=" + + memory_limit, + install, + ) open("scripts/install", "w").write(install) upgrade = open("scripts/upgrade").read() - upgrade = re.sub("(source /usr/share/yunohost/helpers)", "\\1\n\nynh_app_setting_set_default --key=php_memory_limit --value=" + memory_limit, upgrade) + upgrade = re.sub( + "(source /usr/share/yunohost/helpers)", + "\\1\n\nynh_app_setting_set_default --key=php_memory_limit --value=" + + memory_limit, + upgrade, + ) open("scripts/upgrade", "w").write(upgrade) if upload_max_filesize: @@ -319,19 +420,30 @@ def cleanup(): upload_max_filesize = upload_max_filesize[0] if upload_max_filesize != "50M": install = open("scripts/install").read() - install = re.sub("(source /usr/share/yunohost/helpers)", "\\1\n\nynh_app_setting_set --key=php_upload_max_filesize --value=" + upload_max_filesize, install) + install = re.sub( + "(source /usr/share/yunohost/helpers)", + "\\1\n\nynh_app_setting_set --key=php_upload_max_filesize --value=" + + upload_max_filesize, + install, + ) open("scripts/install", "w").write(install) upgrade = open("scripts/upgrade").read() - upgrade = re.sub("(source /usr/share/yunohost/helpers)", "\\1\n\nynh_app_setting_set_default --key=php_upload_max_filesize --value=" + upload_max_filesize, upgrade) + upgrade = re.sub( + "(source /usr/share/yunohost/helpers)", + "\\1\n\nynh_app_setting_set_default --key=php_upload_max_filesize --value=" + + upload_max_filesize, + upgrade, + ) open("scripts/upgrade", "w").write(upgrade) - new_conf_is_empty = all(line.strip() == "" or line.strip()[0] == ";" for line in content.split("\n")) + new_conf_is_empty = all( + line.strip() == "" or line.strip()[0] == ";" for line in content.split("\n") + ) if new_conf_is_empty: os.system("git rm --quiet -f conf/extra_php-fpm.conf") else: open("conf/extra_php-fpm.conf", "w").write(content) - conf_replaces = [ (r"__NAME__", "__APP__"), (r"__NAMETOCHANGE__", "__APP__"), @@ -380,7 +492,13 @@ def cleanup(): os.system(cmd) # If there's a config panel but the only options are the stupid php usage/footprint stuff - if os.path.exists("config_panel.toml") and os.system(r"grep -oE '^\s*\[\S+\.\S+\.\S+]' config_panel.toml | grep -qv php_fpm_config") != 0: + if ( + os.path.exists("config_panel.toml") + and os.system( + r"grep -oE '^\s*\[\S+\.\S+\.\S+]' config_panel.toml | grep -qv php_fpm_config" + ) + != 0 + ): os.system("git rm --quiet -f config_panel.toml") os.system("git rm --quiet -f scripts/config") @@ -407,10 +525,18 @@ def cleanup(): # Add helpers_version = '2.1' after yunohost requirement in manifest raw_manifest = open("manifest.toml", "r").read() if "helpers_version" not in raw_manifest: - raw_manifest = re.sub('(yunohost = .*)', '\\1\nhelpers_version = "2.1"', raw_manifest) - raw_manifest = re.sub(r'yunohost = ">= 11\..*"', 'yunohost = ">= 11.2.18"', raw_manifest) + raw_manifest = re.sub( + "(yunohost = .*)", '\\1\nhelpers_version = "2.1"', raw_manifest + ) + raw_manifest = re.sub( + r'yunohost = ">= 11\..*"', 'yunohost = ">= 11.2.18"', raw_manifest + ) if webapp_serving_raw_assets_probably: - raw_manifest = re.sub(r'( *)\[resources.install_dir\]', '\\1[resources.install_dir]\n\\1group = "www-data:r-x"', raw_manifest) + raw_manifest = re.sub( + r"( *)\[resources.install_dir\]", + '\\1[resources.install_dir]\n\\1group = "www-data:r-x"', + raw_manifest, + ) open("manifest.toml", "w").write(raw_manifest) From 82f4368d0ab4112d1e6b42a5a8742c8d37f3286f Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Sat, 20 Jul 2024 22:40:51 +0200 Subject: [PATCH 13/29] Update app levels according to CI results (#2479) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update app levels according to CI results * Update apps.toml * Update app levels according to CI results * Update apps.toml * Update apps.toml * Update apps.toml * Update apps.toml * Update apps.toml --------- Co-authored-by: root Co-authored-by: Éric Gaspar <46165813+ericgaspar@users.noreply.github.com> --- apps.toml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/apps.toml b/apps.toml index 0fcfaaef..37c7aff8 100644 --- a/apps.toml +++ b/apps.toml @@ -43,7 +43,7 @@ added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "social_media" deprecated_date = 1717071136 # 2024/05/30 -level = 6 +level = 0 state = "working" subtags = [ "microblogging", "pictures" ] url = "https://github.com/YunoHost-Apps/acropolis_ynh" @@ -202,7 +202,7 @@ url = "https://github.com/YunoHost-Apps/backdrop_ynh" [baikal] added_date = 1674232499 # 2023/01/20 category = "synchronization" -level = 8 +level = 6 potential_alternative_to = [ "Microsoft Outlook" ] state = "working" subtags = [ "calendar", "contacts" ] @@ -715,7 +715,7 @@ url = "https://github.com/YunoHost-Apps/diagramsnet_ynh" [diaspora] added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 8 +level = 0 potential_alternative_to = [ "Ello", "Facebook", "Hubzilla", "Myspace", "X" ] state = "working" subtags = [ "microblogging" ] @@ -724,7 +724,7 @@ url = "https://github.com/YunoHost-Apps/diaspora_ynh" [digiscreen] added_date = 1674232499 # 2023/01/20 category = "wat" -level = 6 +level = 7 state = "working" url = "https://github.com/YunoHost-Apps/digiscreen_ynh" @@ -810,7 +810,7 @@ url = "https://github.com/YunoHost-Apps/django-for-runners_ynh" [django-fritzconnection] added_date = 1674232499 # 2023/01/20 category = "system_tools" -level = 3 +level = 8 state = "working" subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/django-fritzconnection_ynh" @@ -851,7 +851,7 @@ url = "https://github.com/YunoHost-Apps/dolibarr_ynh" [domoticz] added_date = 1674232499 # 2023/01/20 category = "iot" -level = 8 +level = 6 state = "working" url = "https://github.com/YunoHost-Apps/domoticz_ynh" @@ -1350,7 +1350,7 @@ url = "https://github.com/YunoHost-Apps/gitlab_ynh" [gitlab-runner] added_date = 1674232499 # 2023/01/20 category = "dev" -level = 8 +level = 6 state = "working" subtags = [ "forge" ] url = "https://github.com/YunoHost-Apps/gitlab-runner_ynh" @@ -1373,7 +1373,7 @@ url = "https://github.com/YunoHost-Apps/glance_ynh" [glitchsoc] added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 6 +level = 8 state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/glitchsoc_ynh" @@ -1675,7 +1675,7 @@ url = "https://github.com/YunoHost-Apps/immich_ynh" [incus] added_date = 1710508401 # 2024/03/15 category = "system_tools" -level = 7 +level = 6 state = "working" url = "https://github.com/YunoHost-Apps/incus_ynh" @@ -1750,7 +1750,7 @@ added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software", "package-not-maintained" ] category = "communication" deprecated_date = 1714590228 # 2024/05/01 -level = 7 +level = 6 state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/jappix_ynh" @@ -1909,7 +1909,7 @@ url = "https://github.com/YunoHost-Apps/kodi_ynh" [koel] added_date = 1694978602 # 2023/09/17 category = "multimedia" -level = 6 +level = 7 potential_alternative_to = [ "Airsonic", "Deezer", "SoundCloud", "Spotify" ] state = "working" subtags = [ "music" ] @@ -2570,7 +2570,7 @@ url = "https://github.com/YunoHost-Apps/mytinytodo_ynh" added_date = 1674232499 # 2023/01/20 antifeatures = [ "not-totally-free-upstream" ] category = "iot" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/n8n_ynh" @@ -2733,7 +2733,7 @@ added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "office" deprecated_date = 1708403676 # 2024/02/20 -level = 7 +level = 6 state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/opennote_ynh" @@ -2824,7 +2824,7 @@ url = "https://github.com/YunoHost-Apps/owncast_ynh" [owncast-emojiwall] added_date = 1696593645 # 2023/10/06 category = "small_utilities" -level = 7 +level = 6 state = "working" url = "https://github.com/YunoHost-Apps/owncast-emojiwall_ynh" @@ -2891,7 +2891,7 @@ url = "https://github.com/YunoHost-Apps/peertube_ynh" added_date = 1674232499 # 2023/01/20 antifeatures = [ "not-totally-free-upstream" ] category = "social_media" -level = 7 +level = 8 state = "working" subtags = [ "videos" ] url = "https://github.com/YunoHost-Apps/peertube-search-index_ynh" @@ -3245,7 +3245,7 @@ url = "https://github.com/YunoHost-Apps/pufferpanel_ynh" [pydio] added_date = 1674232499 # 2023/01/20 category = "synchronization" -level = 8 +level = 6 potential_alternative_to = [ "Google Drive", "Microsoft OneDrive" ] state = "working" subtags = [ "files" ] @@ -3697,7 +3697,7 @@ url = "https://github.com/YunoHost-Apps/snappymail_ynh" [snipeit] added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" -level = 6 +level = 8 state = "working" subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/snipeit_ynh" @@ -4186,7 +4186,7 @@ url = "https://github.com/labriqueinternet/vpnclient_ynh" [wallabag2] added_date = 1674232499 # 2023/01/20 category = "reading" -level = 8 +level = 6 state = "working" url = "https://github.com/YunoHost-Apps/wallabag2_ynh" From 93ee7a0d6d8a6b70c20fdeffdc62703350547826 Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Sat, 20 Jul 2024 22:42:19 +0200 Subject: [PATCH 14/29] Translated readme-generator using Weblate (Indonesian) (#2476) Currently translated at 100.0% (39 of 39 strings) Translation: YunoHost/readme-generator Translate-URL: https://translate.yunohost.org/projects/yunohost/readme-generator/id/ Co-authored-by: cjdw --- .../translations/id/LC_MESSAGES/messages.mo | Bin 3084 -> 5763 bytes .../translations/id/LC_MESSAGES/messages.po | 38 ++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/tools/readme_generator/translations/id/LC_MESSAGES/messages.mo b/tools/readme_generator/translations/id/LC_MESSAGES/messages.mo index fa1a986265546f7a946164a71bc1d84c2e2d7e92..8dadfcf4d8d381ad5c41007582ea7e002bca46ba 100644 GIT binary patch literal 5763 zcmcJTTZ|-C8OM);0^=R;qIf`-opGnTA%Jcg7Mx{fm(iKo&CaX{E15psb*B4l*Nr+= z+e}Q9#3!E(VB)?KOiXw%(S&ECiN-e#Z}LWb@Y#e!AN+l%s=8;_T_Xl6)BW$NI`y6J z^8YS1Z{2z8ONwKe&zJdp{{u=r0$%+fUmW=@O5FoK4;}-53VsxP1AGnqJ@_Foy;Z4? zgC+Pi@Wa*a#K+*rsJCx$5>Vd1^N$@;q!LNe90q+Cf1V0A;6BPM(EGhL7 za25O{coKXO+yn>UAHi>cCs-u=4#A7yi=f#3Cin^PZBShI5AZ5_z5|LsUSc!BH$b*j ze+6F${|1WxUPg$>xyqNw|0O8?`vdqQ_%>+412!qaKY?9v4P{>ebMORsJI)jTJ zIqv5}ID$VVc8F4%PkW&1{1BbRJ~>2Rv041x9uh0DTR7bw;(yTv%7sJpk^B(*#3x_=r9C@j+z;EdviRI~>AA;hk_9D&WLrljpG;nbKwHergiC;`KpR=x3@ldn)s# zT8koW^k8fA$&H=eje$OJu?;KAiPgCoP0iSL)mmD*18d5vuwFfx<%hbQIIj_|hZcEO z&$43b(y`7`?aEbMc{vdomyTcbwq9P^B#%vLk3Y9ODa+jVd%dwMC)Kb!%937cXHT>% zf~u$N3x)^m{$V<~e|{&MrM5WL>c66gRavqrf3n-zAWs)I&(yk2vOeEeY@Fq`&@MgT zqVuEJxWpD-_q0p$tSC)dhMPqa{G`^iQI*)V3}@P;5%PRi6(fw_h+G+*Gb4I|R6e&Oci={K%r=4N)st){C(RAm+f|#j8}tp+Cn(t}z|zvzOLxNQ}2H_)u za;V1^>XSc_9vgzKGi zd!(|q(7Too$D*#Si3qA!uj-j4Fw`KDKB_6ScJ};M=b;6MX0us$oK_(@si!ve z*7wXfk2?=_ALy1ZlqBf60~qT}tZ_1IZ__<+qkrTsfuGr-$I(Zwl8?oIJaWYrSDc-x z^Pvt0)}-RPRUuYU%7ud>OX>(U)l!|WGs254xTU~d#J8}|S0tKPEv~*aC^D{@Tk-9ELbX_su}PuZMP7tRrKQyj zt8riLj)+d`Cs2qYbfYvovc#+1iOX}sjXykz)>nI&FsOIyCQ;qB$QH5;`{3XEoi`}3 zV5TO2vY8JYWc#*|+{h~ZeC0+{=q^pg(|!0!;V|=ltf2u`cGVtnqLE0ft`F6`=;cK= zvbZI7Q%N~f_SMCs2^R82S|MDcD{*(xmFrfaCpM-v`fHiDp#9C8lHYG0T~SXrt-mRD zZ4uJD(jEFLE7bWSyG&>7Y(|~$HX+oTDfQfXN7630kE|@!H0f;nv5PvVtFiCwWqrML z{#@sRz2YSJopmZ;Uq7?4cA>Lt*x(L*x22DoTW8^JA2fl{!w-2m9=aH+3vM|sIBq6_G(jCJM+5Q zb5U=xLtndSX?t^fV`2P*-3OMQ%%n}A?qQBSrG267F&(+|QOc4jye&^%+&j}bxmYLK z9N40>krG%^x35nQUAc5Vt_l-(&SXX6`#R0TsXz7Lqx43(bLxRdm%i6ITlWs}$7KMzek-87zJr=gkQ zIT;P7Fw(WN;_{`~k+F<3v0)0T9g`X-KcaWa{bhVky22II(cVpvf z?KxXIBX1FbSz%s0#PtLyjF7CsKi5u3{siMJ!<>8zeQ8O>rld9Nl-s=(gn`r3CiNsiRW$*kF$i+aSco;MpV zEUJtYkUD@7E}gwJ< z53el$&%AlG2-PDeZ)Az0CD&(XL;q!o)&<=KmX5*jJ~UCU|803SVemDf^JDrk^}>=}5nmYBl85kBpYyb(6X~ ee{Yt5j~tmqo60zq2}7O5G*Z1SqBZ$Qru< delta 639 zcmY+>IZFdk5Ww+?M$O@wOTqiXTg#LlD1zVtqF|+q1PsLWS}ThP3b9BbJj5n;f`vyD z5F3xe(nhcnwDu#2Ao!mZ3kPO@Z_k-GyVsYkNxz4@M?zGSb>s`#NM=182w#CnDf;mY zV_1ZD*ou!>iyyd#-a?T9bZ{L{u^Xdakq{1HJ5bEBLigORe|Qz_;5xS^voH-)!m-#ePm z6~#TFNh@hP3EQ%l6HQx=\n" "Language-Team: Indonesian \n" @@ -64,10 +64,12 @@ msgid "" "Edit the `change_url` and `config` scripts too, or remove them if you have " "no use of them" msgstr "" +"Juga edit skrip `change_url` dan `config`, atau singkirkan mereka bila Anda " +"sudah tidak memerlukannya" #: templates/README.md.j2:9 msgid "Add a `LICENSE` file for the package." -msgstr "" +msgstr "Tambah berkas `LICENSE` pada paket." #: templates/README.md.j2:10 msgid "" @@ -76,18 +78,26 @@ msgid "" "published with and you can choose it freely! (If you don't know which to " "choose, we recommend [the AGPL-3](https://www.gnu.org/licenses/agpl-3.0.txt))" msgstr "" +"NB: berkas `LICENSE` ini tidak dimaksudkan untuk selalu sama dengan aplikasi " +"hulu - hanya LICENSE yang Anda inginkan untuk menerbitkan kode paket ini dan " +"Anda bisa bebas memilihnya! (Bila Anda tidak tahu mana yang harus dipilih, " +"kami sarankan [the AGPL-3](https://www.gnu.org/licenses/agpl-3.0.txt))" #: templates/README.md.j2:11 msgid "" "Edit files under the `doc/` directory ([see the page about documenting " "packages](https://yunohost.org/packaging_app_doc))" msgstr "" +"Edit berkas di bawah direktori `doc/` ([lihat halaman mengenai " +"mendokumentasikan paket](https://yunohost.org/packaging_app_doc))" #: templates/README.md.j2:12 msgid "" "The `README.md` files are to be automatically generated by " msgstr "" +"Berkas `README.md` akan dibuat secara otomatis oleh " #: templates/README.md.j2:18 msgid "" @@ -95,19 +105,22 @@ msgid "" "YunoHost/apps/tree/master/tools/readme_generator>\n" "It shall NOT be edited by hand." msgstr "" +"N.B.: README ini dibuat secara otomatis oleh \n" +"Ini TIDAK boleh diedit dengan tangan." #: templates/README.md.j2:22 #, python-format msgid "%(application_name)s for YunoHost" -msgstr "" +msgstr "%(application_name)s untuk YunoHost" #: templates/README.md.j2:24 msgid "Integration level" -msgstr "" +msgstr "Tingkat integrasi" #: templates/README.md.j2:24 msgid "Working status" -msgstr "" +msgstr "Status kerja" #: templates/README.md.j2:24 msgid "Maintenance status" @@ -187,19 +200,19 @@ msgstr "Dokumentasi admin resmi:" #: templates/README.md.j2:74 msgid "Upstream app code repository:" -msgstr "" +msgstr "Repositori kode aplikasi hulu:" #: templates/README.md.j2:76 msgid "YunoHost Store:" -msgstr "" +msgstr "Gudang YunoHost:" #: templates/README.md.j2:77 msgid "Report a bug:" -msgstr "" +msgstr "Laporkan bug:" #: templates/README.md.j2:79 msgid "Developer info" -msgstr "" +msgstr "Info developer" #: templates/README.md.j2:81 #, python-format @@ -207,15 +220,16 @@ msgid "" "Please send your pull request to the [`testing` branch]" "(%(testing_branch_url)s)." msgstr "" +"Silakan kirim pull request ke [`testing` branch](%(testing_branch_url)s)." #: templates/README.md.j2:83 msgid "To try the `testing` branch, please proceed like that:" -msgstr "" +msgstr "Untuk mencoba branch `testing`, silakan dilanjutkan seperti:" #: templates/README.md.j2:87 msgid "or" -msgstr "" +msgstr "atau" #: templates/README.md.j2:91 msgid "More info regarding app packaging:" -msgstr "" +msgstr "Info lebih lanjut mengenai pemaketan aplikasi:" From b5ff450c010cc2ea34b8cda48c0799860d684a5b Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Sat, 20 Jul 2024 22:42:33 +0200 Subject: [PATCH 15/29] Translated using Weblate (Indonesian) for appstore (#2477) Currently translated at 1.2% (2 of 154 strings) Translation: YunoHost/store Translate-URL: https://translate.yunohost.org/projects/yunohost/apps/id/ Co-authored-by: cjdw --- store/translations/id/LC_MESSAGES/messages.mo | Bin 445 -> 673 bytes store/translations/id/LC_MESSAGES/messages.po | 12 +++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/store/translations/id/LC_MESSAGES/messages.mo b/store/translations/id/LC_MESSAGES/messages.mo index 85157e8299a13abf71130bc72ef6ae01ecae4300..54bb490f68e6eccd9ba50252ba960a82280883d2 100644 GIT binary patch literal 673 zcmY+B&u$Yj5XP5(mpyXgz+n(VYJ{AnP^4;ZU$a!US3L`CzCa*Zo_L8;~kc({4~lnU)A_uJzEMZ#U5Dz^g=y0UBybatcbN1J4sIax&gj Gjs5@>@yV3{ delta 287 zcmY+8%}T>S6onhAn=HHTVo-PO4R?l+#URq3M2Vy(B%%A!jA5i^WReQ5`Uoz956}nk zJzV)9uAJ=jz=3F4x*Ieqq&{m?Gc77Gx|wBbP!jtm8Mm? z;Uvq`+h|>qZIl;rdgtcyMVk&bZLKO;?dujw%}KOb#>rwChIv#JZkCp?Hd1uzS~n1i zPIAJK`G5g1N~q5%ogqWCB;@i{4ORa*HgFhl3}#3X`-$V9aiS_W5ly`pwS-cN=OH1N uNwU}}Pn-Ix|8eI1(ecOo?y>)J&ZjrBk;c~BPv1CMiF>&t%%i@C?&ufdze+R! diff --git a/store/translations/id/LC_MESSAGES/messages.po b/store/translations/id/LC_MESSAGES/messages.po index 38544ec5..789da0e5 100644 --- a/store/translations/id/LC_MESSAGES/messages.po +++ b/store/translations/id/LC_MESSAGES/messages.po @@ -8,24 +8,26 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-06-21 14:11+0200\n" -"PO-Revision-Date: 2024-02-21 06:06+0100\n" -"Last-Translator: FULL NAME \n" -"Language-Team: id \n" +"PO-Revision-Date: 2024-07-16 13:54+0000\n" +"Last-Translator: cjdw \n" +"Language-Team: Indonesian \n" "Language: id\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.4.3\n" "Generated-By: Babel 2.14.0\n" #: app.py:179 #, python-format msgid "App %(app_id)s not found" -msgstr "" +msgstr "Aplikasi %(app_id)s tidak ditemukan" #: app.py:182 msgid "You must be logged in to be able to star an app" -msgstr "" +msgstr "Anda harus masuk untuk dapat memberi bintang pada aplikasi" #: app.py:184 app.py:229 app.py:634 templates/wishlist_add.html:33 msgid "" From 7f0ff709c58a5e78c35b8b90053686c703132218 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 20 Jul 2024 22:45:08 +0200 Subject: [PATCH 16/29] Add qrcode to catalog (#2406) * Update apps.toml * Create qrcode.png * Update apps.toml --- apps.toml | 5 +++++ logos/qrcode.png | Bin 0 -> 2950 bytes 2 files changed, 5 insertions(+) create mode 100644 logos/qrcode.png diff --git a/apps.toml b/apps.toml index 37c7aff8..9c5d5b79 100644 --- a/apps.toml +++ b/apps.toml @@ -3291,6 +3291,11 @@ level = 8 state = "working" url = "https://code.antopie.org/miraty/qr_ynh" +[qrcode] +category = "small_utilities" +state = "notworking" +url = "https://github.com/YunoHost-Apps/qrcode_ynh" + [question2answer] added_date = 1674232499 # 2023/01/20 category = "communication" diff --git a/logos/qrcode.png b/logos/qrcode.png new file mode 100644 index 0000000000000000000000000000000000000000..278acd63ddf65b8732e74a0226664baedbac544d GIT binary patch literal 2950 zcmai03p`Y5A3hRAr5hn(8ka(5%!ryXldlj{rZg0$q+t#wb2H~)SR=VqDybA(ZX3G^ zg|yaXa*2?wC>06CYSETUS(ir3cZQa(-*7~Y^g$n}PO$Y>ni7#R0hxqB=W|S=9A=s1=XR6F4HJ4I*Jvqs@3hoWiI)CIXp$0a2{1 z90WWs78}7Jn(Y=8#m34UM=&=x#$%>s5aWnQEXym%ngJs$ya|52v5C1c4)26BCz_fP zO$bINc%sR4#-`ZFeqb_S#{c6>s~SZ@BB)fN9Seeaf}p9c=~8zD{ia*fO*U()#!;v# zr-=+tY2L|bzJSN{_XL?!%R=O)QHbXS2QmcUW^cq~GJ3O@7YlJH2<0HHUKAdMM>giP zTQebnJ|H6Z{l#HFP7N#FcK^hwZ4*I3DS&thp8dTjM zdA7Jfn>QfVE8fj@K3DYib$EH$-aqLEXuW2!KG!9;$IPrQ>|8M3EXb;}sMOqs&qs&olYXj`iyE*e)4S8^qVb0=UX2RhpZA-B#j^5^k`w2D zj$aX<&}En*2~3*dK%82 z-)G}>-hcfb%4yx&uq#2CT5)QsWPP3Ll9tJG(UY$99D%=h-d`z;x(XJvTOAD5YHH6g z&Yil{t$;B-|KZK*lcmx7ulUr<`m{$5WglPB9(BUFH^fPY{&H{D(!!dqL4o3ZhEMt7 znqLGBp(BK#um?v%o|wJqvno&GxlPR3dC@_qom0_|+BVNmF1rtvkaXW^NwI8k z_-;cX0SHj$<Mbtvb4@x*LG! zGDTM&dTn+F`m2s@g6&v2!V294U@I`x$k{!zqT=ZfcWh*pIwxXY#XfVtAp7+1Rf6kb z6ii1|LB9%7tIlSQlE(P;+a(re^YRY1N2eN?h4VTm^Bd}@vEI!svigJw%e|Xyvzs)9 znYZWfU*Xc@v@Z%;EVkpu{N+YfvG zswix}(w%H_u|7Bq+ zPDDBGdOJ;HOhS)qt(mMIduQ$Wx=br#f^tXs{%c>Bs#}v>h*`=Hl3ItO&omt>hHq|( zkkA#2%Cd$Fl=&KvlcK9kp{Z?@Elq{L7do4LcG237k>^qGBhbox?LEKjX*2A|zG$hU z-@(b;m1NOzu5n?ULFK#KgbhXWfgBlj$cPlxmp(Ve-7T%8S;oZ=irrXO?J6$WcfJgjcXeW?RS^p12X|%;Z%;}y zb*(SfQx-T@XBb-DX?}n!jy8lIG6GA(>T|NQ1Fqj96#CaM0wy9~aD1(uAHdy_mSwep zV}FLfNM0W|Ea`rv_aWuwTKE3vCo@wor5=glK+Ci4ddG>E(3kbJ9VhQ0IHoGpb9DGnBtB`hAhk9+o4lhY-!38A!2h<9105b}gt{PVj zkvZU&r(Jxtb9`mhNUz+7?bv1A9Ll6pl4p30fnH{@W~9$xWS(3Vqx^uJhRZddx(!yxvK5NxY=#yi4`(Y9j#)~d{}=CuyLJEo literal 0 HcmV?d00001 From 14d50de7657c6d3e81e89d221fa623baf36a5f5e Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 20 Jul 2024 20:45:23 +0000 Subject: [PATCH 17/29] Automatically add dates to the catalog files --- apps.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/apps.toml b/apps.toml index 9c5d5b79..4bbde43c 100644 --- a/apps.toml +++ b/apps.toml @@ -3292,6 +3292,7 @@ state = "working" url = "https://code.antopie.org/miraty/qr_ynh" [qrcode] +added_date = 1721508308 # 2024/07/20 category = "small_utilities" state = "notworking" url = "https://github.com/YunoHost-Apps/qrcode_ynh" From ca7802d32eed00a5181e79a98c21bb040eba02f6 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 21 Jul 2024 08:21:15 +0200 Subject: [PATCH 18/29] Update apps.toml (#2480) --- apps.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.toml b/apps.toml index 4bbde43c..5da54233 100644 --- a/apps.toml +++ b/apps.toml @@ -3294,7 +3294,7 @@ url = "https://code.antopie.org/miraty/qr_ynh" [qrcode] added_date = 1721508308 # 2024/07/20 category = "small_utilities" -state = "notworking" +state = "working" url = "https://github.com/YunoHost-Apps/qrcode_ynh" [question2answer] From 9da5444526c47b79b63dafaadf7a134f3e486f80 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:39:57 +0200 Subject: [PATCH 19/29] Rename app qrcode (#2481) * rename to dynamic qr code * rename --- apps.toml | 4 ++-- logos/{qrcode.png => dynamicqrcode.png} | Bin 2 files changed, 2 insertions(+), 2 deletions(-) rename logos/{qrcode.png => dynamicqrcode.png} (100%) diff --git a/apps.toml b/apps.toml index 5da54233..7636e6d3 100644 --- a/apps.toml +++ b/apps.toml @@ -3291,11 +3291,11 @@ level = 8 state = "working" url = "https://code.antopie.org/miraty/qr_ynh" -[qrcode] +[dynamicqrcode] added_date = 1721508308 # 2024/07/20 category = "small_utilities" state = "working" -url = "https://github.com/YunoHost-Apps/qrcode_ynh" +url = "https://github.com/YunoHost-Apps/dynamic-qr-code_ynh_ynh" [question2answer] added_date = 1674232499 # 2023/01/20 diff --git a/logos/qrcode.png b/logos/dynamicqrcode.png similarity index 100% rename from logos/qrcode.png rename to logos/dynamicqrcode.png From e784b5fd08b64dfb605246bdc7b2107e687261d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 18:41:22 +0200 Subject: [PATCH 20/29] Bump certifi from 2024.2.2 to 2024.7.4 in /store (#2457) Bumps [certifi](https://github.com/certifi/python-certifi) from 2024.2.2 to 2024.7.4. - [Commits](https://github.com/certifi/python-certifi/compare/2024.02.02...2024.07.04) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- store/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/store/requirements.txt b/store/requirements.txt index fe17545c..e0701193 100644 --- a/store/requirements.txt +++ b/store/requirements.txt @@ -1,6 +1,6 @@ Babel==2.14.0 blinker==1.8.1 -certifi==2024.2.2 +certifi==2024.7.4 cffi==1.16.0 charset-normalizer==3.3.2 click==8.1.7 From 19e58a73c9205a060bd2e8cb0b0797efd3251708 Mon Sep 17 00:00:00 2001 From: Kayou Date: Mon, 22 Jul 2024 09:26:05 +0200 Subject: [PATCH 21/29] fix dynamic qr code url --- apps.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.toml b/apps.toml index 7636e6d3..fe7f7193 100644 --- a/apps.toml +++ b/apps.toml @@ -3295,7 +3295,7 @@ url = "https://code.antopie.org/miraty/qr_ynh" added_date = 1721508308 # 2024/07/20 category = "small_utilities" state = "working" -url = "https://github.com/YunoHost-Apps/dynamic-qr-code_ynh_ynh" +url = "https://github.com/YunoHost-Apps/dynamic-qr-code_ynh" [question2answer] added_date = 1674232499 # 2023/01/20 From fc845b1fb482d83b960368f4457cf1c081bb8543 Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Thu, 25 Jul 2024 08:56:44 +0200 Subject: [PATCH 22/29] Translated using Weblate (Indonesian) for appstore (#2484) --- store/translations/id/LC_MESSAGES/messages.mo | Bin 673 -> 6254 bytes store/translations/id/LC_MESSAGES/messages.po | 72 +++++++++++++----- 2 files changed, 51 insertions(+), 21 deletions(-) diff --git a/store/translations/id/LC_MESSAGES/messages.mo b/store/translations/id/LC_MESSAGES/messages.mo index 54bb490f68e6eccd9ba50252ba960a82280883d2..29610c8f76ebec2110bdd8889e65c9d172519f96 100644 GIT binary patch literal 6254 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 delta 122 zcmaE7u#h$3o)F7a1|VPtVi_Pd0b*7l_5orLNC099AWj5geITv^;^~YG46A^&G7vj4 rF)&yG=`6lMTYV6%V}7)<73k(wOAZLm3-XCdQcHGb*Img3d`DF_Y2 diff --git a/store/translations/id/LC_MESSAGES/messages.po b/store/translations/id/LC_MESSAGES/messages.po index 789da0e5..d2ddeaca 100644 --- a/store/translations/id/LC_MESSAGES/messages.po +++ b/store/translations/id/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-06-21 14:11+0200\n" -"PO-Revision-Date: 2024-07-16 13:54+0000\n" +"PO-Revision-Date: 2024-07-25 05:59+0000\n" "Last-Translator: cjdw \n" "Language-Team: Indonesian \n" @@ -37,70 +37,82 @@ msgid "" "least 5 topics, reading at least 30 posts, and spending at least 10 minutes " "reading posts." msgstr "" +"Perhatikan bahwa, karena berbagai penyalahgunaan, kami membatasi login di " +"toko aplikasi hanya untuk pengguna 'trust level 1'.

'Trust level 1' " +"dapat diperoleh setelah berinteraksi minimal dengan forum, dan lebih khusus " +"lagi: memasuki minimal 5 topik, membaca minimal 30 postingan, dan " +"menghabiskan minimal 10 menit membaca postingan." #: app.py:227 msgid "You must be logged in to submit an app to the wishlist" -msgstr "" +msgstr "Anda harus masuk untuk mengajukan aplikasi ke dalam daftar keinginan" #: app.py:242 msgid "Invalid CSRF token, please refresh the page and try again" -msgstr "" +msgstr "Token CSRF tidak valid, silakan memuat ulang halaman dan coba lagi" #: app.py:280 msgid "" "Proposing wishlist additions is limited to once every 15 days per user. " "Please try again in a few days." msgstr "" +"Pengajuan penambahan daftar keinginan dibatasi setiap 15 hari sekali per " +"pengguna. Silakan mencoba lagi dalam beberapa hari." #: app.py:284 msgid "App name should be at least 3 characters" -msgstr "" +msgstr "Nama aplikasi minimal harus 3 karakter" #: app.py:285 msgid "App name should be less than 30 characters" -msgstr "" +msgstr "Nama aplikasi harus kurang dari 30 karakter" #: app.py:288 msgid "App description should be at least 5 characters" -msgstr "" +msgstr "Deskripsi aplikasi minimal harus 5 karakter" #: app.py:292 msgid "App description should be less than 100 characters" -msgstr "" +msgstr "Deskripsi aplikasi harus kurang dari 100 karakter" #: app.py:296 msgid "Upstream code repo URL should be at least 10 characters" -msgstr "" +msgstr "URL depot kode hulu minimal harus 10 karakter" #: app.py:300 msgid "Upstream code repo URL should be less than 150 characters" -msgstr "" +msgstr "URL depot kode hulu harus kurang dari 150 karakter" #: app.py:304 msgid "License URL should be at least 10 characters" -msgstr "" +msgstr "URL lisensi minimal harus 10 karakter" #: app.py:308 msgid "License URL should be less than 250 characters" -msgstr "" +msgstr "URL lisensi harus kurang dari 250 karakter" #: app.py:310 msgid "Website URL should be less than 150 characters" -msgstr "" +msgstr "URL situs web harus kurang dari 150 karakter" #: app.py:313 msgid "App name contains special characters" -msgstr "" +msgstr "Nama aplikasi berisi karakter khusus" #: app.py:320 msgid "" "Please focus on what the app does, without using marketing, fuzzy terms, or " "repeating that the app is 'free' and 'self-hostable'." msgstr "" +"Harap fokus pada apa yang dilakukan aplikasi, tanpa menggunakan pemasaran, " +"istilah yang tidak jelas, atau mengulangi bahwa aplikasi tersebut 'gratis' " +"dan 'dapat dihosting sendiri'." #: app.py:330 msgid "No need to repeat the name of the app. Focus on what the app does." msgstr "" +"Tidak perlu mengulang nama aplikasinya. Fokus pada apa yang dilakukan " +"aplikasi." #: app.py:360 #, python-format @@ -108,6 +120,9 @@ msgid "" "An entry with the name %(slug)s already exists in the wishlist, instead, you " "can add a star to the app to show your interest." msgstr "" +"Entri dengan nama %(slug)s sudah ada di dalam daftar keinginan, sebagai " +"gantinya, Anda dapat menambahkan bintang pada aplikasi " +"untuk menunjukkan minat Anda." #: app.py:375 #, python-format @@ -115,6 +130,8 @@ msgid "" "An app with the name %(slug)s already exists in the catalog, you can see its page here." msgstr "" +"Aplikasi dengan nama %(slug)s sudah ada di dalam katalog, Anda dapat melihat halamannya di sini." #: app.py:400 #, python-format @@ -123,6 +140,9 @@ msgid "" "there's already a waiting PR for this app? Else, " "please report the issue to the YunoHost team." msgstr "" +"Gagal membuat permintaan penarikan untuk menambahkan aplikasi ke dalam " +"daftar keinginan… Mungkin sudah ada PR yang menunggu untuk " +"aplikasi ini? Jika tidak, silakan melaporkan isu ini kepada tim YunoHost." #: app.py:450 #, python-format @@ -131,15 +151,18 @@ msgid "" "by the YunoHost team. You can track progress here: " "%(url)s" msgstr "" +"Aplikasi yang Anda usulkan telah berhasil dikirimkan. Seharusnya sekarang " +"sedang divalidasi oleh tim YunoHost. Anda dapat melacak kemajuannya di sini: " +"%(url)s" #: app.py:632 msgid "Unfortunately, login was denied." -msgstr "" +msgstr "Sayangnya, login ditolak." #: templates/app.html:10 templates/catalog.html:23 #, python-format msgid "Logo for %(app)s" -msgstr "" +msgstr "Logo untuk %(app)s" #: templates/app.html:30 templates/app.html:31 templates/catalog.html:41 #: templates/catalog.html:42 @@ -147,6 +170,8 @@ msgid "" "This app is currently flagged as broken because it failed our automatic " "tests." msgstr "" +"Aplikasi ini sekarang ditandai sebagai rusak karena gagal dalam pengujian " +"otomatis kami." #: templates/app.html:30 templates/app.html:31 templates/catalog.html:41 #: templates/catalog.html:42 templates/catalog.html:172 @@ -154,6 +179,8 @@ msgid "" "This is usually a temporary situation which requires packagers to fix " "something in the app." msgstr "" +"Biasanya ini hanya situasi sementara yang mengharuskan pembuat paket " +"memperbaiki sesuatu di dalam aplikasinya." #: templates/app.html:37 templates/app.html:38 templates/catalog.html:46 #: templates/catalog.html:47 @@ -161,39 +188,42 @@ msgid "" "This app has been good quality according to our automatic tests over at " "least one year." msgstr "" +"Aplikasi ini memiliki kualitas yang baik menurut pengujian otomatis kami " +"setidaknya selama setahun." #: templates/app.html:81 msgid "Try the demo" -msgstr "" +msgstr "Coba demonstrasinya" #: templates/app.html:82 msgid "Demo" -msgstr "" +msgstr "Demonstrasi" #: templates/app.html:85 msgid "Install with YunoHost" -msgstr "" +msgstr "Instal dengan YunoHost" #: templates/app.html:93 #, python-format msgid "Current version: %(version)s" -msgstr "" +msgstr "Versi saat ini: %(version)s" #: templates/app.html:95 #, python-format msgid "Potential alternative to: %(alternatives)s" -msgstr "" +msgstr "Berpotensi alternatif dari: %(alternatives)s" #: templates/app.html:101 #, python-format msgid "Screenshot for %(app)s" -msgstr "" +msgstr "Tangkapan layar pada %(app)s" #: templates/app.html:106 #, python-format msgid "" "This app is only compatible with these specific architectures: %(archs)s" msgstr "" +"Aplikasi ini hanya kompatibel dengan arsitektur khusus berikut ini: %(archs)s" #: templates/app.html:112 #, python-format From a41644bfa0af2d4bfb8ca866c5f21ae7258e9757 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:40:02 +0200 Subject: [PATCH 23/29] Add potential alternative to (#2485) --- apps.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.toml b/apps.toml index fe7f7193..0f1daa2c 100644 --- a/apps.toml +++ b/apps.toml @@ -1266,7 +1266,7 @@ url = "https://github.com/YunoHost-Apps/funkwhale_ynh" added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 -potential_alternative_to = [ "Skype", "Zoom" ] +potential_alternative_to = [ "Skype", "Zoom", "BigBlueButton" ] state = "working" subtags = [ "meeting" ] url = "https://github.com/YunoHost-Apps/galene_ynh" From 2b3a5d353b65c4cc0727d9a2e41061fd9a49f0ee Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Fri, 26 Jul 2024 16:40:24 +0000 Subject: [PATCH 24/29] Automatically add dates to the catalog files --- apps.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.toml b/apps.toml index 0f1daa2c..863ab106 100644 --- a/apps.toml +++ b/apps.toml @@ -1266,7 +1266,7 @@ url = "https://github.com/YunoHost-Apps/funkwhale_ynh" added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 -potential_alternative_to = [ "Skype", "Zoom", "BigBlueButton" ] +potential_alternative_to = [ "BigBlueButton", "Skype", "Zoom" ] state = "working" subtags = [ "meeting" ] url = "https://github.com/YunoHost-Apps/galene_ynh" From 730703b73d39f4deecd3f0c871bdd810ae5ab604 Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Sat, 27 Jul 2024 10:47:43 +0200 Subject: [PATCH 25/29] Translated using Weblate (Indonesian) for appstore (#2490) Currently translated at 67.5% (104 of 154 strings) Translation: YunoHost/store Translate-URL: https://translate.yunohost.org/projects/yunohost/apps/id/ Co-authored-by: cjdw --- store/translations/id/LC_MESSAGES/messages.mo | Bin 6254 -> 13789 bytes store/translations/id/LC_MESSAGES/messages.po | 157 +++++++++++------- 2 files changed, 94 insertions(+), 63 deletions(-) diff --git a/store/translations/id/LC_MESSAGES/messages.mo b/store/translations/id/LC_MESSAGES/messages.mo index 29610c8f76ebec2110bdd8889e65c9d172519f96..bce631955023c92e777b9812d8e18bb61f2d1d44 100644 GIT binary patch literal 13789 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 delta 1010 zcmYk)TS${(7{KvodC0>wPc?Hc=QeFR=UkIQ=|Cb8q{X0vBnay?(%goJGDw#YSVBcT z*nuDkufnccQeC7HU3C%N1a(m$iV#s9 z=A@U?8%-iUY+J{JmX#*bi`l4n0ZTDAJ@uUnw-Fyk7mlGDpI|M1Kx1CX5Md}boJ9w2 z6p70MgC<`5!8-J3iqvBl7T|Sk!H4K$a|<|1T$q(wKru`_i<_`ITjUt-!h<-0`*8_7 z(VHV;#%pM2eYwM62QQwZv5}u>Y@jALb;1tZPJ9&~;2hp%Bc050p7>Xu$W!djPi4`z zLBvD67ya0aE}X<_eDm-3Z)jzGv2aZ0lmIT`9yCtkEKHre8LNngu@bUK)3Wb0ixTNoJHQA!YRSbmKnT=ti^Bjf`XpGqLI9sVRpfg4yXNJ&_aF zirfrc$%$#J*`XumIqlC2syDwYFKRy%?Xy?8L$O#*zs?uzOYAPJH)&V#75!dZr~Z=D z`l`gDH!Q#Pb!mq#mrd$zt54rryLG7iej;YOXG%mWJSLs8k7`ThkUny_b\n" "Language-Team: Indonesian \n" @@ -229,100 +229,102 @@ msgstr "" #, python-format msgid "This app requires an unusual amount of RAM to install: %(ram)s" msgstr "" +"Aplikasi ini membutuhkan jumlah RAM yang tidak biasa agar bisa dipasang: " +"%(ram)s" #: templates/app.html:118 msgid "Important infos before installing" -msgstr "" +msgstr "Informasi penting sebelum memasang" #: templates/app.html:124 msgid "Antifeatures" -msgstr "" +msgstr "Antifitur" #: templates/app.html:125 msgid "(This app has features you may not like)" -msgstr "" +msgstr "(Aplikasi ini memiliki fitur yang mungkin tidak Anda sukai)" #: templates/app.html:136 msgid "Useful links" -msgstr "" +msgstr "Tautan yang bermanfaat" #: templates/app.html:139 #, python-format msgid "App license: %(license)s" -msgstr "" +msgstr "Lisensi aplikasi: %(license)s" #: templates/app.html:140 msgid " Official website" -msgstr "" +msgstr " Situs web resmi" #: templates/app.html:141 msgid "Official admin documentation" -msgstr "" +msgstr "Dokumentasi admin resmi" #: templates/app.html:142 msgid "Official user documentation" -msgstr "" +msgstr "Dokumentasi Pengguna Resmi" #: templates/app.html:143 msgid "Official code repository" -msgstr "" +msgstr "Depot kode resmi" #: templates/app.html:144 msgid "YunoHost package repository" -msgstr "" +msgstr "Depot paket YunoHost" #: templates/app.html:145 msgid "YunoHost package license" -msgstr "" +msgstr "Lisensi paket YunoHost" #: templates/base.html:11 msgid "YunoHost app store" -msgstr "" +msgstr "Toko aplikasi Yunohost" #: templates/base.html:31 templates/base.html:163 templates/index.html:3 msgid "Home" -msgstr "" +msgstr "Rumah" #: templates/base.html:40 templates/base.html:172 templates/dash.html:83 msgid "Catalog" -msgstr "" +msgstr "Katalog" #: templates/base.html:46 templates/base.html:181 msgid "Wishlist" -msgstr "" +msgstr "Daftar Keinginan" #: templates/base.html:52 msgid "Packaging dashboard" -msgstr "" +msgstr "Dasbor paket" #: templates/base.html:57 msgid "Charts & history" -msgstr "" +msgstr "Grafik & rIwayat" #: templates/base.html:71 templates/base.html:191 msgid "YunoHost documentation" -msgstr "" +msgstr "Dokumentasi YunoHost" #: templates/base.html:79 templates/base.html:80 msgid "Toggle light/dark mode" -msgstr "" +msgstr "Beralih ke mode terang/gelap" #: templates/base.html:88 templates/base.html:201 msgid "Login using YunoHost's forum" -msgstr "" +msgstr "Masuk melalui forum YunoHost" #: templates/base.html:120 templates/base.html:129 templates/base.html:229 #: templates/base.html:238 msgid "Packaging boards" -msgstr "" +msgstr "Papan pengemasan" #: templates/base.html:136 templates/base.html:246 msgid "Logout" -msgstr "" +msgstr "Keluar" #: templates/base.html:149 msgid "Toggle menu" -msgstr "" +msgstr "Beralih menu" #: templates/base.html:264 msgid "" @@ -331,84 +333,88 @@ msgid "" "palletsprojects.com'>Flask and TailwindCSS" msgstr "" +"Dibuat dengan " +"menggunakan Flask dan TailwindCSS" #: templates/base.html:265 msgid "Source" -msgstr "" +msgstr "Sumber" #: templates/base.html:266 msgid "Terms of Services" -msgstr "" +msgstr "Ketentuan Layanan" #: templates/catalog.html:77 templates/catalog.html:82 msgid "Application Catalog" -msgstr "" +msgstr "Katalog Aplikasi" #: templates/catalog.html:88 templates/wishlist.html:16 msgid "Search" -msgstr "" +msgstr "Cari" #: templates/catalog.html:93 templates/wishlist.html:21 msgid "Search for…" -msgstr "" +msgstr "Mencari…" #: templates/catalog.html:109 msgid "All apps" -msgstr "" +msgstr "Semua aplikasi" #: templates/catalog.html:119 templates/dash.html:36 templates/wishlist.html:39 msgid "Sort by" -msgstr "" +msgstr "Sortir dengan" #: templates/catalog.html:125 templates/wishlist.html:45 #: templates/wishlist.html:78 msgid "Popularity" -msgstr "" +msgstr "Popularitas" #: templates/catalog.html:126 msgid "Newest" -msgstr "" +msgstr "Terbaru" #: templates/catalog.html:127 templates/dash.html:42 templates/wishlist.html:46 msgid "Alphabetical" -msgstr "" +msgstr "Alfabetis" #: templates/catalog.html:130 templates/dash.html:64 templates/wishlist.html:49 msgid "Requires to be logged-in" -msgstr "" +msgstr "Harus masuk terlebih dahulu" #: templates/catalog.html:132 templates/catalog.html:141 templates/dash.html:66 #: templates/dash.html:75 templates/wishlist.html:51 templates/wishlist.html:60 msgid "Show only apps you starred" -msgstr "" +msgstr "Hanya menampilkan aplikasi yang Anda bintangi" #: templates/catalog.html:157 templates/wishlist.html:154 msgid "No results found." -msgstr "" +msgstr "Tidak ada hasil yang ditemukan." #: templates/catalog.html:160 msgid "Not finding what you are looking for?" -msgstr "" +msgstr "Tidak menemukan apa yang Anda cari?" #: templates/catalog.html:161 msgid "Checkout the wishlist!" -msgstr "" +msgstr "Lihatlah daftar keinginan!" #: templates/catalog.html:168 msgid "Applications currently flagged as broken" -msgstr "" +msgstr "Saat ini aplikasi ditandai sebagai rusak" #: templates/catalog.html:171 msgid "These are apps which failed our automatic tests." -msgstr "" +msgstr "Ini adalah aplikasi yang gagal dalam pengujian otomatis kami." #: templates/catalog.html:186 msgid "Deprecated applications" -msgstr "" +msgstr "Aplikasi yang kedaluwarsa" #: templates/catalog.html:189 msgid "These are apps who are not maintained anymore." -msgstr "" +msgstr "Ini adalah aplikasi yang tidak terawat." #: templates/catalog.html:190 msgid "" @@ -418,15 +424,15 @@ msgstr "" #: templates/charts.html:5 msgid "Apps quality level from automatic tests" -msgstr "" +msgstr "Tingkat kualitas aplikasi dari pengujian otomatis" #: templates/charts.html:9 msgid "Apps quality level history" -msgstr "" +msgstr "Riwayat tingkat kualitas aplikasi" #: templates/charts.html:15 msgid "History" -msgstr "" +msgstr "Riwayat" #: templates/charts.html:27 msgid "Added" @@ -450,53 +456,53 @@ msgstr "" #: templates/charts.html:94 msgid "Level 0" -msgstr "" +msgstr "Tingkat 0" #: templates/charts.html:95 msgid "Level 1" -msgstr "" +msgstr "Tingkat 1" #: templates/charts.html:96 msgid "Level 2" -msgstr "" +msgstr "Tingkat 2" #: templates/charts.html:97 msgid "Level 3" -msgstr "" +msgstr "Tingkat 3" #: templates/charts.html:98 msgid "Level 4" -msgstr "" +msgstr "Tingkat 4" #: templates/charts.html:99 msgid "Level 5" -msgstr "" +msgstr "Tingkat 5" #: templates/charts.html:100 msgid "Level 6" -msgstr "" +msgstr "Tingkat 6" #: templates/charts.html:101 msgid "Level 7" -msgstr "" +msgstr "Tingkat 7" #: templates/charts.html:102 msgid "Level 8" -msgstr "" +msgstr "Tingkat 8" #: templates/charts.html:122 #, python-format msgid "Level %(level)s:" -msgstr "" +msgstr "Tingkat %(level)s:" #: templates/charts.html:122 msgid "Total:" -msgstr "" +msgstr "Jumlah:" #: templates/charts.html:123 #, python-format msgid "Level %(level)s" -msgstr "" +msgstr "Tingkat %(level)s" #: templates/dash.html:3 templates/dash.html:9 msgid "App packaging dashboard" @@ -511,10 +517,17 @@ msgid "" "documentation and come say hi to us on the app packaging chatroom!" msgstr "" +"Di sini adalah tempat para pengemas dapat memantau status pengujian otomatis " +"(CI) dan permintaan penarikan umum yang sedang berlangsung di semua " +"aplikasi. Jika Anda ingin memulai pengemasan aplikasi di YunoHost, silakan " +"periksa dokumentasi pengemasan dan sapa kami di ruang obrolan pengemasan " +"aplikasi!" #: templates/dash.html:18 msgid "Filter" -msgstr "" +msgstr "Filter" #: templates/dash.html:24 msgid "(None)" @@ -554,7 +567,7 @@ msgstr "" #: templates/dash.html:43 msgid "Quality level" -msgstr "" +msgstr "Tingkat kualitas" #: templates/dash.html:44 templates/dash.html:214 msgid "Popularity stars" @@ -654,6 +667,8 @@ msgstr "" #: templates/wishlist_add.html:29 msgid "You must first login to be allowed to submit an app to the wishlist" msgstr "" +"pertama-tama Anda harus masuk terlebih dahulu agar dapat mengajukan aplikasi " +"ke dalam daftar keinginan" #: templates/wishlist_add.html:40 msgid "Due to abuses, only one proposal every 15 days per user is allowed." @@ -684,10 +699,15 @@ msgid "" "marketing stuff like 'the most', or vague properties like 'easy', 'simple', " "'lightweight'." msgstr "" +"Tidak perlu mengulangi kata-kata '[Aplikasi] adalah …'. Tidak perlu " +"menyatakan bahwa aplikasi tersebut gratis/sumber-terbuka atau di-hosting " +"sendiri (jika tidak, aplikasi itu tidak akan dikemas di YunoHost). Hindari " +"promosi seperti 'paling', atau properti yang tidak jelas seperti 'mudah', " +"'sederhana', 'ringan'." #: templates/wishlist_add.html:68 msgid "Project code repository" -msgstr "" +msgstr "Depot kode proyek" #: templates/wishlist_add.html:71 msgid "Link to the project's LICENSE" @@ -698,6 +718,9 @@ msgid "" "The YunoHost project will only package free/open-source software (with " "possible case-by-case exceptions for apps which are not-totally-free)" msgstr "" +"Proyek YunoHost hanya akan mengemas perangkat lunak gratis/sumber-terbuka (" +"dengan kemungkinan pengecualian kasus per kasus pada aplikasi yang tidak " +"sepenuhnya gratis)" #: templates/wishlist_add.html:75 msgid "Project website" @@ -708,6 +731,8 @@ msgid "" "Please *do not* just copy-paste the code repository URL. If the project has " "no proper website, then leave the field empty." msgstr "" +"Harap *jangan* hanya menyalin-tempel URL depot kode. Jika proyek tidak " +"memiliki situs web yang tepat, biarkan kolom tersebut kosong." #: templates/wishlist_add.html:84 msgid "Submit" @@ -715,7 +740,7 @@ msgstr "" #: templates/wishlist.html:3 templates/wishlist.html:8 msgid "Application Wishlist" -msgstr "" +msgstr "Daftar Keinginan Aplikasi" #: templates/wishlist.html:10 msgid "" @@ -726,6 +751,12 @@ msgid "" "to integrate it, and is merely a source of inspiration for packaging " "volunteers." msgstr "" +"Daftar keinginan adalah tempat orang-orang dapat secara kolektif menyarankan " +"dan memilih agar aplikasi-aplikasi tersebut dikemas dan disediakan dalam " +"katalog aplikasi resmi YunoHost. Namun, fakta bahwa aplikasi yang tercantum " +"di sini tidak dapat diartikan sebagai fakta bahwa proyek YunoHost berencana " +"untuk mengintegrasikannya, dan hanya menjadi sumber inspirasi bagi para " +"relawan pengemasan." #: templates/wishlist.html:74 msgid "Description" @@ -737,7 +768,7 @@ msgstr "" #: templates/wishlist.html:115 templates/wishlist.html:116 msgid "Code repository" -msgstr "" +msgstr "Depot kode" #: templates/wishlist.html:129 templates/wishlist.html:130 msgid "Star this app" From cd3157107010bac1e828261822fbab28403453a5 Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Sat, 27 Jul 2024 10:48:05 +0200 Subject: [PATCH 26/29] Translated readme-generator using Weblate (Indonesian) (#2489) Currently translated at 100.0% (39 of 39 strings) Translation: YunoHost/readme-generator Translate-URL: https://translate.yunohost.org/projects/yunohost/readme-generator/id/ Co-authored-by: cjdw --- .../translations/id/LC_MESSAGES/messages.mo | Bin 5763 -> 5758 bytes .../translations/id/LC_MESSAGES/messages.po | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/readme_generator/translations/id/LC_MESSAGES/messages.mo b/tools/readme_generator/translations/id/LC_MESSAGES/messages.mo index 8dadfcf4d8d381ad5c41007582ea7e002bca46ba..b840eaf3e187bca632cc4b6548ba596355108433 100644 GIT binary patch delta 60 zcmZqH{im~`gh^GBfq~(*C<8+%kY*KQVBi7L(Lh=NNM`_P79d@@c_vekFsn;yL4L{P HucCbbOf?J^ delta 65 zcmeyT)2zFpgh^G7fq~(*C<8+%kmeF&VBi7L2|!u^Naq4+79d@>c_vekFjr7&L4I*& MNq$l0\n" "Language-Team: Indonesian \n" @@ -200,7 +200,7 @@ msgstr "Dokumentasi admin resmi:" #: templates/README.md.j2:74 msgid "Upstream app code repository:" -msgstr "Repositori kode aplikasi hulu:" +msgstr "Depot kode aplikasi hulu:" #: templates/README.md.j2:76 msgid "YunoHost Store:" From 11de55591aec689e38deb0200771de7720ca2e18 Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Sat, 27 Jul 2024 18:14:17 +0200 Subject: [PATCH 27/29] Update app levels according to CI results (#2487) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update app levels according to CI results * :art: Format TOML with Taplo (#2488) Co-authored-by: yunohost-bot <14998418+yunohost-bot@users.noreply.github.com> * Update apps.toml * Update apps.toml * Update apps.toml * Update apps.toml * Revert "Update apps.toml" This reverts commit 76085a140574542620f1461fe8843bb8ee0a5261. * Update apps.toml * Update apps.toml * Update apps.toml --------- Co-authored-by: root Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: yunohost-bot <14998418+yunohost-bot@users.noreply.github.com> Co-authored-by: Éric Gaspar <46165813+ericgaspar@users.noreply.github.com> --- apps.toml | 63 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/apps.toml b/apps.toml index 863ab106..7d9c2369 100644 --- a/apps.toml +++ b/apps.toml @@ -43,7 +43,7 @@ added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "social_media" deprecated_date = 1717071136 # 2024/05/30 -level = 0 +level = 6 state = "working" subtags = [ "microblogging", "pictures" ] url = "https://github.com/YunoHost-Apps/acropolis_ynh" @@ -132,7 +132,7 @@ url = "https://github.com/YunoHost-Apps/alltube_ynh" [ampache] added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 6 +level = 8 potential_alternative_to = [ "Deezer", "SoundCloud", "Spotify" ] state = "working" subtags = [ "music" ] @@ -368,7 +368,7 @@ url = "https://github.com/YunoHost-Apps/calibreweb_ynh" [castopod] added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 6 +level = 8 potential_alternative_to = [ "Anchor", "Apple Podcasts", "Audible", "Deezer", "SoundCloud", "Spotify" ] state = "working" url = "https://github.com/YunoHost-Apps/castopod_ynh" @@ -407,7 +407,7 @@ url = "https://github.com/YunoHost-Apps/cheky_ynh" [chitchatter] added_date = 1674232499 # 2023/01/20 category = "communication" -level = 8 +level = 6 state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/chitchatter_ynh" @@ -443,7 +443,7 @@ url = "https://github.com/YunoHost-Apps/chyrplite_ynh" [cinny] added_date = 1674232499 # 2023/01/20 category = "communication" -level = 8 +level = 1 potential_alternative_to = [ "Discord", "Facebook Messenger", "Signal", "Skype", "Telegram", "Whatsapp" ] state = "working" subtags = [ "chat" ] @@ -570,7 +570,7 @@ url = "https://github.com/YunoHost-Apps/cops_ynh" [coturn] added_date = 1674232499 # 2023/01/20 category = "system_tools" -level = 6 +level = 8 state = "working" subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/coturn_ynh" @@ -715,7 +715,7 @@ url = "https://github.com/YunoHost-Apps/diagramsnet_ynh" [diaspora] added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 0 +level = 8 potential_alternative_to = [ "Ello", "Facebook", "Hubzilla", "Myspace", "X" ] state = "working" subtags = [ "microblogging" ] @@ -851,7 +851,7 @@ url = "https://github.com/YunoHost-Apps/dolibarr_ynh" [domoticz] added_date = 1674232499 # 2023/01/20 category = "iot" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/domoticz_ynh" @@ -859,7 +859,7 @@ url = "https://github.com/YunoHost-Apps/domoticz_ynh" added_date = 1674232499 # 2023/01/20 branch = "main" category = "dev" -level = 0 +level = 8 state = "working" subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/dont-code_ynh" @@ -905,6 +905,13 @@ level = 8 state = "working" url = "https://github.com/YunoHost-Apps/duniter_ynh" +[dynamicqrcode] +added_date = 1721508308 # 2024/07/20 +category = "small_utilities" +level = 7 +state = "working" +url = "https://github.com/YunoHost-Apps/dynamic-qr-code_ynh" + [easyappointments] added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" @@ -977,7 +984,7 @@ url = "https://github.com/YunoHost-Apps/emailpoubelle_ynh" [emoncms] added_date = 1674232499 # 2023/01/20 category = "iot" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/emoncms_ynh" @@ -1324,7 +1331,7 @@ url = "https://github.com/YunoHost-Apps/getsimple_ynh" added_date = 1674232499 # 2023/01/20 antifeatures = [ "arbitrary-limitations" ] category = "publishing" -level = 6 +level = 8 state = "working" subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/ghost_ynh" @@ -1675,7 +1682,7 @@ url = "https://github.com/YunoHost-Apps/immich_ynh" [incus] added_date = 1710508401 # 2024/03/15 category = "system_tools" -level = 6 +level = 7 state = "working" url = "https://github.com/YunoHost-Apps/incus_ynh" @@ -1909,7 +1916,7 @@ url = "https://github.com/YunoHost-Apps/kodi_ynh" [koel] added_date = 1694978602 # 2023/09/17 category = "multimedia" -level = 7 +level = 8 potential_alternative_to = [ "Airsonic", "Deezer", "SoundCloud", "Spotify" ] state = "working" subtags = [ "music" ] @@ -2226,7 +2233,7 @@ url = "https://github.com/YunoHost-Apps/matomo_ynh" [matrix-appservice-irc] added_date = 1675621561 # 2023/02/05 category = "communication" -level = 6 +level = 8 state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/matrix-appservice-irc_ynh" @@ -2280,7 +2287,7 @@ url = "https://github.com/YunoHost-Apps/mautrix_facebook_ynh" [mautrix_signal] added_date = 1674232499 # 2023/01/20 category = "communication" -level = 6 +level = 7 potential_alternative_to = [ "Signal" ] state = "working" subtags = [ "chat" ] @@ -2298,7 +2305,7 @@ url = "https://github.com/YunoHost-Apps/mautrix_telegram_ynh" [mautrix_whatsapp] added_date = 1674232499 # 2023/01/20 category = "communication" -level = 8 +level = 6 potential_alternative_to = [ "Whatsapp" ] state = "working" subtags = [ "chat" ] @@ -2339,7 +2346,7 @@ url = "https://github.com/YunoHost-Apps/microbin_ynh" [microblogpub] added_date = 1717921017 # 2024/06/09 category = "social_media" -level = 6 +level = 7 state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/microblogpub_ynh" @@ -2696,7 +2703,7 @@ url = "https://github.com/YunoHost-Apps/olivetin_ynh" [ombi] added_date = 1696432145 # 2023/10/04 category = "multimedia" -level = 7 +level = 6 potential_alternative_to = [ "Netflix", "Plex" ] state = "working" subtags = [ "mediacenter" ] @@ -2824,7 +2831,7 @@ url = "https://github.com/YunoHost-Apps/owncast_ynh" [owncast-emojiwall] added_date = 1696593645 # 2023/10/06 category = "small_utilities" -level = 6 +level = 7 state = "working" url = "https://github.com/YunoHost-Apps/owncast-emojiwall_ynh" @@ -2840,7 +2847,7 @@ url = "https://github.com/YunoHost-Apps/owncloud_ynh" [owntracks] added_date = 1674232499 # 2023/01/20 category = "small_utilities" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/owntracks_ynh" @@ -2881,7 +2888,7 @@ url = "https://github.com/YunoHost-Apps/paperless-ngx_ynh" [peertube] added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 6 +level = 8 potential_alternative_to = [ "Dailymotion", "Twitch", "Vimeo", "YouTube" ] state = "working" subtags = [ "videos" ] @@ -3207,7 +3214,7 @@ url = "https://github.com/YunoHost-Apps/prometheus_ynh" [prosody] added_date = 1674232499 # 2023/01/20 category = "communication" -level = 8 +level = 0 state = "working" url = "https://github.com/YunoHost-Apps/prosody_ynh" @@ -3245,7 +3252,7 @@ url = "https://github.com/YunoHost-Apps/pufferpanel_ynh" [pydio] added_date = 1674232499 # 2023/01/20 category = "synchronization" -level = 6 +level = 8 potential_alternative_to = [ "Google Drive", "Microsoft OneDrive" ] state = "working" subtags = [ "files" ] @@ -3291,12 +3298,6 @@ level = 8 state = "working" url = "https://code.antopie.org/miraty/qr_ynh" -[dynamicqrcode] -added_date = 1721508308 # 2024/07/20 -category = "small_utilities" -state = "working" -url = "https://github.com/YunoHost-Apps/dynamic-qr-code_ynh" - [question2answer] added_date = 1674232499 # 2023/01/20 category = "communication" @@ -4176,7 +4177,7 @@ url = "https://github.com/YunoHost-Apps/vikunja_ynh" [vore] added_date = 1690540859 # 2023/07/28 category = "reading" -level = 7 +level = 8 state = "working" subtags = [ "rssreader" ] url = "https://github.com/YunoHost-Apps/vore_ynh" @@ -4192,7 +4193,7 @@ url = "https://github.com/labriqueinternet/vpnclient_ynh" [wallabag2] added_date = 1674232499 # 2023/01/20 category = "reading" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/wallabag2_ynh" From 62d7512d5fbd9199f765d5382f585255b124c232 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:18:55 +0200 Subject: [PATCH 28/29] Fix dynamicqrcode repo name ... (#2491) --- apps.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.toml b/apps.toml index 7d9c2369..e5126b36 100644 --- a/apps.toml +++ b/apps.toml @@ -910,7 +910,7 @@ added_date = 1721508308 # 2024/07/20 category = "small_utilities" level = 7 state = "working" -url = "https://github.com/YunoHost-Apps/dynamic-qr-code_ynh" +url = "https://github.com/YunoHost-Apps/dynamicqrcode_ynh" [easyappointments] added_date = 1674232499 # 2023/01/20 From 37001077c1969291776291b5df04d7c42e15a613 Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Sun, 28 Jul 2024 15:16:01 +0200 Subject: [PATCH 29/29] Translated using Weblate (Indonesian) for appstore (#2492) Currently translated at 100.0% (154 of 154 strings) Translation: YunoHost/store Translate-URL: https://translate.yunohost.org/projects/yunohost/apps/id/ Co-authored-by: cjdw --- store/translations/id/LC_MESSAGES/messages.mo | Bin 13789 -> 17455 bytes store/translations/id/LC_MESSAGES/messages.po | 103 ++++++++++-------- 2 files changed, 55 insertions(+), 48 deletions(-) diff --git a/store/translations/id/LC_MESSAGES/messages.mo b/store/translations/id/LC_MESSAGES/messages.mo index bce631955023c92e777b9812d8e18bb61f2d1d44..ad231b6d8236183dfc4c655840a410f66a08e965 100644 GIT binary patch delta 6204 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 RnZOFS&m7#bZ05b^{RhCuIrsno delta 2595 zcmZA2d2Cfh6vy$ov}G;bUKhII10Iw@=|W2@Wo<2p6pBC#l)bx^0!pD8FuV{UDWaG# zf;xtwaXV7-5V~eAJsCwSLCLgM%Z{hkbD(M&mSGjq}jr7vA~m{>BXAxDNAh zBaX!*-udeoFeYgJprZ$;4=`pFR-g~pVj{kZy1o~)@C>Hm9qfaV%pwk>F&Q&47K>0X zRDqFLhbh>Mr*Sj(W_&YgVE925s2gYD5S)ui*pB0IJLXqfK@D)4j+VR|H{wm)g3CEccFZrR)Z9faVKRAX!Cd4e%^p;) z51~@fg_`gW-t}wfrVQPbv8=itoy7WU#y(EGj>B;iGd_;_9Op7xF0R0ZxD%`JH=Kdv z74g@v$DtaV6@8ZK#2Fp{o51 z=Ha(kjF0gtEMQ&t;Ra;UOnhc|-~ehxCLp((YJ8iCy?|QrzE5xsQ-gF!r>Q}9j%maW zT!Y8)mUn)y-AH>mk4h!%;@=OyL;%+BXjw3j3LEX0#HQ-5PQOrfuZn}l~`(Vt_ zaJ5fG<)$9>2hSs`WHzB{U=Qj|4xpB_3-!PYcoT1;miQZHspnk6DEtw*WPV1~#y?n& z$!va7A2hXev~;UbE3nzK({q>Se$T_6pLm}1{L1qZs`{^@iuP|*^=ETZ<4i|Qv=)<` zpfM}yXvQ6^TdBhYa1O_xWf{Zjn|`bplQ!8{!}Zxn{h9Z(!z*5QK?vfW3Udj{oX{q(YvVK zbO;aQ3Ea+vmvQqXj&D=ZyptJDB{$$~3@)N`jLvNApKr{wxCqzahj@|)45Csrkt<`v zZ*~v0Vt*l@1QS&lu7y<8#0rs1rVf?!w~)D*qZo%*u@vtVlK%=ifg--k*os=J%cwux zHZJ@>U_a{kn0I_0nU_0hFoX3&<2~H=G`|D9eh)m-eYt166WZ=^`u?j;4CDUt((dx; zAeLaVrjAewdRkwv(})2=TdA06BJ?6^Lx`1xz5}guA3!-!lm9d9}na?pI7HR7)Vpj9EcYYi?r`m}vyX?>6nES|XaL(*9@nxnC?*COgY5 zH07Gj;1-PvYB@2Bm`nV>sgPz8s{Ew?T&$tLj2KGHA(j$RL{C%UFL9GcNB;xV7VF19 zr@6Vcp|!5f|58(Zd+YipTQG2RsD5CU6M7>i#<5?=X4;3b8*D^;o81^6W3R@aw_hgY z*%)7y?e?9sp~RxlgT!bjG$y&j2^~)fI(BpF2zxeli|t73w6W\n" "Language-Team: Indonesian \n" @@ -421,6 +421,9 @@ msgid "" "This means that the developer will no longer update them. We strongly advise " "against their installation and advise users to find alternatives." msgstr "" +"Artinya pengembang tidak akan memperbaruinya lagi. Kami sangat menyarankan " +"agar tidak memasangnya dan menyarankan pengguna untuk mencari alternatif " +"lain." #: templates/charts.html:5 msgid "Apps quality level from automatic tests" @@ -436,23 +439,23 @@ msgstr "Riwayat" #: templates/charts.html:27 msgid "Added" -msgstr "" +msgstr "Ditambahkan" #: templates/charts.html:33 msgid "Repaired" -msgstr "" +msgstr "Diperbaiki" #: templates/charts.html:39 msgid "Broke" -msgstr "" +msgstr "Rusak" #: templates/charts.html:45 msgid "Removed" -msgstr "" +msgstr "Disingkirkan" #: templates/charts.html:93 msgid "Unknown" -msgstr "" +msgstr "Tidak diketahui" #: templates/charts.html:94 msgid "Level 0" @@ -506,7 +509,7 @@ msgstr "Tingkat %(level)s" #: templates/dash.html:3 templates/dash.html:9 msgid "App packaging dashboard" -msgstr "" +msgstr "Dasbor pengemasan aplikasi" #: templates/dash.html:11 msgid "" @@ -531,39 +534,39 @@ msgstr "Filter" #: templates/dash.html:24 msgid "(None)" -msgstr "" +msgstr "(Kosong)" #: templates/dash.html:25 msgid "Regressions on main CI" -msgstr "" +msgstr "Regresi pada CI utama" #: templates/dash.html:26 msgid "Broken / low quality apps" -msgstr "" +msgstr "Aplikasi rusak / kualitas rendah" #: templates/dash.html:27 msgid "Outdated tests on main CI" -msgstr "" +msgstr "Tes pada CI utama kedaluwarsa" #: templates/dash.html:28 msgid "Major regressions on Bookworm CI" -msgstr "" +msgstr "Regresi besar pada CI Bookworm" #: templates/dash.html:29 msgid "Apps with testings PRs" -msgstr "" +msgstr "Aplikasi dengan pengujian pada PR" #: templates/dash.html:30 msgid "Apps with autoupdate PRs" -msgstr "" +msgstr "Aplikasi dengan pembaruan otomatis pada PR" #: templates/dash.html:31 msgid "Apps with issues" -msgstr "" +msgstr "Aplikasi disertai dengan isu" #: templates/dash.html:32 msgid "Packaging v1 apps" -msgstr "" +msgstr "Mengemas aplikasi v1" #: templates/dash.html:43 msgid "Quality level" @@ -571,98 +574,98 @@ msgstr "Tingkat kualitas" #: templates/dash.html:44 templates/dash.html:214 msgid "Popularity stars" -msgstr "" +msgstr "Bintang popularitas" #: templates/dash.html:45 msgid "Last update on main/master branch" -msgstr "" +msgstr "Pembaruan terakhir pada cabang main/master" #: templates/dash.html:46 msgid "Last update on testing branch" -msgstr "" +msgstr "Pembaruan terakhir pada cabang testing" #: templates/dash.html:47 msgid "Issues number" -msgstr "" +msgstr "nomor isu" #: templates/dash.html:53 templates/dash.html:62 msgid "Hide deprecated/unmaintained apps" -msgstr "" +msgstr "Sembunyikan aplikasi kedaluwarsa/tidak dirawat" #: templates/dash.html:82 msgid "App" -msgstr "" +msgstr "Aplikasi" #: templates/dash.html:84 msgid "Main CI" -msgstr "" +msgstr "CI utama" #: templates/dash.html:85 msgid "Bookworm CI" -msgstr "" +msgstr "CI bookworm" #: templates/dash.html:86 msgid "Testing PR" -msgstr "" +msgstr "PR testing" #: templates/dash.html:87 msgid "Autoupdate PR" -msgstr "" +msgstr "PR autoupdate" #: templates/dash.html:88 msgid "Issues" -msgstr "" +msgstr "Isu" #: templates/dash.html:128 templates/dash.html:146 templates/dash.html:165 msgid "Broken" -msgstr "" +msgstr "Rusak" #: templates/dash.html:130 templates/dash.html:148 templates/dash.html:167 msgid "Low quality" -msgstr "" +msgstr "Kualitas rendah" #: templates/dash.html:142 templates/dash.html:161 #, python-format msgid "Outdated test (%(days)s days ago)" -msgstr "" +msgstr "Tes kedaluwarsa (%(days)s hari lalu)" #: templates/dash.html:184 templates/dash.html:199 #, python-format msgid "Inactive (%(days)s days ago)" -msgstr "" +msgstr "Tidak aktif (%(days)s hari lalu)" #: templates/dash.html:218 msgid "Packaging v1" -msgstr "" +msgstr "Kemasan v1" #: templates/dash.html:221 msgid "Deprecated" -msgstr "" +msgstr "Kedaluwarsa" #: templates/dash.html:224 msgid "Not maintained" -msgstr "" +msgstr "Tidak dirawat" #: templates/dash.html:238 #, python-format msgid "Last data update %(time)s ago" -msgstr "" +msgstr "Pembaruan data terakhir %(time)s yang lalu" #: templates/index.html:10 msgid "Application Store" -msgstr "" +msgstr "Toko Aplikasi" #: templates/index.html:21 msgid "Browse all applications" -msgstr "" +msgstr "Telusuri semua aplikasi" #: templates/wishlist.html:33 templates/wishlist_add.html:3 msgid "Suggest an app" -msgstr "" +msgstr "Sarankan sebuah aplikasi" #: templates/wishlist_add.html:8 msgid "Suggest an application to be added to YunoHost's catalog" -msgstr "" +msgstr "Sarankan sebuah aplikasi agar ditambahkan ke katalog YunoHost" #: templates/wishlist_add.html:29 msgid "You must first login to be allowed to submit an app to the wishlist" @@ -673,24 +676,28 @@ msgstr "" #: templates/wishlist_add.html:40 msgid "Due to abuses, only one proposal every 15 days per user is allowed." msgstr "" +"Karena penyalahgunaan, hanya satu proposal setiap 15 hari per pengguna yang " +"diizinkan." #: templates/wishlist_add.html:43 msgid "" "Reviewing those proposals is tiring for volunteers, please don't yolo-send " "every random nerdy stuff you find on the Internet." msgstr "" +"Meninjau proposal tersebut melelahkan bagi para sukarelawan, mohon jangan " +"mengirimkan hal-hal aneh yang Anda temukan di Internet secara acak." #: templates/wishlist.html:71 templates/wishlist_add.html:61 msgid "Name" -msgstr "" +msgstr "Nama" #: templates/wishlist_add.html:64 msgid "App's description" -msgstr "" +msgstr "Deskripsi aplikasi" #: templates/wishlist_add.html:66 msgid "Please be concise and focus on what the app does." -msgstr "" +msgstr "Harap lebih singkat dan fokus pada fungsi aplikasi." #: templates/wishlist_add.html:66 msgid "" @@ -711,7 +718,7 @@ msgstr "Depot kode proyek" #: templates/wishlist_add.html:71 msgid "Link to the project's LICENSE" -msgstr "" +msgstr "Tautan ke LICENSE proyek" #: templates/wishlist_add.html:73 msgid "" @@ -724,7 +731,7 @@ msgstr "" #: templates/wishlist_add.html:75 msgid "Project website" -msgstr "" +msgstr "Website proyek" #: templates/wishlist_add.html:77 msgid "" @@ -736,7 +743,7 @@ msgstr "" #: templates/wishlist_add.html:84 msgid "Submit" -msgstr "" +msgstr "Kirim" #: templates/wishlist.html:3 templates/wishlist.html:8 msgid "Application Wishlist" @@ -760,11 +767,11 @@ msgstr "" #: templates/wishlist.html:74 msgid "Description" -msgstr "" +msgstr "Deskripsi" #: templates/wishlist.html:102 templates/wishlist.html:103 msgid "Official website" -msgstr "" +msgstr "Website resmi" #: templates/wishlist.html:115 templates/wishlist.html:116 msgid "Code repository" @@ -772,4 +779,4 @@ msgstr "Depot kode" #: templates/wishlist.html:129 templates/wishlist.html:130 msgid "Star this app" -msgstr "" +msgstr "Bintangi aplikasi ini"