mirror of
https://github.com/YunoHost-Apps/penpot_ynh.git
synced 2024-09-03 19:56:56 +02:00
213 lines
8.8 KiB
Bash
213 lines
8.8 KiB
Bash
#!/bin/bash
|
|
|
|
#=================================================
|
|
# GENERIC START
|
|
#=================================================
|
|
# IMPORT GENERIC HELPERS
|
|
#=================================================
|
|
source _common.sh
|
|
source /usr/share/yunohost/helpers
|
|
|
|
|
|
|
|
redis_db=$(ynh_redis_get_free_db)
|
|
secret_key=$(ynh_string_random --length=40)
|
|
main_domain=$(yunohost domain list --output-as plain | grep -A1 -e '#main' | tail -n 1)
|
|
|
|
ynh_app_setting_set --app=$app --key=redis_db --value=$redis_db
|
|
ynh_app_setting_set --app=$app --key=secret_key --value=$secret_key
|
|
ynh_app_setting_set --app=$app --key=main_domain --value=$main_domain
|
|
|
|
#=================================================
|
|
# INSTALL DEPENDENCIES
|
|
#=================================================
|
|
|
|
ynh_script_progression --message="Installing dependencies..." --weight=10
|
|
|
|
# Install Nodejs
|
|
ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version
|
|
ynh_use_nodejs
|
|
|
|
ynh_setup_source --dest_dir="$install_dir/jdk" --source_id="jdk"
|
|
export JAVA_HOME=$install_dir/jdk
|
|
|
|
chown -R $app:www-data "$install_dir"
|
|
tmp_dir=$(mktemp -d)
|
|
|
|
pushd $tmp_dir
|
|
curl -L -O https://github.com/clojure/brew-install/releases/latest/download/linux-install.sh
|
|
chmod +x linux-install.sh
|
|
ynh_exec_warn_less ./linux-install.sh -p $install_dir/clojure
|
|
popd
|
|
|
|
ynh_secure_remove --file=$tmp_dir
|
|
|
|
ynh_setup_source --dest_dir="$install_dir/babashka" --source_id="babashka"
|
|
|
|
export PATH=$JAVA_HOME/bin:$install_dir/clojure/bin:$install_dir/babashka:$PATH
|
|
|
|
#=================================================
|
|
# APP "BUILD" (DEPLOYING SOURCES, VENV, COMPILING ETC)
|
|
#=================================================
|
|
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
|
#=================================================
|
|
ynh_script_progression --message="Setting up source files..."
|
|
|
|
ynh_setup_source --dest_dir="$install_dir/build"
|
|
|
|
chown -R $app:www-data "$install_dir"
|
|
chmod -R o-rwx "$install_dir"
|
|
|
|
#=================================================
|
|
# INSTALL APP
|
|
#=================================================
|
|
ynh_script_progression --message="Building frontend..." --weight=5
|
|
|
|
pushd $install_dir/build/frontend
|
|
ynh_exec_warn_less env $ynh_node_load_PATH COREPACK_ENABLE_DOWNLOAD_PROMPT=0 corepack enable
|
|
ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH COREPACK_ENABLE_DOWNLOAD_PROMPT=0 corepack enable
|
|
ynh_exec_warn_less ynh_exec_as "$app" env $ynh_node_load_PATH COREPACK_ENABLE_DOWNLOAD_PROMPT=0 corepack prepare --activate
|
|
ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH NODE_ENV=production COREPACK_ENABLE_DOWNLOAD_PROMPT=0 yarn install --immutable
|
|
|
|
# ynh_exec_warn_less
|
|
ynh_exec_warn_less ynh_exec_as $app env PATH=$PATH JAVA_HOME=$JAVA_HOME NODE_ENV=production clojure -J-Xms100M -J-Xmx800M -J-XX:+UseSerialGC -M:dev:shadow-cljs release main --config-merge "{:release-version \"${current_hash}\"}"
|
|
|
|
ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH NODE_ENV=production yarn run compile
|
|
|
|
ynh_replace_string --match_string="%version%" --replace_string="$version" --target_file="$install_dir/build/frontend/resources/public/index.html"
|
|
ynh_replace_string --match_string="%buildDate%" --replace_string="$build_date" --target_file="$install_dir/build/frontend/resources/public/index.html"
|
|
#echo "$version" > target/version.txt;
|
|
popd
|
|
|
|
mkdir -p $install_dir/frontend
|
|
mv $install_dir/build/frontend/resources/public/* $install_dir/frontend
|
|
chown -R $app:www-data $install_dir/frontend
|
|
chmod -R 750 $install_dir/frontend
|
|
|
|
ynh_script_progression --message="Building backend..." --weight=5
|
|
|
|
pushd $install_dir/build/backend
|
|
mkdir -p target/classes;
|
|
mkdir -p target/dist;
|
|
echo "$version" > target/classes/version.txt;
|
|
cp ../CHANGES.md target/classes/changelog.md;
|
|
chown -R $app:$app target
|
|
|
|
ynh_exec_warn_less ynh_exec_as $app env PATH=$PATH JAVA_HOME=$JAVA_HOME clojure -T:build jar;
|
|
mv target/penpot.jar target/dist/penpot.jar
|
|
cp resources/log4j2.xml target/dist/log4j2.xml
|
|
cp scripts/run.template.sh target/dist/run.sh
|
|
chmod +x target/dist/run.sh;
|
|
|
|
# Prefetch templates
|
|
mkdir builtin-templates;
|
|
bb ./scripts/prefetch-templates.clj resources/app/onboarding.edn builtin-templates/
|
|
cp -r builtin-templates target/dist/
|
|
popd
|
|
|
|
mkdir -p $install_dir/backend
|
|
mv $install_dir/build/backend/target/dist/* $install_dir/backend
|
|
chown -R $app:$app $install_dir/backend
|
|
chmod -R 700 $install_dir/backend
|
|
|
|
ynh_script_progression --message="Building exporter..." --weight=5
|
|
|
|
pushd $install_dir/build/exporter
|
|
ynh_exec_warn_less ynh_exec_as "$app" env $ynh_node_load_PATH corepack prepare --activate
|
|
ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH yarn install --immutable
|
|
ynh_secure_remove --file="target"
|
|
ynh_exec_warn_less ynh_exec_as $app env PATH=$PATH JAVA_HOME=$JAVA_HOME NODE_ENV=production clojure -M:dev:shadow-cljs release main
|
|
cp yarn.lock target/
|
|
cp package.json target/
|
|
|
|
ynh_replace_string --match_string="%version%" --replace_string="$version" --target_file="$install_dir/build/exporter/target/app.js"
|
|
popd
|
|
|
|
mkdir -p $install_dir/exporter
|
|
mv $install_dir/build/exporter/target/* $install_dir/exporter
|
|
cp $install_dir/build/.yarnrc.yml $install_dir/exporter
|
|
chown -R $app:$app $install_dir/exporter
|
|
chmod -R 700 $install_dir/exporter
|
|
|
|
ynh_secure_remove --file=$install_dir/.cache
|
|
|
|
pushd $install_dir/exporter
|
|
ynh_exec_warn_less ynh_exec_as "$app" env $ynh_node_load_PATH corepack prepare --activate
|
|
ynh_exec_as $app env $ynh_node_load_PATH NODE_ENV=production yarn install --immutable
|
|
ynh_exec_as $app env $ynh_node_load_PATH NODE_ENV=production yarn run playwright install chromium
|
|
popd
|
|
|
|
ynh_script_progression --message="Cleaning up..." --weight=1
|
|
|
|
ynh_secure_remove --file=$install_dir/.npm
|
|
ynh_secure_remove --file=$install_dir/.yarn
|
|
ynh_secure_remove --file=$install_dir/build
|
|
ynh_secure_remove --file=$install_dir/.m2
|
|
ynh_secure_remove --file=$install_dir/.clojure
|
|
ynh_secure_remove --file=$install_dir/clojure
|
|
ynh_secure_remove --file=$install_dir/babashka
|
|
ynh_secure_remove --file=$install_dir/.cache/ms-playwright/firefox-*
|
|
ynh_secure_remove --file=$install_dir/.cache/ms-playwright/webkit-*
|
|
ynh_secure_remove --file=$install_dir/.cache/yarn
|
|
ynh_secure_remove --file=$install_dir/.cache/node
|
|
|
|
#=================================================
|
|
# SYSTEM CONFIGURATION
|
|
#=================================================
|
|
ynh_script_progression --message="Adding system configurations related to $app..."
|
|
|
|
# Create a dedicated NGINX config using the conf/nginx.conf template
|
|
ynh_add_nginx_config
|
|
|
|
# Create a dedicated systemd config
|
|
ynh_add_systemd_config --template="backend.service" --service="$app-backend"
|
|
yunohost service add $app-backend --log="/var/log/$app/$app-backend.log"
|
|
|
|
ynh_add_systemd_config --template="exporter.service" --service="$app-exporter"
|
|
yunohost service add $app-exporter --log="/var/log/$app/$app-exporter.log"
|
|
|
|
# Use logrotate to manage application logfile(s)
|
|
mkdir -p /var/log/$app
|
|
touch /var/log/$app/$app-backend.log
|
|
touch /var/log/$app/$app-exporter.log
|
|
chown -R $app: /var/log/$app
|
|
|
|
ynh_use_logrotate --logfile="/var/log/$app/$app-backend.log"
|
|
ynh_use_logrotate --logfile="/var/log/$app/$app-exporter.log"
|
|
|
|
#=================================================
|
|
# APP INITIAL CONFIGURATION
|
|
#=================================================
|
|
# ADD A CONFIGURATION
|
|
#=================================================
|
|
ynh_script_progression --message="Updating database configuration..."
|
|
ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";" --database=$db_name
|
|
|
|
ynh_script_progression --message="Adding app's configuration file..."
|
|
|
|
ynh_add_config --template="config.js" --destination="$install_dir/frontend/js/config.js"
|
|
chmod 755 "$install_dir/frontend/js/config.js"
|
|
chown $app:www-data "$install_dir/frontend/js/config.js"
|
|
|
|
ynh_add_config --template="environ" --destination="$install_dir/backend/environ"
|
|
chmod 400 "$install_dir/backend/environ"
|
|
chown $app:$app "$install_dir/backend/environ"
|
|
|
|
ynh_add_config --template="exporter.env" --destination="$install_dir/exporter/.env"
|
|
chmod 400 "$install_dir/exporter/.env"
|
|
chown $app:$app "$install_dir/exporter/.env"
|
|
|
|
#=================================================
|
|
# START SYSTEMD SERVICE
|
|
#=================================================
|
|
ynh_script_progression --message="Starting a systemd service..." --weight=1
|
|
|
|
# Start a systemd service
|
|
ynh_systemd_action --service_name=$app-backend --action="start" --log_path="/var/log/$app/$app-backend.log" --line_match="welcome to penpot"
|
|
|
|
ynh_systemd_action --service_name=$app-exporter --action="start" --log_path="/var/log/$app/$app-exporter.log" --line_match="redis connection established"
|
|
|
|
#=================================================
|
|
# END OF SCRIPT
|
|
#=================================================
|
|
ynh_script_progression --message="Installation of $app completed" --last
|