From c2d7f1bcf5540d86bcce23590a12497821643fdc Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Fri, 23 Apr 2021 18:08:09 +0200 Subject: [PATCH 01/10] Upgrade to version 1.6.4 --- README.md | 6 +++--- README_fr.md | 6 +++--- conf/app.src | 4 ++-- manifest.json | 2 +- scripts/install | 10 ---------- 5 files changed, 9 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index baf0e11..9e80c29 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in ## Overview Simple way to manage your todo list in AJAX style. Written in PHP and jQuery. Data stored in MySQL database. -**Shipped version:** 1.6.3 +**Shipped version:** 1.6.4 ## Screenshots @@ -39,8 +39,8 @@ Simple way to manage your todo list in AJAX style. Written in PHP and jQuery. Da #### Supported architectures -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/mytinytodo%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/mytinytodo/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/mytinytodo%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/mytinytodo/) +* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/mytinytodo.svg)](https://ci-apps.yunohost.org/ci/apps/mytinytodo/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/mytinytodo.svg)](https://ci-apps-arm.yunohost.org/ci/apps/mytinytodo/) ## Limitations diff --git a/README_fr.md b/README_fr.md index 6dd44d6..936ea92 100644 --- a/README_fr.md +++ b/README_fr.md @@ -11,7 +11,7 @@ Si vous n'avez pas YunoHost, consultez [le guide](https://yunohost.org/#/install ## Vue d'ensemble Un moyen simple de gérer votre liste de tâches dans le style AJAX. Écrit en PHP et jQuery. Données stockées dans la base de données MySQL. -**Version incluse :** 1.6.3 +**Version incluse :** 1.6.4 ## Captures d'écran @@ -39,8 +39,8 @@ Comment configurer cette application : via le panneau d'administration. #### Architectures supportées -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/mytinytodo%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/mytinytodo/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/mytinytodo%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/mytinytodo/) +* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/mytinytodo.svg)](https://ci-apps.yunohost.org/ci/apps/mytinytodo/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/mytinytodo.svg)](https://ci-apps-arm.yunohost.org/ci/apps/mytinytodo/) ## Limitations diff --git a/conf/app.src b/conf/app.src index b50f8de..f3db7ea 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://www.mytinytodo.net/latest.php -SOURCE_SUM=8bb32d48c96091403bfc9a54f574f92c87e018544ddb4c526b45a5d1a67a9831 +SOURCE_URL=https://github.com/maxpozdeev/mytinytodo/releases/download/v1.6.4/mytinytodo-v1.6.4.zip +SOURCE_SUM=10e9a696bf2d05852393866c255ecf00f16e704783bd85763a65d820861eacc3 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=zip SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index eac3e08..4a502ea 100644 --- a/manifest.json +++ b/manifest.json @@ -8,7 +8,7 @@ }, "url": "http://www.mytinytodo.net/", "license": "GPL-2.0", - "version": "1.6.3~ynh2", + "version": "1.6.4~ynh1", "maintainer": { "name": "plabuse", "email": "pierre.levasseur@free.fr" diff --git a/scripts/install b/scripts/install index c67ddac..30e7879 100644 --- a/scripts/install +++ b/scripts/install @@ -99,16 +99,6 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) # MODIFY A CONFIG FILE #================================================= -# # verifier la valeur de $final_path pour moi il y a /var/www/mytinytodo -# # la nom de la base et l'utilisateur de la base on la même valeur -# # mise en place de la config de la base au niveau de myTinyTodo - -# cp ../conf/config.php $final_path/db/config.php - -# ynh_replace_string --match_string="__LANGUAGE__" --replace_string="$language" --target_file="$final_path/db/config.php" -# ynh_replace_string --match_string="__DB_NAME__" --replace_string="$db_name" --target_file="$final_path/db/config.php" -# ynh_replace_string --match_string="__DB_PWD__" --replace_string="$db_pwd" --target_file="$final_path/db/config.php" - ynh_add_config --template="../conf/config.php" --destination="$final_path/db/config.php" ynh_secure_remove --file="$final_path/setup.php" From 42ab8e8af6614e53df729bfa2dbef0dddaf292ab Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Mon, 3 May 2021 17:44:34 +0200 Subject: [PATCH 02/10] Fix link --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9e80c29..618c7c1 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ *[Lire ce readme en français.](./README_fr.md)* > *This package allows you to install myTinyTodo 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.* +If you don't have YunoHost, please consult [the guide](https://yunohost.org/install) to learn how to install it.* ## Overview Simple way to manage your todo list in AJAX style. Written in PHP and jQuery. Data stored in MySQL database. diff --git a/README_fr.md b/README_fr.md index 936ea92..da40bdd 100644 --- a/README_fr.md +++ b/README_fr.md @@ -6,7 +6,7 @@ *[Read this readme in english.](./README.md)* > *Ce package vous permet d'installer myTinyTodo rapidement et simplement sur un serveur YunoHost. -Si vous n'avez pas YunoHost, consultez [le guide](https://yunohost.org/#/install) pour apprendre comment l'installer.* +Si vous n'avez pas YunoHost, consultez [le guide](https://yunohost.org/install) pour apprendre comment l'installer.* ## Vue d'ensemble Un moyen simple de gérer votre liste de tâches dans le style AJAX. Écrit en PHP et jQuery. Données stockées dans la base de données MySQL. From b1ee7ac6d3f66b1e73d53540d8c4c427e5ba242e Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 11 May 2021 16:14:07 +0200 Subject: [PATCH 03/10] Add templates --- .github/ISSUE_TEMPLATE.md | 55 ++++++++++++++++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 16 ++++++++++ 2 files changed, 71 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/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) From de60975bade90249354470993d02db4bd0f7509b Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 11 May 2021 16:15:32 +0200 Subject: [PATCH 04/10] Remove old templates --- issue_template.md | 55 ----------------------------------------- pull_request_templat.md | 16 ------------ 2 files changed, 71 deletions(-) delete mode 100644 issue_template.md delete mode 100644 pull_request_templat.md diff --git a/issue_template.md b/issue_template.md deleted file mode 100644 index ec30445..0000000 --- a/issue_template.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -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 myTinyTodo 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 mytinytodo - ``` -- *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/pull_request_templat.md b/pull_request_templat.md deleted file mode 100644 index 6c28fc5..0000000 --- a/pull_request_templat.md +++ /dev/null @@ -1,16 +0,0 @@ -## Problem -- *Description of why you made this PR* - -## Solution -- *And how do you fix that problem* - -## PR Status -- [ ] Code finished. -- [ ] Tested with Package_check. -- [ ] Fix or enhancement tested. -- [ ] Upgrade from last version tested. -- [ ] Can be reviewed and tested. - -## Package_check results ---- -* An automatic package_check will be launch at https://ci-apps-dev.yunohost.org/, when you add a specific comment to your Pull Request: "!testme", "!gogogadgetoci" or "By the power of systemd, I invoke The Great App CI to test this Pull Request!"* From ea2ed2de434e375a330700d2c097f3045d30ea9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 6 Jun 2021 09:07:27 +0200 Subject: [PATCH 05/10] Set rights (#17) * Set rights --- .DS_Store | Bin 0 -> 6148 bytes README.md | 64 +++++++++++---------------------- README_fr.md | 64 ++++++++++----------------------- check_process | 11 +++--- doc/.DS_Store | Bin 0 -> 6148 bytes doc/screenshots/shot-v14b1.png | Bin 0 -> 36269 bytes manifest.json | 12 +++++-- scripts/_common.sh | 3 -- scripts/install | 22 +++++++----- scripts/restore | 19 +++++----- scripts/upgrade | 21 ++++++----- 11 files changed, 89 insertions(+), 127 deletions(-) create mode 100644 .DS_Store create mode 100644 doc/.DS_Store create mode 100644 doc/screenshots/shot-v14b1.png diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9b786ce52aa00e90336160999621dda530c39633 GIT binary patch literal 6148 zcmeH~J!%6%427R!7lt%jrkutH$PET#pTHLg*pSB9U`XmYdY*ooY+RcqJc0B^niaeI z6+0^cw);B20~3G^-4$C8Gc)EZoN>eH`*^=zZr4v%yb8QT%#4)@v;EqZh=2%)fCz|y z2rP&|p5oZNF6f!`C?X&N%OK$2hemhpr6V;y9Sku7P}eMnaUHV+wRwTsOGhdzG^^>s zs?}l)@p`mVTV2;nM{2giYWT3av-uQ5vuuYoCN%3I3L+o^GXks3CqMrW^hfjmtVO8^ zh`>K1VC(&HzvD~Q+4|@8y#7&DUk^GpE@$}l6Trle;x~F2_nR-My>z6qLeq~xU{DZ& HrxN%9njH~; literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 618c7c1..5d6b493 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ + + # myTinyTodo for YunoHost [![Integration level](https://dash.yunohost.org/integration/mytinytodo.svg)](https://dash.yunohost.org/appci/app/mytinytodo) ![](https://ci-apps.yunohost.org/ci/badges/mytinytodo.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/mytinytodo.maintain.svg) @@ -5,58 +10,27 @@ *[Lire ce readme en français.](./README_fr.md)* -> *This package allows you to install myTinyTodo 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.* +> *This package allows you to install myTinyTodo 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 -Simple way to manage your todo list in AJAX style. Written in PHP and jQuery. Data stored in MySQL database. -**Shipped version:** 1.6.4 +Open source to-do list script. + +**Shipped version:** 1.6.4~ynh1 + +**Demo:** https://demo.example.com ## Screenshots -![](http://www.mytinytodo.net/images/shot-v14b1.png) +![](./doc/screenshots/shot-v14b1.png) -## Demo +## Documentation and resources -* [Official demo](http://www.mytinytodo.net/demo/) - -## Configuration - - * How to configure this app: From an admin panel. - -## Documentation - - * Official documentation: https://www.mytinytodo.net/faq.php - * YunoHost documentation: If specific documentation is needed, feel free to contribute. - -## YunoHost specific features - -#### Multi-user support - -* Are LDAP and HTTP auth supported? -* Can the app be used by multiple users? - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/mytinytodo.svg)](https://ci-apps.yunohost.org/ci/apps/mytinytodo/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/mytinytodo.svg)](https://ci-apps-arm.yunohost.org/ci/apps/mytinytodo/) - -## Limitations - -* Any known limitations. - -## Additional information - -* Other info you would like to add about this app. - -## Links - - * Report a bug: https://github.com/YunoHost-Apps/mytinytodo_ynh/issues - * App website: http://www.mytinytodo.net/ - * YunoHost website: https://yunohost.org/ - ---- +* Official app website: http://www.mytinytodo.net/ +* Official admin documentation: https://www.mytinytodo.net/faq.php +* YunoHost documentation for this app: https://yunohost.org/app_mytinytodo +* Report a bug: https://github.com/YunoHost-Apps/mytinytodo_ynh/issues ## Developer info @@ -68,3 +42,5 @@ sudo yunohost app install https://github.com/YunoHost-Apps/mytinytodo_ynh/tree/t or sudo yunohost app upgrade mytinytodo -u https://github.com/YunoHost-Apps/mytinytodo_ynh/tree/testing --debug ``` + +**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 da40bdd..2ccba71 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,62 +1,32 @@ # myTinyTodo pour YunoHost [![Niveau d'intégration](https://dash.yunohost.org/integration/mytinytodo.svg)](https://dash.yunohost.org/appci/app/mytinytodo) ![](https://ci-apps.yunohost.org/ci/badges/mytinytodo.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/mytinytodo.maintain.svg) -[![Installer myTinyTodo pour YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mytinytodo) +[![Installer myTinyTodo avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=mytinytodo) -*[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 myTinyTodo rapidement et simplement sur un serveur YunoHost. -Si vous n'avez pas YunoHost, consultez [le guide](https://yunohost.org/install) pour apprendre comment l'installer.* +> *Ce package vous permet d'installer myTinyTodo 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 -Un moyen simple de gérer votre liste de tâches dans le style AJAX. Écrit en PHP et jQuery. Données stockées dans la base de données MySQL. -**Version incluse :** 1.6.4 +Gestionnaire de todo list (GTD). + +**Version incluse :** 1.6.4~ynh1 + +**Démo :** https://demo.example.com ## Captures d'écran -![](http://www.mytinytodo.net/images/shot-v14b1.png) +![](./doc/screenshots/shot-v14b1.png) -## Démo +## Documentations et ressources -* [Démo officielle](http://www.mytinytodo.net/demo/) - -## Configuration - -Comment configurer cette application : via le panneau d'administration. - -## Documentation - - * Documentation officielle : https://www.mytinytodo.net/faq.php - * Documentation YunoHost : Si une documentation spécifique est nécessaire, n'hésitez pas à contribuer. - -## Caractéristiques spécifiques YunoHost - -#### Support multi-utilisateur - -* L'authentification LDAP et HTTP est-elle prise en charge ? **Non** -* L'application peut-elle être utilisée par plusieurs utilisateurs ? **Non** - -#### Architectures supportées - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/mytinytodo.svg)](https://ci-apps.yunohost.org/ci/apps/mytinytodo/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/mytinytodo.svg)](https://ci-apps-arm.yunohost.org/ci/apps/mytinytodo/) - -## Limitations - -* Limitations connues. - -## Informations additionnelles - -* Autres informations que vous souhaitez ajouter sur cette application. - -## Liens - - * Signaler un bug : https://github.com/YunoHost-Apps/mytinytodo_ynh/issues - * Site de l'application : http://www.mytinytodo.net/ - * Site web YunoHost : https://yunohost.org/ - ---- +* Site officiel de l'app : http://www.mytinytodo.net/ +* Documentation officielle de l'admin : https://www.mytinytodo.net/faq.php +* Documentation YunoHost pour cette app : https://yunohost.org/app_mytinytodo +* Signaler un bug : https://github.com/YunoHost-Apps/mytinytodo_ynh/issues ## Informations pour les développeurs @@ -68,3 +38,5 @@ sudo yunohost app install https://github.com/YunoHost-Apps/mytinytodo_ynh/tree/t ou sudo yunohost app upgrade mytinytodo -u https://github.com/YunoHost-Apps/mytinytodo_ynh/tree/testing --debug ``` + +**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/check_process b/check_process index a6abd78..2bdf7ce 100644 --- a/check_process +++ b/check_process @@ -1,9 +1,9 @@ ;; Test complet ; Manifest - domain="domain.tld" (DOMAIN) - path="/path" (PATH) + domain="domain.tld" + path="/path" language="fr" - is_public=1 (PUBLIC|public=1|private=0) + is_public=1 ; Checks pkg_linter=1 setup_sub_dir=1 @@ -12,6 +12,7 @@ setup_private=1 setup_public=1 upgrade=1 + upgrade=1 from_commit=b598d7235944070a438db49710d141b7ece25669 backup_restore=1 multi_instance=0 change_url=1 @@ -19,6 +20,6 @@ Email= Notification=none ;;; Upgrade options - ; commit=CommitHash - name=Name and date of the commit. + ; commit=b598d7235944070a438db49710d141b7ece25669 + name= Upgrade to version 1.6.4 (#14) manifest_arg=domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=666& diff --git a/doc/.DS_Store b/doc/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..30e5aa1e6134f879f04d204862e250ead8ee500b GIT binary patch literal 6148 zcmeHK!EV$r5FKw9h}#OK5{FjeV2ML7dsx_(UZbVuRH=wm^w7dKAr>1cva2N9J*-xW z_y9ftt}XmW;UoBw-aBJ^LDkZ0MJrDMm9seT(Gb&^T&MoeLU3TxK8R()lbSn_%zNlnI`2yp4G#Bsdfr^D%D=Oo7A#Aq~Lw6 z3kqFFky zq2EX9ZxfQBO=k&0;V^R8Si~L_W>XPuDsx8+X4BCxTwLU^v1rqQnUS%M8=1Ki3Nxdl zUzl)UkwxEn20R1T8CbBlA?^P=H=qBnC;2=^gL=TGp5im6P#xroM3|s*i-eo=j literal 0 HcmV?d00001 diff --git a/doc/screenshots/shot-v14b1.png b/doc/screenshots/shot-v14b1.png new file mode 100644 index 0000000000000000000000000000000000000000..8c24854eaa68bdce7018717d6505122b7f48be56 GIT binary patch literal 36269 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 literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index 4a502ea..70507a7 100644 --- a/manifest.json +++ b/manifest.json @@ -6,15 +6,21 @@ "en": "Open source to-do list script.", "fr": "Gestionnaire de todo list (GTD)." }, - "url": "http://www.mytinytodo.net/", - "license": "GPL-2.0", "version": "1.6.4~ynh1", + "url": "http://www.mytinytodo.net/", + "upstream": { + "license": "GPL-2.0", + "website": "http://www.mytinytodo.net/", + "demo": "https://demo.example.com", + "admindoc": "https://www.mytinytodo.net/faq.php" + }, + "license": "GPL-2.0", "maintainer": { "name": "plabuse", "email": "pierre.levasseur@free.fr" }, "requirements": { - "yunohost": ">= 4.1.7" + "yunohost": ">= 4.2.4" }, "multi_instance": false, "services": [ diff --git a/scripts/_common.sh b/scripts/_common.sh index 507f449..fa5e714 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -6,9 +6,6 @@ YNH_PHP_VERSION="7.3" -# dependencies used by the app -pkg_dependencies="" - extra_php_dependencies="php${YNH_PHP_VERSION}-mysql php${YNH_PHP_VERSION}-pdo" #================================================= diff --git a/scripts/install b/scripts/install index 30e7879..64b9c48 100644 --- a/scripts/install +++ b/scripts/install @@ -61,6 +61,14 @@ ynh_mysql_setup_db --db_user=$db_user --db_name=$db_name # # # mysql --debug-check -u $db_user -p$db_pwd $db_user < ../conf/sql/common.sql ynh_mysql_connect_as --user=$db_name --password=$db_pwd --database=$db_name < ../conf/sql/mytinytodo.sql +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Configuring system user..." --weight=1 + +# Create a system user +ynh_system_user_create --username=$app --home_dir="$final_path" + #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -70,6 +78,10 @@ ynh_app_setting_set --app=$app --key=final_path --value=$final_path # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$final_path" +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" + #================================================= # NGINX CONFIGURATION #================================================= @@ -78,14 +90,6 @@ ynh_script_progression --message="Configuring NGINX web server..." --weight=2 # Create a dedicated NGINX config ynh_add_nginx_config -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Configuring system user..." --weight=1 - -# Create a system user -ynh_system_user_create --username=$app - #================================================= # PHP-FPM CONFIGURATION #================================================= @@ -113,7 +117,7 @@ chmod 775 $final_path/db/config.php chmod 775 $final_path/tmp/sessions # je donne les droits a myTinyTodo sur /var/www/mytinyto/* -chown -R $app: $final_path +#chown -R $app: $final_path #================================================= # SETUP SSOWAT diff --git a/scripts/restore b/scripts/restore index 3491624..7a0c791 100644 --- a/scripts/restore +++ b/scripts/restore @@ -48,6 +48,14 @@ test ! -d $final_path \ ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" +#================================================= +# RECREATE THE DEDICATED USER +#================================================= +ynh_script_progression --message="Recreating the dedicated system user..." --weight=3 + +# Create the dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" + #================================================= # RESTORE THE APP MAIN DIR #================================================= @@ -55,19 +63,14 @@ ynh_script_progression --message="Restoring the app main directory..." --weight= ynh_restore_file --origin_path="$final_path" -#================================================= -# RECREATE THE DEDICATED USER -#================================================= -ynh_script_progression --message="Recreating the dedicated system user..." --weight=3 - -# Create the dedicated user (if not existing) -ynh_system_user_create --username=$app +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" #================================================= # RESTORE USER RIGHTS #================================================= -chown -R $app: $final_path chmod 775 $final_path/db/config.php chmod 775 $final_path/tmp/sessions diff --git a/scripts/upgrade b/scripts/upgrade index 2bf5c41..a5829e9 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -56,6 +56,14 @@ ynh_clean_setup () { # Exit if an error occurs during the execution of the script ynh_abort_if_errors +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 + +# Create a dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" + #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -83,6 +91,10 @@ then ynh_secure_remove --file="$tmpdir" fi +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" + #================================================= # NGINX CONFIGURATION #================================================= @@ -91,14 +103,6 @@ ynh_script_progression --message="Upgrading NGINX web server configuration..." - # Create a dedicated NGINX config ynh_add_nginx_config -#================================================= -# CREATE DEDICATED USER -#================================================= -ynh_script_progression --message="Making sure dedicated system user exists..." --weight=1 - -# Create a dedicated user (if not existing) -ynh_system_user_create --username=$app - #================================================= # PHP-FPM CONFIGURATION #================================================= @@ -127,7 +131,6 @@ ynh_secure_remove --file="$final_path/db/todolist.db" chmod 775 $final_path/db/config.php chmod 755 $final_path/tmp/sessions -chown -R $app: $final_path #================================================= # RELOAD NGINX From cacd97cec19186ae82eb1d730895f75958a765f6 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Sat, 19 Jun 2021 16:42:19 +0200 Subject: [PATCH 06/10] Delete .DS_Store --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 9b786ce52aa00e90336160999621dda530c39633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~J!%6%427R!7lt%jrkutH$PET#pTHLg*pSB9U`XmYdY*ooY+RcqJc0B^niaeI z6+0^cw);B20~3G^-4$C8Gc)EZoN>eH`*^=zZr4v%yb8QT%#4)@v;EqZh=2%)fCz|y z2rP&|p5oZNF6f!`C?X&N%OK$2hemhpr6V;y9Sku7P}eMnaUHV+wRwTsOGhdzG^^>s zs?}l)@p`mVTV2;nM{2giYWT3av-uQ5vuuYoCN%3I3L+o^GXks3CqMrW^hfjmtVO8^ zh`>K1VC(&HzvD~Q+4|@8y#7&DUk^GpE@$}l6Trle;x~F2_nR-My>z6qLeq~xU{DZ& HrxN%9njH~; From 15f9cf093d66c624388284fef5c39a20c5398b3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 18 Aug 2021 18:33:51 +0200 Subject: [PATCH 07/10] 1.6.5 (#19) * 1.6.5 --- 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 5d6b493..e7f7a32 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in Open source to-do list script. -**Shipped version:** 1.6.4~ynh1 +**Shipped version:** 1.6.5~ynh1 **Demo:** https://demo.example.com diff --git a/README_fr.md b/README_fr.md index 2ccba71..4efee01 100644 --- a/README_fr.md +++ b/README_fr.md @@ -13,7 +13,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Gestionnaire de todo list (GTD). -**Version incluse :** 1.6.4~ynh1 +**Version incluse :** 1.6.5~ynh1 **Démo :** https://demo.example.com diff --git a/conf/app.src b/conf/app.src index f3db7ea..d46b991 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/maxpozdeev/mytinytodo/releases/download/v1.6.4/mytinytodo-v1.6.4.zip -SOURCE_SUM=10e9a696bf2d05852393866c255ecf00f16e704783bd85763a65d820861eacc3 +SOURCE_URL=https://github.com/maxpozdeev/mytinytodo/releases/download/v1.6.5/mytinytodo-v1.6.5.zip +SOURCE_SUM=5a4edb2dc75f89e6aedf85f174c9d06a30b8e1fd4dbec317bcad15213eeb7223 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=zip SOURCE_IN_SUBDIR=true diff --git a/manifest.json b/manifest.json index 70507a7..4888c55 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Open source to-do list script.", "fr": "Gestionnaire de todo list (GTD)." }, - "version": "1.6.4~ynh1", + "version": "1.6.5~ynh1", "url": "http://www.mytinytodo.net/", "upstream": { "license": "GPL-2.0", From 7699acfb907681f0a1a81f7fb812463032ebed61 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Mon, 30 Aug 2021 09:07:07 +0200 Subject: [PATCH 08/10] Update restore --- scripts/restore | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index 7a0c791..62d4203 100644 --- a/scripts/restore +++ b/scripts/restore @@ -35,8 +35,6 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) #================================================= ynh_script_progression --message="Validating restoration parameters..." --weight=2 -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 " From 4b2552847cba7e01025b16cbf77be844c9301034 Mon Sep 17 00:00:00 2001 From: ericgaspar Date: Tue, 21 Sep 2021 23:58:04 +0200 Subject: [PATCH 09/10] Update manifest.json --- manifest.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 4888c55..9fffc91 100644 --- a/manifest.json +++ b/manifest.json @@ -32,8 +32,7 @@ "install" : [ { "name": "domain", - "type": "domain", - "example": "domaine.org" + "type": "domain" }, { "name": "path", From 0888cc1bdebab14bd1404a3ab9f4807627fa15e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 7 Oct 2021 16:35:37 +0200 Subject: [PATCH 10/10] 1.6.7 (#21) * 1.6.7 --- .github/workflows/updater.sh | 145 ++++++++++++++++++++++++++++++++++ .github/workflows/updater.yml | 49 ++++++++++++ README.md | 7 +- README_fr.md | 7 +- conf/app.src | 6 +- manifest.json | 11 +-- scripts/install | 3 - scripts/upgrade | 24 +++--- 8 files changed, 222 insertions(+), 30 deletions(-) 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..dfd5950 --- /dev/null +++ b/.github/workflows/updater.sh @@ -0,0 +1,145 @@ +#!/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) +assets=($(curl --silent "https://api.github.com/repos/$repo/releases" | jq -r '[ .[] | select(.tag_name=="'$version'").assets[].browser_download_url ] | join(" ") | @sh' | tr -d "'")) + +admin_repo="TryGhost/Admin" +assets+=("https://api.github.com/repos/TryGhost/Admin/zipball/$version") + +# Later down the script, we assume the version has only digits and dots +# Sometimes the release name starts with a "v", so let's filter it out. +# You may need more tweaks here if the upstream repository has different naming conventions. +if [[ ${version:0:1} == "v" || ${version:0:1} == "V" ]]; then + version=${version:1} +fi + +# 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 + +# Each release can hold multiple assets (e.g. binaries for different architectures, source code, etc.) +echo "${#assets[@]} available asset(s)" + +#================================================= +# UPDATE SOURCE FILES +#================================================= + +# Here we use the $assets variable to get the resources published in the upstream release. + +count=0 + +# Let's loop over the array of assets URLs +for asset_url in ${assets[@]}; do + +echo "Handling asset at $asset_url" + +# Assign the asset to a source file in conf/ directory +# Here we base the source file name upon a unique keyword in the assets url (admin vs. update) +# Leave $src empty to ignore the asset +case $asset_url in + *"mytinytodo-"*".zip") + src="app" + ;; + *"/Admin/"*) + src="app" + ;; + *) + src="" + ;; +esac + +# If $src is not empty, let's process the asset +if [ ! -z "$src" ]; then + +# 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 + +# Get extension +if [[ $filename == *.tar.gz ]]; then + extension=tar.gz +else + extension=${filename##*.} +fi + +# 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_EXTRACT=true +EOT +echo "... conf/$src.src updated" + +count=$((count+1)) + +else +echo "... asset ignored" +fi + +done + +if [ $count == 0 ]; then + echo "::warning ::None of the assets were processed." + exit 0 +fi + +#================================================= +# 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..fd6ed60 --- /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 + branch: ci-auto-update-v${{ env.VERSION }} + base: testing + delete-branch: true + title: 'Upgrade to version ${{ env.VERSION }}' + body: | + Upgrade to v${{ env.VERSION }} + draft: false diff --git a/README.md b/README.md index e7f7a32..e152106 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,11 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in ## Overview -Open source to-do list script. +Open source to-do list script -**Shipped version:** 1.6.5~ynh1 +**Shipped version:** 1.6.7~ynh1 -**Demo:** https://demo.example.com +**Demo:** https://www.mytinytodo.net/demo/ ## Screenshots @@ -29,6 +29,7 @@ Open source to-do list script. * Official app website: http://www.mytinytodo.net/ * Official admin documentation: https://www.mytinytodo.net/faq.php +* Upstream app code repository: https://github.com/maxpozdeev/mytinytodo * YunoHost documentation for this app: https://yunohost.org/app_mytinytodo * Report a bug: https://github.com/YunoHost-Apps/mytinytodo_ynh/issues diff --git a/README_fr.md b/README_fr.md index 4efee01..b791ec0 100644 --- a/README_fr.md +++ b/README_fr.md @@ -11,11 +11,11 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour ## Vue d'ensemble -Gestionnaire de todo list (GTD). +Gestionnaire de todo list -**Version incluse :** 1.6.5~ynh1 +**Version incluse :** 1.6.7~ynh1 -**Démo :** https://demo.example.com +**Démo :** https://www.mytinytodo.net/demo/ ## Captures d'écran @@ -25,6 +25,7 @@ Gestionnaire de todo list (GTD). * Site officiel de l'app : http://www.mytinytodo.net/ * Documentation officielle de l'admin : https://www.mytinytodo.net/faq.php +* Dépôt de code officiel de l'app : https://github.com/maxpozdeev/mytinytodo * Documentation YunoHost pour cette app : https://yunohost.org/app_mytinytodo * Signaler un bug : https://github.com/YunoHost-Apps/mytinytodo_ynh/issues diff --git a/conf/app.src b/conf/app.src index d46b991..30ac527 100644 --- a/conf/app.src +++ b/conf/app.src @@ -1,8 +1,6 @@ -SOURCE_URL=https://github.com/maxpozdeev/mytinytodo/releases/download/v1.6.5/mytinytodo-v1.6.5.zip -SOURCE_SUM=5a4edb2dc75f89e6aedf85f174c9d06a30b8e1fd4dbec317bcad15213eeb7223 +SOURCE_URL=https://github.com/maxpozdeev/mytinytodo/releases/download/v1.6.7/mytinytodo-v1.6.7.zip +SOURCE_SUM=1e1bc65a4ba27eecdff71a85c8e292ef54185cdc9108e1e9507f7243df1a0157 SOURCE_SUM_PRG=sha256sum SOURCE_FORMAT=zip SOURCE_IN_SUBDIR=true -SOURCE_FILENAME= SOURCE_EXTRACT=true - diff --git a/manifest.json b/manifest.json index 9fffc91..8f66925 100644 --- a/manifest.json +++ b/manifest.json @@ -3,16 +3,17 @@ "id": "mytinytodo", "packaging_format": 1, "description": { - "en": "Open source to-do list script.", - "fr": "Gestionnaire de todo list (GTD)." + "en": "Open source to-do list script", + "fr": "Gestionnaire de todo list" }, - "version": "1.6.5~ynh1", + "version": "1.6.7~ynh1", "url": "http://www.mytinytodo.net/", "upstream": { "license": "GPL-2.0", "website": "http://www.mytinytodo.net/", - "demo": "https://demo.example.com", - "admindoc": "https://www.mytinytodo.net/faq.php" + "demo": "https://www.mytinytodo.net/demo/", + "admindoc": "https://www.mytinytodo.net/faq.php", + "code": "https://github.com/maxpozdeev/mytinytodo" }, "license": "GPL-2.0", "maintainer": { diff --git a/scripts/install b/scripts/install index 64b9c48..b34d461 100644 --- a/scripts/install +++ b/scripts/install @@ -116,9 +116,6 @@ ynh_secure_remove --file="$final_path/db/todolist.db" chmod 775 $final_path/db/config.php chmod 775 $final_path/tmp/sessions -# je donne les droits a myTinyTodo sur /var/www/mytinyto/* -#chown -R $app: $final_path - #================================================= # SETUP SSOWAT #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index a5829e9..fbbdf0e 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -30,18 +30,6 @@ phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) upgrade_type=$(ynh_check_app_version_changed) -#================================================= -# ENSURE DOWNWARD COMPATIBILITY -#================================================= -ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 - -# Cleaning legacy permissions -if ynh_legacy_permissions_exists; then - ynh_legacy_permissions_delete_all - - ynh_app_setting_delete --app=$app --key=is_public -fi - #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= @@ -56,6 +44,18 @@ ynh_clean_setup () { # Exit if an error occurs during the execution of the script ynh_abort_if_errors +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 + +# Cleaning legacy permissions +if ynh_legacy_permissions_exists; then + ynh_legacy_permissions_delete_all + + ynh_app_setting_delete --app=$app --key=is_public +fi + #================================================= # CREATE DEDICATED USER #=================================================