From d43bc1185757ee1807d92dea75c68dbd3fdcb201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Thu, 24 Mar 2022 22:03:14 +0100 Subject: [PATCH 01/14] Upgrade gitea to 1.16.5 --- README.md | 2 +- conf/source/arm.src | 4 ++-- conf/source/arm64.src | 4 ++-- conf/source/armv7.src | 4 ++-- conf/source/i386.src | 4 ++-- conf/source/x86-64.src | 4 ++-- manifest.json | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index eac68b3..0b22f4e 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Overview Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. -**Shipped version:** 1.16.4 +**Shipped version:** 1.16.5 Screenshots ----------- diff --git a/conf/source/arm.src b/conf/source/arm.src index 891125c..c42ea56 100644 --- a/conf/source/arm.src +++ b/conf/source/arm.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.4/gitea-1.16.4-linux-arm-6 -SOURCE_SUM=ed5c2fd355c05111c74cdf1ac9f6d184071fa1cabf194cdd11b8eb945db87195 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.5/gitea-1.16.5-linux-arm-6 +SOURCE_SUM=901aa164ac550110213e9a6ec7fb7c38371004ec0fb4218e07bce6eec1623bbf SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/arm64.src b/conf/source/arm64.src index 9d06aef..eba3f5a 100644 --- a/conf/source/arm64.src +++ b/conf/source/arm64.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.4/gitea-1.16.4-linux-arm64 -SOURCE_SUM=570e334a327f4dc1b8412bf0af6423efc52508300ef54a646d63d4838dba0273 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.5/gitea-1.16.5-linux-arm64 +SOURCE_SUM=e442d45e86d67e13c109e3d92ebb3482edc7487167ca284f5188a13246069329 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/armv7.src b/conf/source/armv7.src index f4820a2..4be914d 100644 --- a/conf/source/armv7.src +++ b/conf/source/armv7.src @@ -1,8 +1,8 @@ # The armv7 build is brocken # See : https://github.com/go-gitea/gitea/issues/6700 # Use temporary the armv6 binary -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.4/gitea-1.16.4-linux-arm-6 -SOURCE_SUM=ed5c2fd355c05111c74cdf1ac9f6d184071fa1cabf194cdd11b8eb945db87195 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.5/gitea-1.16.5-linux-arm-6 +SOURCE_SUM=901aa164ac550110213e9a6ec7fb7c38371004ec0fb4218e07bce6eec1623bbf SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/i386.src b/conf/source/i386.src index f9c7fac..671912e 100644 --- a/conf/source/i386.src +++ b/conf/source/i386.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.4/gitea-1.16.4-linux-386 -SOURCE_SUM=016e4c7c99337edf4a44231e872aea4f29575a63efa9b15b39e3319efe962139 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.5/gitea-1.16.5-linux-386 +SOURCE_SUM=1ae85d435c4dd95f4a47f45349d4fa06cbc39de7473ebd9f95bd67676d3ea802 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/x86-64.src b/conf/source/x86-64.src index 4020a72..795fcef 100644 --- a/conf/source/x86-64.src +++ b/conf/source/x86-64.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.4/gitea-1.16.4-linux-amd64 -SOURCE_SUM=49f2469a7aabe3f5dc432b2c967e2d2c6c5c4fad6aae4c1ab4197ebbd159ddd1 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.5/gitea-1.16.5-linux-amd64 +SOURCE_SUM=c0fb4107dc4debf08e6e27fd3383e06dc232ccb410123179c7ae8d7cec60765f SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/manifest.json b/manifest.json index 143aa15..efce17c 100644 --- a/manifest.json +++ b/manifest.json @@ -8,7 +8,7 @@ }, "url": "http://gitea.io", "license": "MIT", - "version": "1.16.4~ynh1", + "version": "1.16.5~ynh1", "maintainer": { "name": "Josué Tille", "email": "josue@tille.ch" From fc1befe9f82bbfbb82f7f2915642c360a56e759d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Fri, 1 Apr 2022 22:54:46 +0200 Subject: [PATCH 02/14] Fix linter --- conf/app.ini | 2 +- conf/nginx.conf | 5 --- doc/DESCRIPTION.md | 1 + doc/DISCLAIMER.md | 77 ++++++++++++++++++++++++++++++++++++++++++++++ manifest.json | 29 +++++------------ scripts/_common.sh | 33 ++------------------ scripts/change_url | 2 +- scripts/install | 16 +++++----- scripts/remove | 2 +- scripts/restore | 9 ++---- scripts/upgrade | 13 +++----- 11 files changed, 107 insertions(+), 82 deletions(-) create mode 100644 doc/DESCRIPTION.md create mode 100644 doc/DISCLAIMER.md diff --git a/conf/app.ini b/conf/app.ini index 820082b..189ce97 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -21,7 +21,7 @@ FORCE_PRIVATE = false DOMAIN = __DOMAIN__ HTTP_PORT = __PORT__ HTTP_ADDR = 127.0.0.1 -ROOT_URL = https://__URL__/ +ROOT_URL = https://__DOMAIN____PATH_URL__ DISABLE_SSH = false SSH_PORT = __SSH_PORT__ OFFLINE_MODE = false diff --git a/conf/nginx.conf b/conf/nginx.conf index 29ffee3..acafbce 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -6,11 +6,6 @@ location __PATH__/ { client_max_body_size 200M; proxy_set_header X-Real-IP $remote_addr; - # Force https - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; } diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md new file mode 100644 index 0000000..d36d1e5 --- /dev/null +++ b/doc/DESCRIPTION.md @@ -0,0 +1 @@ +Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..4969e45 --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,77 @@ +Additional informations +----------------------- + +### Notes on SSH usage + +If you want to use Gitea with ssh and be able to pull/push with you ssh key, your ssh daemon must be properly configured to use private/public keys. Here is a sample configuration of `/etc/ssh/sshd_config` that works with Gitea: + +```bash +PubkeyAuthentication yes +AuthorizedKeysFile /home/%u/.ssh/authorized_keys +ChallengeResponseAuthentication no +PasswordAuthentication no +UsePAM no +``` + +You also need to add your public key to your Gitea profile. + +If you use ssh on another port than 22, you need to add theses lines to your ssh config in `~/.ssh/config`: + +```bash +Host domain.tld + port 2222 # change this with the port you use +``` + +### Upgrade + +By default a backup is made before the upgrade. To avoid this you have theses following possibilites: +- Pass the `NO_BACKUP_UPGRADE` env variable with `1` at each upgrade. By example `NO_BACKUP_UPGRADE=1 yunohost app upgrade gitea`. +- Set the settings `disable_backup_before_upgrade` to `1`. You can set this with this command: + +`yunohost app setting gitea disable_backup_before_upgrade -v 1` + +After this settings will be applied for **all** next upgrade. + +From command line: + +`yunohost app upgrade gitea` + +### Backup + +This app use now the core-only feature of the backup. To keep the integrity of the data and to have a better guarantee of the restoration is recommended to proceed like this: + +- Stop gitea service with theses following command: + +`systemctl stop gitea.service` + +- Launch the backup of gitea with this following command: + +`yunohost backup create --app gitea` + +- Do a backup of your data with your specific strategy (could be with rsync, borg backup or just cp). The data is generally stored in `/home/gitea`. +- Restart the gitea service with theses command: + +`systemctl start gitea.service` + +### Remove + +Due of the backup core only feature the data directory in `/home/gitea` **is not removed**. It need to be removed manually to purge app user data. + +### LFS setup +To use a repository with an `LFS` setup, you need to activate-it on `/opt/gitea/custom/conf/app.ini` +```ini +[server] +LFS_START_SERVER = true +LFS_HTTP_AUTH_EXPIRY = 20m +``` +By default Nginx is setup with a max value to updload files at 200 Mo. It's possible to change this value on `/etc/nginx/conf.d/my.domain.tld.d/gitea.conf`. +``` +client_max_body_size 200M; +``` +Don't forget to restart Gitea `sudo systemctl restart gitea.service`. + +> This settings are restored to the default config when Gitea is updated. Don't forget to restore your setup after all updates. + +### Git command access with HTTPS + +If you want to use the git command (like `git clone`, `git pull`, `git push`), you need to set this app as **public**. diff --git a/manifest.json b/manifest.json index efce17c..53c4388 100644 --- a/manifest.json +++ b/manifest.json @@ -6,6 +6,12 @@ "en": "Lightweight Git forge", "fr": "Forge Git légère" }, + "upstream": { + "license": "free", + "website": "https://gitea.io/", + "admindoc": "https://docs.gitea.io/", + "code": "https://github.com/go-gitea/gitea" + }, "url": "http://gitea.io", "license": "MIT", "version": "1.16.5~ynh1", @@ -29,39 +35,20 @@ "install" : [ { "name": "domain", - "type": "domain", - "ask": { - "en": "Choose a domain for Gitea", - "fr": "Choisissez un domaine pour Gitea" - }, - "example": "domain.org" + "type": "domain" }, { "name": "path", "type": "path", - "ask": { - "en": "Choose a path for Gitea", - "fr": "Choisissez un chemin pour Gitea" - }, - "example": "/gitea", "default": "/gitea" }, { "name": "admin", - "type": "user", - "ask": { - "en": "Choose the Gitea administrator (must be an existing YunoHost user)", - "fr": "Choisissez l'administrateur de Gitea (doit être un utilisateur YunoHost existant)" - }, - "example": "johndoe" + "type": "user" }, { "name": "is_public", "type": "boolean", - "ask": { - "en": "Is it a public site?", - "fr": "Est-ce un site public ?" - }, "help": { "en": "A public server means that everybody is able to access to the main page of the forge, on the public profile of the user and on the public repository. But you still can limit the access to each repository if you set it as private. Note that to be able to use the remote Git command (clone, pull, push) with HTTP and to use the API by (by example with a smartphone), you need to set this application as public.", "fr": "Un serveur public signifie que tout le monde peut accéder à la page principale de la forge, au profil public des utilisateurs et aux dépôts publics. Vous pouvez également définir les dépôts comme étant privés. Notez que pour pouvoir utiliser les commandes Git distantes (clone, pull, push) avec HTTP et pour pouvoir utiliser l'API (par exemple avec un smartphone), vous devez paramétrer cette application comme étant publique." diff --git a/scripts/_common.sh b/scripts/_common.sh index a613b7b..9bfae74 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -4,7 +4,7 @@ app=$YNH_APP_INSTANCE_NAME dbname=$app -dbuser=$app +db_user=$app final_path="/opt/$app" DATADIR="/home/$app" REPO_PATH="$DATADIR/repositories" @@ -53,29 +53,7 @@ config_nginx() { config_gitea() { ssh_port=$(grep -P "Port\s+\d+" /etc/ssh/sshd_config | grep -P -o "\d+") - ynh_backup_if_checksum_is_different --file "$final_path/custom/conf/app.ini" - - cp ../conf/app.ini "$final_path/custom/conf" - usermod -s /bin/bash $app - - if [ "$path_url" = "/" ] - then - ynh_replace_string --match_string __URL__ --replace_string "$domain" --target_file "$final_path/custom/conf/app.ini" - else - ynh_replace_string --match_string __URL__ --replace_string "$domain${path_url%/}" --target_file "$final_path/custom/conf/app.ini" - fi - - ynh_replace_string --match_string __REPOS_PATH__ --replace_string "$REPO_PATH" --target_file "$final_path/custom/conf/app.ini" - ynh_replace_string --match_string __DB_PASSWORD__ --replace_string "$dbpass" --target_file "$final_path/custom/conf/app.ini" - ynh_replace_string --match_string __DB_USER__ --replace_string "$dbuser" --target_file "$final_path/custom/conf/app.ini" - ynh_replace_string --match_string __DOMAIN__ --replace_string "$domain" --target_file "$final_path/custom/conf/app.ini" - ynh_replace_string --match_string __KEY__ --replace_string "$key" --target_file "$final_path/custom/conf/app.ini" - ynh_replace_string --match_string __DATA_PATH__ --replace_string "$DATA_PATH" --target_file "$final_path/custom/conf/app.ini" - ynh_replace_string --match_string __PORT__ --replace_string $port --target_file "$final_path/custom/conf/app.ini" - ynh_replace_string --match_string __APP__ --replace_string $app --target_file "$final_path/custom/conf/app.ini" - ynh_replace_string --match_string __SSH_PORT__ --replace_string $ssh_port --target_file "$final_path/custom/conf/app.ini" - - ynh_store_file_checksum --file "$final_path/custom/conf/app.ini" + ynh_add_config --template="app.ini" --destination="$final_path/custom/conf/app.ini" } set_permission() { @@ -89,10 +67,3 @@ set_permission() { chmod u=rwX,g=rX,o= "/home/$app" chmod u=rwX,g=rX,o= "/var/log/$app" } - -set_access_settings() { - if [ "$is_public" == '1' ]; - then - ynh_permission_update --permission "main" --add "visitors" - fi -} diff --git a/scripts/change_url b/scripts/change_url index e5efd6e..76661b3 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -22,7 +22,7 @@ domain=$YNH_APP_NEW_DOMAIN path_url=$(ynh_normalize_url_path --path_url ${YNH_APP_NEW_PATH:-'/'}) app=$YNH_APP_INSTANCE_NAME -dbpass=$(ynh_app_setting_get --app $app --key mysqlpwd) +DB_PASSWORD=$(ynh_app_setting_get --app $app --key mysqlpwd) admin=$(ynh_app_setting_get --app $app --key adminusername) key=$(ynh_app_setting_get --app $app --key secret_key) port=$(ynh_app_setting_get --app $app --key web_port) diff --git a/scripts/install b/scripts/install index 3bd19b0..bc09736 100644 --- a/scripts/install +++ b/scripts/install @@ -41,7 +41,7 @@ fi # Generate random password and key ynh_script_progression --message="Defining db password and key..." -dbpass=$(ynh_string_random) +DB_PASSWORD=$(ynh_string_random) key=$(ynh_string_random) # Find available ports @@ -49,9 +49,8 @@ port=$(ynh_find_port --port 6000) # Store Settings ynh_script_progression --message="Storing installation settings..." -ynh_app_setting_set --app $app --key mysqlpwd --value $dbpass +ynh_app_setting_set --app $app --key mysqlpwd --value $DB_PASSWORD ynh_app_setting_set --app $app --key adminusername --value $admin -ynh_app_setting_set --app $app --key is_public --value $is_public ynh_app_setting_set --app $app --key secret_key --value $key ynh_app_setting_set --app $app --key web_port --value $port @@ -61,7 +60,7 @@ ynh_app_setting_set --app $app --key web_port --value $port # Initialize database and store mysql password for upgrade ynh_script_progression --message="Configuring MySQL database..." -ynh_mysql_create_db "$dbname" "$dbuser" "$dbpass" +ynh_mysql_create_db "$dbname" "$db_user" "$DB_PASSWORD" # Add users ynh_script_progression --message="Configuring system user..." @@ -99,14 +98,14 @@ ynh_script_progression --message="Configuring application, step 2/2..." systemctl start "$app".service # Wait untill login_source mysql table is created -while ! $(ynh_mysql_connect_as "$dbuser" "$dbpass" "$dbname" <<< "SELECT * FROM login_source;" &>/dev/null) +while ! $(ynh_mysql_connect_as "$db_user" "$DB_PASSWORD" "$dbname" <<< "SELECT * FROM login_source;" &>/dev/null) do sleep 2 done # Add ldap config ynh_replace_string --match_string "__APP__" --replace_string "$app" --target_file ../conf/login_source.sql -ynh_mysql_connect_as "$dbuser" "$dbpass" "$dbname" < ../conf/login_source.sql +ynh_mysql_connect_as "$db_user" "$DB_PASSWORD" "$dbname" < ../conf/login_source.sql # SETUP FAIL2BAN ynh_script_progression --message="Configuring fail2ban..." @@ -118,7 +117,10 @@ ynh_add_fail2ban_config --logpath "/var/log/$app/gitea.log" --failregex ".*Faile # Unprotect root from SSO if public ynh_script_progression --message="Protecting directory" -set_access_settings +if [ "$is_public" == '1' ]; +then + ynh_permission_update --permission "main" --add "visitors" +fi # Create permission ynh_script_progression --message="Configuring permissions" diff --git a/scripts/remove b/scripts/remove index 36ce240..df98a6b 100644 --- a/scripts/remove +++ b/scripts/remove @@ -27,7 +27,7 @@ systemctl stop "$app".service # Drop MySQL database and user ynh_script_progression --message="Removing databases..." ynh_mysql_drop_db "$dbname" 2>/dev/null -ynh_mysql_drop_user "$dbuser" 2>/dev/null +ynh_mysql_drop_user "$db_user" 2>/dev/null # Delete app directory and configurations ynh_script_progression --message="Removing code..." diff --git a/scripts/restore b/scripts/restore index 788a539..524a04c 100644 --- a/scripts/restore +++ b/scripts/restore @@ -19,14 +19,11 @@ ynh_script_progression --message="Loading settings..." # Retrieve old app settings domain=$(ynh_app_setting_get --app $app --key domain) path_url=$(ynh_app_setting_get --app $app --key path) -dbpass=$(ynh_app_setting_get --app $app --key mysqlpwd) +DB_PASSWORD=$(ynh_app_setting_get --app $app --key mysqlpwd) admin=$(ynh_app_setting_get --app $app --key adminusername) port=$(ynh_app_setting_get --app $app --key web_port) upstream_version=$(ynh_app_setting_get $app upstream_version) -# Check domain/path availability with app helper -ynh_webpath_available --domain $domain --path_url $path_url || ynh_die --message "$domain is not available as domain, please use an other domain." - # Check user parameter ynh_user_exists "$admin" \ || ynh_die --message "The chosen admin user does not exist." @@ -48,8 +45,8 @@ ynh_restore # Create and restore the database ynh_script_progression --message="Restoring database..." --weight=3 -ynh_mysql_create_db "$dbname" "$dbuser" "$dbpass" -ynh_mysql_connect_as "$dbuser" "$dbpass" "$dbname" < ./db.sql +ynh_mysql_create_db "$dbname" "$db_user" "$DB_PASSWORD" +ynh_mysql_connect_as "$db_user" "$DB_PASSWORD" "$dbname" < ./db.sql # Restore systemd files systemctl daemon-reload diff --git a/scripts/upgrade b/scripts/upgrade index d736f1c..8d9465f 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -18,10 +18,9 @@ ynh_abort_if_errors ynh_script_progression --message="Loading installation settings..." domain=$(ynh_app_setting_get --app $app --key domain) path_url=$(ynh_normalize_url_path --path_url $(ynh_app_setting_get --app $app --key path)) -dbpass=$(ynh_app_setting_get --app $app --key mysqlpwd) +DB_PASSWORD=$(ynh_app_setting_get --app $app --key mysqlpwd) admin=$(ynh_app_setting_get --app $app --key adminusername) key=$(ynh_app_setting_get --app $app --key secret_key) -is_public=$(ynh_app_setting_get --app $app --key is_public) port=$(ynh_app_setting_get --app $app --key web_port) upstream_version=$(ynh_app_setting_get --app $app --key upstream_version) @@ -56,7 +55,7 @@ ynh_handle_app_migration --migration_id=gogs --migration_list=gogs_migrations if [[ $migration_process -eq 1 ]]; then # Reload variables dbname=$app - dbuser=$app + db_user=$app final_path="/opt/$app" DATADIR="/home/$app" REPO_PATH="$DATADIR/repositories" @@ -74,7 +73,7 @@ if [[ $migration_process -eq 1 ]]; then # Restore authentication from SQL database ynh_replace_string --match_string __APP__ --replace_string "$app" --target_file ../conf/login_source.sql - ynh_mysql_connect_as "$dbuser" "$dbpass" "$dbname" < ../conf/login_source.sql + ynh_mysql_connect_as "$db_user" "$DB_PASSWORD" "$dbname" < ../conf/login_source.sql # Fix hooks if [[ -e $REPO_PATH ]];then @@ -224,11 +223,7 @@ if ! ynh_permission_exists --permission admin; then ynh_permission_create --permission 'admin' --allowed "$admin" # Update ldap config ynh_replace_string --match_string "__APP__" --replace_string "$app" --target_file ../conf/login_source.sql - ynh_mysql_connect_as "$dbuser" "$dbpass" "$dbname" < ../conf/login_source.sql -fi -if [ "$is_public" == '1' ]; -then - ynh_permission_update --permission "main" --add "visitors" + ynh_mysql_connect_as "$db_user" "$DB_PASSWORD" "$dbname" < ../conf/login_source.sql fi # Add gitea to YunoHost's monitored services From 824f64457b010c0faa2d60a0b32825b658521241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Fri, 1 Apr 2022 22:55:40 +0200 Subject: [PATCH 03/14] Add screenshot --- doc/screenshots/screenshot.png | Bin 0 -> 98551 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/screenshots/screenshot.png diff --git a/doc/screenshots/screenshot.png b/doc/screenshots/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4e0350b19dd751933f89addcbd0a11116ca1f8d3 GIT binary patch literal 98551 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
  • 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 Date: Fri, 1 Apr 2022 20:56:23 +0000 Subject: [PATCH 04/14] Auto-update README --- README.md | 95 +++++++++++++-------------------------- README_fr.md | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+), 64 deletions(-) create mode 100644 README_fr.md diff --git a/README.md b/README.md index 0b22f4e..d767b85 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,32 @@ -Gitea package for YunoHost -========================== + +# Gitea for YunoHost -[![Integration level](https://dash.yunohost.org/integration/gitea.svg)](https://dash.yunohost.org/appci/app/gitea) ![](https://ci-apps.yunohost.org/ci/badges/gitea.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/gitea.maintain.svg) -[![Install gitea with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gitea) +[![Integration level](https://dash.yunohost.org/integration/gitea.svg)](https://dash.yunohost.org/appci/app/gitea) ![](https://ci-apps.yunohost.org/ci/badges/gitea.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/gitea.maintain.svg) +[![Install Gitea with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gitea) -> *This package allow you to install gitea 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.* +*[Lire ce readme en français.](./README_fr.md)* -Overview --------- +> *This package allows you to install Gitea 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 Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. -**Shipped version:** 1.16.5 -Screenshots ------------ +**Shipped version:** 1.16.5~ynh1 -![](https://gitea.io/images/screenshot.png) -Documentation -------------- - * Official documentation: https://docs.gitea.io/ - * YunoHost documentation: There no other documentations, feel free to contribute. +## Screenshots -YunoHost specific features --------------------------- +![](./doc/screenshots/screenshot.png) -### Multi-users support - -LDAP and HTTP auth are supported. - -### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/gitea%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/gitea/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/gitea%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/gitea/) - - +## Disclaimers / important information Additional informations ----------------------- @@ -68,10 +52,6 @@ Host domain.tld port 2222 # change this with the port you use ``` -### Architecture - -This package is compatible with amd64, i386 and arm. The package will try to detect it with the command uname -m and fail if it can't detect the architecture. If that happens please open an issue describing your hardware and the result of the command `uname -m`. - ### Upgrade By default a backup is made before the upgrade. To avoid this you have theses following possibilites: @@ -126,36 +106,23 @@ Don't forget to restart Gitea `sudo systemctl restart gitea.service`. If you want to use the git command (like `git clone`, `git pull`, `git push`), you need to set this app as **public**. -Links ------ +## Documentation and resources - * Report a bug: https://framagit.org/YunoHost-Apps/gitea_ynh/issues - * App website: http://gitea.io - * YunoHost website: https://yunohost.org/ +* Official app website: https://gitea.io/ +* Official admin documentation: https://docs.gitea.io/ +* Upstream app code repository: https://github.com/go-gitea/gitea +* YunoHost documentation for this app: https://yunohost.org/app_gitea +* Report a bug: https://github.com/YunoHost-Apps/gitea_ynh/issues ---- +## Developer info -Install -------- +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/gitea_ynh/tree/testing). -From command line: +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/gitea_ynh/tree/testing --debug +or +sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_ynh/tree/testing --debug +``` -`sudo yunohost app install -l gitea https://github.com/YunoHost-Apps/gitea_ynh` - -Upgrade -------- - -From command line: - -`sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_ynh` - -License -------- - -Gitea is published under the MIT License: -https://github.com/go-gitea/gitea/blob/master/LICENSE - -This package is published under the MIT License. - -Todo ----- +**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 new file mode 100644 index 0000000..f6e966f --- /dev/null +++ b/README_fr.md @@ -0,0 +1,124 @@ +# Gitea pour YunoHost + +[![Niveau d'intégration](https://dash.yunohost.org/integration/gitea.svg)](https://dash.yunohost.org/appci/app/gitea) ![](https://ci-apps.yunohost.org/ci/badges/gitea.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/gitea.maintain.svg) +[![Installer Gitea avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gitea) + +*[Read this readme in english.](./README.md)* +*[Lire ce readme en français.](./README_fr.md)* + +> *Ce package vous permet d'installer Gitea 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 + +Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. + + +**Version incluse :** 1.16.5~ynh1 + + + +## Captures d'écran + +![](./doc/screenshots/screenshot.png) + +## Avertissements / informations importantes + +Additional informations +----------------------- + +### Notes on SSH usage + +If you want to use Gitea with ssh and be able to pull/push with you ssh key, your ssh daemon must be properly configured to use private/public keys. Here is a sample configuration of `/etc/ssh/sshd_config` that works with Gitea: + +```bash +PubkeyAuthentication yes +AuthorizedKeysFile /home/%u/.ssh/authorized_keys +ChallengeResponseAuthentication no +PasswordAuthentication no +UsePAM no +``` + +You also need to add your public key to your Gitea profile. + +If you use ssh on another port than 22, you need to add theses lines to your ssh config in `~/.ssh/config`: + +```bash +Host domain.tld + port 2222 # change this with the port you use +``` + +### Upgrade + +By default a backup is made before the upgrade. To avoid this you have theses following possibilites: +- Pass the `NO_BACKUP_UPGRADE` env variable with `1` at each upgrade. By example `NO_BACKUP_UPGRADE=1 yunohost app upgrade gitea`. +- Set the settings `disable_backup_before_upgrade` to `1`. You can set this with this command: + +`yunohost app setting gitea disable_backup_before_upgrade -v 1` + +After this settings will be applied for **all** next upgrade. + +From command line: + +`yunohost app upgrade gitea` + +### Backup + +This app use now the core-only feature of the backup. To keep the integrity of the data and to have a better guarantee of the restoration is recommended to proceed like this: + +- Stop gitea service with theses following command: + +`systemctl stop gitea.service` + +- Launch the backup of gitea with this following command: + +`yunohost backup create --app gitea` + +- Do a backup of your data with your specific strategy (could be with rsync, borg backup or just cp). The data is generally stored in `/home/gitea`. +- Restart the gitea service with theses command: + +`systemctl start gitea.service` + +### Remove + +Due of the backup core only feature the data directory in `/home/gitea` **is not removed**. It need to be removed manually to purge app user data. + +### LFS setup +To use a repository with an `LFS` setup, you need to activate-it on `/opt/gitea/custom/conf/app.ini` +```ini +[server] +LFS_START_SERVER = true +LFS_HTTP_AUTH_EXPIRY = 20m +``` +By default Nginx is setup with a max value to updload files at 200 Mo. It's possible to change this value on `/etc/nginx/conf.d/my.domain.tld.d/gitea.conf`. +``` +client_max_body_size 200M; +``` +Don't forget to restart Gitea `sudo systemctl restart gitea.service`. + +> This settings are restored to the default config when Gitea is updated. Don't forget to restore your setup after all updates. + +### Git command access with HTTPS + +If you want to use the git command (like `git clone`, `git pull`, `git push`), you need to set this app as **public**. + +## Documentations et ressources + +* Site officiel de l'app : https://gitea.io/ +* Documentation officielle de l'admin : https://docs.gitea.io/ +* Dépôt de code officiel de l'app : https://github.com/go-gitea/gitea +* Documentation YunoHost pour cette app : https://yunohost.org/app_gitea +* Signaler un bug : https://github.com/YunoHost-Apps/gitea_ynh/issues + +## Informations pour les développeurs + +Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/gitea_ynh/tree/testing). + +Pour essayer la branche testing, procédez comme suit. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/gitea_ynh/tree/testing --debug +ou +sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_ynh/tree/testing --debug +``` + +**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file From 4c0f81b03507e95d22245d0e66df608b60cd08ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Sat, 23 Apr 2022 19:40:27 +0200 Subject: [PATCH 05/14] Fix install and fix linter --- README.md | 8 ++++---- README_fr.md | 8 ++++---- conf/systemd.service | 4 ++-- doc/DISCLAIMER.md | 6 +++--- scripts/_common.sh | 20 ++++++++++---------- scripts/backup | 2 +- scripts/change_url | 4 ++-- scripts/install | 22 +++++++++++----------- scripts/remove | 2 +- scripts/restore | 10 +++++----- scripts/upgrade | 31 ++++++++++++++++--------------- 11 files changed, 59 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index d767b85..26c64d7 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ If you want to use Gitea with ssh and be able to pull/push with you ssh key, you ```bash PubkeyAuthentication yes -AuthorizedKeysFile /home/%u/.ssh/authorized_keys +AuthorizedKeysFile /home/yunohost.app/%u/.ssh/authorized_keys ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no @@ -78,14 +78,14 @@ This app use now the core-only feature of the backup. To keep the integrity of t `yunohost backup create --app gitea` -- Do a backup of your data with your specific strategy (could be with rsync, borg backup or just cp). The data is generally stored in `/home/gitea`. +- Do a backup of your data with your specific strategy (could be with rsync, borg backup or just cp). The data is generally stored in `/home/yunohost.app/gitea`. - Restart the gitea service with theses command: `systemctl start gitea.service` ### Remove -Due of the backup core only feature the data directory in `/home/gitea` **is not removed**. It need to be removed manually to purge app user data. +Due of the backup core only feature the data directory in `/home/yunohost.app/gitea` **is not removed**. It need to be removed manually to purge app user data. ### LFS setup To use a repository with an `LFS` setup, you need to activate-it on `/opt/gitea/custom/conf/app.ini` @@ -125,4 +125,4 @@ or sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_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:** https://yunohost.org/packaging_apps diff --git a/README_fr.md b/README_fr.md index f6e966f..4bf6086 100644 --- a/README_fr.md +++ b/README_fr.md @@ -33,7 +33,7 @@ If you want to use Gitea with ssh and be able to pull/push with you ssh key, you ```bash PubkeyAuthentication yes -AuthorizedKeysFile /home/%u/.ssh/authorized_keys +AuthorizedKeysFile /home/yunohost.app/%u/.ssh/authorized_keys ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no @@ -74,14 +74,14 @@ This app use now the core-only feature of the backup. To keep the integrity of t `yunohost backup create --app gitea` -- Do a backup of your data with your specific strategy (could be with rsync, borg backup or just cp). The data is generally stored in `/home/gitea`. +- Do a backup of your data with your specific strategy (could be with rsync, borg backup or just cp). The data is generally stored in `/home/yunohost.app/gitea`. - Restart the gitea service with theses command: `systemctl start gitea.service` ### Remove -Due of the backup core only feature the data directory in `/home/gitea` **is not removed**. It need to be removed manually to purge app user data. +Due of the backup core only feature the data directory in `/home/yunohost.app/gitea` **is not removed**. It need to be removed manually to purge app user data. ### LFS setup To use a repository with an `LFS` setup, you need to activate-it on `/opt/gitea/custom/conf/app.ini` @@ -121,4 +121,4 @@ ou sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_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 :** https://yunohost.org/packaging_apps diff --git a/conf/systemd.service b/conf/systemd.service index 31f9fe0..3dcae38 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -15,10 +15,10 @@ After=slapd.service Type=simple User=__APP__ Group=__APP__ -WorkingDirectory=/home/__APP__ +WorkingDirectory=/home/yunohost.app/__APP__ ExecStart=/opt/__APP__/gitea web Restart=always -Environment=USER=__APP__ HOME=/home/__APP__ +Environment=USER=__APP__ HOME=/home/yunohost.app/__APP__ # Sandboxing options to harden security # Depending on specificities of your service/app, you may need to tweak these diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md index 4969e45..f18f681 100644 --- a/doc/DISCLAIMER.md +++ b/doc/DISCLAIMER.md @@ -7,7 +7,7 @@ If you want to use Gitea with ssh and be able to pull/push with you ssh key, you ```bash PubkeyAuthentication yes -AuthorizedKeysFile /home/%u/.ssh/authorized_keys +AuthorizedKeysFile /home/yunohost.app/%u/.ssh/authorized_keys ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no @@ -48,14 +48,14 @@ This app use now the core-only feature of the backup. To keep the integrity of t `yunohost backup create --app gitea` -- Do a backup of your data with your specific strategy (could be with rsync, borg backup or just cp). The data is generally stored in `/home/gitea`. +- Do a backup of your data with your specific strategy (could be with rsync, borg backup or just cp). The data is generally stored in `/home/yunohost.app/gitea`. - Restart the gitea service with theses command: `systemctl start gitea.service` ### Remove -Due of the backup core only feature the data directory in `/home/gitea` **is not removed**. It need to be removed manually to purge app user data. +Due of the backup core only feature the data directory in `/home/yunohost.app/gitea` **is not removed**. It need to be removed manually to purge app user data. ### LFS setup To use a repository with an `LFS` setup, you need to activate-it on `/opt/gitea/custom/conf/app.ini` diff --git a/scripts/_common.sh b/scripts/_common.sh index 9bfae74..26483bc 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -6,10 +6,10 @@ app=$YNH_APP_INSTANCE_NAME dbname=$app db_user=$app final_path="/opt/$app" -DATADIR="/home/$app" -REPO_PATH="$DATADIR/repositories" -DATA_PATH="$DATADIR/data" -SSH_PATH="$DATADIR/.ssh" +datadir="/home/yunohost.app/$app" +repos_path="$datadir/repositories" +data_path="$datadir/data" +ssh_path="$datadir/.ssh" # Detect the system architecture to download the right tarball # NOTE: `uname -m` is more accurate and universal than `arch` @@ -36,10 +36,10 @@ fi create_dir() { mkdir -p "$final_path/data" mkdir -p "$final_path/custom/conf" - mkdir -p "$SSH_PATH" - mkdir -p "$REPO_PATH" - mkdir -p "$DATA_PATH/avatars" - mkdir -p "$DATA_PATH/attachments" + mkdir -p "$ssh_path" + mkdir -p "$repos_path" + mkdir -p "$data_path/avatars" + mkdir -p "$data_path/attachments" mkdir -p "/var/log/$app" } @@ -58,12 +58,12 @@ config_gitea() { set_permission() { chown -R $app:$app "$final_path" - chown -R $app:$app "/home/$app" + chown -R $app:$app "$datadir" chown -R $app:$app "/var/log/$app" chmod u=rwX,g=rX,o= "$final_path" chmod u=rwx,g=rx,o= "$final_path/gitea" chmod u=rwx,g=rx,o= "$final_path/custom/conf/app.ini" - chmod u=rwX,g=rX,o= "/home/$app" + chmod u=rwX,g=rX,o= "$datadir" chmod u=rwX,g=rX,o= "/var/log/$app" } diff --git a/scripts/backup b/scripts/backup index e78d87f..a311d22 100644 --- a/scripts/backup +++ b/scripts/backup @@ -32,7 +32,7 @@ ynh_backup --src_path "$final_path" # Copy the data files ynh_print_info --message="Backing up user data..." -ynh_backup --src_path "$DATADIR" --is_big=1 +ynh_backup --src_path "$datadir" --is_big=1 ynh_print_info --message="Backing up configuration..." diff --git a/scripts/change_url b/scripts/change_url index 76661b3..ed4dfc4 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -22,7 +22,7 @@ domain=$YNH_APP_NEW_DOMAIN path_url=$(ynh_normalize_url_path --path_url ${YNH_APP_NEW_PATH:-'/'}) app=$YNH_APP_INSTANCE_NAME -DB_PASSWORD=$(ynh_app_setting_get --app $app --key mysqlpwd) +db_password=$(ynh_app_setting_get --app $app --key mysqlpwd) admin=$(ynh_app_setting_get --app $app --key adminusername) key=$(ynh_app_setting_get --app $app --key secret_key) port=$(ynh_app_setting_get --app $app --key web_port) @@ -55,7 +55,7 @@ config_gitea # RELOAD services ynh_script_progression --message="Starting services..." -ynh_systemd_action -l "Starting new server: tcp:127.0.0.1:" -p "/var/log/$app/gitea.log" -t 10 -a restart +ynh_systemd_action -l "Starting new Web server: tcp:127.0.0.1:" -p "/var/log/$app/gitea.log" -t 10 -a restart sleep 1 # Store the checksum with the 'INTERNAL_TOKEN' value. diff --git a/scripts/install b/scripts/install index bc09736..fe5f017 100644 --- a/scripts/install +++ b/scripts/install @@ -33,15 +33,15 @@ ynh_user_exists "$admin" \ # Check Final Path availability test ! -e "$final_path" || ynh_die --message "This path already contains a folder" -if [ -e "$DATADIR" ]; then - old_data_dir_path="$DATADIR$(date '+%Y%m%d.%H%M%S')" +if [ -e "$datadir" ]; then + old_data_dir_path="$datadir$(date '+%Y%m%d.%H%M%S')" ynh_print_warn "A data directory already exist. Data was renamed to $old_data_dir_path" - mv "$DATADIR" "$old_data_dir_path" + mv "$datadir" "$old_data_dir_path" fi # Generate random password and key ynh_script_progression --message="Defining db password and key..." -DB_PASSWORD=$(ynh_string_random) +db_password=$(ynh_string_random) key=$(ynh_string_random) # Find available ports @@ -49,7 +49,7 @@ port=$(ynh_find_port --port 6000) # Store Settings ynh_script_progression --message="Storing installation settings..." -ynh_app_setting_set --app $app --key mysqlpwd --value $DB_PASSWORD +ynh_app_setting_set --app $app --key mysqlpwd --value $db_password ynh_app_setting_set --app $app --key adminusername --value $admin ynh_app_setting_set --app $app --key secret_key --value $key ynh_app_setting_set --app $app --key web_port --value $port @@ -60,11 +60,11 @@ ynh_app_setting_set --app $app --key web_port --value $port # Initialize database and store mysql password for upgrade ynh_script_progression --message="Configuring MySQL database..." -ynh_mysql_create_db "$dbname" "$db_user" "$DB_PASSWORD" +ynh_mysql_create_db "$dbname" "$db_user" "$db_password" # Add users ynh_script_progression --message="Configuring system user..." -ynh_system_user_create --username=$app --home_dir=/home/$app --use_shell +ynh_system_user_create --username=$app --home_dir=$datadir --use_shell # Add ssh permission for gitea user adduser $app ssh.app @@ -98,14 +98,14 @@ ynh_script_progression --message="Configuring application, step 2/2..." systemctl start "$app".service # Wait untill login_source mysql table is created -while ! $(ynh_mysql_connect_as "$db_user" "$DB_PASSWORD" "$dbname" <<< "SELECT * FROM login_source;" &>/dev/null) +while ! $(ynh_mysql_connect_as "$db_user" "$db_password" "$dbname" <<< "SELECT * FROM login_source;" &>/dev/null) do sleep 2 done # Add ldap config ynh_replace_string --match_string "__APP__" --replace_string "$app" --target_file ../conf/login_source.sql -ynh_mysql_connect_as "$db_user" "$DB_PASSWORD" "$dbname" < ../conf/login_source.sql +ynh_mysql_connect_as "$db_user" "$db_password" "$dbname" < ../conf/login_source.sql # SETUP FAIL2BAN ynh_script_progression --message="Configuring fail2ban..." @@ -116,7 +116,7 @@ ynh_add_fail2ban_config --logpath "/var/log/$app/gitea.log" --failregex ".*Faile #================================================= # Unprotect root from SSO if public -ynh_script_progression --message="Protecting directory" +ynh_script_progression --message="Configuring permissions..." if [ "$is_public" == '1' ]; then ynh_permission_update --permission "main" --add "visitors" @@ -139,7 +139,7 @@ ynh_app_setting_set --app $app --key upstream_version --value $(ynh_app_upstream # Reload services ynh_script_progression --message="Starting gitea services..." --weight=3 -ynh_systemd_action -l "Starting new server: tcp:127.0.0.1:" -p "/var/log/$app/gitea.log" -t 10 +ynh_systemd_action -l "Starting new Web server: tcp:127.0.0.1:" -p "/var/log/$app/gitea.log" -t 10 sleep 1 # Store the checksum with the 'INTERNAL_TOKEN' value. diff --git a/scripts/remove b/scripts/remove index df98a6b..ebfab83 100644 --- a/scripts/remove +++ b/scripts/remove @@ -58,7 +58,7 @@ yunohost service remove "$app" ynh_script_progression --message="Removing fail2ban configuration..." ynh_remove_fail2ban_config -ynh_print_info --message="Due of the backup core only feature the data directory in '$DATADIR' was not removed. It need to be removed manually to purge app user data." +ynh_print_info --message="Due of the backup core only feature the data directory in '$datadir' was not removed. It need to be removed manually to purge app user data." ynh_script_progression --message="Removal of $app completed" --last sleep 1 diff --git a/scripts/restore b/scripts/restore index 524a04c..7ecb82e 100644 --- a/scripts/restore +++ b/scripts/restore @@ -19,7 +19,7 @@ ynh_script_progression --message="Loading settings..." # Retrieve old app settings domain=$(ynh_app_setting_get --app $app --key domain) path_url=$(ynh_app_setting_get --app $app --key path) -DB_PASSWORD=$(ynh_app_setting_get --app $app --key mysqlpwd) +db_password=$(ynh_app_setting_get --app $app --key mysqlpwd) admin=$(ynh_app_setting_get --app $app --key adminusername) port=$(ynh_app_setting_get --app $app --key web_port) upstream_version=$(ynh_app_setting_get $app upstream_version) @@ -37,7 +37,7 @@ test ! -e "$final_path" || ynh_die --message "This path already contains a folde # Add users ynh_script_progression --message="Configuring system user..." -ynh_system_user_create --username=$app --home_dir=/home/$app --use_shell +ynh_system_user_create --username=$app --home_dir=$datadir --use_shell # Restore all files ynh_script_progression --message="Restoring files..." --weight=10 @@ -45,8 +45,8 @@ ynh_restore # Create and restore the database ynh_script_progression --message="Restoring database..." --weight=3 -ynh_mysql_create_db "$dbname" "$db_user" "$DB_PASSWORD" -ynh_mysql_connect_as "$db_user" "$DB_PASSWORD" "$dbname" < ./db.sql +ynh_mysql_create_db "$dbname" "$db_user" "$db_password" +ynh_mysql_connect_as "$db_user" "$db_password" "$dbname" < ./db.sql # Restore systemd files systemctl daemon-reload @@ -75,7 +75,7 @@ yunohost service add "$app" --log /var/log/"$app"/gitea.log # Reload services ynh_script_progression --message="Reloading services..." systemctl reload nginx.service -ynh_systemd_action -l "Starting new server: tcp:127.0.0.1:" -p "/var/log/$app/gitea.log" -t 10 +ynh_systemd_action -l "Starting new Web server: tcp:127.0.0.1:" -p "/var/log/$app/gitea.log" -t 10 sleep 1 ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade index 8d9465f..330bbcc 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -18,7 +18,7 @@ ynh_abort_if_errors ynh_script_progression --message="Loading installation settings..." domain=$(ynh_app_setting_get --app $app --key domain) path_url=$(ynh_normalize_url_path --path_url $(ynh_app_setting_get --app $app --key path)) -DB_PASSWORD=$(ynh_app_setting_get --app $app --key mysqlpwd) +db_password=$(ynh_app_setting_get --app $app --key mysqlpwd) admin=$(ynh_app_setting_get --app $app --key adminusername) key=$(ynh_app_setting_get --app $app --key secret_key) port=$(ynh_app_setting_get --app $app --key web_port) @@ -57,14 +57,14 @@ if [[ $migration_process -eq 1 ]]; then dbname=$app db_user=$app final_path="/opt/$app" - DATADIR="/home/$app" - REPO_PATH="$DATADIR/repositories" - DATA_PATH="$DATADIR/data" + datadir="/home/""$app" + repos_path="$datadir/repositories" + data_path="$datadir/data" # Replace the user ynh_system_user_delete $old_app test getent passwd "$app" &>/dev/null || \ - useradd -d "$DATADIR" --system --user-group "$app" --shell /bin/bash || \ + useradd -d "$datadir" --system --user-group "$app" --shell /bin/bash || \ ynh_die --message "Unable to create $app system account" # Clean old binary @@ -73,14 +73,14 @@ if [[ $migration_process -eq 1 ]]; then # Restore authentication from SQL database ynh_replace_string --match_string __APP__ --replace_string "$app" --target_file ../conf/login_source.sql - ynh_mysql_connect_as "$db_user" "$DB_PASSWORD" "$dbname" < ../conf/login_source.sql + ynh_mysql_connect_as "$db_user" "$db_password" "$dbname" < ../conf/login_source.sql # Fix hooks - if [[ -e $REPO_PATH ]];then - ls $REPO_PATH/*/*.git/hooks/pre-receive | while read p; do + if [[ -e $repos_path ]];then + ls $repos_path/*/*.git/hooks/pre-receive | while read p; do ynh_secure_remove --file=$p done - ls $REPO_PATH/*/*.git/hooks/post-receive | while read p; do + ls $repos_path/*/*.git/hooks/post-receive | while read p; do ynh_secure_remove --file=$p done fi @@ -88,6 +88,11 @@ if [[ $migration_process -eq 1 ]]; then upstream_version="0.0.1" fi +# Move data directory +if [ -e "/home/""$app" ] && [ ! -e $datadir ]; then + mv "/home/""$app" "$datadir" +fi + #================================================= # STANDARD UPGRADE STEPS #================================================= @@ -223,7 +228,7 @@ if ! ynh_permission_exists --permission admin; then ynh_permission_create --permission 'admin' --allowed "$admin" # Update ldap config ynh_replace_string --match_string "__APP__" --replace_string "$app" --target_file ../conf/login_source.sql - ynh_mysql_connect_as "$db_user" "$DB_PASSWORD" "$dbname" < ../conf/login_source.sql + ynh_mysql_connect_as "$db_user" "$db_password" "$dbname" < ../conf/login_source.sql fi # Add gitea to YunoHost's monitored services @@ -240,13 +245,9 @@ set_permission # Save Version ynh_app_setting_set --app $app --key upstream_version --value $(ynh_app_upstream_version) -# Unprotect root from SSO if public -ynh_script_progression --message="Configuring permissions..." -set_access_settings - # Reload services ynh_script_progression --message="Starting gitea services..." --weight=3 -ynh_systemd_action -l "Starting new server: tcp:127.0.0.1:" -p "/var/log/$app/gitea.log" -t 10 +ynh_systemd_action -l "Starting new Web server: tcp:127.0.0.1:" -p "/var/log/$app/gitea.log" -t 10 sleep 1 # Store the checksum with the 'INTERNAL_TOKEN' value. From 504218bf401693ee5504a44e2a826d70f219cb21 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 23 Apr 2022 19:32:15 +0000 Subject: [PATCH 06/14] 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 26c64d7..1b83ca5 100644 --- a/README.md +++ b/README.md @@ -125,4 +125,4 @@ or sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_ynh/tree/testing --debug ``` -**More info regarding app packaging:** https://yunohost.org/packaging_apps +**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 4bf6086..24923e1 100644 --- a/README_fr.md +++ b/README_fr.md @@ -121,4 +121,4 @@ ou sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_ynh/tree/testing --debug ``` -**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps +**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file From bb48e42d634c718cb49a1463ab37d8183ed764b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Thu, 21 Apr 2022 22:03:16 +0200 Subject: [PATCH 07/14] Upgrade gitea to 1.16.6 --- README.md | 5 ++--- conf/source/arm.src | 4 ++-- conf/source/arm64.src | 4 ++-- conf/source/armv7.src | 4 ++-- conf/source/i386.src | 4 ++-- conf/source/x86-64.src | 4 ++-- manifest.json | 2 +- 7 files changed, 13 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 1b83ca5..671a6db 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. - -**Shipped version:** 1.16.5~ynh1 +**Shipped version:** 1.16.6 @@ -125,4 +124,4 @@ or sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_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:** https://yunohost.org/packaging_apps diff --git a/conf/source/arm.src b/conf/source/arm.src index c42ea56..bebef0b 100644 --- a/conf/source/arm.src +++ b/conf/source/arm.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.5/gitea-1.16.5-linux-arm-6 -SOURCE_SUM=901aa164ac550110213e9a6ec7fb7c38371004ec0fb4218e07bce6eec1623bbf +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.6/gitea-1.16.6-linux-arm-6 +SOURCE_SUM=11b4979f1669aa70a8d31af44865eae19affa68a421e35c654f22e8d5cbff8e8 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/arm64.src b/conf/source/arm64.src index eba3f5a..8a9aa84 100644 --- a/conf/source/arm64.src +++ b/conf/source/arm64.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.5/gitea-1.16.5-linux-arm64 -SOURCE_SUM=e442d45e86d67e13c109e3d92ebb3482edc7487167ca284f5188a13246069329 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.6/gitea-1.16.6-linux-arm64 +SOURCE_SUM=d36e23b6c065c63d6dc6b8bfdd3a13ef02eea81fee17a16f623e049273e8ab8c SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/armv7.src b/conf/source/armv7.src index 4be914d..eb94419 100644 --- a/conf/source/armv7.src +++ b/conf/source/armv7.src @@ -1,8 +1,8 @@ # The armv7 build is brocken # See : https://github.com/go-gitea/gitea/issues/6700 # Use temporary the armv6 binary -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.5/gitea-1.16.5-linux-arm-6 -SOURCE_SUM=901aa164ac550110213e9a6ec7fb7c38371004ec0fb4218e07bce6eec1623bbf +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.6/gitea-1.16.6-linux-arm-6 +SOURCE_SUM=11b4979f1669aa70a8d31af44865eae19affa68a421e35c654f22e8d5cbff8e8 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/i386.src b/conf/source/i386.src index 671912e..50dac3c 100644 --- a/conf/source/i386.src +++ b/conf/source/i386.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.5/gitea-1.16.5-linux-386 -SOURCE_SUM=1ae85d435c4dd95f4a47f45349d4fa06cbc39de7473ebd9f95bd67676d3ea802 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.6/gitea-1.16.6-linux-386 +SOURCE_SUM=5e01b620dc9d0b903b9b57b5b1f9da41bad93fb14d0065b0715bf16c61b425c0 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/x86-64.src b/conf/source/x86-64.src index 795fcef..63d75cb 100644 --- a/conf/source/x86-64.src +++ b/conf/source/x86-64.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.5/gitea-1.16.5-linux-amd64 -SOURCE_SUM=c0fb4107dc4debf08e6e27fd3383e06dc232ccb410123179c7ae8d7cec60765f +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.6/gitea-1.16.6-linux-amd64 +SOURCE_SUM=a96751af12d5e96301a97c280bafb92782e0e9b7a0bbe8960c704c0c0361e576 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/manifest.json b/manifest.json index 53c4388..2919fab 100644 --- a/manifest.json +++ b/manifest.json @@ -14,7 +14,7 @@ }, "url": "http://gitea.io", "license": "MIT", - "version": "1.16.5~ynh1", + "version": "1.16.6~ynh1", "maintainer": { "name": "Josué Tille", "email": "josue@tille.ch" From 88b1de2900e6a41c44bb8ed9c820a6c1864a9304 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 23 Apr 2022 19:41:18 +0000 Subject: [PATCH 08/14] Auto-update README --- README.md | 5 +++-- README_fr.md | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 671a6db..31309bc 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. -**Shipped version:** 1.16.6 + +**Shipped version:** 1.16.6~ynh1 @@ -124,4 +125,4 @@ or sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_ynh/tree/testing --debug ``` -**More info regarding app packaging:** https://yunohost.org/packaging_apps +**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 24923e1..468d13b 100644 --- a/README_fr.md +++ b/README_fr.md @@ -14,7 +14,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. -**Version incluse :** 1.16.5~ynh1 +**Version incluse :** 1.16.6~ynh1 From 0aeea8d2e13af4535bff0225d7b20edde88f7c0f Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Fri, 27 May 2022 12:50:35 +0000 Subject: [PATCH 09/14] Auto-update README --- README.md | 21 ++++++++++----------- README_fr.md | 27 +++++++++++++++------------ 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 31309bc..dfdd091 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ It shall NOT be edited by hand. # Gitea for YunoHost -[![Integration level](https://dash.yunohost.org/integration/gitea.svg)](https://dash.yunohost.org/appci/app/gitea) ![](https://ci-apps.yunohost.org/ci/badges/gitea.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/gitea.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/gitea.svg)](https://dash.yunohost.org/appci/app/gitea) ![Working status](https://ci-apps.yunohost.org/ci/badges/gitea.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/gitea.maintain.svg) [![Install Gitea with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gitea) *[Lire ce readme en français.](./README_fr.md)* @@ -20,11 +20,9 @@ Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to **Shipped version:** 1.16.6~ynh1 - - ## Screenshots -![](./doc/screenshots/screenshot.png) +![Screenshot of Gitea](./doc/screenshots/screenshot.png) ## Disclaimers / important information @@ -108,21 +106,22 @@ If you want to use the git command (like `git clone`, `git pull`, `git push`), y ## Documentation and resources -* Official app website: https://gitea.io/ -* Official admin documentation: https://docs.gitea.io/ -* Upstream app code repository: https://github.com/go-gitea/gitea -* YunoHost documentation for this app: https://yunohost.org/app_gitea -* Report a bug: https://github.com/YunoHost-Apps/gitea_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/gitea_ynh/tree/testing). To try the testing branch, please proceed like that. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/gitea_ynh/tree/testing --debug or sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_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 468d13b..35a4513 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,10 +1,14 @@ + + # Gitea pour YunoHost -[![Niveau d'intégration](https://dash.yunohost.org/integration/gitea.svg)](https://dash.yunohost.org/appci/app/gitea) ![](https://ci-apps.yunohost.org/ci/badges/gitea.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/gitea.maintain.svg) +[![Niveau d'intégration](https://dash.yunohost.org/integration/gitea.svg)](https://dash.yunohost.org/appci/app/gitea) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/gitea.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/gitea.maintain.svg) [![Installer Gitea avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gitea) *[Read this readme in english.](./README.md)* -*[Lire ce readme en français.](./README_fr.md)* > *Ce package vous permet d'installer Gitea 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.* @@ -16,11 +20,9 @@ Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to **Version incluse :** 1.16.6~ynh1 - - ## Captures d'écran -![](./doc/screenshots/screenshot.png) +![Capture d'écran de Gitea](./doc/screenshots/screenshot.png) ## Avertissements / informations importantes @@ -104,21 +106,22 @@ If you want to use the git command (like `git clone`, `git pull`, `git push`), y ## Documentations et ressources -* Site officiel de l'app : https://gitea.io/ -* Documentation officielle de l'admin : https://docs.gitea.io/ -* Dépôt de code officiel de l'app : https://github.com/go-gitea/gitea -* Documentation YunoHost pour cette app : https://yunohost.org/app_gitea -* Signaler un bug : https://github.com/YunoHost-Apps/gitea_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/gitea_ynh/tree/testing). Pour essayer la branche testing, procédez comme suit. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/gitea_ynh/tree/testing --debug ou sudo yunohost app upgrade gitea -u https://github.com/YunoHost-Apps/gitea_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 b2338b32c48270c2a821a5827a999ad6811fba9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Thu, 21 Apr 2022 22:03:16 +0200 Subject: [PATCH 10/14] Upgrade gitea to 1.16.7 --- README.md | 3 +-- conf/source/arm.src | 4 ++-- conf/source/arm64.src | 4 ++-- conf/source/armv7.src | 4 ++-- conf/source/i386.src | 4 ++-- conf/source/x86-64.src | 4 ++-- manifest.json | 2 +- 7 files changed, 12 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index dfdd091..2a0dcb1 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. - -**Shipped version:** 1.16.6~ynh1 +**Shipped version:** 1.16.7 ## Screenshots diff --git a/conf/source/arm.src b/conf/source/arm.src index bebef0b..7167172 100644 --- a/conf/source/arm.src +++ b/conf/source/arm.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.6/gitea-1.16.6-linux-arm-6 -SOURCE_SUM=11b4979f1669aa70a8d31af44865eae19affa68a421e35c654f22e8d5cbff8e8 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.7/gitea-1.16.7-linux-arm-6 +SOURCE_SUM=a8299188b167b49fd16dec8b2442fc0e554bcd6fcb77baf969a86bf1577e8e73 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/arm64.src b/conf/source/arm64.src index 8a9aa84..c7842e4 100644 --- a/conf/source/arm64.src +++ b/conf/source/arm64.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.6/gitea-1.16.6-linux-arm64 -SOURCE_SUM=d36e23b6c065c63d6dc6b8bfdd3a13ef02eea81fee17a16f623e049273e8ab8c +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.7/gitea-1.16.7-linux-arm64 +SOURCE_SUM=208cd07f71b4943e6996008483e5b9bdd21e4df1327c0f1b048e7d4bcd6fd502 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/armv7.src b/conf/source/armv7.src index eb94419..744dec1 100644 --- a/conf/source/armv7.src +++ b/conf/source/armv7.src @@ -1,8 +1,8 @@ # The armv7 build is brocken # See : https://github.com/go-gitea/gitea/issues/6700 # Use temporary the armv6 binary -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.6/gitea-1.16.6-linux-arm-6 -SOURCE_SUM=11b4979f1669aa70a8d31af44865eae19affa68a421e35c654f22e8d5cbff8e8 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.7/gitea-1.16.7-linux-arm-6 +SOURCE_SUM=a8299188b167b49fd16dec8b2442fc0e554bcd6fcb77baf969a86bf1577e8e73 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/i386.src b/conf/source/i386.src index 50dac3c..3ef2b16 100644 --- a/conf/source/i386.src +++ b/conf/source/i386.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.6/gitea-1.16.6-linux-386 -SOURCE_SUM=5e01b620dc9d0b903b9b57b5b1f9da41bad93fb14d0065b0715bf16c61b425c0 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.7/gitea-1.16.7-linux-386 +SOURCE_SUM=1e194585c82c953d5650c92d91aae397c04ee0278ea090691cb29e900cb9fb4c SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/x86-64.src b/conf/source/x86-64.src index 63d75cb..b27a980 100644 --- a/conf/source/x86-64.src +++ b/conf/source/x86-64.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.6/gitea-1.16.6-linux-amd64 -SOURCE_SUM=a96751af12d5e96301a97c280bafb92782e0e9b7a0bbe8960c704c0c0361e576 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.7/gitea-1.16.7-linux-amd64 +SOURCE_SUM=5a01bb160a305ae502cd922b4741e5d26dab06094b381b0d6a03011f74b7a518 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/manifest.json b/manifest.json index 2919fab..a24a5c0 100644 --- a/manifest.json +++ b/manifest.json @@ -14,7 +14,7 @@ }, "url": "http://gitea.io", "license": "MIT", - "version": "1.16.6~ynh1", + "version": "1.16.7~ynh1", "maintainer": { "name": "Josué Tille", "email": "josue@tille.ch" From f9413cf9d6ea54814048be128a111be45cba1df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Mon, 16 May 2022 22:03:13 +0200 Subject: [PATCH 11/14] Upgrade gitea to 1.16.8 --- README.md | 2 +- conf/source/arm.src | 4 ++-- conf/source/arm64.src | 4 ++-- conf/source/armv7.src | 4 ++-- conf/source/i386.src | 4 ++-- conf/source/x86-64.src | 4 ++-- manifest.json | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 2a0dcb1..970b1fd 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 Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. -**Shipped version:** 1.16.7 +**Shipped version:** 1.16.8 ## Screenshots diff --git a/conf/source/arm.src b/conf/source/arm.src index 7167172..87496ec 100644 --- a/conf/source/arm.src +++ b/conf/source/arm.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.7/gitea-1.16.7-linux-arm-6 -SOURCE_SUM=a8299188b167b49fd16dec8b2442fc0e554bcd6fcb77baf969a86bf1577e8e73 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.8/gitea-1.16.8-linux-arm-6 +SOURCE_SUM=5fc53c77655b31b148eed6417dbeed44087e2b1caf83e2583ca3695f209f8664 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/arm64.src b/conf/source/arm64.src index c7842e4..402dded 100644 --- a/conf/source/arm64.src +++ b/conf/source/arm64.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.7/gitea-1.16.7-linux-arm64 -SOURCE_SUM=208cd07f71b4943e6996008483e5b9bdd21e4df1327c0f1b048e7d4bcd6fd502 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.8/gitea-1.16.8-linux-arm64 +SOURCE_SUM=1afed74f74792e35daec5b2fd381e4e06ddda906ed940c8d7f604744d1f65d39 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/armv7.src b/conf/source/armv7.src index 744dec1..c043e31 100644 --- a/conf/source/armv7.src +++ b/conf/source/armv7.src @@ -1,8 +1,8 @@ # The armv7 build is brocken # See : https://github.com/go-gitea/gitea/issues/6700 # Use temporary the armv6 binary -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.7/gitea-1.16.7-linux-arm-6 -SOURCE_SUM=a8299188b167b49fd16dec8b2442fc0e554bcd6fcb77baf969a86bf1577e8e73 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.8/gitea-1.16.8-linux-arm-6 +SOURCE_SUM=5fc53c77655b31b148eed6417dbeed44087e2b1caf83e2583ca3695f209f8664 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/i386.src b/conf/source/i386.src index 3ef2b16..bad282f 100644 --- a/conf/source/i386.src +++ b/conf/source/i386.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.7/gitea-1.16.7-linux-386 -SOURCE_SUM=1e194585c82c953d5650c92d91aae397c04ee0278ea090691cb29e900cb9fb4c +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.8/gitea-1.16.8-linux-386 +SOURCE_SUM=59d9979e0cf20b712692471c389e2aad3f2536290e517674db18003c303a1024 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/conf/source/x86-64.src b/conf/source/x86-64.src index b27a980..3df7ce9 100644 --- a/conf/source/x86-64.src +++ b/conf/source/x86-64.src @@ -1,5 +1,5 @@ -SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.7/gitea-1.16.7-linux-amd64 -SOURCE_SUM=5a01bb160a305ae502cd922b4741e5d26dab06094b381b0d6a03011f74b7a518 +SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.8/gitea-1.16.8-linux-amd64 +SOURCE_SUM=dd504274518b885cfde45af1caf6d6d49a8ad5622c432ae00ea2e57082c55268 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false diff --git a/manifest.json b/manifest.json index a24a5c0..0ab9965 100644 --- a/manifest.json +++ b/manifest.json @@ -14,7 +14,7 @@ }, "url": "http://gitea.io", "license": "MIT", - "version": "1.16.7~ynh1", + "version": "1.16.8~ynh1", "maintainer": { "name": "Josué Tille", "email": "josue@tille.ch" From 90ba718decaa2abb90848d9ddcad17a258ae74d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Sat, 28 May 2022 00:50:27 +0200 Subject: [PATCH 12/14] Fix checksum --- conf/source/x86-64.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/source/x86-64.src b/conf/source/x86-64.src index 3df7ce9..2ebd8df 100644 --- a/conf/source/x86-64.src +++ b/conf/source/x86-64.src @@ -1,5 +1,5 @@ SOURCE_URL=https://github.com/go-gitea/gitea/releases/download/v1.16.8/gitea-1.16.8-linux-amd64 -SOURCE_SUM=dd504274518b885cfde45af1caf6d6d49a8ad5622c432ae00ea2e57082c55268 +SOURCE_SUM=1fedb3dd22a8fa2e815dd0491d3db36b3ebf1bb78eafdb8d3f60f740c8885365 SOURCE_SUM_PRG=sha256sum SOURCE_FILENAME=gitea SOURCE_EXTRACT=false From 29fb4d4a9e0ab5a76768c99ce85648fa69424221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Sat, 28 May 2022 20:12:56 +0200 Subject: [PATCH 13/14] Fix reverse proxy authentication --- conf/app.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/app.ini b/conf/app.ini index 189ce97..542ab68 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -72,5 +72,5 @@ XORM = file [security] INSTALL_LOCK = true SECRET_KEY = __KEY__ -REVERSE_PROXY_AUTHENTICATION_USER = REMOTE_USER +REVERSE_PROXY_AUTHENTICATION_USER = REMOTE-USER REVERSE_PROXY_TRUSTED_PROXIES = 127.0.0.0/8,::1/128 From 9585bb260bf70837f09bc0cd819217217426d5a0 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 28 May 2022 18:15:31 +0000 Subject: [PATCH 14/14] Auto-update README --- README.md | 3 ++- README_fr.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 970b1fd..8d1d8fe 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. -**Shipped version:** 1.16.8 + +**Shipped version:** 1.16.8~ynh1 ## Screenshots diff --git a/README_fr.md b/README_fr.md index 35a4513..98e9f2f 100644 --- a/README_fr.md +++ b/README_fr.md @@ -18,7 +18,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Gitea is a fork of Gogs a self-hosted Git service written in Go. Alternative to Github. -**Version incluse :** 1.16.6~ynh1 +**Version incluse :** 1.16.8~ynh1 ## Captures d'écran