diff --git a/manifest.toml b/manifest.toml index ceb7a0e..556fb99 100644 --- a/manifest.toml +++ b/manifest.toml @@ -130,11 +130,9 @@ ram.runtime = "50M" "woff2", "python3", "python3-tabulate", - "fontforge" + "fontforge", + "rsync" ] - extras.yarn.repo = "deb https://dl.yarnpkg.com/debian/ stable main" - extras.yarn.key = "https://dl.yarnpkg.com/debian/pubkey.gpg" - extras.yarn.packages = "yarn" [resources.database] type = "postgresql" diff --git a/scripts/_common.sh b/scripts/_common.sh index 3189b68..3963cfd 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -5,8 +5,8 @@ #================================================= nodejs_version=20 -current_hash="1eaf7b2b4" -version="1.19.3-10698-g1eaf7b2b4" +current_hash="41cdd245" +version="2.0.0-10698-g41cdd245" build_date="Mon, 18 Sep 2023 09:14:03 +0000" #================================================= diff --git a/scripts/install b/scripts/install index fe45893..bc16eeb 100644 --- a/scripts/install +++ b/scripts/install @@ -64,22 +64,23 @@ chmod -R o-rwx "$install_dir" ynh_script_progression --message="Building frontend..." --weight=5 pushd $install_dir/build/frontend - ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH yarn install --pure-lockfile + 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 clojure -J-Xms100M -J-Xmx800M -J-XX:+UseSerialGC -M:dev:shadow-cljs release main --config-merge "{:release-version \"${current_hash}\"}" - ynh_exec_as $app $ynh_node_load_PATH $ynh_npm exec gulp build:assets - ynh_exec_as $app $ynh_node_load_PATH $ynh_npm exec gulp build:styles - ynh_exec_as $app $ynh_node_load_PATH $ynh_npm exec gulp clean:dist - ynh_exec_as $app $ynh_node_load_PATH $ynh_npm exec gulp build:copy + 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_replace_string --match_string="%version%" --replace_string="$version" --target_file="$install_dir/build/frontend/target/dist/index.html" - ynh_replace_string --match_string="%buildDate%" --replace_string="$build_date" --target_file="$install_dir/build/frontend/target/dist/index.html" - echo "$version" > target/version.txt; + 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/target/dist/* $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 @@ -89,6 +90,7 @@ 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; @@ -111,6 +113,9 @@ 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/ @@ -120,14 +125,16 @@ 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_as $app env $ynh_node_load_PATH NODE_ENV=production yarn install --pure-lockfile - ynh_exec_as $app env $ynh_node_load_PATH NODE_ENV=production yarn --network-timeout 1000000 run playwright install chromium + 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 diff --git a/scripts/upgrade b/scripts/upgrade index fb90d48..375258c 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -36,116 +36,122 @@ ynh_use_nodejs if [ "$upgrade_type" == "UPGRADE_APP" ] then - ynh_setup_source --dest_dir="$install_dir/jdk" --source_id="jdk" - export JAVA_HOME=$install_dir/jdk + 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) + 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 + 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_secure_remove --file=$tmp_dir - ynh_setup_source --dest_dir="$install_dir/babashka" --source_id="babashka" + ynh_setup_source --dest_dir="$install_dir/babashka" --source_id="babashka" - export PATH=$JAVA_HOME/bin:$install_dir/clojure/bin:$install_dir/babashka:$PATH + export PATH=$JAVA_HOME/bin:$install_dir/clojure/bin:$install_dir/babashka:$PATH - ynh_script_progression --message="Upgrading source files..." + ynh_script_progression --message="Upgrading source files..." - # Download, check integrity, uncompress and patch the source from app.src - ynh_setup_source --dest_dir="$install_dir/build" - chmod -R o-rwx "$install_dir" - chown -R $app:www-data "$install_dir" + # Download, check integrity, uncompress and patch the source from app.src + ynh_setup_source --dest_dir="$install_dir/build" + chmod -R o-rwx "$install_dir" + chown -R $app:www-data "$install_dir" - ynh_script_progression --message="Building frontend..." --weight=5 + ynh_script_progression --message="Building frontend..." --weight=5 - pushd $install_dir/build/frontend - ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH yarn install --pure-lockfile - - # ynh_exec_warn_less - ynh_exec_warn_less ynh_exec_as $app env PATH=$PATH JAVA_HOME=$JAVA_HOME clojure -J-Xms100M -J-Xmx800M -J-XX:+UseSerialGC -M:dev:shadow-cljs release main --config-merge "{:release-version \"${current_hash}\"}" - ynh_exec_as $app $ynh_node_load_PATH $ynh_npm exec gulp build:assets - ynh_exec_as $app $ynh_node_load_PATH $ynh_npm exec gulp build:styles - ynh_exec_as $app $ynh_node_load_PATH $ynh_npm exec gulp clean:dist - ynh_exec_as $app $ynh_node_load_PATH $ynh_npm exec gulp build:copy + 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_replace_string --match_string="%version%" --replace_string="$version" --target_file="$install_dir/build/frontend/target/dist/index.html" - ynh_replace_string --match_string="%buildDate%" --replace_string="$build_date" --target_file="$install_dir/build/frontend/target/dist/index.html" - echo "$version" > target/version.txt; - popd + ynh_exec_warn_less ynh_exec_as $app env $ynh_node_load_PATH NODE_ENV=production yarn run compile - ynh_secure_remove --file=$install_dir/frontend - mkdir -p $install_dir/frontend - mv $install_dir/build/frontend/target/dist/* $install_dir/frontend - chown -R $app:www-data $install_dir/frontend - chmod -R 755 $install_dir/frontend + 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" + popd - ynh_script_progression --message="Building backend..." --weight=5 + ynh_secure_remove --file=$install_dir/frontend + 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 755 $install_dir/frontend - pushd $install_dir/build/backend - mkdir -p target/classes; - mkdir -p target/dist; - echo "$version" > target/classes/version.txt; - chown -R $app:$app target + ynh_script_progression --message="Building backend..." --weight=5 - 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; + 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 - # Prefetch templates - mkdir builtin-templates; - bb ./scripts/prefetch-templates.clj resources/app/onboarding.edn builtin-templates/ - cp -r builtin-templates target/dist/ - popd + 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; - ynh_secure_remove --file=$install_dir/backend - 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 + # Prefetch templates + mkdir builtin-templates; + bb ./scripts/prefetch-templates.clj resources/app/onboarding.edn builtin-templates/ + cp -r builtin-templates target/dist/ + popd - ynh_script_progression --message="Building exporter..." --weight=5 + ynh_secure_remove --file=$install_dir/backend + 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 - pushd $install_dir/build/exporter - 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 + ynh_script_progression --message="Building exporter..." --weight=5 - ynh_secure_remove --file=$install_dir/exporter - mkdir -p $install_dir/exporter - mv $install_dir/build/exporter/target/* $install_dir/exporter - chown -R $app:$app $install_dir/exporter - chmod -R 700 $install_dir/exporter + 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 - ynh_secure_remove --file=$install_dir/.cache + ynh_secure_remove --file=$install_dir/exporter + 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 - pushd $install_dir/exporter - ynh_exec_as $app env $ynh_node_load_PATH NODE_ENV=production yarn install --pure-lockfile - ynh_exec_as $app env $ynh_node_load_PATH NODE_ENV=production yarn --network-timeout 1000000 run playwright install chromium - popd + ynh_secure_remove --file=$install_dir/.cache - ynh_script_progression --message="Cleaning up..." --weight=1 + 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_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 + 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 fi #================================================= diff --git a/sources/patches/main-002.patch b/sources/patches/main-002.patch new file mode 100644 index 0000000..a442bf4 --- /dev/null +++ b/sources/patches/main-002.patch @@ -0,0 +1,82 @@ +diff --git a/backend/src/app/migrations/sql/0108-mod-file-thumbnail-table.sql b/backend/src/app/migrations/sql/0108-mod-file-thumbnail-table.sql +index b7d05bdc7..57dc229ca 100645 +--- a/backend/src/app/migrations/sql/0108-mod-file-thumbnail-table.sql ++++ b/backend/src/app/migrations/sql/0108-mod-file-thumbnail-table.sql +@@ -18,7 +18,8 @@ ALTER TABLE file_thumbnail + ADD FOREIGN KEY (media_id) REFERENCES storage_object(id) DEFERRABLE; + + --- Add deletion protection +-CREATE OR REPLACE TRIGGER deletion_protection__tgr ++DROP TRIGGER IF EXISTS deletion_protection__tgr on file_thumbnail; ++CREATE TRIGGER deletion_protection__tgr + BEFORE DELETE ON file_thumbnail FOR EACH STATEMENT + WHEN ((current_setting('rules.deletion_protection', true) IN ('on', '')) OR + (current_setting('rules.deletion_protection', true) IS NULL)) +diff --git a/backend/src/app/migrations/sql/0109-mod-file-tagged-object-thumbnail-table.sql b/backend/src/app/migrations/sql/0109-mod-file-tagged-object-thumbnail-table.sql +index 3184a6576..37e77d3e1 100644 +--- a/backend/src/app/migrations/sql/0109-mod-file-tagged-object-thumbnail-table.sql ++++ b/backend/src/app/migrations/sql/0109-mod-file-tagged-object-thumbnail-table.sql +@@ -19,7 +19,8 @@ ALTER TABLE file_tagged_object_thumbnail + ADD FOREIGN KEY (file_id) REFERENCES file(id) DEFERRABLE; + + --- Add deletion protection +-CREATE OR REPLACE TRIGGER deletion_protection__tgr ++DROP TRIGGER IF EXISTS deletion_protection__tgr on file_tagged_object_thumbnail; ++CREATE TRIGGER deletion_protection__tgr + BEFORE DELETE ON file_tagged_object_thumbnail FOR EACH STATEMENT + WHEN ((current_setting('rules.deletion_protection', true) IN ('on', '')) OR + (current_setting('rules.deletion_protection', true) IS NULL)) +diff --git a/backend/src/app/migrations/sql/0110-mod-file-media-object-table.sql b/backend/src/app/migrations/sql/0110-mod-file-media-object-table.sql +index 49cbebc96..cbf480079 100644 +--- a/backend/src/app/migrations/sql/0110-mod-file-media-object-table.sql ++++ b/backend/src/app/migrations/sql/0110-mod-file-media-object-table.sql +@@ -20,7 +20,8 @@ ALTER TABLE file_media_object + ADD FOREIGN KEY (file_id) REFERENCES file(id) DEFERRABLE; + + --- Add deletion protection +-CREATE OR REPLACE TRIGGER deletion_protection__tgr ++DROP TRIGGER IF EXISTS deletion_protection__tgr on file_media_object; ++CREATE TRIGGER deletion_protection__tgr + BEFORE DELETE ON file_media_object FOR EACH STATEMENT + WHEN ((current_setting('rules.deletion_protection', true) IN ('on', '')) OR + (current_setting('rules.deletion_protection', true) IS NULL)) +diff --git a/backend/src/app/migrations/sql/0112-mod-profile-table.sql b/backend/src/app/migrations/sql/0112-mod-profile-table.sql +index 2db8d75b0..ae2f1c8fe 100644 +--- a/backend/src/app/migrations/sql/0112-mod-profile-table.sql ++++ b/backend/src/app/migrations/sql/0112-mod-profile-table.sql +@@ -7,7 +7,8 @@ ALTER TABLE profile + ADD FOREIGN KEY (default_team_id) REFERENCES team(id) DEFERRABLE; + + --- Add deletion protection +-CREATE OR REPLACE TRIGGER deletion_protection__tgr ++DROP TRIGGER IF EXISTS deletion_protection__tgr on profile; ++CREATE TRIGGER deletion_protection__tgr + BEFORE DELETE ON profile FOR EACH STATEMENT + WHEN ((current_setting('rules.deletion_protection', true) IN ('on', '')) OR + (current_setting('rules.deletion_protection', true) IS NULL)) +diff --git a/backend/src/app/migrations/sql/0113-mod-team-font-variant-table.sql b/backend/src/app/migrations/sql/0113-mod-team-font-variant-table.sql +index b9caa08f6..b80806fb1 100644 +--- a/backend/src/app/migrations/sql/0113-mod-team-font-variant-table.sql ++++ b/backend/src/app/migrations/sql/0113-mod-team-font-variant-table.sql +@@ -13,7 +13,8 @@ ALTER TABLE team_font_variant + ADD FOREIGN KEY (team_id) REFERENCES team(id) DEFERRABLE; + + --- Add deletion protection +-CREATE OR REPLACE TRIGGER deletion_protection__tgr ++DROP TRIGGER IF EXISTS deletion_protection__tgr on team_font_variant; ++CREATE TRIGGER deletion_protection__tgr + BEFORE DELETE ON team_font_variant FOR EACH STATEMENT + WHEN ((current_setting('rules.deletion_protection', true) IN ('on', '')) OR + (current_setting('rules.deletion_protection', true) IS NULL)) +diff --git a/backend/src/app/migrations/sql/0114-mod-team-table.sql b/backend/src/app/migrations/sql/0114-mod-team-table.sql +index 8c7675643..df6c17016 100644 +--- a/backend/src/app/migrations/sql/0114-mod-team-table.sql ++++ b/backend/src/app/migrations/sql/0114-mod-team-table.sql +@@ -1,4 +1,5 @@ + --- Add deletion protection +-CREATE OR REPLACE TRIGGER deletion_protection__tgr ++DROP TRIGGER IF EXISTS deletion_protection__tgr on team; ++CREATE TRIGGER deletion_protection__tgr + CREATE OR REPLACE TRIGGER deletion_protection__tgr + BEFORE DELETE ON team FOR EACH STATEMENT + WHEN ((current_setting('rules.deletion_protection', true) IN ('on', '')) OR