feat: enable Gitea auto-start

- The Gitea installer now automatically starts the Gitea server after installation.
- Updated the installer to include a `start()` function.
- Added PostgreSQL installation and configuration to the Gitea installer.
- Improved error handling and logging.
- Updated configuration file template for better clarity and consistency.
- Renamed some variables for better readability.

Co-authored-by: mariobassem12 <mariobassem12@gmail.com>
This commit is contained in:
Mahmoud Emad
2025-01-08 12:26:03 +02:00
parent e2a2f22571
commit d6cb55abb1
5 changed files with 103 additions and 66 deletions

View File

@@ -5,7 +5,7 @@ import freeflowuniverse.herolib.core
import freeflowuniverse.herolib.ui.console
import freeflowuniverse.herolib.installers.base
import freeflowuniverse.herolib.installers.ulist
import freeflowuniverse.herolib.installers.db.postgresql as postgresinstaller
import freeflowuniverse.herolib.installers.db.postgresql as postgres_installer
import freeflowuniverse.herolib.installers.virt.podman as podman_installer
import freeflowuniverse.herolib.osal.zinit
import os
@@ -15,7 +15,7 @@ fn installed() !bool {
mut podman := podman_installer.get()!
podman.install()!
cmd := 'gitea version'
cmd := 'gitea -v'
result := os.execute(cmd)
if result.exit_code != 0 {
@@ -24,6 +24,23 @@ fn installed() !bool {
return true
}
fn install_postgres(cfg GiteaServer) ! {
postgres_heroscript := "
!!postgresql.configure
name: '${cfg.database_name}'
user: '${cfg.database_user}'
password: '${cfg.database_passwd}'
host: '${cfg.database_host}'
port: ${cfg.database_port}
volume_path:'/var/lib/postgresql/data'
container_name: 'herocontainer_postgresql'
"
postgres_installer.play(heroscript: postgres_heroscript)!
mut postgres := postgres_installer.get()!
postgres.install()!
}
fn install() ! {
if installed()! {
console.print_header('gitea binaraies already installed')
@@ -31,13 +48,12 @@ fn install() ! {
}
console.print_header('install gitea')
cfg := get()!
// make sure we install base on the node
base.install()!
install_postgres(cfg)!
mut postgres := postgresinstaller.get()!
postgres.install()!
cfg := get()!
platform := core.platform()!
mut download_link := ''
@@ -109,6 +125,9 @@ fn upload() ! {
fn startupcmd() ![]zinit.ZProcessNewArgs {
mut res := []zinit.ZProcessNewArgs{}
server := get()!
cfg_file := $tmpl('./templates/app.ini')
// TODO: We need to finish the work here
// THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED
// res << zinit.ZProcessNewArgs{
// name: 'gitea'

View File

@@ -170,7 +170,7 @@ pub fn (mut self GiteaServer) start() ! {
}
time.sleep(100 * time.millisecond)
}
return error('gitea did not install properly.')
return error('cannot start gitea')
}
pub fn (mut self GiteaServer) install_start(args InstallArgs) ! {

View File

@@ -26,6 +26,11 @@ pub fn heroscript_default() !string {
lfs_jwt_secret: ''
internal_token: ''
secret_key: ''
database_passwd: 'postgres'
database_name: 'postgres'
database_user: 'postgres'
database_host: 'localhost'
database_port: 5432
"
return heroscript
@@ -38,20 +43,26 @@ pub mut:
name string = 'default'
// reset bool
version string = '1.22.6'
path string = '/data/gitea'
passwd string
postgresql_name string = 'default'
mail_from string = 'git@meet.tf'
smtp_addr string = 'smtp-relay.brevo.com'
smtp_login string @[required]
smtp_port int = 587
smtp_passwd string
domain string @[required]
jwt_secret string
lfs_jwt_secret string
internal_token string
secret_key string
version string = '1.22.6'
path string = '/data/gitea'
passwd string
mail_from string = 'git@meet.tf'
smtp_addr string = 'smtp-relay.brevo.com'
smtp_login string @[required]
smtp_port int = 587
smtp_passwd string
domain string @[required]
jwt_secret string
lfs_jwt_secret string
internal_token string
secret_key string
// Database config
database_passwd string = 'postgres'
database_name string = 'postgres'
database_user string = 'postgres'
database_host string = 'localhost'
database_port int = 5432
process ?zinit.ZProcess
path_config pathlib.Path
@@ -60,21 +71,27 @@ pub mut:
fn cfg_play(p paramsparser.Params) !GiteaServer {
// THIS IS EXAMPLE CODE AND NEEDS TO BE CHANGED IN LINE WITH struct above
mut mycfg := GiteaServer{
name: p.get_default('name', 'default')!
version: p.get_default('version', '1.22.6')!
path: p.get_default('path', '/data/gitea')!
passwd: p.get('passwd')!
postgresql_name: p.get_default('postgresql_name', 'default')!
mail_from: p.get_default('mail_from', 'git@meet.tf')!
smtp_addr: p.get_default('smtp_addr', 'smtp-relay.brevo.com')!
smtp_login: p.get('smtp_login')!
smtp_port: p.get_int_default('smtp_port', 587)!
smtp_passwd: p.get('smtp_passwd')!
domain: p.get('domain')!
jwt_secret: p.get('jwt_secret')!
lfs_jwt_secret: p.get('lfs_jwt_secret')!
internal_token: p.get('internal_token')!
secret_key: p.get('secret_key')!
name: p.get_default('name', 'default')!
version: p.get_default('version', '1.22.6')!
path: p.get_default('path', '/data/gitea')!
passwd: p.get('passwd')!
mail_from: p.get_default('mail_from', 'git@meet.tf')!
smtp_addr: p.get_default('smtp_addr', 'smtp-relay.brevo.com')!
smtp_login: p.get('smtp_login')!
smtp_port: p.get_int_default('smtp_port', 587)!
smtp_passwd: p.get('smtp_passwd')!
domain: p.get('domain')!
jwt_secret: p.get('jwt_secret')!
lfs_jwt_secret: p.get('lfs_jwt_secret')!
internal_token: p.get('internal_token')!
secret_key: p.get('secret_key')!
// Set database config
database_passwd: p.get_default('database_passwd', 'postgres')!
database_name: p.get_default('database_name', 'postgres')!
database_user: p.get_default('database_user', 'postgres')!
database_host: p.get_default('database_host', 'localhost')!
database_port: p.get_int_default('database_port', 5432)!
}
return mycfg

View File

@@ -1,66 +1,66 @@
APP_NAME = ${server.config.name}
APP_NAME = ${server.name}
RUN_MODE = prod
RUN_USER = git
WORK_PATH = ${server.config.path}
WORK_PATH = ${server.path}
[repository]
ROOT = ${server.config.path}/gitrepo
ROOT = ${server.path}/gitrepo
[repository.local]
LOCAL_COPY_PATH = ${server.config.path}/localrepo
LOCAL_COPY_PATH = ${server.path}/localrepo
[repository.upload]
TEMP_PATH = ${server.config.path}/uploads
TEMP_PATH = ${server.path}/uploads
[server]
APP_DATA_PATH = ${server.config.domain}
DOMAIN = ${server.config.domain}
SSH_DOMAIN = ${server.config.domain}
APP_DATA_PATH = ${server.domain}
DOMAIN = ${server.domain}
SSH_DOMAIN = ${server.domain}
SSH_PORT = 22
SSH_LISTEN_PORT = 22
HTTP_PORT = 3000
ROOT_URL = https://${server.config.domain}
ROOT_URL = https://${server.domain}
DISABLE_SSH = false
LFS_START_SERVER = true
LFS_JWT_SECRET = ${server.config.lfs_jwt_secret}
LFS_JWT_SECRET = ${server.lfs_jwt_secret}
OFFLINE_MODE = false
[database]
PATH = ${server.config.path}/gitea.db
PATH = ${server.path}/gitea.db
DB_TYPE = postgres
HOST = localhost:5432
NAME = gitea
USER = root
PASSWD = ${db.config.passwd}
HOST = ${server.database_host}:${server.database_port}
NAME = ${server.database_name}
USER = ${server.database_user}
PASSWD = ${server.database_passwd}
LOG_SQL = false
SCHEMA =
SSL_MODE = disable
[indexer]
ISSUE_INDEXER_PATH = ${server.config.path}/indexers/issues.bleve
ISSUE_INDEXER_PATH = ${server.path}/indexers/issues.bleve
[session]
PROVIDER_CONFIG = ${server.config.path}/sessions
PROVIDER_CONFIG = ${server.path}/sessions
PROVIDER = file
[picture]
AVATAR_UPLOAD_PATH = ${server.config.path}/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = ${server.config.path}/repo-avatars
AVATAR_UPLOAD_PATH = ${server.path}/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = ${server.path}/repo-avatars
[attachment]
PATH = ${server.config.path}/attachments
PATH = ${server.path}/attachments
[log]
MODE = console
LEVEL = info
ROOT_PATH = ${server.config.path}/log
ROOT_PATH = ${server.path}/log
[security]
INSTALL_LOCK = true
SECRET_KEY = ${server.config.secret_key}
SECRET_KEY = ${server.secret_key}
REVERSE_PROXY_LIMIT = 1
REVERSE_PROXY_TRUSTED_PROXIES = *
INTERNAL_TOKEN = ${server.config.internal_token}
INTERNAL_TOKEN = ${server.internal_token}
PASSWORD_HASH_ALGO = pbkdf2
[service]
@@ -76,16 +76,16 @@ DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply.localhost
[lfs]
PATH = ${server.config.path}/lfs
PATH = ${server.path}/lfs
[mailer]
ENABLED = true
FROM = ${server.config.mail_from}
FROM = ${server.mail_from}
; PROTOCOL = smtps
SMTP_ADDR = ${server.config.smtp_addr}
SMTP_PORT = ${server.config.smpt_port}
USER = ${server.config.smtp_login}
PASSWD = ${server.config.smtp_passwd}
SMTP_ADDR = ${server.smtp_addr}
SMTP_PORT = ${server.smpt_port}
USER = ${server.smtp_login}
PASSWD = ${server.smtp_passwd}
[openid]
ENABLE_OPENID_SIGNIN = true
@@ -101,7 +101,7 @@ DEFAULT_MERGE_STYLE = merge
DEFAULT_TRUST_MODEL = committer
[oauth2]
JWT_SECRET = ${server.config.jwt_secret}
JWT_SECRET = ${server.jwt_secret}
[actions]
ENABLED=true