From f5125002b28b3c282d3c01b72fd589e8c290f9d2 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Wed, 9 Feb 2022 16:47:31 +0100 Subject: [PATCH 01/45] Apply last example_ynh (#117) * Apply last example_ynh * Cleanup backup --- .github/ISSUE_TEMPLATE.md | 55 ++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 16 ++++++ .gitignore | 2 - check_process | 16 +++--- conf/app.src | 1 + conf/nginx.conf | 7 +-- conf/php-fpm.conf | 2 +- doc/.gitkeep | 0 doc/DESCRIPTION.md | 4 ++ doc/DESCRIPTION_fr.md | 3 + doc/DISCLAIMER.md | 16 ++++++ doc/DISCLAIMER_fr.md | 14 +++++ doc/screenshots/.gitkeep | 0 doc/screenshots/screenshot1.webp | Bin 0 -> 39924 bytes manifest.json | 36 +++++------- pull_request_template.md | 24 -------- scripts/backup | 42 +++++++------- scripts/change_url | 35 +++++++++--- scripts/install | 64 +++++++++++---------- scripts/remove | 35 ++++++------ scripts/restore | 47 ++++++++------- scripts/upgrade | 95 +++++++++++++------------------ 22 files changed, 300 insertions(+), 214 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .gitignore create mode 100644 doc/.gitkeep create mode 100644 doc/DESCRIPTION.md create mode 100644 doc/DESCRIPTION_fr.md create mode 100644 doc/DISCLAIMER.md create mode 100644 doc/DISCLAIMER_fr.md create mode 100644 doc/screenshots/.gitkeep create mode 100644 doc/screenshots/screenshot1.webp delete mode 100644 pull_request_template.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..2729a6b --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,55 @@ +--- +name: Bug report +about: When creating a bug report, please use the following template to provide all the relevant information and help debugging efficiently. + +--- + +**How to post a meaningful bug report** +1. *Read this whole template first.* +2. *Determine if you are on the right place:* + - *If you were performing an action on the app from the webadmin or the CLI (install, update, backup, restore, change_url...), you are on the right place!* + - *Otherwise, the issue may be due to the app itself. Refer to its documentation or repository for help.* + - *When in doubt, post here and we will figure it out together.* +3. *Delete the italic comments as you write over them below, and remove this guide.* +--- + +### Describe the bug + +*A clear and concise description of what the bug is.* + +### Context + +- Hardware: *VPS bought online / Old laptop or computer / Raspberry Pi at home / Internet Cube with VPN / Other ARM board / ...* +- YunoHost version: x.x.x +- I have access to my server: *Through SSH | through the webadmin | direct access via keyboard / screen | ...* +- Are you in a special context or did you perform some particular tweaking on your YunoHost instance?: *no / yes* + - If yes, please explain: +- Using, or trying to install package version/branch: +- If upgrading, current package version: *can be found in the admin, or with `yunohost app info $app_id`* + +### Steps to reproduce + +- *If you performed a command from the CLI, the command itself is enough. For example:* + ```sh + sudo yunohost app install the_app + ``` +- *If you used the webadmin, please perform the equivalent command from the CLI first.* +- *If the error occurs in your browser, explain what you did:* + 1. *Go to '...'* + 2. *Click on '...'* + 3. *Scroll down to '...'* + 4. *See error* + +### Expected behavior + +*A clear and concise description of what you expected to happen. You can remove this section if the command above is enough to understand your intent.* + +### Logs + +*When an operation fails, YunoHost provides a simple way to share the logs.* +- *In the webadmin, the error message contains a link to the relevant log page. On that page, you will be able to 'Share with Yunopaste'. If you missed it, the logs of previous operations are also available under Tools > Logs.* +- *In command line, the command to share the logs is displayed at the end of the operation and looks like `yunohost log display [log name] --share`. If you missed it, you can find the log ID of a previous operation using `yunohost log list`.* + +*After sharing the log, please copypaste directly the link provided by YunoHost (to help readability, no need to copypaste the entire content of the log here, just the link is enough...)* + +*If applicable and useful, add screenshots to help explain your problem.* diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..ef70e18 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,16 @@ +## Problem + +- *Description of why you made this PR* + +## Solution + +- *And how do you fix that problem* + +## PR Status + +- [ ] Code finished and ready to be reviewed/tested +- [ ] The fix/enhancement were manually tested (if applicable) + +## Automatic tests + +Automatic tests can be triggered on https://ci-apps-dev.yunohost.org/ *after creating the PR*, by commenting "!testme", "!gogogadgetoci" or "By the power of systemd, I invoke The Great App CI to test this Pull Request!". (N.B. : for this to work you need to be a member of the Yunohost-Apps organization) diff --git a/.gitignore b/.gitignore deleted file mode 100644 index f248394..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*~ -*.sw[po] diff --git a/check_process b/check_process index 692db47..0587cd1 100644 --- a/check_process +++ b/check_process @@ -1,8 +1,8 @@ -;; Complete test +;; Test complet ; Manifest - domain="domain.tld" (DOMAIN) - path="/path" (PATH) - admin="john" (USER) + domain="domain.tld" + path="/path" + admin="john" ; Checks pkg_linter=1 setup_sub_dir=1 @@ -11,14 +11,14 @@ setup_private=0 setup_public=0 upgrade=1 - upgrade=1 from_commit=f75d58cb32c51a0981333ea88974dc3199324e65 + # 2.2.3 + upgrade=1 from_commit=f75d58cb32c51a0981333ea88974dc3199324e65 + # 2.3.8~ynh3 + upgrade=1 from_commit=2e20b8f9a6b791e059b806fcfc2253f88d1aeaf2 backup_restore=1 multi_instance=1 - incorrect_path=1 port_already_use=0 change_url=1 -;;; Levels - Level 5=auto ;;; Options Email= Notification=none diff --git a/conf/app.src b/conf/app.src index 4ab2afd..794ff5a 100644 --- a/conf/app.src +++ b/conf/app.src @@ -4,3 +4,4 @@ SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true SOURCE_FILENAME= +SOURCE_EXTRACT=true diff --git a/conf/nginx.conf b/conf/nginx.conf index dabfbf9..07d36a3 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -4,11 +4,6 @@ location __PATH__/ { # Path to source alias __FINALPATH__/web/; - # Force usage of https - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - client_body_timeout 60m; proxy_read_timeout 60m; fastcgi_read_timeout 60m; @@ -22,7 +17,7 @@ location __PATH__/ { fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param REMOTE_USER $remote_user; - fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; + fastcgi_pass unix:/var/run/php/php__PHPVERSION__-fpm-__NAME__.sock; fastcgi_intercept_errors on; } diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf index 6505dc6..9ec5826 100644 --- a/conf/php-fpm.conf +++ b/conf/php-fpm.conf @@ -33,7 +33,7 @@ group = __USER__ ; (IPv6 and IPv4-mapped) on a specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. -listen = /var/run/php/php7.0-fpm-__NAMETOCHANGE__.sock +listen = /var/run/php/php__PHPVERSION__-fpm-__NAMETOCHANGE__.sock ; Set listen(2) backlog. ; Default Value: 511 (-1 on FreeBSD and OpenBSD) diff --git a/doc/.gitkeep b/doc/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md new file mode 100644 index 0000000..f2e514a --- /dev/null +++ b/doc/DESCRIPTION.md @@ -0,0 +1,4 @@ +[Wallabag](https://www.wallabag.org/) is a self hostable Read-It-Later application allowing you to not miss any content anymore. Click, save, read it when you can. +It extracts content so that you can read it when you have time. + +It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md new file mode 100644 index 0000000..602af14 --- /dev/null +++ b/doc/DESCRIPTION_fr.md @@ -0,0 +1,3 @@ +[Wallabag](https://www.wallabag.org/) est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. + +Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..ca0778b --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,16 @@ +In addition to Wallabag core features, the following are made available with this package: + + * Integrate with YunoHost users and SSO - i.e. logout button + * Allow one user to be the administrator (set at the installation) + * Asynchronous import using Redis (need to be enabled in the *Internal Settings*). RabbitMQ import not supported (yet ?) + +## Limitations + +* Removing a Yunohost's user won't delete the related wallabag user, but only desactivate it. You need to manualy remove it from wallabag before. See: https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 + +#### Upgrade from v1 + +The upgrade from the YunoHost [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) +app requires a manual operation, that's why it's provided as a new package. +For the migration process, please refer to the +[Wallabag official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). diff --git a/doc/DISCLAIMER_fr.md b/doc/DISCLAIMER_fr.md new file mode 100644 index 0000000..b4dd166 --- /dev/null +++ b/doc/DISCLAIMER_fr.md @@ -0,0 +1,14 @@ +En plus des fonctionnalités principales de Wallabag, ce paquet propose également : + + * Une intégration avec le système de gestion des utilisateurs et le SSO de YunoHost - e.g. un bouton de déconnexion + * De permettre à un utilisateur d'être administrateur (réglage lors de l'installation) + * Un import asynchrone utilisant Redis (à activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. + +## Limitations + +* Supprimer un utilisateur YunoHost ne supprimera pas l'utilisateur Wallabag lié, il sera seulement désactivé. Vous devez le supprimer manuellement avant. Voir : https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 + +#### Mettre à niveau depuis la v1 + +La mise à niveau depuis le paquet YunoHost de [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) demande une opération manuelle, c'est pourquoi un nouveau paquet est fournit. +Pour le processus de migration, merci de vous référer à [la documentation officiel de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). diff --git a/doc/screenshots/.gitkeep b/doc/screenshots/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/screenshots/screenshot1.webp b/doc/screenshots/screenshot1.webp new file mode 100644 index 0000000000000000000000000000000000000000..e447c1dfa469b20e4c65079185e3028b12f7d28a GIT binary patch literal 39924 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 literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index af4a8cd..6065ad7 100644 --- a/manifest.json +++ b/manifest.json @@ -6,51 +6,43 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.3.8~ynh3", + "version": "2.3.8~ynh4", "url": "https://www.wallabag.org", + "upstream": { + "license": "MIT", + "website": "https://www.wallabag.org", + "demo": "https://demo.yunohost.org/wallabag/", + "admindoc": "https://doc.wallabag.org/en/", + "code": "https://github.com/wallabag/wallabag" + }, "license": "MIT", "maintainer": { - "name": "lapineige", - "email": "" + "name": "lapineige" }, "requirements": { - "yunohost": ">= 3.7.0" + "yunohost": ">= 4.3.0" }, "multi_instance": true, "services": [ "nginx", - "php5-fpm", + "php7.3-fpm", "mysql" ], "arguments": { - "install" : [ + "install": [ { "name": "domain", - "type": "domain", - "ask": { - "en": "Choose a domain for Wallabag", - "fr": "Choisissez un domaine pour Wallabag" - }, - "example": "domain.org" + "type": "domain" }, { "name": "path", "type": "path", - "ask": { - "en": "Choose a path for Wallabag", - "fr": "Choisissez un chemin pour Wallabag" - }, "example": "/wallabag", "default": "/wallabag" }, { "name": "admin", - "type": "user", - "ask": { - "en": "Choose the Wallabag administrator", - "fr": "Choisissez l'administrateur de Wallabag" - }, - "example": "homer" + "type": "user" } ] } diff --git a/pull_request_template.md b/pull_request_template.md deleted file mode 100644 index 4c09327..0000000 --- a/pull_request_template.md +++ /dev/null @@ -1,24 +0,0 @@ -## Problem -- *Description of why you made this PR* - -## Solution -- *And how you fix that* - -## PR Status -- [ ] Code finished. -- [ ] Tested with Package_check. -- [ ] Fix or enhancement tested. -- [ ] Upgrade from last version tested. -- [ ] Can be reviewed and tested. - -## Validation ---- -*Minor decision* -- **Upgrade previous version** : -- [ ] **Code review** : -- [ ] **Approval (LGTM)** : -- [ ] **Approval (LGTM)** : -- **CI succeeded** : -[![Build Status](https://ci-apps-hq.yunohost.org/jenkins/job/wallabag2_ynh%20PR-NUM-/badge/icon)](https://ci-apps-hq.yunohost.org/jenkins/job/wallabag2_ynh%20PR-NUM-/) -*Please replace '-NUM-' in this link by the PR number.* -When the PR is marked as ready to merge, you have to wait for 3 days before really merging it. diff --git a/scripts/backup b/scripts/backup index f55f3f3..7c696c7 100644 --- a/scripts/backup +++ b/scripts/backup @@ -6,6 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers @@ -19,54 +20,57 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading installation settings..." +ynh_print_info --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME final_path=$(ynh_app_setting_get --app=$app --key=final_path) domain=$(ynh_app_setting_get --app=$app --key=domain) db_name=$(ynh_app_setting_get --app=$app --key=db_name) +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= -# STANDARD BACKUP STEPS +# DECLARE DATA AND CONF FILES TO BACKUP #================================================= -# BACKUP APP MAIN DIR +ynh_print_info --message="Declaring files to be backed up..." + +#================================================= +# BACKUP THE APP MAIN DIR #================================================= # Clean cache files before backup (saved some disk space) ynh_secure_remove --file=$final_path/var/cache/prod -ynh_script_progression --message="Backing up the main app directory..." ynh_backup --src_path="$final_path" #================================================= -# BACKUP NGINX CONFIGURATION +# BACKUP THE NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Backing up nginx web server configuration..." ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= -# BACKUP PHP-FPM CONFIGURATION +# BACKUP THE PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Backing up php-fpm configuration..." -ynh_backup --src_path="/etc/php/7.0/fpm/pool.d/$app.conf" - -#================================================= -# BACKUP MYSQL DB -#================================================= -ynh_script_progression --message="Backing up the MySQL database..." - -ynh_mysql_dump_db --database="$db_name" > db.sql +ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" #================================================= # BACKUP FAIL2BAN CONFIGURATION #================================================= -ynh_backup "/etc/fail2ban/jail.d/$app.conf" -ynh_backup "/etc/fail2ban/filter.d/$app.conf" + +ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf" +ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf" + +#================================================= +# BACKUP THE MYSQL DATABASE +#================================================= +ynh_print_info --message="Backing up the MySQL database..." + +ynh_mysql_dump_db --database="$db_name" > db.sql #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --last + +ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/change_url b/scripts/change_url index 7db3313..380370a 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -32,6 +32,23 @@ db_user=$db_name db_pwd=$(ynh_app_setting_get --app=$app --key=mysqlpwd) final_path=$(ynh_app_setting_get --app=$app --key=final_path) +#================================================= +# BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. + ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" + + # Restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + #================================================= # CHECK WHICH PARTS SHOULD BE CHANGED #================================================= @@ -51,25 +68,25 @@ fi #================================================= # STANDARD MODIFICATIONS #================================================= -# MODIFY URL IN NGINX CONF FILE +# MODIFY URL IN NGINX CONF #================================================= -ynh_script_progression --message="Updating nginx web server configuration..." --weight=2 +ynh_script_progression --message="Updating NGINX web server configuration..." --weight=2 nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf -# Change the path in the nginx config file +# Change the path in the NGINX config file if [ $change_path -eq 1 ] then - # Make a backup of the original nginx config file if modified + # Make a backup of the original NGINX config file if modified ynh_backup_if_checksum_is_different --file="$nginx_conf_path" - # Set global variables for nginx helper + # Set global variables for NGINX helper domain="$old_domain" path_url="$new_path" - # Create a dedicated nginx config + # Create a dedicated NGINX config ynh_add_nginx_config fi -# Change the domain for nginx +# Change the domain for NGINX if [ $change_domain -eq 1 ] then # Delete file checksum for the old conf file location @@ -82,6 +99,8 @@ fi #================================================= # SPECIFIC MODIFICATIONS #================================================= +# UPDATE CONFIGURATION +#================================================= ynh_script_progression --message="Updating wallabag configuration..." # Configure Wallabag instance URL @@ -107,7 +126,7 @@ ynh_secure_remove --file=$final_path/var/cache #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." +ynh_script_progression --message="Reloading NGINX web server..." ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/install b/scripts/install index a94790d..fb21614 100644 --- a/scripts/install +++ b/scripts/install @@ -1,7 +1,7 @@ #!/bin/bash #================================================= -# GENERIC STARTING +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -20,21 +20,19 @@ ynh_abort_if_errors # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= -# Retrieve app id -app=$YNH_APP_INSTANCE_NAME - -# Retrieve arguments domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH admin=$YNH_APP_ARG_ADMIN +app=$YNH_APP_INSTANCE_NAME + #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= ynh_script_progression --message="Validating installation parameters..." --weight=2 final_path=/var/www/$app -test ! -e "$final_path" || ynh_die "This path already contains a folder" +test ! -e "$final_path" || ynh_die --message="This path already contains a folder" # Register (book) web path ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url @@ -42,6 +40,7 @@ ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url #================================================= # STORE SETTINGS FROM MANIFEST #================================================= +ynh_script_progression --message="Storing installation settings..." ynh_app_setting_set --app=$app --key=domain --value=$domain ynh_app_setting_set --app=$app --key=path --value=$path_url @@ -56,12 +55,20 @@ ynh_script_progression --message="Installing dependencies..." --weight=12 ynh_install_app_dependencies $pkg_dependencies +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Configuring system user..." --weight=2 + +# Create a system user +ynh_system_user_create --username=$app --home_dir="$final_path" + #================================================= # CREATE A MYSQL DATABASE #================================================= ynh_script_progression --message="Creating a MySQL database..." -db_name=$(ynh_sanitize_dbid $app) +db_name=$(ynh_sanitize_dbid --db_name=$app) db_user=$db_name ynh_app_setting_set --app=$app --key=db_name --value=$db_name ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name @@ -78,25 +85,17 @@ ynh_setup_source --dest_dir="$final_path" #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Configuring nginx web server..." --weight=2 +ynh_script_progression --message="Configuring NGINX web server..." --weight=2 -# Create a dedicated nginx config +# Create a dedicated NGINX config ynh_add_nginx_config -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Configuring system user..." --weight=2 - -# Create a system user -ynh_system_user_create --username=$app - #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Configuring php-fpm..." --weight=2 +ynh_script_progression --message="Configuring PHP-FPM..." --weight=2 -# Create a dedicated php-fpm config +# Create a dedicated PHP-FPM config ynh_add_fpm_config #================================================= @@ -145,14 +144,11 @@ $php_exec fos:user:promote --super "$admin" ynh_mysql_connect_as --user=$db_user --password="$db_pwd" --database=$db_name <<< "UPDATE craue_config_setting SET value = 'https://$domain$path_url' WHERE name = 'wallabag_url'" #================================================= -# CONFIGURE FAIL2BAN +# SETUP HOOKS #================================================= -# Create the log file is not already existing during install -mkdir -p "/var/www/$app/var/logs/" -touch "/var/www/$app/var/logs/prod.log" -chown $app: "/var/www/$app/var/logs/prod.log" -# Add fail2ban config -ynh_add_fail2ban_config --logpath="/var/www/$app/var/logs/prod.log" --failregex='app.ERROR: Authentication failure for user "([\w]+)?", from IP ""' --max_retry=5 + +ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../hooks/post_user_create" +ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../hooks/post_user_delete" #================================================= # GENERIC FINALIZATION @@ -163,23 +159,29 @@ ynh_add_fail2ban_config --logpath="/var/www/$app/var/logs/prod.log" --failregex= set_permissions #================================================= -# SETUP HOOKS +# SETUP FAIL2BAN #================================================= +ynh_script_progression --message="Configuring Fail2Ban..." -ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../hooks/post_user_create" -ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../hooks/post_user_delete" +# Create the log file is not already existing during install +mkdir -p "/var/www/$app/var/logs/" +touch "/var/www/$app/var/logs/prod.log" +chown $app: "/var/www/$app/var/logs/prod.log" + +# Create a dedicated Fail2Ban config +ynh_add_fail2ban_config --logpath="/var/www/$app/var/logs/prod.log" --failregex='app.ERROR: Authentication failure for user "([\w]+)?", from IP ""' --max_retry=5 #================================================= # SETUP SSOWAT #================================================= -ynh_script_progression --message="Configuring SSOwat..." +ynh_script_progression --message="Configuring permissions..." ynh_permission_update --permission="main" --add="visitors" #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." +ynh_script_progression --message="Reloading NGINX web server..." ynh_systemd_action --service_name=nginx --action=reload diff --git a/scripts/remove b/scripts/remove index 70f90cf..542c8a4 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,7 +1,7 @@ #!/bin/bash #================================================= -# GENERIC STARTING +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -26,23 +26,15 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # REMOVE THE MYSQL DATABASE #================================================= -ynh_script_progression --message="Removing the MySQL database" --weight=2 +ynh_script_progression --message="Removing the MySQL database..." --weight=2 # Remove a database if it exists, along with the associated user ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name -#================================================= -# REMOVE DEPENDENCIES -#================================================= -ynh_script_progression --message="Removing dependencies" --weight=9 - -# Remove metapackage and its dependencies -ynh_remove_app_dependencies - #================================================= # REMOVE APP MAIN DIR #================================================= -ynh_script_progression --message="Removing app main directory" --weight=2 +ynh_script_progression --message="Removing app main directory..." --weight=2 # Remove the app directory securely ynh_secure_remove --file="$final_path" @@ -50,22 +42,33 @@ ynh_secure_remove --file="$final_path" #================================================= # REMOVE NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Removing nginx web server configuration" +ynh_script_progression --message="Removing NGINX web server configuration..." -# Remove the dedicated nginx config +# Remove the dedicated NGINX config ynh_remove_nginx_config #================================================= # REMOVE PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Removing php-fpm configuration" +ynh_script_progression --message="Removing PHP-FPM configuration..." -# Remove the dedicated php-fpm config +# Remove the dedicated PHP-FPM config ynh_remove_fpm_config +#================================================= +# REMOVE DEPENDENCIES +#================================================= +ynh_script_progression --message="Removing dependencies..." --weight=9 + +# Remove metapackage and its dependencies +ynh_remove_app_dependencies + #================================================= # REMOVE FAIL2BAN CONFIGURATION #================================================= +ynh_script_progression --message="Removing Fail2Ban configuration..." + +# Remove the dedicated Fail2Ban config ynh_remove_fail2ban_config #================================================= @@ -73,7 +76,7 @@ ynh_remove_fail2ban_config #================================================= # REMOVE DEDICATED USER #================================================= -ynh_script_progression --message="Removing the dedicated system user" +ynh_script_progression --message="Removing the dedicated system user..." # Delete a system user ynh_system_user_delete --username=$app diff --git a/scripts/restore b/scripts/restore index 1654db7..17a42dc 100644 --- a/scripts/restore +++ b/scripts/restore @@ -6,6 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers @@ -19,7 +20,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading settings..." --weight=2 +ynh_script_progression --message="Loading installation settings..." --weight=2 app=$YNH_APP_INSTANCE_NAME @@ -28,14 +29,13 @@ path_url=$(ynh_app_setting_get --app=$app --key=path) final_path=$(ynh_app_setting_get --app=$app --key=final_path) db_name=$(ynh_app_setting_get --app=$app --key=db_name) db_user=$db_name +phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= ynh_script_progression --message="Validating restoration parameters..." -ynh_webpath_available --domain=$domain --path_url=$path_url \ - || ynh_die --message="Path not available: ${domain}${path_url}" test ! -d $final_path \ || ynh_die --message="There is already a directory: $final_path " @@ -44,23 +44,24 @@ test ! -d $final_path \ #================================================= # RESTORE THE NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Restoring the NGINX web server configuration..." ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" -#================================================= -# RESTORE THE APP MAIN DIR -#================================================= -ynh_script_progression --message="Restoring the app main directory..." - -ynh_restore_file --origin_path="$final_path" - #================================================= # RECREATE THE DEDICATED USER #================================================= ynh_script_progression --message="Recreating the dedicated system user..." --weight=2 # Create the dedicated user (if not existing) -ynh_system_user_create --username=$app +ynh_system_user_create --username=$app --home_dir="$final_path" + +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= +ynh_script_progression --message="Restoring the app main directory..." + +ynh_restore_file --origin_path="$final_path" #================================================= # RESTORE USER RIGHTS @@ -73,8 +74,18 @@ set_permissions #================================================= # RESTORE THE PHP-FPM CONFIGURATION #================================================= +ynh_script_progression --message="Restoring the PHP-FPM configuration..." -ynh_restore_file --origin_path="/etc/php/7.0/fpm/pool.d/$app.conf" +ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" + +#================================================= +# RESTORE FAIL2BAN CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the Fail2Ban configuration..." + +ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf" +ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf" +ynh_systemd_action --action=restart --service_name=fail2ban #================================================= # SPECIFIC RESTORATION @@ -86,14 +97,6 @@ ynh_script_progression --message="Reinstalling dependencies..." --weight=15 # Define and install dependencies ynh_install_app_dependencies $pkg_dependencies -#================================================= -# RESTORE FAIL2BAN CONFIGURATION -#================================================= -ynh_restore_file "/etc/fail2ban/jail.d/$app.conf" -ynh_restore_file "/etc/fail2ban/filter.d/$app.conf" - -ynh_systemd_action --action=reload --service_name=fail2ban # Reload instead of restart for better performance - #================================================= # RESTORE THE MYSQL DATABASE #================================================= @@ -108,9 +111,9 @@ ynh_mysql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./ #================================================= # RELOAD NGINX AND PHP-FPM #================================================= -ynh_script_progression --message="Reloading nginx web server and php-fpm..." +ynh_script_progression --message="Reloading NGINX web server and PHP-FPM..." -ynh_systemd_action --service_name=php7.0-fpm --action=reload +ynh_systemd_action --service_name=php$phpversion-fpm --action=reload ynh_systemd_action --service_name=nginx --action=reload #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 94bc0d9..cc9f1b8 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -28,14 +28,38 @@ deskey=$(ynh_app_setting_get --app=$app --key=deskey) #================================================= # CHECK VERSION #================================================= +ynh_script_progression --message="Checking version..." upgrade_type=$(ynh_check_app_version_changed) +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=30 + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # Restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# STANDARD UPGRADE STEPS #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= ynh_script_progression --message="Ensuring downward compatibility..." +# Cleaning legacy permissions +if ynh_legacy_permissions_exists; then + ynh_legacy_permissions_delete_all + + ynh_app_setting_delete --app=$app --key=is_public +fi + # If db_name doesn't exist, create it if [ -z "$db_name" ]; then db_name=$(ynh_sanitize_dbid --db_name=$app) @@ -55,37 +79,13 @@ if [ -z "$path_url" ]; then fi #================================================= -# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +# CREATE DEDICATED USER #================================================= -ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=30 +ynh_script_progression --message="Making sure dedicated system user exists..." -# Backup the current version of the app -ynh_backup_before_upgrade -ynh_clean_setup () { - # restore it if the upgrade fails - ynh_restore_upgradebackup -} -# Exit if an error occurs during the execution of the script -ynh_abort_if_errors +# Create a dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" -#================================================= -# Migrate legacy permissions to new system -#================================================= -if ynh_legacy_permissions_exists -then - ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - -#================================================= -# CHECK THE PATH -#================================================= - -path_url=$(ynh_normalize_url_path --path_url=$path_url) - -#================================================= -# STANDARD UPGRADE STEPS #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -105,9 +105,9 @@ fi #================================================= # NGINX CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading nginx web server configuration..." +ynh_script_progression --message="Upgrading NGINX web server configuration..." -# Create a dedicated nginx config +# Create a dedicated NGINX config ynh_add_nginx_config #================================================= @@ -117,20 +117,12 @@ ynh_script_progression --message="Upgrading dependencies..." --weight=7 ynh_install_app_dependencies $pkg_dependencies -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." - -# Create a dedicated user (if not existing) -ynh_system_user_create --username=$app - #================================================= # PHP-FPM CONFIGURATION #================================================= -ynh_script_progression --message="Upgrading php-fpm configuration..." +ynh_script_progression --message="Upgrading PHP-FPM configuration..." -# Create a dedicated php-fpm config +# Create a dedicated PHP-FPM config ynh_add_fpm_config # Set-up fail2ban @@ -185,6 +177,13 @@ then ynh_mysql_connect_as --user=$db_user --password="$db_pwd" --database=$db_name <<< "UPDATE craue_config_setting SET value = 'https://$domain$path_url' WHERE name = 'wallabag_url'" fi +#================================================= +# SETUP HOOKS +#================================================= + +ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../hooks/post_user_create" +ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../hooks/post_user_delete" + #================================================= # GENERIC FINALIZATION #================================================= @@ -193,24 +192,10 @@ fi set_permissions -#================================================= -# SETUP HOOKS -#================================================= - -ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../hooks/post_user_create" -ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../hooks/post_user_delete" - -#================================================= -# SETUP SSOWAT -#================================================= -ynh_script_progression --message="Upgrading SSOwat configuration..." - -ynh_app_setting_set "$app" unprotected_uris "/" - #================================================= # RELOAD NGINX #================================================= -ynh_script_progression --message="Reloading nginx web server..." +ynh_script_progression --message="Reloading NGINX web server..." ynh_systemd_action --service_name=nginx --action=reload From 63f41d56b0a1cfd4d5101aa16224873711e5fa7b Mon Sep 17 00:00:00 2001 From: lapineige Date: Wed, 9 Feb 2022 17:48:09 +0100 Subject: [PATCH 02/45] Create DISCLAIMER.md --- doc/DISCLAIMER.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 doc/DISCLAIMER.md diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..610e5e2 --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,19 @@ +## YunoHost specific features + +In addition to Wallabag core features, the following are made available with this package: + + * Integrate with YunoHost users and SSO - i.e. logout button + * Allow one user to be the administrator (set at the installation) + * Asynchronous import using *Redis* (need to be enabled in the *Internal Settings*). *RabbitMQ* import not supported (yet?). + +## Limitations + +* Removing a Yunohost's user won't delete the related wallabag user, but only desactivate it. You need to manualy remove it from wallabag before. See: https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 +* Upgrade from the YunoHost [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) app requires a manual operation. That's why it's provided as a new package. For the migration process, please refer to the [Wallabag official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). + +## (Beta) Testing branch +*Please be aware that the testing branch (or any PR branch)* might *contains some bugs and is not recommended if you need a stable app.* + +(Beta) Testers are welcome to try new upgrades (such as a new version), as listed in the [Pull Requests section](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls). More testing will allow us to provide upgrades faster 🙂. In order to try the testing branch, use `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. + +Warning : Doing a normal upgrade of the package with the web admin or `sudo yunohost app upgrade wallabag2` (without any URL specified) will revert you app to the master branch. *This may break you wallabag* if it goes to a previous version (if the newest is not retrocompatible). From 0a791fc437efe1e34b5d6cec0fd4dc63ca98b2ec Mon Sep 17 00:00:00 2001 From: lapineige Date: Wed, 9 Feb 2022 17:48:57 +0100 Subject: [PATCH 03/45] Create DISCLAIMER_fr.md --- doc/DISCLAIMER_fr.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 doc/DISCLAIMER_fr.md diff --git a/doc/DISCLAIMER_fr.md b/doc/DISCLAIMER_fr.md new file mode 100644 index 0000000..7fdb901 --- /dev/null +++ b/doc/DISCLAIMER_fr.md @@ -0,0 +1,21 @@ +## Caractéristiques spécifiques YunoHost + +En plus des fonctionnalités principales de Wallabag, ce paquet propose également : + + * Une intégration avec le système de gestion des utilisateurs et le SSO de YunoHost - e.g. un bouton de déconnexion + * De permettre à un utilisateur d'être administrateur (réglage lors de l'installation) + * Un import asynchrone utilisant Redis (à activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. + +## Limitations + +* Supprimer un utilisateur YunoHost ne supprimera pas l'utilisateur Wallabag lié, il sera seulement désactivé. Vous devez le supprimer manuellement avant. Voir : https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 + +* La mise à niveau depuis le paquet YunoHost de [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) demande une opération manuelle, c'est pourquoi un nouveau paquet est fournit. Pour le processus de migration, merci de vous référer à [la documentation officiel de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). + + +## Branche de test (*Testing*) +*Soyez concient que la branche testing* pourrait *contenir des bugs et n'est pas recommandée si vous recherchez la stabilité de votre application.* + +Les personnes souhaitant (bêta) tester de nouvelles mises à jour (ex: une nouvelle version), listée dans la [section des Pull Requests](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls), sont les bienvenues. Plus de tests nous permettrons de sortir des mises à jour plus vite 🙂. Pour tester la branche *testing*, utilisez `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. + +Attention : Une mise à jour classique avec l'interface d'administration ou avec `sudo yunohost app upgrade wallabag2` (sans préciser l'URL) fera retourner votre application au niveau de la branche master. *Ceci pourrait casser votre wallabag* si vous revenez à une version précédente (et si la nouvelle n'est pas rétrocompatible). From 1130a4c192bfcb87b57d668398603395c87849ff Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Wed, 9 Feb 2022 16:48:59 +0000 Subject: [PATCH 04/45] Auto-update README --- README.md | 74 ++++++++++++++++++---------------------------------- README_fr.md | 62 ++++++++++++++----------------------------- 2 files changed, 44 insertions(+), 92 deletions(-) diff --git a/README.md b/README.md index 57b007a..103b1dd 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,27 @@ + + # Wallabag for YunoHost [![Integration level](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) -[![Install Wallabag with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wallabag2) +[![Install Wallabag with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wallabag2) *[Lire ce readme en français.](./README_fr.md)* -> *This package allow you to install Wallabag quickly and simply on a YunoHost server. -If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* +> *This package allows you to install Wallabag quickly and simply on a YunoHost server. +If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* ## Overview -[Wallabag](https://www.wallabag.org/) is a self hostable Read-It-Later application allowing you to not miss any content anymore. Click, save, read it when you can. -It extracts content so that you can read it when you have time. +A self hostable read-it-later app -It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). +**Shipped version:** 2.3.8~ynh3 -**Shipped version:** 2.3.8 -## Screenshots -![](https://www.linuxbabe.com/wp-content/uploads/2016/10/wallabag-quick-start-page.png) - -## Demo - -* [YunoHost demo](https://demo.yunohost.org/wallabag/) -* [Video demo](https://player.vimeo.com/video/167435064) - -## Configuration - -## Documentation - - * Official documentation: https://doc.wallabag.org/en/ - * YunoHost documentation: https://yunohost.org/#/app_wallabag2 +## Disclaimers / important information ## YunoHost specific features @@ -39,48 +29,34 @@ In addition to Wallabag core features, the following are made available with thi * Integrate with YunoHost users and SSO - i.e. logout button * Allow one user to be the administrator (set at the installation) - * Asynchronous import using Redis (need to be enabled in the *Internal Settings*). RabbitMQ import not supported (yet ?) - -#### Multi-users support - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/wallabag2%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/wallabag2/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/wallabag2%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/wallabag2/) + * Asynchronous import using *Redis* (need to be enabled in the *Internal Settings*). *RabbitMQ* import not supported (yet?). ## Limitations * Removing a Yunohost's user won't delete the related wallabag user, but only desactivate it. You need to manualy remove it from wallabag before. See: https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 +* Upgrade from the YunoHost [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) app requires a manual operation. That's why it's provided as a new package. For the migration process, please refer to the [Wallabag official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). -## Additional information +## (Beta) Testing branch +*Please be aware that the testing branch (or any PR branch)* might *contains some bugs and is not recommended if you need a stable app.* -**NB: Since @jeromelebleu is no longer maintaining this package, I (@lapineige) take over this repository. But I have limited time and experience, so feel free to help !** +(Beta) Testers are welcome to try new upgrades (such as a new version), as listed in the [Pull Requests section](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls). More testing will allow us to provide upgrades faster 🙂. In order to try the testing branch, use `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. -#### Upgrade from v1 +Warning : Doing a normal upgrade of the package with the web admin or `sudo yunohost app upgrade wallabag2` (without any URL specified) will revert you app to the master branch. *This may break you wallabag* if it goes to a previous version (if the newest is not retrocompatible). -The upgrade from the YunoHost [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) -app requires a manual operation, that's why it's provided as a new package. -For the migration process, please refer to the -[Wallabag official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). +## Documentation and resources -## Links +* YunoHost documentation for this app: https://yunohost.org/app_wallabag2 +* Report a bug: https://github.com/YunoHost-Apps/wallabag2_ynh/issues - * Report a bug: https://github.com/YunoHost-Apps/wallabag2_ynh/issues - * App website: https://www.wallabag.org/ - * Upstream app repository: https://github.com/wallabag/wallabag - * YunoHost website: https://yunohost.org/ +## Developer info ---- +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing). -## Developers and testers info - -Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing). - -To try the testing branch, please proceed like that: +To try the testing branch, please proceed like that. ``` sudo yunohost app install https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing --debug or sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing --debug ``` -Please be aware that the testing branch *might* contains some bugs and is not recommended if you need a stable app. -Doing a normal upgrade of the package avec `sudo yunohost app upgrade wallabag2` (without any URL specified) will revert you app to the master branch. + +**More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/README_fr.md b/README_fr.md index d47f30e..beeb81d 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,36 +1,23 @@ # Wallabag pour YunoHost -[![Integration level](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) -[![Install Wallabag with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=wallabag2) +[![Niveau d'intégration](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) +[![Installer Wallabag avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wallabag2) -*[Read this readme in english.](./README.md)* +*[Read this readme in english.](./README.md)* +*[Lire ce readme en français.](./README_fr.md)* -> *Ce package vous permet d'installer Wallabag rapidement et simplement sur un serveur YunoHost. +> *Ce package vous permet d'installer Wallabag rapidement et simplement sur un serveur YunoHost. Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* ## Vue d'ensemble -[Wallabag](https://www.wallabag.org/) est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. +Une application de lecture-plus-tard auto-hébergeable -Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). +**Version incluse :** 2.3.8~ynh3 -**Version incluse:** 2.3.8 -## Captures d'écran -![](https://www.linuxbabe.com/wp-content/uploads/2016/10/wallabag-quick-start-page.png) - -## Démo - -* [Démo YunoHost](https://demo.yunohost.org/wallabag/) -* [Démo video](https://player.vimeo.com/video/167435064) - -## Configuration - -## Documentation - - * Documentation officielle : https://doc.wallabag.org/fr/ - * Documentation YunoHost : https://yunohost.org/#/app_wallabag2 +## Avertissements / informations importantes ## Caractéristiques spécifiques YunoHost @@ -40,45 +27,34 @@ En plus des fonctionnalités principales de Wallabag, ce paquet propose égaleme * De permettre à un utilisateur d'être administrateur (réglage lors de l'installation) * Un import asynchrone utilisant Redis (à activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. -#### Support multi-utilisateurs - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/wallabag2%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/wallabag2/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/wallabag2%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/wallabag2/) - ## Limitations * Supprimer un utilisateur YunoHost ne supprimera pas l'utilisateur Wallabag lié, il sera seulement désactivé. Vous devez le supprimer manuellement avant. Voir : https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 -## Informations additionnelles - -**NB: Depuis que @jeromelebleu ne maintient plus ce paquet, je (@lapineige) reprends la charge de ce dépôt. Mais j'ai un temps et une expérience limitées, donc n'hésitez pas à donner un coup de main :) !** +* La mise à niveau depuis le paquet YunoHost de [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) demande une opération manuelle, c'est pourquoi un nouveau paquet est fournit. Pour le processus de migration, merci de vous référer à [la documentation officiel de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). -#### Mettre à niveau depuis la v1 +## Branche de test (*Testing*) +*Soyez concient que la branche testing* pourrait *contenir des bugs et n'est pas recommandée si vous recherchez la stabilité de votre application.* -La mise à niveau depuis le paquet YunoHost de [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) demande une opération manuelle, c'est pourquoi un nouveau paquet est fournit. -Pour le processus de migration, merci de vous référer à [la documentation officiel de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). +Les personnes souhaitant (bêta) tester de nouvelles mises à jour (ex: une nouvelle version), listée dans la [section des Pull Requests](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls), sont les bienvenues. Plus de tests nous permettrons de sortir des mises à jour plus vite 🙂. Pour tester la branche *testing*, utilisez `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. -## Links +Attention : Une mise à jour classique avec l'interface d'administration ou avec `sudo yunohost app upgrade wallabag2` (sans préciser l'URL) fera retourner votre application au niveau de la branche master. *Ceci pourrait casser votre wallabag* si vous revenez à une version précédente (et si la nouvelle n'est pas rétrocompatible). - * Signaler un bug : https://github.com/YunoHost-Apps/wallabag2_ynh/issues - * Site de l'application : https://www.wallabag.org/ - * Dépôt de l'application principale : https://github.com/wallabag/wallabag - * Site web YunoHost : https://yunohost.org/ +## Documentations et ressources ---- +* Documentation YunoHost pour cette app : https://yunohost.org/app_wallabag2 +* Signaler un bug : https://github.com/YunoHost-Apps/wallabag2_ynh/issues ## Informations pour les développeurs Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing). -Pour essayer la branche testing, procédez comme ceci : +Pour essayer la branche testing, procédez comme suit. ``` sudo yunohost app install https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing --debug ou sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing --debug ``` -Soyez concient que la branche testing *pourrait* contenir des bugs et n'est pas recommandée si vous recherchez la stabilité de votre application. -Une mise à jour classique avec `sudo yunohost app upgrade wallabag2` (sans préciser l'URL) fera retourner votre application au niveau de la branche master. + +**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file From 3080e8db958148bc7c26dd33685338df57d656c0 Mon Sep 17 00:00:00 2001 From: lapineige Date: Wed, 9 Feb 2022 17:53:45 +0100 Subject: [PATCH 05/45] Add files via upload --- doc/wallabag-quick-start-page.png | Bin 0 -> 148049 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/wallabag-quick-start-page.png diff --git a/doc/wallabag-quick-start-page.png b/doc/wallabag-quick-start-page.png new file mode 100644 index 0000000000000000000000000000000000000000..d8c25f531136b0086631eab5166e19e5b1a0958d GIT binary patch literal 148049 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∨Po)Z%-q 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 literal 0 HcmV?d00001 From 204ba94646d02c8ecffc209478d1f9d9047385e8 Mon Sep 17 00:00:00 2001 From: lapineige Date: Wed, 9 Feb 2022 17:59:42 +0100 Subject: [PATCH 06/45] Fix heading size --- doc/DISCLAIMER_fr.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/DISCLAIMER_fr.md b/doc/DISCLAIMER_fr.md index 7fdb901..fddefaf 100644 --- a/doc/DISCLAIMER_fr.md +++ b/doc/DISCLAIMER_fr.md @@ -1,4 +1,4 @@ -## Caractéristiques spécifiques YunoHost +### Caractéristiques spécifiques YunoHost En plus des fonctionnalités principales de Wallabag, ce paquet propose également : @@ -6,14 +6,14 @@ En plus des fonctionnalités principales de Wallabag, ce paquet propose égaleme * De permettre à un utilisateur d'être administrateur (réglage lors de l'installation) * Un import asynchrone utilisant Redis (à activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. -## Limitations +### Limitations * Supprimer un utilisateur YunoHost ne supprimera pas l'utilisateur Wallabag lié, il sera seulement désactivé. Vous devez le supprimer manuellement avant. Voir : https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 * La mise à niveau depuis le paquet YunoHost de [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) demande une opération manuelle, c'est pourquoi un nouveau paquet est fournit. Pour le processus de migration, merci de vous référer à [la documentation officiel de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). -## Branche de test (*Testing*) +### Branche de test (*Testing*) *Soyez concient que la branche testing* pourrait *contenir des bugs et n'est pas recommandée si vous recherchez la stabilité de votre application.* Les personnes souhaitant (bêta) tester de nouvelles mises à jour (ex: une nouvelle version), listée dans la [section des Pull Requests](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls), sont les bienvenues. Plus de tests nous permettrons de sortir des mises à jour plus vite 🙂. Pour tester la branche *testing*, utilisez `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. From 05a2d2ebad2725a875e2f19bc426b665c115fc16 Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Wed, 9 Feb 2022 16:59:44 +0000 Subject: [PATCH 07/45] Auto-update README --- README_fr.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README_fr.md b/README_fr.md index beeb81d..86a8ef8 100644 --- a/README_fr.md +++ b/README_fr.md @@ -19,7 +19,7 @@ Une application de lecture-plus-tard auto-hébergeable ## Avertissements / informations importantes -## Caractéristiques spécifiques YunoHost +### Caractéristiques spécifiques YunoHost En plus des fonctionnalités principales de Wallabag, ce paquet propose également : @@ -27,14 +27,14 @@ En plus des fonctionnalités principales de Wallabag, ce paquet propose égaleme * De permettre à un utilisateur d'être administrateur (réglage lors de l'installation) * Un import asynchrone utilisant Redis (à activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. -## Limitations +### Limitations * Supprimer un utilisateur YunoHost ne supprimera pas l'utilisateur Wallabag lié, il sera seulement désactivé. Vous devez le supprimer manuellement avant. Voir : https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 * La mise à niveau depuis le paquet YunoHost de [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) demande une opération manuelle, c'est pourquoi un nouveau paquet est fournit. Pour le processus de migration, merci de vous référer à [la documentation officiel de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). -## Branche de test (*Testing*) +### Branche de test (*Testing*) *Soyez concient que la branche testing* pourrait *contenir des bugs et n'est pas recommandée si vous recherchez la stabilité de votre application.* Les personnes souhaitant (bêta) tester de nouvelles mises à jour (ex: une nouvelle version), listée dans la [section des Pull Requests](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls), sont les bienvenues. Plus de tests nous permettrons de sortir des mises à jour plus vite 🙂. Pour tester la branche *testing*, utilisez `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. From 91ddaa7367cf2de77269357c4499a8b089776243 Mon Sep 17 00:00:00 2001 From: lapineige Date: Wed, 9 Feb 2022 17:59:51 +0100 Subject: [PATCH 08/45] Fix heading size --- doc/DISCLAIMER.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md index 610e5e2..53f9822 100644 --- a/doc/DISCLAIMER.md +++ b/doc/DISCLAIMER.md @@ -1,4 +1,4 @@ -## YunoHost specific features +### YunoHost specific features In addition to Wallabag core features, the following are made available with this package: @@ -6,12 +6,12 @@ In addition to Wallabag core features, the following are made available with thi * Allow one user to be the administrator (set at the installation) * Asynchronous import using *Redis* (need to be enabled in the *Internal Settings*). *RabbitMQ* import not supported (yet?). -## Limitations +### Limitations * Removing a Yunohost's user won't delete the related wallabag user, but only desactivate it. You need to manualy remove it from wallabag before. See: https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 * Upgrade from the YunoHost [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) app requires a manual operation. That's why it's provided as a new package. For the migration process, please refer to the [Wallabag official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). -## (Beta) Testing branch +### (Beta) Testing branch *Please be aware that the testing branch (or any PR branch)* might *contains some bugs and is not recommended if you need a stable app.* (Beta) Testers are welcome to try new upgrades (such as a new version), as listed in the [Pull Requests section](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls). More testing will allow us to provide upgrades faster 🙂. In order to try the testing branch, use `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. From 96bdf4b3750614e90406a762e36f925506bc5098 Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Wed, 9 Feb 2022 16:59:53 +0000 Subject: [PATCH 09/45] Auto-update README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 103b1dd..ae629dd 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ A self hostable read-it-later app ## Disclaimers / important information -## YunoHost specific features +### YunoHost specific features In addition to Wallabag core features, the following are made available with this package: @@ -31,12 +31,12 @@ In addition to Wallabag core features, the following are made available with thi * Allow one user to be the administrator (set at the installation) * Asynchronous import using *Redis* (need to be enabled in the *Internal Settings*). *RabbitMQ* import not supported (yet?). -## Limitations +### Limitations * Removing a Yunohost's user won't delete the related wallabag user, but only desactivate it. You need to manualy remove it from wallabag before. See: https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 * Upgrade from the YunoHost [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) app requires a manual operation. That's why it's provided as a new package. For the migration process, please refer to the [Wallabag official documentation](https://doc.wallabag.org/en/user/import/wallabagv1.html). -## (Beta) Testing branch +### (Beta) Testing branch *Please be aware that the testing branch (or any PR branch)* might *contains some bugs and is not recommended if you need a stable app.* (Beta) Testers are welcome to try new upgrades (such as a new version), as listed in the [Pull Requests section](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls). More testing will allow us to provide upgrades faster 🙂. In order to try the testing branch, use `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. From bc90bd62bdb615e3cf2ef72765335d8597b6638d Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 10 Feb 2022 00:57:43 +0100 Subject: [PATCH 10/45] Fix charset --- doc/DESCRIPTION_fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md index 602af14..bf2e239 100644 --- a/doc/DESCRIPTION_fr.md +++ b/doc/DESCRIPTION_fr.md @@ -1,3 +1,3 @@ -[Wallabag](https://www.wallabag.org/) est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. +[Wallabag](https://www.wallabag.org/) est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. -Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). +Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). From 6b7841017dd17e951bfee9733c3018744a3a74fc Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Wed, 9 Feb 2022 23:57:50 +0000 Subject: [PATCH 11/45] Auto-update README --- README.md | 17 +++++++++++++---- README_fr.md | 21 ++++++++++++++++----- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ae629dd..92383b5 100644 --- a/README.md +++ b/README.md @@ -15,16 +15,23 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in ## Overview -A self hostable read-it-later app +[Wallabag](https://www.wallabag.org/) is a self hostable Read-It-Later application allowing you to not miss any content anymore. Click, save, read it when you can. +It extracts content so that you can read it when you have time. -**Shipped version:** 2.3.8~ynh3 +It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). +**Shipped version:** 2.3.8~ynh4 + +**Demo:** https://demo.yunohost.org/wallabag/ + +## Screenshots + +![](./doc/screenshots/screenshot1.webp) ## Disclaimers / important information ### YunoHost specific features - In addition to Wallabag core features, the following are made available with this package: * Integrate with YunoHost users and SSO - i.e. logout button @@ -42,9 +49,11 @@ In addition to Wallabag core features, the following are made available with thi (Beta) Testers are welcome to try new upgrades (such as a new version), as listed in the [Pull Requests section](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls). More testing will allow us to provide upgrades faster 🙂. In order to try the testing branch, use `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. Warning : Doing a normal upgrade of the package with the web admin or `sudo yunohost app upgrade wallabag2` (without any URL specified) will revert you app to the master branch. *This may break you wallabag* if it goes to a previous version (if the newest is not retrocompatible). - ## Documentation and resources +* Official app website: https://www.wallabag.org +* Official admin documentation: https://doc.wallabag.org/en/ +* Upstream app code repository: https://github.com/wallabag/wallabag * YunoHost documentation for this app: https://yunohost.org/app_wallabag2 * Report a bug: https://github.com/YunoHost-Apps/wallabag2_ynh/issues diff --git a/README_fr.md b/README_fr.md index 86a8ef8..22dba91 100644 --- a/README_fr.md +++ b/README_fr.md @@ -11,11 +11,18 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour ## Vue d'ensemble -Une application de lecture-plus-tard auto-hébergeable +[Wallabag](https://www.wallabag.org/) est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. -**Version incluse :** 2.3.8~ynh3 +Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). +**Version incluse :** 2.3.8~ynh4 + +**Démo :** https://demo.yunohost.org/wallabag/ + +## Captures d'écran + +![](./doc/screenshots/screenshot1.webp) ## Avertissements / informations importantes @@ -25,24 +32,28 @@ En plus des fonctionnalités principales de Wallabag, ce paquet propose égaleme * Une intégration avec le système de gestion des utilisateurs et le SSO de YunoHost - e.g. un bouton de déconnexion * De permettre à un utilisateur d'être administrateur (réglage lors de l'installation) - * Un import asynchrone utilisant Redis (à activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. + * Un import asynchrone utilisant Redis (À  activer dans les *Paramètres Internes*). L'import via RabbitMQ n'est pas (encore ?) supporté. ### Limitations * Supprimer un utilisateur YunoHost ne supprimera pas l'utilisateur Wallabag lié, il sera seulement désactivé. Vous devez le supprimer manuellement avant. Voir : https://github.com/YunoHost-Apps/wallabag2_ynh/issues/39 -* La mise à niveau depuis le paquet YunoHost de [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) demande une opération manuelle, c'est pourquoi un nouveau paquet est fournit. Pour le processus de migration, merci de vous référer à [la documentation officiel de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). +* La mise à niveau depuis le paquet YunoHost de [Wallabag v1](https://github.com/YunoHost-Apps/wallabag_ynh) demande une opération manuelle, c'est pourquoi un nouveau paquet est fournit. Pour le processus de migration, merci de vous référer à [la documentation officiel de Wallabag](https://doc.wallabag.org/fr/user/import/wallabagv1.html). ### Branche de test (*Testing*) *Soyez concient que la branche testing* pourrait *contenir des bugs et n'est pas recommandée si vous recherchez la stabilité de votre application.* -Les personnes souhaitant (bêta) tester de nouvelles mises à jour (ex: une nouvelle version), listée dans la [section des Pull Requests](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls), sont les bienvenues. Plus de tests nous permettrons de sortir des mises à jour plus vite 🙂. Pour tester la branche *testing*, utilisez `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. +Les personnes souhaitant (bêta) tester de nouvelles mises à jour (ex: une nouvelle version), listée dans la [section des Pull Requests](https://github.com/YunoHost-Apps/wallabag2_ynh/pulls), sont les bienvenues. Plus de tests nous permettrons de sortir des mises à jour plus vite. Pour tester la branche *testing*, utilisez `sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing`. Attention : Une mise à jour classique avec l'interface d'administration ou avec `sudo yunohost app upgrade wallabag2` (sans préciser l'URL) fera retourner votre application au niveau de la branche master. *Ceci pourrait casser votre wallabag* si vous revenez à une version précédente (et si la nouvelle n'est pas rétrocompatible). + ## Documentations et ressources +* Site officiel de l'app : https://www.wallabag.org +* Documentation officielle de l'admin : https://doc.wallabag.org/en/ +* Dépôt de code officiel de l'app : https://github.com/wallabag/wallabag * Documentation YunoHost pour cette app : https://yunohost.org/app_wallabag2 * Signaler un bug : https://github.com/YunoHost-Apps/wallabag2_ynh/issues From 00d67762ee2e1819364bf980262de24d17c45af7 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Fri, 11 Feb 2022 19:56:20 +0100 Subject: [PATCH 12/45] Update check_process --- check_process | 2 ++ 1 file changed, 2 insertions(+) diff --git a/check_process b/check_process index 0587cd1..b1fead1 100644 --- a/check_process +++ b/check_process @@ -15,6 +15,8 @@ upgrade=1 from_commit=f75d58cb32c51a0981333ea88974dc3199324e65 # 2.3.8~ynh3 upgrade=1 from_commit=2e20b8f9a6b791e059b806fcfc2253f88d1aeaf2 + # 2.3.8~ynh4 + upgrade=1 from_commit=4da53256350d7e4d63812ed3244e945346a5d9b7 backup_restore=1 multi_instance=1 port_already_use=0 From 1f2c63c4172277950247b6a489f1a35cf6052e31 Mon Sep 17 00:00:00 2001 From: lapineige Date: Mon, 14 Mar 2022 15:41:16 +0100 Subject: [PATCH 13/45] 2.4.3 (#125) * Upgrade to 2.4.2~ynh1 * Fix craue_config_setting * Upgrade to 2.4.3~ynh1 * Upgrade to 2.4.3~ynh1 * Auto-update README Co-authored-by: yalh76 Co-authored-by: Yunohost-Bot <> --- README.md | 2 +- README_fr.md | 2 +- conf/app.src | 4 ++-- manifest.json | 2 +- scripts/change_url | 4 ++-- scripts/install | 2 +- scripts/upgrade | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 92383b5..65b6350 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). -**Shipped version:** 2.3.8~ynh4 +**Shipped version:** 2.4.3~ynh1 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index 22dba91..69e3637 100644 --- a/README_fr.md +++ b/README_fr.md @@ -16,7 +16,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.3.8~ynh4 +**Version incluse :** 2.4.3~ynh1 **Démo :** https://demo.yunohost.org/wallabag/ diff --git a/conf/app.src b/conf/app.src index 794ff5a..02efccc 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://static.wallabag.org/releases/wallabag-release-2.3.8.tar.gz -SOURCE_SUM=58f319ee41828fcc4fd00a14c4ac7c16b2179a47af21e257a15938311d1426eb +SOURCE_URL=https://static.wallabag.org/releases/wallabag-release-2.4.3.tar.gz +SOURCE_SUM=bba4df940cf1a1ac632e134cbf9b9af8d3c1bf89311b2720cf64179e1b431d3a SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index 6065ad7..78df8cf 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.3.8~ynh4", + "version": "2.4.3~ynh1", "url": "https://www.wallabag.org", "upstream": { "license": "MIT", diff --git a/scripts/change_url b/scripts/change_url index 380370a..7657ca3 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -104,13 +104,13 @@ fi ynh_script_progression --message="Updating wallabag configuration..." # Configure Wallabag instance URL -ynh_mysql_connect_as --user=$db_user --password="$db_pwd" --database=$db_name <<< "UPDATE craue_config_setting SET value = 'https://$new_domain$new_path' WHERE name = 'wallabag_url'" +ynh_mysql_connect_as --user=$db_user --password="$db_pwd" --database=$db_name <<< "UPDATE internal_setting SET value = 'https://$new_domain$new_path' WHERE name = 'wallabag_url'" # Change domain name in parameters.yml ynh_replace_string --match_string="domain_name: .*" --replace_string="domain_name: https://$new_domain$new_path" --target_file=$final_path/app/config/parameters.yml # If "Download images locally" option has been enabled in Internal Settings -download_images_enabled=$(ynh_mysql_connect_as --user=$db_user --password="$db_pwd" --database=$db_name <<< "SELECT value from craue_config_setting WHERE name='download_images_enabled '" | tail -n 1) +download_images_enabled=$(ynh_mysql_connect_as --user=$db_user --password="$db_pwd" --database=$db_name <<< "SELECT value from internal_setting WHERE name='download_images_enabled '" | tail -n 1) if [ "$download_images_enabled" = "1" ] then ynh_print_info --message="Updating images URL; this operation may take a while..." diff --git a/scripts/install b/scripts/install index fb21614..980e7fa 100644 --- a/scripts/install +++ b/scripts/install @@ -141,7 +141,7 @@ done $php_exec fos:user:promote --super "$admin" # Configure Wallabag instance URL -ynh_mysql_connect_as --user=$db_user --password="$db_pwd" --database=$db_name <<< "UPDATE craue_config_setting SET value = 'https://$domain$path_url' WHERE name = 'wallabag_url'" +ynh_mysql_connect_as --user=$db_user --password="$db_pwd" --database=$db_name <<< "UPDATE internal_setting SET value = 'https://$domain$path_url' WHERE name = 'wallabag_url'" #================================================= # SETUP HOOKS diff --git a/scripts/upgrade b/scripts/upgrade index cc9f1b8..d9a1138 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -174,7 +174,7 @@ then $php_exec cache:clear # Configure Wallabag instance URL - ynh_mysql_connect_as --user=$db_user --password="$db_pwd" --database=$db_name <<< "UPDATE craue_config_setting SET value = 'https://$domain$path_url' WHERE name = 'wallabag_url'" + ynh_mysql_connect_as --user=$db_user --password="$db_pwd" --database=$db_name <<< "UPDATE internal_setting SET value = 'https://$domain$path_url' WHERE name = 'wallabag_url'" fi #================================================= From 9b184441ebaa234e4d0e7e784ce231d7cf67de7c Mon Sep 17 00:00:00 2001 From: tituspijean Date: Wed, 25 May 2022 09:46:54 +0200 Subject: [PATCH 14/45] Specify PHP version in every calls (#132) * Specify PHP version in every calls * Switch (back) to php7.4 * Add PHP-xml dependency for DOM extension Co-authored-by: lapineige --- scripts/_common.sh | 4 +++- scripts/install | 4 ++-- scripts/upgrade | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 1bf1664..c4d085e 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -4,8 +4,10 @@ # COMMON VARIABLES #================================================= +phpversion="7.4" + # dependencies used by the app -pkg_dependencies="php$YNH_DEFAULT_PHP_VERSION-cli php$YNH_DEFAULT_PHP_VERSION-mysql php$YNH_DEFAULT_PHP_VERSION-json php$YNH_DEFAULT_PHP_VERSION-gd php$YNH_DEFAULT_PHP_VERSION-tidy php$YNH_DEFAULT_PHP_VERSION-curl php$YNH_DEFAULT_PHP_VERSION-php-gettext php$YNH_DEFAULT_PHP_VERSION-redis" +pkg_dependencies="php$phpversion-cli php$phpversion-mysql php$phpversion-json php$phpversion-gd php$phpversion-tidy php$phpversion-curl php-gettext php$phpversion-redis php$phpversion-xml" #================================================= # PERSONAL HELPERS diff --git a/scripts/install b/scripts/install index 980e7fa..34f0e6c 100644 --- a/scripts/install +++ b/scripts/install @@ -96,7 +96,7 @@ ynh_add_nginx_config ynh_script_progression --message="Configuring PHP-FPM..." --weight=2 # Create a dedicated PHP-FPM config -ynh_add_fpm_config +ynh_add_fpm_config --phpversion=$phpversion #================================================= # SPECIFIC SETUP @@ -121,7 +121,7 @@ ynh_replace_string --match_string="secret: ovmpmAWXRCabNlMgzlzFXDYmCFfzGv" --rep ynh_replace_string --match_string="domain_name: https://your-wallabag-url-instance.com" --replace_string="domain_name: https://$domain$path_url" --target_file=$wb_conf # Alias for php-cli execution command -php_exec="ynh_exec_as $app php "$final_path/bin/console" --no-interaction --env=prod" +php_exec="ynh_exec_as $app php$phpversion "$final_path/bin/console" --no-interaction --env=prod" # Set permissions to app files chown -R $app: $final_path diff --git a/scripts/upgrade b/scripts/upgrade index d9a1138..c1be929 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -123,7 +123,7 @@ ynh_install_app_dependencies $pkg_dependencies ynh_script_progression --message="Upgrading PHP-FPM configuration..." # Create a dedicated PHP-FPM config -ynh_add_fpm_config +ynh_add_fpm_config --phpversion=$phpversion # Set-up fail2ban # Create the log file is not already existing @@ -164,7 +164,7 @@ then #================================================= # Alias for php-cli execution command - php_exec="ynh_exec_as $app php "$final_path/bin/console" --no-interaction --env=prod" + php_exec="ynh_exec_as $app php$phpversion "$final_path/bin/console" --no-interaction --env=prod" # Set permissions to app files chown -R $app: $final_path From 1799f038729e7e68c7a66cf8dcd2c02edd1891af Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Wed, 25 May 2022 07:46:57 +0000 Subject: [PATCH 15/45] Auto-update README --- README.md | 19 ++++++++++--------- README_fr.md | 25 +++++++++++++++---------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 65b6350..1adbce4 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ It shall NOT be edited by hand. # Wallabag for YunoHost -[![Integration level](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![Working status](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) [![Install Wallabag with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wallabag2) *[Lire ce readme en français.](./README_fr.md)* @@ -27,7 +27,7 @@ It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile ## Screenshots -![](./doc/screenshots/screenshot1.webp) +![Screenshot of Wallabag](./doc/screenshots/screenshot1.webp) ## Disclaimers / important information @@ -51,21 +51,22 @@ In addition to Wallabag core features, the following are made available with thi Warning : Doing a normal upgrade of the package with the web admin or `sudo yunohost app upgrade wallabag2` (without any URL specified) will revert you app to the master branch. *This may break you wallabag* if it goes to a previous version (if the newest is not retrocompatible). ## Documentation and resources -* Official app website: https://www.wallabag.org -* Official admin documentation: https://doc.wallabag.org/en/ -* Upstream app code repository: https://github.com/wallabag/wallabag -* YunoHost documentation for this app: https://yunohost.org/app_wallabag2 -* Report a bug: https://github.com/YunoHost-Apps/wallabag2_ynh/issues +* Official app website: +* Official admin documentation: +* Upstream app code repository: +* YunoHost documentation for this app: +* Report a bug: ## Developer info Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing). To try the testing branch, please proceed like that. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing --debug or sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing --debug ``` -**More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file +**More info regarding app packaging:** diff --git a/README_fr.md b/README_fr.md index 69e3637..6538ea2 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,10 +1,14 @@ + + # Wallabag pour YunoHost -[![Niveau d'intégration](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) +[![Niveau d'intégration](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![Status du fonctionnement](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![Status de maintenance](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) [![Installer Wallabag avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wallabag2) *[Read this readme in english.](./README.md)* -*[Lire ce readme en français.](./README_fr.md)* > *Ce package vous permet d'installer Wallabag rapidement et simplement sur un serveur YunoHost. Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* @@ -22,7 +26,7 @@ Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chro ## Captures d'écran -![](./doc/screenshots/screenshot1.webp) +![Capture d'écran de Wallabag](./doc/screenshots/screenshot1.webp) ## Avertissements / informations importantes @@ -51,21 +55,22 @@ Attention : Une mise à jour classique avec l'interface d'administration ou avec ## Documentations et ressources -* Site officiel de l'app : https://www.wallabag.org -* Documentation officielle de l'admin : https://doc.wallabag.org/en/ -* Dépôt de code officiel de l'app : https://github.com/wallabag/wallabag -* Documentation YunoHost pour cette app : https://yunohost.org/app_wallabag2 -* Signaler un bug : https://github.com/YunoHost-Apps/wallabag2_ynh/issues +* Site officiel de l'app : +* Documentation officielle de l'admin : +* Dépôt de code officiel de l'app : +* Documentation YunoHost pour cette app : +* Signaler un bug : ## Informations pour les développeurs Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing). Pour essayer la branche testing, procédez comme suit. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing --debug ou sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing --debug ``` -**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file +**Plus d'infos sur le packaging d'applications :** From 70fe2b237915c42b371ebc56ca1b8a8cd2ca3421 Mon Sep 17 00:00:00 2001 From: lapineige Date: Wed, 20 Jul 2022 21:33:08 +0200 Subject: [PATCH 16/45] Fix php version reference (#136) * Auto-update README * Use YNH_PHP_VERSION --- README_fr.md | 2 +- scripts/_common.sh | 2 +- scripts/install | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README_fr.md b/README_fr.md index 6538ea2..4f0bc02 100644 --- a/README_fr.md +++ b/README_fr.md @@ -5,7 +5,7 @@ It shall NOT be edited by hand. # Wallabag pour YunoHost -[![Niveau d'intégration](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![Status du fonctionnement](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![Status de maintenance](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) +[![Niveau d'intégration](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) [![Installer Wallabag avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wallabag2) *[Read this readme in english.](./README.md)* diff --git a/scripts/_common.sh b/scripts/_common.sh index c4d085e..7b4f1d0 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -4,7 +4,7 @@ # COMMON VARIABLES #================================================= -phpversion="7.4" +YNH_PHP_VERSION="7.4" # dependencies used by the app pkg_dependencies="php$phpversion-cli php$phpversion-mysql php$phpversion-json php$phpversion-gd php$phpversion-tidy php$phpversion-curl php-gettext php$phpversion-redis php$phpversion-xml" diff --git a/scripts/install b/scripts/install index 34f0e6c..0916d88 100644 --- a/scripts/install +++ b/scripts/install @@ -96,7 +96,7 @@ ynh_add_nginx_config ynh_script_progression --message="Configuring PHP-FPM..." --weight=2 # Create a dedicated PHP-FPM config -ynh_add_fpm_config --phpversion=$phpversion +ynh_add_fpm_config --phpversion=$YNH_PHP_VERSION #================================================= # SPECIFIC SETUP From 4561c16a7112ea3af887a4c07c9f2812d400760a Mon Sep 17 00:00:00 2001 From: lapineige Date: Fri, 22 Jul 2022 01:04:09 +0200 Subject: [PATCH 17/45] Proper YNH_PHP_VERSION syntax --- scripts/_common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 7b4f1d0..d03ef25 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,7 +7,7 @@ YNH_PHP_VERSION="7.4" # dependencies used by the app -pkg_dependencies="php$phpversion-cli php$phpversion-mysql php$phpversion-json php$phpversion-gd php$phpversion-tidy php$phpversion-curl php-gettext php$phpversion-redis php$phpversion-xml" +pkg_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-json php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-tidy php${YNH_PHP_VERSION}-curl php-gettext php${YNH_PHP_VERSION}-redis php${YNH_PHP_VERSION}-xml" #================================================= # PERSONAL HELPERS From 5a3f47d0e7b7aeb2fd7bd14211b4906f95347d0f Mon Sep 17 00:00:00 2001 From: lapineige Date: Fri, 22 Jul 2022 01:04:49 +0200 Subject: [PATCH 18/45] Proper YNH_PHP_VERSION syntax : typo --- scripts/_common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index d03ef25..5f41b6e 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,7 +7,7 @@ YNH_PHP_VERSION="7.4" # dependencies used by the app -pkg_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-json php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-tidy php${YNH_PHP_VERSION}-curl php-gettext php${YNH_PHP_VERSION}-redis php${YNH_PHP_VERSION}-xml" +pkg_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-json php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-tidy php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-redis php${YNH_PHP_VERSION}-xml" #================================================= # PERSONAL HELPERS From e4d94c3e09324092c73f3340bfc4ea9b099aaec4 Mon Sep 17 00:00:00 2001 From: lapineige Date: Fri, 22 Jul 2022 09:14:51 +0200 Subject: [PATCH 19/45] YNH_PHP_VERSION: fix missing change --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 0916d88..5590651 100644 --- a/scripts/install +++ b/scripts/install @@ -121,7 +121,7 @@ ynh_replace_string --match_string="secret: ovmpmAWXRCabNlMgzlzFXDYmCFfzGv" --rep ynh_replace_string --match_string="domain_name: https://your-wallabag-url-instance.com" --replace_string="domain_name: https://$domain$path_url" --target_file=$wb_conf # Alias for php-cli execution command -php_exec="ynh_exec_as $app php$phpversion "$final_path/bin/console" --no-interaction --env=prod" +php_exec="ynh_exec_as $app php$YNH_PHP_VERSION "$final_path/bin/console" --no-interaction --env=prod" # Set permissions to app files chown -R $app: $final_path From 48ebea2bfae0d13f8efd7008d7f4c59f4154088a Mon Sep 17 00:00:00 2001 From: lapineige Date: Sat, 23 Jul 2022 09:27:32 +0200 Subject: [PATCH 20/45] =?UTF-8?q?Fix=20phpversion=20=E2=86=92=20YNH=5FPHP?= =?UTF-8?q?=5FVERSION?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/upgrade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index c1be929..27eff97 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -123,7 +123,7 @@ ynh_install_app_dependencies $pkg_dependencies ynh_script_progression --message="Upgrading PHP-FPM configuration..." # Create a dedicated PHP-FPM config -ynh_add_fpm_config --phpversion=$phpversion +ynh_add_fpm_config --phpversion=$YNH_PHP_VERSION # Set-up fail2ban # Create the log file is not already existing @@ -164,7 +164,7 @@ then #================================================= # Alias for php-cli execution command - php_exec="ynh_exec_as $app php$phpversion "$final_path/bin/console" --no-interaction --env=prod" + php_exec="ynh_exec_as $app php${YNH_PHP_VERSION} "$final_path/bin/console" --no-interaction --env=prod" # Set permissions to app files chown -R $app: $final_path From b374c52e6dde9b788b0b3938d5e4243e25477472 Mon Sep 17 00:00:00 2001 From: lapineige Date: Sat, 23 Jul 2022 18:15:53 +0200 Subject: [PATCH 21/45] Upgrade to 2.5 (#134) * Upgrade to 2.5 * Auto-update README * Upgrade to 2.5 Co-authored-by: yunohost-bot --- README.md | 2 +- README_fr.md | 2 +- conf/app.src | 4 ++-- manifest.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1adbce4..2307aea 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). -**Shipped version:** 2.4.3~ynh1 +**Shipped version:** 2.5.0~ynh1 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index 4f0bc02..6893651 100644 --- a/README_fr.md +++ b/README_fr.md @@ -20,7 +20,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.4.3~ynh1 +**Version incluse :** 2.5.0~ynh1 **Démo :** https://demo.yunohost.org/wallabag/ diff --git a/conf/app.src b/conf/app.src index 02efccc..fae65d6 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://static.wallabag.org/releases/wallabag-release-2.4.3.tar.gz -SOURCE_SUM=bba4df940cf1a1ac632e134cbf9b9af8d3c1bf89311b2720cf64179e1b431d3a +SOURCE_URL=https://static.wallabag.org/releases/wallabag-release-2.5.0.tar.gz +SOURCE_SUM=7c4ff86d5c08990d37c2b7ddaf1e8096e94edb15353361c8692386a5301bd361 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index 78df8cf..463eb21 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.4.3~ynh1", + "version": "2.5.0~ynh1", "url": "https://www.wallabag.org", "upstream": { "license": "MIT", From fbc698d22c91095ae558cce0551f38fcbb4168d1 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 23 Jul 2022 16:24:16 +0000 Subject: [PATCH 24/45] Auto-update README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0687720..2307aea 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). + **Shipped version:** 2.5.0~ynh1 **Demo:** https://demo.yunohost.org/wallabag/ From c71c9d75fd3da0cdb086fc73184601ea909b5a9b Mon Sep 17 00:00:00 2001 From: JimboJoe Date: Wed, 27 Jul 2022 11:17:23 +0200 Subject: [PATCH 25/45] Fix PHP dependencies (#142) --- scripts/_common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 5f41b6e..5b6181f 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,7 +7,7 @@ YNH_PHP_VERSION="7.4" # dependencies used by the app -pkg_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-json php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-tidy php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-redis php${YNH_PHP_VERSION}-xml" +pkg_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-json php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-tidy php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-redis php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-mbstring php${YNH_PHP_VERSION}-ldap php${YNH_PHP_VERSION}-intl" #================================================= # PERSONAL HELPERS From 9bb528b1ce0e988f42c346267ebaa7c8b925df61 Mon Sep 17 00:00:00 2001 From: lapineige Date: Wed, 27 Jul 2022 11:20:17 +0200 Subject: [PATCH 26/45] Switch version to 2.5.0~ynh2 --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 463eb21..5e1b304 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.5.0~ynh1", + "version": "2.5.0~ynh2", "url": "https://www.wallabag.org", "upstream": { "license": "MIT", From 13924bee3df841446c03eeb3475e9dc5c16d76a2 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Wed, 27 Jul 2022 09:20:20 +0000 Subject: [PATCH 27/45] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2307aea..38bcf63 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). -**Shipped version:** 2.5.0~ynh1 +**Shipped version:** 2.5.0~ynh2 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index 6893651..da4b3c2 100644 --- a/README_fr.md +++ b/README_fr.md @@ -20,7 +20,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.5.0~ynh1 +**Version incluse :** 2.5.0~ynh2 **Démo :** https://demo.yunohost.org/wallabag/ From 2bed9fed5924e66057c6266b2cbcacb8f0c59484 Mon Sep 17 00:00:00 2001 From: lapineige Date: Thu, 28 Jul 2022 21:13:26 +0200 Subject: [PATCH 28/45] 2.5.1 (#146) * v2.5.1 * Auto-update README * v2.5.1 Co-authored-by: yunohost-bot --- README.md | 2 +- README_fr.md | 2 +- conf/app.src | 4 ++-- manifest.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 38bcf63..b7d6298 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). -**Shipped version:** 2.5.0~ynh2 +**Shipped version:** 2.5.1~ynh2 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index da4b3c2..14646fa 100644 --- a/README_fr.md +++ b/README_fr.md @@ -20,7 +20,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.5.0~ynh2 +**Version incluse :** 2.5.1~ynh2 **Démo :** https://demo.yunohost.org/wallabag/ diff --git a/conf/app.src b/conf/app.src index fae65d6..552b4d0 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://static.wallabag.org/releases/wallabag-release-2.5.0.tar.gz -SOURCE_SUM=7c4ff86d5c08990d37c2b7ddaf1e8096e94edb15353361c8692386a5301bd361 +SOURCE_URL=https://static.wallabag.org/releases/wallabag-release-2.5.1.tar.gz +SOURCE_SUM=beeae3588e5287f4853edc5de5c1da6b0ede75c03336e6ff76e84e505f96b219 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index 5e1b304..fafbbb8 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.5.0~ynh2", + "version": "2.5.1~ynh2", "url": "https://www.wallabag.org", "upstream": { "license": "MIT", From ffa3fffa13996c4623b0c203b82ba3a64ce14fa4 Mon Sep 17 00:00:00 2001 From: lapineige Date: Thu, 28 Jul 2022 21:14:01 +0200 Subject: [PATCH 29/45] fix version number --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index fafbbb8..61ca395 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.5.1~ynh2", + "version": "2.5.1~ynh1", "url": "https://www.wallabag.org", "upstream": { "license": "MIT", From b160d6995d7852143f899569b4068f0618403151 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 28 Jul 2022 19:14:04 +0000 Subject: [PATCH 30/45] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b7d6298..238421d 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). -**Shipped version:** 2.5.1~ynh2 +**Shipped version:** 2.5.1~ynh1 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index 14646fa..1fe9801 100644 --- a/README_fr.md +++ b/README_fr.md @@ -20,7 +20,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.5.1~ynh2 +**Version incluse :** 2.5.1~ynh1 **Démo :** https://demo.yunohost.org/wallabag/ From 6e6f3d6dcc43c4ecb516510b0d30ccdf6f8d958b Mon Sep 17 00:00:00 2001 From: lapineige Date: Sat, 30 Jul 2022 19:19:34 +0200 Subject: [PATCH 31/45] fix php7.4-redis conflicting with php-redis (#145) --- scripts/_common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 5b6181f..5bf93e1 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,7 +7,7 @@ YNH_PHP_VERSION="7.4" # dependencies used by the app -pkg_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-json php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-tidy php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-redis php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-mbstring php${YNH_PHP_VERSION}-ldap php${YNH_PHP_VERSION}-intl" +pkg_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-json php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-tidy php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-gettext php-redis php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-mbstring php${YNH_PHP_VERSION}-ldap php${YNH_PHP_VERSION}-intl" #================================================= # PERSONAL HELPERS From f3fb7109a578747692b171e82542a89a6867aae9 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 30 Jul 2022 17:24:34 +0000 Subject: [PATCH 32/45] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b7d6298..1621b7b 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). -**Shipped version:** 2.5.1~ynh2 +**Shipped version:** 2.5.2~ynh2 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index 14646fa..aa3a2e9 100644 --- a/README_fr.md +++ b/README_fr.md @@ -20,7 +20,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.5.1~ynh2 +**Version incluse :** 2.5.2~ynh2 **Démo :** https://demo.yunohost.org/wallabag/ From ebf29a737d5714ae4116e48368ee050333262cad Mon Sep 17 00:00:00 2001 From: lapineige Date: Tue, 2 Aug 2022 23:05:05 +0200 Subject: [PATCH 33/45] Typo in version number (2.5.1, not 2.5.2) --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index d1ade4b..fafbbb8 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.5.2~ynh2", + "version": "2.5.1~ynh2", "url": "https://www.wallabag.org", "upstream": { "license": "MIT", From 2ea6b8d9c2549fd9a9d01e710a13169d3d1bb954 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Tue, 2 Aug 2022 21:05:07 +0000 Subject: [PATCH 34/45] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1621b7b..b7d6298 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). -**Shipped version:** 2.5.2~ynh2 +**Shipped version:** 2.5.1~ynh2 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index aa3a2e9..14646fa 100644 --- a/README_fr.md +++ b/README_fr.md @@ -20,7 +20,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.5.2~ynh2 +**Version incluse :** 2.5.1~ynh2 **Démo :** https://demo.yunohost.org/wallabag/ From 95db8cf952c4379efd5afeb4bd4c81e2c7038daa Mon Sep 17 00:00:00 2001 From: lapineige Date: Thu, 4 Aug 2022 18:08:26 +0200 Subject: [PATCH 35/45] Setup logrotate (#144) * Setup logrotate * Setup logrotate * Setup logrotate * Setup logrotate * Setup logrotate * bum version number * Auto-update README Co-authored-by: yunohost-bot --- README.md | 3 +-- README_fr.md | 3 +-- manifest.json | 2 +- scripts/backup | 6 ++++++ scripts/install | 10 ++++++++++ scripts/remove | 8 ++++++++ scripts/restore | 7 +++++++ scripts/upgrade | 6 ++++++ 8 files changed, 40 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b7d6298..b066f40 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). - -**Shipped version:** 2.5.1~ynh2 +**Shipped version:** 2.5.1~ynh3 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index 14646fa..363d5db 100644 --- a/README_fr.md +++ b/README_fr.md @@ -19,8 +19,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). - -**Version incluse :** 2.5.1~ynh2 +**Version incluse :** 2.5.1~ynh3 **Démo :** https://demo.yunohost.org/wallabag/ diff --git a/manifest.json b/manifest.json index fafbbb8..bc6231b 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.5.1~ynh2", + "version": "2.5.1~ynh3", "url": "https://www.wallabag.org", "upstream": { "license": "MIT", diff --git a/scripts/backup b/scripts/backup index 7c696c7..703fbd6 100644 --- a/scripts/backup +++ b/scripts/backup @@ -55,6 +55,12 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" +#================================================= +# BACKUP LOGROTATE +#================================================= + +ynh_backup --src_path="/etc/logrotate.d/$app" + #================================================= # BACKUP FAIL2BAN CONFIGURATION #================================================= diff --git a/scripts/install b/scripts/install index 5590651..218363f 100644 --- a/scripts/install +++ b/scripts/install @@ -158,6 +158,16 @@ ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_fil set_permissions +#================================================= +# SETUP LOGROTATE +#================================================= + +ynh_script_progression --message="Configuring log rotation..." +# Use logrotate to manage application logfile(s) +touch "$final_path/var/logs/prod.log" +ynh_use_logrotate "$final_path/var/logs/prod.log" +chown $app:www-data "$final_path/var/logs/prod.log" + #================================================= # SETUP FAIL2BAN #================================================= diff --git a/scripts/remove b/scripts/remove index 542c8a4..608fdf6 100644 --- a/scripts/remove +++ b/scripts/remove @@ -23,6 +23,14 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path) #================================================= # STANDARD REMOVE +#================================================= +# REMOVE LOGROTATE CONFIGURATION +#================================================= +ynh_script_progression --message="Removing logrotate configuration..." + +# Remove the app-specific logrotate config +ynh_remove_logrotate + #================================================= # REMOVE THE MYSQL DATABASE #================================================= diff --git a/scripts/restore b/scripts/restore index 17a42dc..333f8dc 100644 --- a/scripts/restore +++ b/scripts/restore @@ -78,6 +78,13 @@ ynh_script_progression --message="Restoring the PHP-FPM configuration..." ynh_restore_file --origin_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" +#================================================= +# RESTORE THE LOGROTATE CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the logrotate configuration..." + +ynh_restore_file --origin_path="/etc/logrotate.d/$app" + #================================================= # RESTORE FAIL2BAN CONFIGURATION #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index 27eff97..3ce5a5e 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -186,6 +186,12 @@ ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_fil #================================================= # GENERIC FINALIZATION +#================================================= +# SETUP LOGROTATE +#================================================= + +ynh_use_logrotate --non-append + #================================================= # SECURE FILES AND DIRECTORIES #================================================= From 27966735154d2b992bf855bc79b188c88a448db4 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 4 Aug 2022 16:08:29 +0000 Subject: [PATCH 36/45] Auto-update README --- README.md | 1 + README_fr.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index b066f40..375f963 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). + **Shipped version:** 2.5.1~ynh3 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index 363d5db..2e5552a 100644 --- a/README_fr.md +++ b/README_fr.md @@ -19,6 +19,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). + **Version incluse :** 2.5.1~ynh3 **Démo :** https://demo.yunohost.org/wallabag/ From 61003e7966bb1e6acc1c97027f9aaa9eade6474c Mon Sep 17 00:00:00 2001 From: tituspijean Date: Tue, 27 Sep 2022 19:59:41 +0200 Subject: [PATCH 37/45] Specify PHP version for Redis (#155) * Specify PHP version for Redis Now available in Bullseye * Auto-update README * Bump requirement to YNH11 for php${version}-redis * Auto-update README Co-authored-by: yunohost-bot --- README.md | 1 + README_fr.md | 3 ++- manifest.json | 2 +- scripts/_common.sh | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 375f963..5c47210 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile **Shipped version:** 2.5.1~ynh3 + **Demo:** https://demo.yunohost.org/wallabag/ ## Screenshots diff --git a/README_fr.md b/README_fr.md index 2e5552a..a6a05bb 100644 --- a/README_fr.md +++ b/README_fr.md @@ -20,7 +20,8 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.5.1~ynh3 +**Version incluse :** 2.5.1~ynh3 + **Démo :** https://demo.yunohost.org/wallabag/ diff --git a/manifest.json b/manifest.json index bc6231b..4943cea 100644 --- a/manifest.json +++ b/manifest.json @@ -20,7 +20,7 @@ "name": "lapineige" }, "requirements": { - "yunohost": ">= 4.3.0" + "yunohost": ">= 11.0" }, "multi_instance": true, "services": [ diff --git a/scripts/_common.sh b/scripts/_common.sh index 3a57c12..ad0074c 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,7 +7,7 @@ YNH_PHP_VERSION="7.4" # dependencies used by the app -pkg_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-json php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-tidy php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-gettext php-redis php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-mbstring php${YNH_PHP_VERSION}-ldap php${YNH_PHP_VERSION}-intl" +pkg_dependencies="php${YNH_PHP_VERSION}-cli php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-json php${YNH_PHP_VERSION}-gd php${YNH_PHP_VERSION}-tidy php${YNH_PHP_VERSION}-curl php${YNH_PHP_VERSION}-gettext php${YNH_PHP_VERSION}-redis php${YNH_PHP_VERSION}-xml php${YNH_PHP_VERSION}-mbstring php${YNH_PHP_VERSION}-ldap php${YNH_PHP_VERSION}-intl" #================================================= From 11de7c50ca09500a6458b846ec1138c0915b5ecd Mon Sep 17 00:00:00 2001 From: lapineige Date: Sat, 29 Oct 2022 21:29:13 +0200 Subject: [PATCH 38/45] 2.5.2 (#158) * 2.5.2 * Auto-update README Co-authored-by: yunohost-bot --- README.md | 1 - README_fr.md | 3 +-- conf/app.src | 4 ++-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5c47210..375f963 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,6 @@ It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile **Shipped version:** 2.5.1~ynh3 - **Demo:** https://demo.yunohost.org/wallabag/ ## Screenshots diff --git a/README_fr.md b/README_fr.md index a6a05bb..2e5552a 100644 --- a/README_fr.md +++ b/README_fr.md @@ -20,8 +20,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.5.1~ynh3 - +**Version incluse :** 2.5.1~ynh3 **Démo :** https://demo.yunohost.org/wallabag/ diff --git a/conf/app.src b/conf/app.src index 552b4d0..1af0e45 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://static.wallabag.org/releases/wallabag-release-2.5.1.tar.gz -SOURCE_SUM=beeae3588e5287f4853edc5de5c1da6b0ede75c03336e6ff76e84e505f96b219 +SOURCE_URL=https://static.wallabag.org/releases/wallabag-release-2.5.2.tar.gz +SOURCE_SUM=43df3d4a8ac63e6dca06e4211808a7614e871886bd46b86d44fbf01802d4ea39 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true From 12c95ff8878e32ebba6a9397f4963f97771ca96f Mon Sep 17 00:00:00 2001 From: lapineige Date: Sat, 29 Oct 2022 21:31:14 +0200 Subject: [PATCH 39/45] v2.5.2 --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 4943cea..1f5fe63 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.5.1~ynh3", + "version": "2.5.2~ynh1", "url": "https://www.wallabag.org", "upstream": { "license": "MIT", From 63db3ce114de066cd98bff0817bd1b108a544686 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 29 Oct 2022 19:31:18 +0000 Subject: [PATCH 40/45] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 375f963..28271ed 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). -**Shipped version:** 2.5.1~ynh3 +**Shipped version:** 2.5.2~ynh1 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index 2e5552a..a6166a7 100644 --- a/README_fr.md +++ b/README_fr.md @@ -20,7 +20,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.5.1~ynh3 +**Version incluse :** 2.5.2~ynh1 **Démo :** https://demo.yunohost.org/wallabag/ From 088f79ee1b99138e26319231062a21965b6d23d1 Mon Sep 17 00:00:00 2001 From: tituspijean Date: Fri, 25 Nov 2022 22:04:43 +0100 Subject: [PATCH 41/45] Add auto-updater (#126) --- .github/workflows/updater.sh | 90 +++++++++++++++++++++++++++++++++++ .github/workflows/updater.yml | 49 +++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 .github/workflows/updater.sh create mode 100644 .github/workflows/updater.yml diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh new file mode 100644 index 0000000..31aea45 --- /dev/null +++ b/.github/workflows/updater.sh @@ -0,0 +1,90 @@ +#!/bin/bash + +#================================================= +# PACKAGE UPDATING HELPER +#================================================= + +# This script is meant to be run by GitHub Actions +# The YunoHost-Apps organisation offers a template Action to run this script periodically +# Since each app is different, maintainers can adapt its contents so as to perform +# automatic actions when a new upstream release is detected. + +#================================================= +# FETCHING LATEST RELEASE AND ITS ASSETS +#================================================= + +# Fetching information +current_version=$(cat manifest.json | jq -j '.version|split("~")[0]') +repo=$(cat manifest.json | jq -j '.upstream.code|split("https://github.com/")[1]') +# Some jq magic is needed, because the latest upstream release is not always the latest version (e.g. security patches for older versions) +version=$(curl --silent "https://api.github.com/repos/$repo/releases" | jq -r '.[] | select( .prerelease != true ) | .tag_name' | sort -V | tail -1) +asset_url="https://static.wallabag.org/releases/wallabag-release-$version.tar.gz" + +# Setting up the environment variables +echo "Current version: $current_version" +echo "Latest release from upstream: $version" +echo "VERSION=$version" >> $GITHUB_ENV +# For the time being, let's assume the script will fail +echo "PROCEED=false" >> $GITHUB_ENV + +# Proceed only if the retrieved version is greater than the current one +if ! dpkg --compare-versions "$current_version" "lt" "$version" ; then + echo "::warning ::No new version available" + exit 0 +# Proceed only if a PR for this new version does not already exist +elif git ls-remote -q --exit-code --heads https://github.com/$GITHUB_REPOSITORY.git ci-auto-update-v$version ; then + echo "::warning ::A branch already exists for this update" + exit 0 +fi + +#================================================= +# UPDATE SOURCE FILES +#================================================= + +echo "Handling asset at $asset_url" + +src="app" +extension="tar.gz" + +# Create the temporary directory +tempdir="$(mktemp -d)" + +# Download sources and calculate checksum +filename=${asset_url##*/} +curl --silent -4 -L $asset_url -o "$tempdir/$filename" +checksum=$(sha256sum "$tempdir/$filename" | head -c 64) + +# Delete temporary directory +rm -rf $tempdir + +# Rewrite source file +cat < conf/$src.src +SOURCE_URL=$asset_url +SOURCE_SUM=$checksum +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=$extension +SOURCE_IN_SUBDIR=true +SOURCE_FILENAME= +SOURCE_EXTRACT=true +EOT +echo "... conf/$src.src updated" + +#================================================= +# SPECIFIC UPDATE STEPS +#================================================= + +# Any action on the app's source code can be done. +# The GitHub Action workflow takes care of committing all changes after this script ends. + +#================================================= +# GENERIC FINALIZATION +#================================================= + +# Replace new version in manifest +echo "$(jq -s --indent 4 ".[] | .version = \"$version~ynh1\"" manifest.json)" > manifest.json + +# No need to update the README, yunohost-bot takes care of it + +# The Action will proceed only if the PROCEED environment variable is set to true +echo "PROCEED=true" >> $GITHUB_ENV +exit 0 diff --git a/.github/workflows/updater.yml b/.github/workflows/updater.yml new file mode 100644 index 0000000..fb72ba0 --- /dev/null +++ b/.github/workflows/updater.yml @@ -0,0 +1,49 @@ +# This workflow allows GitHub Actions to automagically update your app whenever a new upstream release is detected. +# You need to enable Actions in your repository settings, and fetch this Action from the YunoHost-Apps organization. +# This file should be enough by itself, but feel free to tune it to your needs. +# It calls updater.sh, which is where you should put the app-specific update steps. +name: Check for new upstream releases +on: + # Allow to manually trigger the workflow + workflow_dispatch: + # Run it every day at 6:00 UTC + schedule: + - cron: '0 6 * * *' +jobs: + updater: + runs-on: ubuntu-latest + steps: + - name: Fetch the source code + uses: actions/checkout@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Run the updater script + id: run_updater + run: | + # Setting up Git user + git config --global user.name 'yunohost-bot' + git config --global user.email 'yunohost-bot@users.noreply.github.com' + # Run the updater script + /bin/bash .github/workflows/updater.sh + - name: Commit changes + id: commit + if: ${{ env.PROCEED == 'true' }} + run: | + git commit -am "Upgrade to v$VERSION" + - name: Create Pull Request + id: cpr + if: ${{ env.PROCEED == 'true' }} + uses: peter-evans/create-pull-request@v3 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: Update to version ${{ env.VERSION }} + committer: 'yunohost-bot ' + author: 'yunohost-bot ' + signoff: false + base: testing + branch: ci-auto-update-v${{ env.VERSION }} + delete-branch: true + title: 'Upgrade to version ${{ env.VERSION }}' + body: | + Upgrade to v${{ env.VERSION }} + draft: false From 6773a01e74417b32946a7b0a7234a9c0b47b508a Mon Sep 17 00:00:00 2001 From: lapineige Date: Fri, 10 Feb 2023 16:29:40 +0100 Subject: [PATCH 42/45] 2.5.4 (#163) * Wallabag 2.5.4 --------- Co-authored-by: yunohost-bot --- README.md | 4 ++-- README_fr.md | 22 +++++++++---------- conf/app.src | 4 ++-- manifest.json | 2 +- sources/patches/app-02-oauth-workaround.patch | 2 +- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 28271ed..0bcb342 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ It shall NOT be edited by hand. # Wallabag for YunoHost -[![Integration level](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![Working status](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![Working status](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) [![Install Wallabag with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wallabag2) *[Lire ce readme en français.](./README_fr.md)* @@ -21,7 +21,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). -**Shipped version:** 2.5.2~ynh1 +**Shipped version:** 2.5.4~ynh1 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index a6166a7..f1fd6ba 100644 --- a/README_fr.md +++ b/README_fr.md @@ -5,28 +5,28 @@ It shall NOT be edited by hand. # Wallabag pour YunoHost -[![Niveau d'intégration](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) +[![Niveau d’intégration](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) [![Installer Wallabag avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wallabag2) *[Read this readme in english.](./README.md)* -> *Ce package vous permet d'installer Wallabag rapidement et simplement sur un serveur YunoHost. -Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* +> *Ce package vous permet d’installer Wallabag rapidement et simplement sur un serveur YunoHost. +Si vous n’avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l’installer et en profiter.* -## Vue d'ensemble +## Vue d’ensemble [Wallabag](https://www.wallabag.org/) est une application de lecture différée : elle permet simplement d’archiver une page web en ne conservant que le contenu. Les éléments superflus (menus, publicités, etc.) sont supprimés. Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.5.2~ynh1 +**Version incluse :** 2.5.4~ynh1 **Démo :** https://demo.yunohost.org/wallabag/ -## Captures d'écran +## Captures d’écran -![Capture d'écran de Wallabag](./doc/screenshots/screenshot1.webp) +![Capture d’écran de Wallabag](./doc/screenshots/screenshot1.webp) ## Avertissements / informations importantes @@ -55,9 +55,9 @@ Attention : Une mise à jour classique avec l'interface d'administration ou avec ## Documentations et ressources -* Site officiel de l'app : -* Documentation officielle de l'admin : -* Dépôt de code officiel de l'app : +* Site officiel de l’app : +* Documentation officielle de l’admin : +* Dépôt de code officiel de l’app : * Documentation YunoHost pour cette app : * Signaler un bug : @@ -73,4 +73,4 @@ ou sudo yunohost app upgrade wallabag2 -u https://github.com/YunoHost-Apps/wallabag2_ynh/tree/testing --debug ``` -**Plus d'infos sur le packaging d'applications :** +**Plus d’infos sur le packaging d’applications :** \ No newline at end of file diff --git a/conf/app.src b/conf/app.src index 1af0e45..7387187 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://static.wallabag.org/releases/wallabag-release-2.5.2.tar.gz -SOURCE_SUM=43df3d4a8ac63e6dca06e4211808a7614e871886bd46b86d44fbf01802d4ea39 +SOURCE_URL=https://static.wallabag.org/releases/wallabag-release-2.5.4.tar.gz +SOURCE_SUM=c953105e3181f18bf592541a1c46c318c6663ad00d4687052676b02a7d74c618 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=tar.gz SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index 1f5fe63..d96c988 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.5.2~ynh1", + "version": "2.5.4~ynh1", "url": "https://www.wallabag.org", "upstream": { "license": "MIT", diff --git a/sources/patches/app-02-oauth-workaround.patch b/sources/patches/app-02-oauth-workaround.patch index 7636c08..6326570 100644 --- a/sources/patches/app-02-oauth-workaround.patch +++ b/sources/patches/app-02-oauth-workaround.patch @@ -1,6 +1,6 @@ --- a/vendor/friendsofsymfony/oauth-server-bundle/Storage/OAuthStorage.php 2016-02-22 13:57:55.000000000 +0000 +++ b/vendor/friendsofsymfony/oauth-server-bundle/Storage/OAuthStorage.php 2017-04-13 17:16:06.298501506 +0000 -@@ -166,7 +166,7 @@ +@@ -170,7 +170,7 @@ if (null !== $user) { $encoder = $this->encoderFactory->getEncoder($user); From 0d4a85ff57056e6a6d680a9a5ace3ec452348db1 Mon Sep 17 00:00:00 2001 From: lapineige Date: Fri, 10 Feb 2023 16:46:25 +0100 Subject: [PATCH 43/45] v2.5.4 updated --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index d96c988..6b2beda 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "A self hostable read-it-later app", "fr": "Une application de lecture-plus-tard auto-hébergeable" }, - "version": "2.5.4~ynh1", + "version": "2.5.4~ynh2", "url": "https://www.wallabag.org", "upstream": { "license": "MIT", From 6562ad2c4a1c227f9328421ed5f807af4667eae4 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Fri, 10 Feb 2023 15:46:29 +0000 Subject: [PATCH 44/45] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0bcb342..8ec3b07 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ It extracts content so that you can read it when you have time. It provides a web interface, browser (Firefox / Chrome / Opera) add-ons, mobile apps (Android / iOS / Windows Phone) and even on e-reader (PocketBook / Kobo). -**Shipped version:** 2.5.4~ynh1 +**Shipped version:** 2.5.4~ynh2 **Demo:** https://demo.yunohost.org/wallabag/ diff --git a/README_fr.md b/README_fr.md index f1fd6ba..3eaf985 100644 --- a/README_fr.md +++ b/README_fr.md @@ -20,7 +20,7 @@ Si vous n’avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) po Sont disponibles une interface web, des add-ons pour navigateurs (Firefox / Chrome / Opera), des applications pour mobile (Android / iOS / Windows Phone) et même sur liseuse (PocketBook / Kobo). -**Version incluse :** 2.5.4~ynh1 +**Version incluse :** 2.5.4~ynh2 **Démo :** https://demo.yunohost.org/wallabag/ From a3ebfda25805d72be55cc06a2b77656965c4a02a Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Thu, 23 Feb 2023 23:53:47 +0100 Subject: [PATCH 45/45] Upgrade auto-updater (#165) * [autopatch] Upgrade auto-updater * Auto-update README --------- Co-authored-by: tituspijean --- .github/workflows/updater.yml | 4 ++-- README.md | 1 + README_fr.md | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/updater.yml b/.github/workflows/updater.yml index fb72ba0..a56d7cb 100644 --- a/.github/workflows/updater.yml +++ b/.github/workflows/updater.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Fetch the source code - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Run the updater script @@ -33,7 +33,7 @@ jobs: - name: Create Pull Request id: cpr if: ${{ env.PROCEED == 'true' }} - uses: peter-evans/create-pull-request@v3 + uses: peter-evans/create-pull-request@v4 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: Update to version ${{ env.VERSION }} diff --git a/README.md b/README.md index 8ec3b07..37226cd 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ It shall NOT be edited by hand. # Wallabag for YunoHost [![Integration level](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![Working status](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) + [![Install Wallabag with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wallabag2) *[Lire ce readme en français.](./README_fr.md)* diff --git a/README_fr.md b/README_fr.md index 3eaf985..c4e1a32 100644 --- a/README_fr.md +++ b/README_fr.md @@ -6,6 +6,7 @@ It shall NOT be edited by hand. # Wallabag pour YunoHost [![Niveau d’intégration](https://dash.yunohost.org/integration/wallabag2.svg)](https://dash.yunohost.org/appci/app/wallabag2) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/wallabag2.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/wallabag2.maintain.svg) + [![Installer Wallabag avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=wallabag2) *[Read this readme in english.](./README.md)*