From 451bc4947cda808fb0e14a5765ecdeffd11fdebf Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Mon, 11 May 2026 15:15:16 -0700 Subject: [PATCH 01/10] feat: package build Signed-off-by: Hendrik Leidinger --- build/.docker/bundle.bake.Dockerfile | 63 ++ build/.docker/develop.bake.Dockerfile | 6 +- build/.docker/docker.bake.Dockerfile | 67 ++ build/.docker/docserver.bake.Dockerfile | 117 ---- build/.docker/packages.bake.Dockerfile | 17 +- build/build_deb.sh | 30 +- build/configs/nginx/conf.d/ds.conf | 9 - .../configs/nginx/includes/ds-adminpanel.conf | 4 - build/configs/nginx/includes/ds-common.conf | 26 - .../configs/nginx/includes/ds-docservice.conf | 105 --- build/configs/nginx/includes/ds-example.conf | 14 - .../nginx/includes/ds-letsencrypt.conf | 4 - .../configs/nginx/includes/ds-mime.types.conf | 99 --- build/configs/nginx/includes/http-common.conf | 44 -- build/configs/onlyoffice/default.json | 635 ------------------ .../configs/onlyoffice/development-linux.json | 87 --- build/configs/onlyoffice/local.json | 62 -- .../onlyoffice/log4js/development.json | 14 - build/configs/postgres/createdb.sql | 73 -- build/configs/supervisor/ds-adminpanel.conf | 10 +- build/configs/supervisor/ds-converter.conf | 10 +- build/configs/supervisor/ds-docservice.conf | 10 +- build/configs/supervisor/ds-example.conf | 10 +- build/configs/supervisor/ds-metrics.conf | 10 +- build/docker-bake.hcl | 73 +- build/scripts/build-packages.sh | 6 +- build/scripts/documentserver-flush-cache.sh | 50 -- .../documentserver-generate-allfonts.sh | 88 --- build/scripts/entrypoint.sh | 18 +- document-server-integration | 2 +- document-server-package | 2 +- server | 2 +- 32 files changed, 232 insertions(+), 1535 deletions(-) create mode 100644 build/.docker/bundle.bake.Dockerfile create mode 100644 build/.docker/docker.bake.Dockerfile delete mode 100644 build/.docker/docserver.bake.Dockerfile delete mode 100644 build/configs/nginx/conf.d/ds.conf delete mode 100644 build/configs/nginx/includes/ds-adminpanel.conf delete mode 100644 build/configs/nginx/includes/ds-common.conf delete mode 100644 build/configs/nginx/includes/ds-docservice.conf delete mode 100644 build/configs/nginx/includes/ds-example.conf delete mode 100644 build/configs/nginx/includes/ds-letsencrypt.conf delete mode 100644 build/configs/nginx/includes/ds-mime.types.conf delete mode 100644 build/configs/nginx/includes/http-common.conf delete mode 100644 build/configs/onlyoffice/default.json delete mode 100644 build/configs/onlyoffice/development-linux.json delete mode 100644 build/configs/onlyoffice/local.json delete mode 100644 build/configs/onlyoffice/log4js/development.json delete mode 100644 build/configs/postgres/createdb.sql delete mode 100755 build/scripts/documentserver-flush-cache.sh delete mode 100755 build/scripts/documentserver-generate-allfonts.sh diff --git a/build/.docker/bundle.bake.Dockerfile b/build/.docker/bundle.bake.Dockerfile new file mode 100644 index 0000000000..8aed1c835c --- /dev/null +++ b/build/.docker/bundle.bake.Dockerfile @@ -0,0 +1,63 @@ +# ============================================================================== +# MODULE DOCKERFILE +# This file is not meant to be built standalone. It is consumed by the +# docker-bake.hcl files in the parent monorepos. +# +# REQUIRED CONTEXTS: +# - server: builds from server repo +# - core: builds from core repo +# - web-apps: builds from web-apps repo +# - sdkjs: builds from sdkjs repo +# - example: builds from example repo +# ============================================================================== + + +FROM alpine AS bundle + ARG BUILD_ROOT=/package + # --- Copy build files + RUN mkdir -p /build/documentserver/sdkjs-plugins /build/documentserver/fonts \ + /build/documentserver/server/FileConverter/lib /build/documentserver/server/tools + + # --- Static content from build context (rarely changes) --- + COPY dictionaries /build/documentserver/dictionaries + COPY document-templates /build/documentserver/document-templates + COPY core-fonts /build/documentserver/core-fonts + + # --- Config files + COPY build/configs/core/DoctRenderer.config /build/documentserver/server/FileConverter/bin/DoctRenderer.config + COPY build/configs/metrics/config/config.js /build/documentserver/server/Metrics/config/config.js + + + # --- Build stage outputs (change with code) --- + COPY --from=sdkjs ${BUILD_ROOT} /build/documentserver/ + COPY --from=web-apps ${BUILD_ROOT} /build/documentserver/ + + COPY --from=core ${BUILD_ROOT}/bin/ /build/documentserver/server/FileConverter/bin/ + COPY --from=core ${BUILD_ROOT}/tools/ /build/documentserver/server/tools/ + COPY --from=core ${BUILD_ROOT}/*.so* /build/documentserver/server/FileConverter/lib/ + COPY --from=core ${BUILD_ROOT}/tools/*.so* /build/documentserver/server/tools/ + + COPY --from=server ${BUILD_ROOT}/docservice /build/documentserver/server/DocService/docservice + COPY --from=server ${BUILD_ROOT}/fileconverter /build/documentserver/server/FileConverter/converter + COPY --from=server ${BUILD_ROOT}/metrics /build/documentserver/server/Metrics/metrics + COPY --from=server ${BUILD_ROOT}/adminpanel /build/documentserver/server/AdminPanel/server/adminpanel + COPY --from=server ${BUILD_ROOT}/build /build/documentserver/server/AdminPanel/client/build + + + COPY --from=example /example/example /build/documentserver-example/example + RUN mkdir -p /build/documentserver-example/files + COPY --from=example /example/config/* /config/documentserver-example/ + + COPY document-server-package/common/documentserver-example/welcome /build/documentserver-example/welcome + RUN YEAR=$(date +"%Y") && \ + sed -i "s|{{OFFICIAL_PRODUCT_NAME}}|Community Edition|g" /build/documentserver-example/welcome/*.html && \ + find /build/documentserver-example/welcome -depth -type f \ + -exec sed -i "s_{{year}}_${YEAR}_g" {} \; && \ + sed -i "s|{{EXAMPLE_DISABLED_COMMANDS}}|sudo systemctl start ds-example|g" \ + /build/documentserver-example/welcome/example-disabled.html && \ + rm -f /build/documentserver-example/welcome/admin-disabled.html && \ + sed -i '//,//d' \ + /build/documentserver-example/welcome/docker.html \ + /build/documentserver-example/welcome/linux.html \ + /build/documentserver-example/welcome/linux-rpm.html \ + /build/documentserver-example/welcome/win.html \ No newline at end of file diff --git a/build/.docker/develop.bake.Dockerfile b/build/.docker/develop.bake.Dockerfile index c864f8c17d..fd6b91d131 100644 --- a/build/.docker/develop.bake.Dockerfile +++ b/build/.docker/develop.bake.Dockerfile @@ -4,11 +4,7 @@ # docker-bake.hcl files in the parent monorepos. # # REQUIRED CONTEXTS: -# - server: builds from server repo -# - core: builds from core repo -# - web-apps: builds from web-apps repo -# - sdkjs: builds from sdkjs repo -# - example: builds from example repo +# - docker: the final docker image of documentserver # ============================================================================== FROM finalubuntu AS develop diff --git a/build/.docker/docker.bake.Dockerfile b/build/.docker/docker.bake.Dockerfile new file mode 100644 index 0000000000..9c64cdbb90 --- /dev/null +++ b/build/.docker/docker.bake.Dockerfile @@ -0,0 +1,67 @@ +# ============================================================================== +# MODULE DOCKERFILE +# This file is not meant to be built standalone. It is consumed by the +# docker-bake.hcl files in the parent monorepos. +# +# REQUIRED CONTEXTS: +# - packages: final packages of documentserver +# ============================================================================== + +#### FINAL UBUNTU #### +FROM ubuntu:24.04 AS finalubuntu +ARG PRODUCT_VERSION +ARG BUILD_ROOT=/package + +ARG EO_ROOT=/var/www/euro-office/documentserver +ARG EO_LOG=/var/log/euro-office/documentserver +ARG EO_CONF=/etc/euro-office/documentserver + +ENV EO_ROOT=${EO_ROOT} +ENV EO_LOG=${EO_LOG} +ENV EO_CONF=${EO_CONF} + +RUN apt-get -y update && \ + ACCEPT_EULA=Y apt-get -yq install \ + postgresql postgresql-client redis-server rabbitmq-server \ + nginx sudo gdb nginx-extras supervisor jq util-linux && \ + rm -rf /var/lib/apt/lists/* + +# Create the 'ds' user that is required by OnlyOffice scripts +RUN useradd -r -s /bin/false ds || true + +# --- install euro-office .deb package +ARG TARGETARCH +COPY --from=packages / /tmp/ +RUN apt-get -y update && \ + service postgresql start && \ + service rabbitmq-server start && \ + sudo -u postgres psql -c "CREATE USER eurooffice WITH password 'eurooffice';" && \ + sudo -u postgres psql -c "CREATE DATABASE eurooffice OWNER eurooffice;" && \ + echo "euro-office-documentserver ds/db-type string postgres" | debconf-set-selections && \ + echo "euro-office-documentserver ds/db-host string localhost" | debconf-set-selections && \ + echo "euro-office-documentserver ds/db-port string 5432" | debconf-set-selections && \ + echo "euro-office-documentserver ds/db-user string eurooffice" | debconf-set-selections && \ + echo "euro-office-documentserver ds/db-pwd password eurooffice" | debconf-set-selections && \ + echo "euro-office-documentserver ds/db-name string eurooffice" | debconf-set-selections && \ + DS_DOCKER_INSTALLATION=true DEBIAN_FRONTEND=noninteractive apt-get -yq install /tmp/euro-office-documentserver_${PRODUCT_VERSION}-0_${TARGETARCH}.deb && \ + sudo -u postgres bash -c "PGPASSWORD=eurooffice psql -h localhost -U eurooffice -d eurooffice -f ${EO_ROOT}/server/schema/postgresql/createdb.sql" + + +# --- Final setup --- +COPY build/configs/supervisor/ /etc/supervisor/conf.d/ +COPY --chmod=755 build/scripts/entrypoint.sh /entrypoint.sh + +RUN mkdir -p ${EO_LOG}/docservice ${EO_LOG}/converter \ + ${EO_LOG}/adminpanel ${EO_LOG}/metrics + +RUN mkdir -p ${EO_ROOT}/documentserver-example/files + +RUN mkdir -p ${EO_ROOT}/server/Common/config && \ + echo '{}' > ${EO_ROOT}/server/Common/config/runtime.json + +RUN mkdir -p /var/lib/euro-office #&& \ + chown -R ds:ds /var/www/euro-office /var/lib/euro-office /var/log/euro-office + +RUN /usr/bin/documentserver-flush-cache.sh -r false + +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/build/.docker/docserver.bake.Dockerfile b/build/.docker/docserver.bake.Dockerfile deleted file mode 100644 index 94489e0d60..0000000000 --- a/build/.docker/docserver.bake.Dockerfile +++ /dev/null @@ -1,117 +0,0 @@ -# ============================================================================== -# MODULE DOCKERFILE -# This file is not meant to be built standalone. It is consumed by the -# docker-bake.hcl files in the parent monorepos. -# -# REQUIRED CONTEXTS: -# - server: builds from server repo -# - core: builds from core repo -# - web-apps: builds from web-apps repo -# - sdkjs: builds from sdkjs repo -# - example: builds from example repo -# ============================================================================== - -#### FINAL UBUNTU #### -FROM ubuntu:24.04 AS finalubuntu -ARG PRODUCT_VERSION -ARG BUILD_ROOT=/package - -ARG EO_ROOT=/var/www/onlyoffice/documentserver -ARG EO_LOG=/var/log/onlyoffice/documentserver -ARG EO_CONF=/etc/onlyoffice/documentserver - -ENV EO_ROOT=${EO_ROOT} -ENV EO_LOG=${EO_LOG} -ENV EO_CONF=${EO_CONF} - -RUN apt-get -y update && \ - ACCEPT_EULA=Y apt-get -yq install \ - postgresql postgresql-client redis-server rabbitmq-server \ - nginx sudo gdb nginx-extras supervisor jq util-linux && \ - rm -rf /var/lib/apt/lists/* - -# Create the 'ds' user that is required by OnlyOffice scripts -RUN useradd -r -s /bin/false ds || true - -COPY build/configs/postgres ${EO_ROOT}/server/schema/postgresql - -RUN service postgresql start && \ - sudo -u postgres psql -c "CREATE USER onlyoffice WITH password 'onlyoffice';" && \ - sudo -u postgres psql -c "CREATE DATABASE onlyoffice OWNER onlyoffice;" && \ - sudo -u postgres bash -c "PGPASSWORD=onlyoffice psql -h localhost -U onlyoffice -d onlyoffice -f ${EO_ROOT}/server/schema/postgresql/createdb.sql" - -RUN rm -f /etc/nginx/sites-enabled/default && \ - mkdir -p ${EO_LOG}/docservice ${EO_LOG}/converter \ - ${EO_LOG}/adminpanel ${EO_LOG}/metrics \ - ${EO_ROOT}/sdkjs-plugins ${EO_ROOT}/fonts \ - ${EO_ROOT}/server/FileConverter/lib ${EO_ROOT}/server/tools && \ - touch ${EO_LOG}/nginx.error.log - -# --- Static content from build context (rarely changes) --- -COPY dictionaries ${EO_ROOT}/dictionaries -COPY document-templates ${EO_ROOT}/document-templates -COPY core-fonts ${EO_ROOT}/core-fonts - -# --- Config files and scripts (rarely change) --- -COPY build/configs/onlyoffice/default.json ${EO_CONF}/default.json -COPY build/configs/onlyoffice/development-linux.json ${EO_CONF}/development-linux.json -COPY build/configs/onlyoffice/local.json ${EO_CONF}/local.json -COPY build/configs/onlyoffice/log4js/development.json ${EO_CONF}/log4js/development.json - -RUN mkdir -p /var/www/onlyoffice/documentserver && \ - cp ${EO_CONF}/log4js/development.json /var/www/onlyoffice/documentserver/log4js.json - -COPY build/configs/metrics/config/config.js ${EO_ROOT}/server/Metrics/config/config.js -COPY build/configs/nginx/conf.d /etc/nginx/conf.d/ -COPY build/configs/nginx/includes /etc/nginx/includes/ -RUN sed -i "s/__PRODUCT_VERSION__/${PRODUCT_VERSION}/g" /etc/nginx/includes/ds-docservice.conf - -COPY build/configs/core/DoctRenderer.config ${EO_ROOT}/server/FileConverter/bin/DoctRenderer.config -COPY build/configs/supervisor/ /etc/supervisor/conf.d/ -COPY --chmod=755 build/scripts/documentserver-flush-cache.sh /usr/bin/documentserver-flush-cache.sh -COPY --chmod=755 build/scripts/documentserver-generate-allfonts.sh /usr/bin/documentserver-generate-allfonts.sh -COPY --chmod=755 build/scripts/entrypoint.sh /entrypoint.sh - -# --- Build stage outputs (change with code) --- -COPY --from=sdkjs ${BUILD_ROOT} ${EO_ROOT}/ -COPY --from=web-apps ${BUILD_ROOT} ${EO_ROOT}/ - -COPY --from=core ${BUILD_ROOT}/bin/ ${EO_ROOT}/server/FileConverter/bin/ -COPY --from=core ${BUILD_ROOT}/tools/ ${EO_ROOT}/server/tools/ -COPY --from=core ${BUILD_ROOT}/*.so* ${EO_ROOT}/server/FileConverter/lib/ -COPY --from=core ${BUILD_ROOT}/tools/*.so* ${EO_ROOT}/server/tools/ - -COPY --from=server ${BUILD_ROOT}/docservice ${EO_ROOT}/server/DocService/docservice -COPY --from=server ${BUILD_ROOT}/fileconverter ${EO_ROOT}/server/FileConverter/converter -COPY --from=server ${BUILD_ROOT}/metrics ${EO_ROOT}/server/Metrics/metrics -COPY --from=server ${BUILD_ROOT}/adminpanel ${EO_ROOT}/server/AdminPanel/server/adminpanel -COPY --from=server ${BUILD_ROOT}/build ${EO_ROOT}/server/AdminPanel/client/build - -COPY --from=example /example/example /var/www/onlyoffice/documentserver-example/example -RUN mkdir -p /var/www/onlyoffice/documentserver-example/files -COPY --from=example /example/config/* /etc/onlyoffice/documentserver-example/ - -COPY document-server-package/common/documentserver-example/welcome /var/www/onlyoffice/documentserver-example/welcome -RUN YEAR=$(date +"%Y") && \ - sed -i "s|{{OFFICIAL_PRODUCT_NAME}}|Community Edition|g" /var/www/onlyoffice/documentserver-example/welcome/*.html && \ - find /var/www/onlyoffice/documentserver-example/welcome -depth -type f \ - -exec sed -i "s_{{year}}_${YEAR}_g" {} \; && \ - sed -i "s|{{EXAMPLE_DISABLED_COMMANDS}}|sudo systemctl start ds-example|g" \ - /var/www/onlyoffice/documentserver-example/welcome/example-disabled.html && \ - rm -f /var/www/onlyoffice/documentserver-example/welcome/admin-disabled.html && \ - sed -i '//,//d' \ - /var/www/onlyoffice/documentserver-example/welcome/docker.html \ - /var/www/onlyoffice/documentserver-example/welcome/linux.html \ - /var/www/onlyoffice/documentserver-example/welcome/linux-rpm.html \ - /var/www/onlyoffice/documentserver-example/welcome/win.html - -# --- Final setup --- -RUN mkdir -p ${EO_ROOT}/server/Common/config && \ - echo '{}' > ${EO_ROOT}/server/Common/config/runtime.json - -RUN mkdir -p /var/lib/onlyoffice && \ - chown -R ds:ds /var/www/onlyoffice /var/lib/onlyoffice /var/log/onlyoffice - -RUN /usr/bin/documentserver-flush-cache.sh -r false - -ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/build/.docker/packages.bake.Dockerfile b/build/.docker/packages.bake.Dockerfile index e72eff56ae..24ee1fdb2a 100644 --- a/build/.docker/packages.bake.Dockerfile +++ b/build/.docker/packages.bake.Dockerfile @@ -4,20 +4,12 @@ # docker-bake.hcl files in the parent monorepos. # # REQUIRED CONTEXTS: -# - server: builds from server repo -# - core: builds from core repo -# - web-apps: builds from web-apps repo -# - sdkjs: builds from sdkjs repo -# - example: builds from example repo +# - bundle: bundled builds # ============================================================================== #### PACKAGE #### -# Extends finalubuntu (or a pre-built image via PACKAGE_BASE); installs packaging tools, then runs build-packages.sh -# to populate /build/package/out/ and invoke the upstream Makefile. -ARG PACKAGE_BASE - -FROM ${PACKAGE_BASE} AS package +FROM ubuntu:24.04 AS package ARG PRODUCT_VERSION ARG BUILD_NUMBER=0 @@ -30,6 +22,11 @@ RUN apt-get update && \ npm install -g @yao-pkg/pkg && \ rm -rf /var/lib/apt/lists/* +#Build files + COPY --from=bundle /build/documentserver /build/documentserver + COPY --from=bundle /build/documentserver-example /build/documentserver-example + COPY --from=bundle /config/documentserver-example /config/documentserver-example + # Upstream packaging repo COPY document-server-package/ /document-server-package/ diff --git a/build/build_deb.sh b/build/build_deb.sh index 68bb4c3433..98b025cdae 100755 --- a/build/build_deb.sh +++ b/build/build_deb.sh @@ -67,21 +67,21 @@ directory_setup() { mkdir -p ${_PKG_DIR}/DEBIAN mkdir -p ${_PKG_DIR}/usr/bin ${_PKG_DIR}/usr/lib/systemd/system - mkdir -p ${_PKG_DIR}/etc/onlyoffice/documentserver - mkdir -p ${_PKG_DIR}/var/www/onlyoffice/documentserver + mkdir -p ${_PKG_DIR}/etc/euro-office/documentserver + mkdir -p ${_PKG_DIR}/var/www/euro-office/documentserver } prep_base() { _PKG_DIR=$1 - cp -r /var/www/onlyoffice/documentserver/license ${_PKG_DIR}/var/www/onlyoffice/documentserver - cp -r /var/www/onlyoffice/documentserver/npm ${_PKG_DIR}/var/www/onlyoffice/documentserver - cp -r /var/www/onlyoffice/documentserver/dictionaries ${_PKG_DIR}/var/www/onlyoffice/documentserver - cp -r /var/www/onlyoffice/documentserver/document-templates ${_PKG_DIR}/var/www/onlyoffice/documentserver + cp -r /var/www/euro-office/documentserver/license ${_PKG_DIR}/var/www/euro-office/documentserver + cp -r /var/www/euro-office/documentserver/npm ${_PKG_DIR}/var/www/euro-office/documentserver + cp -r /var/www/euro-office/documentserver/dictionaries ${_PKG_DIR}/var/www/euro-office/documentserver + cp -r /var/www/euro-office/documentserver/document-templates ${_PKG_DIR}/var/www/euro-office/documentserver - cp /var/www/onlyoffice/documentserver/LICENSE.txt ${_PKG_DIR}/var/www/onlyoffice/documentserver - cp /var/www/onlyoffice/documentserver/3rd-Party.txt ${_PKG_DIR}/var/www/onlyoffice/documentserver + cp /var/www/euro-office/documentserver/LICENSE.txt ${_PKG_DIR}/var/www/euro-office/documentserver + cp /var/www/euro-office/documentserver/3rd-Party.txt ${_PKG_DIR}/var/www/euro-office/documentserver } prep_server() { @@ -89,33 +89,33 @@ prep_server() { cp /usr/bin/documentserver-* ${_PKG_DIR}/usr/bin/ cp /usr/lib/systemd/system/ds-* ${_PKG_DIR}/usr/lib/systemd/system/ - cp -r /var/www/onlyoffice/documentserver/server ${_PKG_DIR}/var/www/onlyoffice/documentserver - rm -r ${_PKG_DIR}/var/www/onlyoffice/documentserver/server/FileConverter + cp -r /var/www/euro-office/documentserver/server ${_PKG_DIR}/var/www/euro-office/documentserver + rm -r ${_PKG_DIR}/var/www/euro-office/documentserver/server/FileConverter } prep_web_apps() { _PKG_DIR=$1 - cp -r /var/www/onlyoffice/documentserver/web-apps ${_PKG_DIR}/var/www/onlyoffice/documentserver + cp -r /var/www/euro-office/documentserver/web-apps ${_PKG_DIR}/var/www/euro-office/documentserver } prep_core_fonts() { _PKG_DIR=$1 - cp -r /var/www/onlyoffice/documentserver/core-fonts ${_PKG_DIR}/var/www/onlyoffice/documentserver + cp -r /var/www/euro-office/documentserver/core-fonts ${_PKG_DIR}/var/www/euro-office/documentserver } prep_sdkjs() { _PKG_DIR=$1 - cp -r /var/www/onlyoffice/documentserver/sdkjs ${_PKG_DIR}/var/www/onlyoffice/documentserver - cp -r /var/www/onlyoffice/documentserver/sdkjs-plugins ${_PKG_DIR}/var/www/onlyoffice/documentserver + cp -r /var/www/euro-office/documentserver/sdkjs ${_PKG_DIR}/var/www/euro-office/documentserver + cp -r /var/www/euro-office/documentserver/sdkjs-plugins ${_PKG_DIR}/var/www/euro-office/documentserver } prep_core() { _PKG_DIR=$1 - cp -r /var/www/onlyoffice/documentserver/server/FileConverter ${_PKG_DIR}/var/www/onlyoffice/documentserver/server + cp -r /var/www/euro-office/documentserver/server/FileConverter ${_PKG_DIR}/var/www/euro-office/documentserver/server } prep_all() { diff --git a/build/configs/nginx/conf.d/ds.conf b/build/configs/nginx/conf.d/ds.conf deleted file mode 100644 index 5fadf52dd1..0000000000 --- a/build/configs/nginx/conf.d/ds.conf +++ /dev/null @@ -1,9 +0,0 @@ -include /etc/nginx/includes/http-common.conf; -server { - listen 0.0.0.0:80; - listen [::]:80 default_server; - server_tokens off; - - set $secure_link_secret verysecretstring; - include /etc/nginx/includes/ds-*.conf; -} \ No newline at end of file diff --git a/build/configs/nginx/includes/ds-adminpanel.conf b/build/configs/nginx/includes/ds-adminpanel.conf deleted file mode 100644 index 3a0040664f..0000000000 --- a/build/configs/nginx/includes/ds-adminpanel.conf +++ /dev/null @@ -1,4 +0,0 @@ -# AdminPanel: proxy all requests to the service -location ^~ /admin { - proxy_pass http://adminpanel; -} diff --git a/build/configs/nginx/includes/ds-common.conf b/build/configs/nginx/includes/ds-common.conf deleted file mode 100644 index 724a7b46e0..0000000000 --- a/build/configs/nginx/includes/ds-common.conf +++ /dev/null @@ -1,26 +0,0 @@ -## Increase this if you want to upload large attachments -client_max_body_size 100m; - -underscores_in_headers on; - -gzip on; -gzip_vary on; -gzip_min_length 1024; -gzip_comp_level 5; -gzip_disable "msie6"; -gzip_types text/plain - text/xml - text/css - text/csv - font/ttf - application/xml - application/javascript - application/x-javascript - application/json - application/octet-stream - application/x-font-ttf - application/rtf - application/wasm; - -access_log off; -error_log /var/log/onlyoffice/documentserver/nginx.error.log; diff --git a/build/configs/nginx/includes/ds-docservice.conf b/build/configs/nginx/includes/ds-docservice.conf deleted file mode 100644 index d2348d930f..0000000000 --- a/build/configs/nginx/includes/ds-docservice.conf +++ /dev/null @@ -1,105 +0,0 @@ -#welcome page -location = / { return 302 $the_scheme://$the_host$the_prefix/welcome/; } - -#script caching protection -location ~ ^(?\/web-apps\/apps\/(?!api\/documents\/api\.js$).*)$ { - return 302 $the_scheme://$the_host$the_prefix/__PRODUCT_VERSION__-$cache_tag$cache$is_args$args; -} - -#disable caching for api.js -location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(web-apps\/apps\/api\/documents\/api\.js)$ { - expires off; - add_header Cache-Control "no-store, no-cache, must-revalidate"; - gzip_static on; - alias /var/www/onlyoffice/documentserver/$2; -} - -location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(document_editor_service_worker.js)$ { - add_header Cache-Control "public, max-age=31536000, immutable" always; - gzip_static on; - alias /var/www/onlyoffice/documentserver/sdkjs/common/serviceworker/$2; -} - -#suppress logging the unsupported locale error in web-apps -location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(web-apps)(\/.*\.json)$ { - add_header Cache-Control "public, max-age=31536000, immutable" always; - error_log /dev/null crit; - gzip_static on; - alias /var/www/onlyoffice/documentserver/$2$3; -} - -#suppress logging the unsupported locale error in plugins -location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(sdkjs-plugins)(\/.*\.json)$ { - add_header Cache-Control "public, max-age=31536000, immutable" always; - error_log /dev/null crit; - gzip_static on; - alias /var/www/onlyoffice/documentserver/$2$3; -} - -location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(web-apps|sdkjs|sdkjs-plugins|fonts|dictionaries)(\/.*)$ { - add_header Cache-Control "public, max-age=31536000, immutable" always; - gzip_static on; - alias /var/www/onlyoffice/documentserver/$2$3; -} - -location ~* ^(\/cache\/files.*)(\/.*) { - alias /var/lib/onlyoffice/documentserver/App_Data$1; - add_header Content-Disposition "attachment; filename*=UTF-8''$arg_filename"; - - secure_link $arg_md5,$arg_expires; - secure_link_md5 "$secure_link_expires$uri$secure_link_secret"; - - if ($secure_link = "") { - return 403; - } - - if ($secure_link = "0") { - return 410; - } -} - -# Allow "/internal" interface only from 127.0.0.1 -# Don't comment out the section below for the security reason! - location ~* ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(internal)(\/.*)$ { - allow 127.0.0.1; - deny all; - proxy_pass http://docservice/$2$3; -} - -# Allow "/info" interface only from 127.0.0.1 by default -# Comment out lines allow 127.0.0.1; and deny all; -# of below section to turn on the info page -location ~* ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(info)(\/.*)$ { - allow 127.0.0.1; - deny all; - proxy_pass http://docservice/$2$3; -} - -location / { - proxy_pass http://docservice; - proxy_http_version 1.1; - proxy_read_timeout 300s; - proxy_send_timeout 300s; - proxy_connect_timeout 300s; - proxy_buffering on; - proxy_buffers 64 32k; - proxy_busy_buffers_size 64k; - proxy_max_temp_file_size 0; - proxy_redirect off; -} - -location ~* ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(ai-proxy)(\/.*)?$ { - proxy_pass http://docservice/$2$3; - - proxy_connect_timeout 300s; - proxy_send_timeout 300s; - proxy_read_timeout 300s; - send_timeout 300s; -} - -location ~ ^/([\d]+\.[\d]+\.[\d]+[\.|-][\w]+)/(?.*)$ { - proxy_pass http://docservice/$path$is_args$args; - proxy_http_version 1.1; -} - - diff --git a/build/configs/nginx/includes/ds-example.conf b/build/configs/nginx/includes/ds-example.conf deleted file mode 100644 index 8e4c9acbdc..0000000000 --- a/build/configs/nginx/includes/ds-example.conf +++ /dev/null @@ -1,14 +0,0 @@ -location ~ ^(\/welcome\/.*)$ { - expires 365d; - alias /var/www/onlyoffice/documentserver-example$1; - index docker.html; -} - -location /example/ { - proxy_pass http://example/; - - proxy_set_header X-Forwarded-Host $the_host; - proxy_set_header X-Forwarded-Proto $the_scheme; - proxy_set_header X-Forwarded-Path /example; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; -} diff --git a/build/configs/nginx/includes/ds-letsencrypt.conf b/build/configs/nginx/includes/ds-letsencrypt.conf deleted file mode 100644 index a20a26af32..0000000000 --- a/build/configs/nginx/includes/ds-letsencrypt.conf +++ /dev/null @@ -1,4 +0,0 @@ -location ~ /.well-known/acme-challenge { - root /var/www/onlyoffice/documentserver/letsencrypt/; - allow all; -} diff --git a/build/configs/nginx/includes/ds-mime.types.conf b/build/configs/nginx/includes/ds-mime.types.conf deleted file mode 100644 index 1c00d701ae..0000000000 --- a/build/configs/nginx/includes/ds-mime.types.conf +++ /dev/null @@ -1,99 +0,0 @@ - -types { - text/html html htm shtml; - text/css css; - text/xml xml; - image/gif gif; - image/jpeg jpeg jpg; - application/javascript js; - application/atom+xml atom; - application/rss+xml rss; - - text/mathml mml; - text/plain txt; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/x-component htc; - - image/avif avif; - image/png png; - image/svg+xml svg svgz; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/webp webp; - image/x-icon ico; - image/x-jng jng; - image/x-ms-bmp bmp; - - font/woff woff; - font/woff2 woff2; - - application/java-archive jar war ear; - application/json json; - application/mac-binhex40 hqx; - application/msword doc; - application/pdf pdf; - application/postscript ps eps ai; - application/rtf rtf; - application/vnd.apple.mpegurl m3u8; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/vnd.ms-excel xls; - application/vnd.ms-fontobject eot; - application/vnd.ms-powerpoint ppt; - application/vnd.oasis.opendocument.graphics odg; - application/vnd.oasis.opendocument.presentation odp; - application/vnd.oasis.opendocument.spreadsheet ods; - application/vnd.oasis.opendocument.text odt; - application/vnd.openxmlformats-officedocument.presentationml.presentation - pptx; - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - xlsx; - application/vnd.openxmlformats-officedocument.wordprocessingml.document - docx; - application/vnd.wap.wmlc wmlc; - application/wasm wasm; - application/x-7z-compressed 7z; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-perl pl pm; - application/x-pilot prc pdb; - application/x-rar-compressed rar; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert der pem crt; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/xspf+xml xspf; - application/zip zip; - - application/octet-stream bin exe dll; - application/octet-stream deb; - application/octet-stream dmg; - application/octet-stream iso img; - application/octet-stream msi msp msm; - - audio/midi mid midi kar; - audio/mpeg mp3; - audio/ogg ogg; - audio/x-m4a m4a; - audio/x-realaudio ra; - - video/3gpp 3gpp 3gp; - video/mp2t ts; - video/mp4 mp4; - video/mpeg mpeg mpg; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-m4v m4v; - video/x-mng mng; - video/x-ms-asf asx asf; - video/x-ms-wmv wmv; - video/x-msvideo avi; -} diff --git a/build/configs/nginx/includes/http-common.conf b/build/configs/nginx/includes/http-common.conf deleted file mode 100644 index 3b285288cc..0000000000 --- a/build/configs/nginx/includes/http-common.conf +++ /dev/null @@ -1,44 +0,0 @@ -upstream docservice { - server localhost:8000 max_fails=0 fail_timeout=0s; -} - -upstream adminpanel { - server localhost:9000 max_fails=0 fail_timeout=0s; -} - -upstream example { - server localhost:3000; -} - -map $http_host $this_host { - "" $host; - default $http_host; -} - -map $http_cloudfront_forwarded_proto:$http_x_forwarded_proto $the_scheme { - default $scheme; - "~^https?:.*" $http_cloudfront_forwarded_proto; - "~^:https?$" $http_x_forwarded_proto; -} - -map $http_x_forwarded_host $the_host { - ~^([^,]+) $1; - default $http_x_forwarded_host; - "" $this_host; -} - -map $http_upgrade $proxy_connection { - websocket upgrade; - default close; -} - -map $http_x_forwarded_prefix $the_prefix { - default $http_x_forwarded_prefix; -} - -proxy_set_header Host $http_host; -proxy_set_header Upgrade $http_upgrade; -proxy_set_header Connection $proxy_connection; -proxy_set_header X-Forwarded-Host $the_host; -proxy_set_header X-Forwarded-Proto $the_scheme; -proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; diff --git a/build/configs/onlyoffice/default.json b/build/configs/onlyoffice/default.json deleted file mode 100644 index 7c503f69e8..0000000000 --- a/build/configs/onlyoffice/default.json +++ /dev/null @@ -1,635 +0,0 @@ -{ - "adminPanel": { - "port": 9000 - }, - "statsd": { - "useMetrics": false, - "host": "localhost", - "port": "8125", - "prefix": "ds." - }, - "aiSettings": { - "actions": {}, - "models": [], - "providers": {}, - "version": 3, - "timeout": "5m", - "allowedCorsOrigins": ["https://onlyoffice.github.io", "https://onlyoffice-plugins.github.io"], - "proxy": "" - }, - "log": { - "filePath": "", - "options": { - "replaceConsole": true - } - }, - "runtimeConfig": { - "filePath": "", - "cache": { - "stdTTL": 300, - "checkperiod": 60, - "useClones": false - } - }, - "queue": { - "type": "rabbitmq", - "visibilityTimeout": 300, - "retentionPeriod": 900 - }, - "email": { - "smtpServerConfiguration": { - "host": "localhost", - "port": 587, - "auth": { - "user": "", - "pass": "" - } - }, - "connectionConfiguration": { - "disableFileAccess": false, - "disableUrlAccess": false - }, - "contactDefaults": { - "from": "from@example.com", - "to": "to@example.com" - } - }, - "notification": { - "rules": { - "licenseExpirationWarning": { - "enable": false, - "transportType": ["email"], - "template": { - "title": "%s Docs license expiration warning", - "body": "Attention! Your license is about to expire on %s.\nUpon reaching this date, you will no longer be entitled to receive personal technical support and install new Docs versions released after this date." - }, - "policies": { - "repeatInterval": "1d" - } - }, - "licenseExpirationError": { - "enable": false, - "transportType": ["email"], - "template": { - "title": "%s Docs license expiration warning", - "body": "Attention! Your license expired on %s.\nYou are no longer entitled to receive personal technical support and install new Docs versions released after this date.\nPlease contact sales@onlyoffice.com to discuss license renewal." - }, - "policies": { - "repeatInterval": "1d" - } - }, - "licenseLimitEdit": { - "enable": false, - "transportType": ["email"], - "template": { - "title": "%s Docs license %s limit warning", - "body": "Attention! You have reached %s%% of the %s limit set by your license." - }, - "policies": { - "repeatInterval": "1h" - } - }, - "licenseLimitLiveViewer": { - "enable": false, - "transportType": ["email"], - "template": { - "title": "%s Docs license %s limit warning", - "body": "Attention! You have reached %s%% of the live viewer %s limit set by your license." - }, - "policies": { - "repeatInterval": "1h" - } - } - } - }, - "storage": { - "name": "storage-fs", - "fs": { - "folderPath": "", - "urlExpires": 900, - "secretString": "verysecretstring" - }, - "region": "", - "endpoint": "http://localhost/s3", - "bucketName": "cache", - "storageFolderName": "files", - "cacheFolderName": "data", - "commandOptions": { - "s3": { - "putObject": {}, - "getObject": {}, - "copyObject": { - "MetadataDirective": "COPY" - }, - "listObjects": { - "MaxKeys": 1000 - }, - "deleteObject": {} - }, - "az": { - "uploadData": {}, - "uploadStream": {}, - "download": {}, - "syncCopyFromURL": {}, - "listBlobsFlat": { - "maxPageSize": 1000 - }, - "deleteBlob": {} - } - }, - "urlExpires": 604800, - "accessKeyId": "", - "secretAccessKey": "", - "sslEnabled": false, - "s3ForcePathStyle": true, - "externalHost": "", - "useDirectStorageUrls": false - }, - "persistentStorage": {}, - "rabbitmq": { - "url": "amqp://localhost:5672", - "socketOptions": {}, - "exchangepubsub": { - "name": "ds.pubsub", - "options": { - "durable": true - } - }, - "queuepubsub": { - "name": "", - "options": { - "autoDelete": true, - "exclusive": true, - "arguments": { - "x-queue-type": "classic" - } - } - }, - "queueconverttask": { - "name": "ds.converttask6", - "options": { - "durable": true, - "maxPriority": 6, - "arguments": { - "x-queue-type": "classic" - } - } - }, - "queueconvertresponse": { - "name": "ds.convertresponse", - "options": { - "durable": true, - "arguments": { - "x-queue-type": "classic" - } - } - }, - "exchangeconvertdead": { - "name": "ds.exchangeconvertdead", - "options": { - "durable": true - } - }, - "queueconvertdead": { - "name": "ds.convertdead", - "options": { - "durable": true, - "arguments": { - "x-queue-type": "classic" - } - } - }, - "queuedelayed": { - "name": "ds.delayed", - "options": { - "durable": true, - "arguments": { - "x-queue-type": "classic" - } - } - } - }, - "activemq": { - "connectOptions": { - "port": 5672, - "host": "localhost", - "reconnect": false - }, - "queueconverttask": "ds.converttask", - "queueconvertresponse": "ds.convertresponse", - "queueconvertdead": "ActiveMQ.DLQ", - "queuedelayed": "ds.delayed", - "topicpubsub": "ds.pubsub" - }, - "dnscache": { - "enable": true, - "ttl": 300, - "cachesize": 1000 - }, - "openpgpjs": { - "config": {}, - "encrypt": { - "passwords": ["verysecretstring"] - }, - "decrypt": { - "passwords": ["verysecretstring"] - } - }, - "aesEncrypt": { - "config": { - "keyByteLength": 32, - "saltByteLength": 64, - "initializationVectorByteLength": 16, - "iterationsByteLength": 5 - }, - "secret": "verysecretstring" - }, - "bottleneck": { - "getChanges": {} - }, - "win-ca": { - "inject": "+" - }, - "wopi": { - "enable": false, - "host": "", - "htmlTemplate": "../../web-apps/apps/api/wopi", - "wopiZone": "external-http", - "favIconUrlWord": "/web-apps/apps/documenteditor/main/resources/img/favicon.ico", - "favIconUrlCell": "/web-apps/apps/spreadsheeteditor/main/resources/img/favicon.ico", - "favIconUrlSlide": "/web-apps/apps/presentationeditor/main/resources/img/favicon.ico", - "favIconUrlPdf": "/web-apps/apps/pdfeditor/main/resources/img/favicon.ico", - "favIconUrlDiagram": "/web-apps/apps/visioeditor/main/resources/img/favicon.ico", - "fileInfoBlockList": ["FileUrl"], - "pdfView": [], - "pdfEdit": [], - "forms": [], - "wordView": [], - "wordEdit": [], - "cellView": [], - "cellEdit": [], - "slideView": [], - "slideEdit": [], - "diagramView": [], - "diagramEdit": [], - "publicKey": "", - "modulus": "", - "exponent": 65537, - "privateKey": "", - "publicKeyOld": "", - "modulusOld": "", - "exponentOld": 65537, - "privateKeyOld": "", - "refreshLockInterval": "10m", - "dummy": { - "enable": false, - "sampleFilePath": "" - } - }, - "tenants": { - "baseDir": "", - "baseDomain": "", - "filenameConfig": "config.json", - "filenameSecret": "secret.key", - "filenameLicense": "license.lic", - "defaultTenant": "localhost", - "cache": { - "stdTTL": 300, - "checkperiod": 60, - "useClones": false - } - }, - "externalRequest": { - "directIfIn": { - "allowList": [], - "jwtToken": true - }, - "action": { - "allow": true, - "blockPrivateIP": true, - "proxyUrl": "", - "proxyUser": { - "username": "", - "password": "" - }, - "proxyHeaders": {} - } - }, - "services": { - "CoAuthoring": { - "server": { - "port": 8000, - "workerpercpu": 1, - "mode": "development", - "limits_tempfile_upload": 104857600, - "limits_image_size": 26214400, - "limits_image_download_timeout": { - "connectionAndInactivity": "2m", - "wholeCycle": "2m" - }, - "callbackRequestTimeout": { - "connectionAndInactivity": "10m", - "wholeCycle": "10m" - }, - "healthcheckfilepath": "../public/healthcheck.docx", - "savetimeoutdelay": 5000, - "edit_singleton": false, - "forgottenfiles": "forgotten", - "forgottenfilesname": "output", - "maxRequestChanges": 20000, - "openProtectedFile": true, - "isAnonymousSupport": true, - "editorDataStorage": "editorDataMemory", - "editorStatStorage": "", - "assemblyFormatAsOrigin": true, - "newFileTemplate": "../../document-templates/new", - "documentFormatsFile": "../../document-formats/onlyoffice-docs-formats.json", - "downloadFileAllowExt": ["pdf", "xlsx"], - "tokenRequiredParams": true, - "forceSaveUsingButtonWithoutChanges": false - }, - "requestDefaults": { - "headers": { - "User-Agent": "Node.js/6.13", - "Connection": "Keep-Alive" - }, - "rejectUnauthorized": true - }, - "autoAssembly": { - "enable": false, - "interval": "5m", - "step": "1m" - }, - "utils": { - "utils_common_fontdir": "null", - "utils_fonts_search_patterns": "*.ttf;*.ttc;*.otf", - "limits_image_types_upload": "jpg;jpeg;jpe;png;gif;bmp;svg;tiff;tif;webp;heic;heif;avif", - "limits_document_types_upload": "xlsx" - }, - "sql": { - "type": "postgres", - "tableChanges": "doc_changes", - "tableResult": "task_result", - "dbHost": "localhost", - "dbPort": 5432, - "dbName": "onlyoffice", - "dbUser": "onlyoffice", - "dbPass": "onlyoffice", - "charset": "utf8", - "connectionlimit": 10, - "max_allowed_packet": 1048575, - "pgPoolExtraOptions": { - "idleTimeoutMillis": 30000, - "maxLifetimeSeconds ": 60000, - "statement_timeout ": 60000, - "query_timeout ": 60000, - "connectionTimeoutMillis": 60000 - }, - "damengExtraOptions": { - "columnNameUpperCase": false, - "columnNameCase": "lower", - "connectTimeout": 60000, - "loginEncrypt": false, - "localTimezone": 0, - "poolTimeout": 60, - "socketTimeout": 60000, - "queueTimeout": 60000 - }, - "oracleExtraOptions": { - "thin": true, - "connectTimeout": 60 - }, - "msSqlExtraOptions": { - "options": { - "encrypt": false, - "trustServerCertificate": true - }, - "pool": { - "idleTimeoutMillis": 30000 - } - }, - "mysqlExtraOptions": { - "connectTimeout": 60000, - "queryTimeout": 60000 - } - }, - "redis": { - "name": "redis", - "prefix": "ds:", - "host": "127.0.0.1", - "port": 6379, - "options": {}, - "optionsCluster": {}, - "iooptions": { - "lazyConnect": true - }, - "iooptionsClusterNodes": [], - "iooptionsClusterOptions": { - "lazyConnect": true - } - }, - "pubsub": { - "maxChanges": 1000 - }, - "expire": { - "saveLock": 60, - "presence": 300, - "locks": 604800, - "changeindex": 86400, - "lockDoc": 30, - "message": 86400, - "lastsave": 604800, - "forcesave": 604800, - "forcesaveLock": 5000, - "saved": 3600, - "documentsCron": "0 */2 * * * *", - "files": 86400, - "filesCron": "00 00 */1 * * *", - "filesremovedatonce": 100, - "sessionidle": "1h", - "sessionabsolute": "30d", - "sessionclosecommand": "2m", - "pemStdTTL": "1h", - "pemCheckPeriod": "10m", - "updateVersionStatus": "5m", - "monthUniqueUsers": "1y" - }, - "ipfilter": { - "rules": [{"address": "*", "allowed": true}], - "useforrequest": false, - "errorcode": 403 - }, - "request-filtering-agent": { - "allowPrivateIPAddress": false, - "allowMetaIPAddress": false - }, - "secret": { - "browser": {"string": "secret", "file": ""}, - "inbox": {"string": "secret", "file": ""}, - "outbox": {"string": "secret", "file": ""}, - "session": {"string": "secret", "file": ""} - }, - "token": { - "enable": { - "browser": false, - "request": { - "inbox": false, - "outbox": false - } - }, - "browser": { - "secretFromInbox": true - }, - "inbox": { - "header": "Authorization", - "prefix": "Bearer ", - "inBody": false - }, - "outbox": { - "header": "Authorization", - "prefix": "Bearer ", - "algorithm": "HS256", - "expires": "5m", - "inBody": false, - "urlExclusionRegex": "" - }, - "session": { - "algorithm": "HS256", - "expires": "30d" - }, - "verifyOptions": { - "clockTolerance": 60 - } - }, - "plugins": { - "uri": "/sdkjs-plugins", - "autostart": [] - }, - "themes": { - "uri": "/web-apps/apps/common/main/resources/themes" - }, - "editor": { - "spellcheckerUrl": "", - "reconnection": { - "attempts": 50, - "delay": "2s" - }, - "binaryChanges": false, - "websocketMaxPayloadSize": "1.5MB", - "maxChangesSize": "150MB" - }, - "sockjs": { - "sockjs_url": "", - "disable_cors": true, - "websocket": true - }, - "socketio": { - "connection": { - "path": "/doc/", - "serveClient": false, - "pingTimeout": 20000, - "pingInterval": 25000, - "maxHttpBufferSize": 1e8 - } - }, - "callbackBackoffOptions": { - "retries": 3, - "timeout": { - "factor": 2, - "minTimeout": 1000, - "maxTimeout": 2147483647, - "randomize": false - }, - "httpStatus": "429,500-599" - } - } - }, - "license": { - "license_file": "", - "warning_limit_percents": 70, - "packageType": 0, - "warning_license_expiration": "30d" - }, - "FileConverter": { - "converter": { - "maxDownloadBytes": 104857600, - "downloadTimeout": { - "connectionAndInactivity": "2m", - "wholeCycle": "2m" - }, - "downloadAttemptMaxCount": 3, - "downloadAttemptDelay": 1000, - "maxprocesscount": 1, - "fontDir": "null", - "presentationThemesDir": "null", - "x2tPath": "null", - "docbuilderPath": "null", - "signingKeyStorePath": "", - "signing": { - "keyStorePath": "", - "meta": { - "reason": "", - "name": "", - "location": "", - "contactInfo": "" - }, - "awsKms": { - "endpoint": "", - "keyId": "", - "accessKeyId": "", - "secretAccessKey": "" - }, - "csc": { - "baseUrl": "", - "tokenUrl": "", - "clientId": "", - "clientSecret": "", - "grantType": "", - "clientAuth": "", - "tokenBodyFormat": "", - "username": "", - "password": "", - "credentialId": "", - "clientData": "", - "scope": "service", - "audience": "" - } - }, - "args": "", - "spawnOptions": {}, - "errorfiles": "", - "streamWriterBufferSize": 8388608, - "maxRedeliveredCount": 2, - "inputLimits": [ - { - "type": "docx;dotx;docm;dotm", - "zip": { - "uncompressed": "50MB", - "template": "*.xml" - } - }, - { - "type": "xlsx;xltx;xlsm;xltm", - "zip": { - "uncompressed": "300MB", - "template": "*.xml" - } - }, - { - "type": "pptx;ppsx;potx;pptm;ppsm;potm", - "zip": { - "uncompressed": "50MB", - "template": "*.xml" - } - }, - { - "type": "vsdx;vstx;vssx;vsdm;vstm;vssm", - "zip": { - "uncompressed": "50MB", - "template": "*.xml" - } - } - ] - } - } -} diff --git a/build/configs/onlyoffice/development-linux.json b/build/configs/onlyoffice/development-linux.json deleted file mode 100644 index 66bc942819..0000000000 --- a/build/configs/onlyoffice/development-linux.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "log": { - "filePath": "/etc/onlyoffice/documentserver/log4js/development.json" - }, - "runtimeConfig": { - "filePath": "/var/www/onlyoffice/documentserver/../Data/runtime.json" - }, - "storage": { - "fs": { - "folderPath": "/var/lib/onlyoffice/documentserver/App_Data/cache/files" - } - }, - "wopi": { - "enable": true - }, - "services": { - "CoAuthoring": { - "server": { - "newFileTemplate": "/var/www/onlyoffice/documentserver/document-templates/new", - "static_content": { - "/fonts": { - "path": "/var/www/onlyoffice/documentserver/fonts", - "options": {"maxAge": "7d"} - }, - "/sdkjs": { - "path": "/var/www/onlyoffice/documentserver/sdkjs", - "options": {"maxAge": "7d"} - }, - "/web-apps": { - "path": "/var/www/onlyoffice/documentserver/web-apps", - "options": {"maxAge": "7d"} - }, - "/welcome": { - "path": "/var/www/onlyoffice/documentserver/server/welcome", - "options": {"maxAge": "7d"} - }, - "/info": { - "path": "/var/www/onlyoffice/documentserver/server/info", - "options": { - "maxAge": 0, - "cacheControl": "public, no-cache, must-revalidate", - "etag": true, - "lastModified": true - } - }, - "/sdkjs-plugins": { - "path": "/var/www/onlyoffice/documentserver/sdkjs-plugins", - "options": {"maxAge": "7d"} - }, - "/dictionaries": { - "path": "/var/www/onlyoffice/documentserver/dictionaries", - "options": {"maxAge": "7d"} - } - } - }, - "request-filtering-agent": { - "allowPrivateIPAddress": true, - "allowMetaIPAddress": true - }, - "utils": { - "utils_common_fontdir": "/usr/share/fonts", - "limits_document_types_upload": "xlsx" - }, - "sockjs": { - "sockjs_url": "/web-apps/vendor/sockjs/sockjs.min.js" - } - } - }, - "license": { - "license_file": "/var/www/onlyoffice/documentserver/../Data/license.lic", - "warning_limit_percents": 70, - "packageType": 0 - }, - "FileConverter": { - "converter": { - "fontDir": "/usr/share/fonts", - "presentationThemesDir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes", - "x2tPath": "/var/www/onlyoffice/documentserver/server/FileConverter/bin/x2t", - "docbuilderPath": "/var/www/onlyoffice/documentserver/server/FileConverter/bin/docbuilder" - } - }, - "SpellChecker": { - "server": { - "dictDir": "/var/www/onlyoffice/documentserver/dictionaries" - } - } -} diff --git a/build/configs/onlyoffice/local.json b/build/configs/onlyoffice/local.json deleted file mode 100644 index b5b83c7944..0000000000 --- a/build/configs/onlyoffice/local.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "runtimeConfig": { - "filePath": "/var/www/onlyoffice/documentserver/server/Common/config/runtime.json" - }, - "log": { - "filePath": "/var/www/onlyoffice/documentserver/log4js.json", - "options": { - "replaceConsole": true - } - }, - "services": { - "CoAuthoring": { - "sql": { - "type": "postgres", - "dbHost": "localhost", - "dbPort": "5432", - "dbName": "onlyoffice", - "dbUser": "onlyoffice", - "dbPass": "onlyoffice" - }, - "token": { - "enable": { - "request": { - "inbox": true, - "outbox": true - }, - "browser": true - }, - "inbox": { - "header": "Authorization", - "inBody": false - }, - "outbox": { - "header": "Authorization", - "inBody": false - } - }, - "secret": { - "browser": { - "string": "secret" - }, - "inbox": { - "string": "secret" - }, - "outbox": { - "string": "secret" - }, - "session": { - "string": "secret" - } - }, - "requestDefaults": { - "rejectUnauthorized": true - }, - "request-filtering-agent": { - "allowPrivateIPAddress": true, - "allowMetaIPAddress": true - } - - } - } -} diff --git a/build/configs/onlyoffice/log4js/development.json b/build/configs/onlyoffice/log4js/development.json deleted file mode 100644 index ff1d03265c..0000000000 --- a/build/configs/onlyoffice/log4js/development.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "appenders": { - "default": { - "type": "console", - "layout": { - "type": "patternWithTokens", - "pattern": "%[[%d] [%p] [%X{TENANT}] [%X{DOCID}] [%X{USERID}]%x{usid} %c -%] %.10000m" - } - } - }, - "categories": { - "default": {"appenders": ["default"], "level": "ALL"} - } -} diff --git a/build/configs/postgres/createdb.sql b/build/configs/postgres/createdb.sql deleted file mode 100644 index 2c1cf1cdb0..0000000000 --- a/build/configs/postgres/createdb.sql +++ /dev/null @@ -1,73 +0,0 @@ --- --- Create schema onlyoffice --- - --- CREATE DATABASE onlyoffice ENCODING = 'UTF8' CONNECTION LIMIT = -1; - --- ---------------------------- --- Table structure for doc_changes --- ---------------------------- -CREATE TABLE IF NOT EXISTS "doc_changes" ( -"tenant" varchar(255) COLLATE "default" NOT NULL, -"id" varchar(255) COLLATE "default" NOT NULL, -"change_id" int4 NOT NULL, -"user_id" varchar(255) COLLATE "default" NOT NULL, -"user_id_original" varchar(255) COLLATE "default" NOT NULL, -"user_name" varchar(255) COLLATE "default" NOT NULL, -"change_data" text COLLATE "default" NOT NULL, -"change_date" timestamp without time zone NOT NULL, -PRIMARY KEY ("tenant", "id", "change_id") -) -WITH (OIDS=FALSE); - --- ---------------------------- --- Table structure for task_result --- ---------------------------- -CREATE TABLE IF NOT EXISTS "task_result" ( -"tenant" varchar(255) COLLATE "default" NOT NULL, -"id" varchar(255) COLLATE "default" NOT NULL, -"status" int2 NOT NULL, -"status_info" int4 NOT NULL, -"created_at" timestamp without time zone DEFAULT NOW(), -"last_open_date" timestamp without time zone NOT NULL, -"user_index" int4 NOT NULL DEFAULT 1, -"change_id" int4 NOT NULL DEFAULT 0, -"callback" text COLLATE "default" NOT NULL, -"baseurl" text COLLATE "default" NOT NULL, -"password" text COLLATE "default" NULL, -"additional" text COLLATE "default" NULL, -PRIMARY KEY ("tenant", "id") -) -WITH (OIDS=FALSE); - -CREATE OR REPLACE FUNCTION merge_db(_tenant varchar(255), _id varchar(255), _status int2, _status_info int4, _last_open_date timestamp without time zone, _user_index int4, _change_id int4, _callback text, _baseurl text, OUT isupdate char(5), OUT userindex int4) AS -$$ -DECLARE - t_var "task_result"."user_index"%TYPE; -BEGIN - LOOP - -- first try to update the key - -- note that "a" must be unique - IF ((_callback <> '') IS TRUE) AND ((_baseurl <> '') IS TRUE) THEN - UPDATE "task_result" SET last_open_date=_last_open_date, user_index=user_index+1,callback=_callback,baseurl=_baseurl WHERE tenant = _tenant AND id = _id RETURNING user_index into userindex; - ELSE - UPDATE "task_result" SET last_open_date=_last_open_date, user_index=user_index+1 WHERE tenant = _tenant AND id = _id RETURNING user_index into userindex; - END IF; - IF found THEN - isupdate := 'true'; - RETURN; - END IF; - -- not there, so try to insert the key - -- if someone else inserts the same key concurrently, - -- we could get a unique-key failure - BEGIN - INSERT INTO "task_result"(tenant, id, status, status_info, last_open_date, user_index, change_id, callback, baseurl) VALUES(_tenant, _id, _status, _status_info, _last_open_date, _user_index, _change_id, _callback, _baseurl) RETURNING user_index into userindex; - isupdate := 'false'; - RETURN; - EXCEPTION WHEN unique_violation THEN - -- do nothing, and loop to try the UPDATE again - END; - END LOOP; -END; -$$ -LANGUAGE plpgsql; diff --git a/build/configs/supervisor/ds-adminpanel.conf b/build/configs/supervisor/ds-adminpanel.conf index cf08a5815b..f8ee8f142c 100644 --- a/build/configs/supervisor/ds-adminpanel.conf +++ b/build/configs/supervisor/ds-adminpanel.conf @@ -1,12 +1,12 @@ [program:adminpanel] -command=/var/www/onlyoffice/documentserver/server/AdminPanel/server/adminpanel -directory=/var/www/onlyoffice/documentserver/server/AdminPanel +command=/var/www/euro-office/documentserver/server/AdminPanel/server/adminpanel +directory=/var/www/euro-office/documentserver/server/AdminPanel user=ds -environment=NODE_ENV=development-linux,NODE_CONFIG_DIR=/etc/onlyoffice/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/onlyoffice/documentserver/server/FileConverter/bin:/var/www/onlyoffice/documentserver/server/FileConverter/lib -stdout_logfile=/var/log/onlyoffice/documentserver/adminpanel/out.log +environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/euro-office/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/euro-office/documentserver/server/FileConverter/bin:/var/www/euro-office/documentserver/server/FileConverter/lib +stdout_logfile=/var/log/euro-office/documentserver/adminpanel/out.log stdout_logfile_backups=0 stdout_logfile_maxbytes=0 -stderr_logfile=/var/log/onlyoffice/documentserver/adminpanel/err.log +stderr_logfile=/var/log/euro-office/documentserver/adminpanel/err.log stderr_logfile_backups=0 stderr_logfile_maxbytes=0 autostart=false diff --git a/build/configs/supervisor/ds-converter.conf b/build/configs/supervisor/ds-converter.conf index 0c55a982c4..3816aedf30 100644 --- a/build/configs/supervisor/ds-converter.conf +++ b/build/configs/supervisor/ds-converter.conf @@ -1,12 +1,12 @@ [program:converter] -command=/var/www/onlyoffice/documentserver/server/FileConverter/converter -directory=/var/www/onlyoffice/documentserver/server/FileConverter +command=/var/www/euro-office/documentserver/server/FileConverter/converter +directory=/var/www/euro-office/documentserver/server/FileConverter user=ds -environment=NODE_ENV=development-linux,NODE_CONFIG_DIR=/etc/onlyoffice/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/onlyoffice/documentserver/server/FileConverter/bin:/var/www/onlyoffice/documentserver/server/FileConverter/lib -stdout_logfile=/var/log/onlyoffice/documentserver/converter/out.log +environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/euro-office/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/euro-office/documentserver/server/FileConverter/bin:/var/www/euro-office/documentserver/server/FileConverter/lib +stdout_logfile=/var/log/euro-office/documentserver/converter/out.log stdout_logfile_backups=0 stdout_logfile_maxbytes=0 -stderr_logfile=/var/log/onlyoffice/documentserver/converter/err.log +stderr_logfile=/var/log/euro-office/documentserver/converter/err.log stderr_logfile_backups=0 stderr_logfile_maxbytes=0 autostart=true diff --git a/build/configs/supervisor/ds-docservice.conf b/build/configs/supervisor/ds-docservice.conf index 9160edfc01..6ce15d40ea 100644 --- a/build/configs/supervisor/ds-docservice.conf +++ b/build/configs/supervisor/ds-docservice.conf @@ -1,12 +1,12 @@ [program:docservice] -command=/var/www/onlyoffice/documentserver/server/DocService/docservice -directory=/var/www/onlyoffice/documentserver/server/DocService +command=/var/www/euro-office/documentserver/server/DocService/docservice +directory=/var/www/euro-office/documentserver/server/DocService user=ds -environment=NODE_ENV=development-linux,NODE_CONFIG_DIR=/etc/onlyoffice/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/onlyoffice/documentserver/server/FileConverter/bin:/var/www/onlyoffice/documentserver/server/FileConverter/lib -stdout_logfile=/var/log/onlyoffice/documentserver/docservice/out.log +environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/euro-office/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/euro-office/documentserver/server/FileConverter/bin:/var/www/euro-office/documentserver/server/FileConverter/lib +stdout_logfile=/var/log/euro-office/documentserver/docservice/out.log stdout_logfile_backups=0 stdout_logfile_maxbytes=0 -stderr_logfile=/var/log/onlyoffice/documentserver/docservice/err.log +stderr_logfile=/var/log/euro-office/documentserver/docservice/err.log stderr_logfile_backups=0 stderr_logfile_maxbytes=0 autostart=true diff --git a/build/configs/supervisor/ds-example.conf b/build/configs/supervisor/ds-example.conf index 11fbdd261f..3a03ea9c3e 100644 --- a/build/configs/supervisor/ds-example.conf +++ b/build/configs/supervisor/ds-example.conf @@ -1,12 +1,12 @@ [program:ds-example] -command=/var/www/onlyoffice/documentserver-example/example -directory=/var/www/onlyoffice/documentserver-example/ +command=/var/www/euro-office/documentserver-example/example +directory=/var/www/euro-office/documentserver-example/ user=ds -environment=NODE_ENV=development-linux,NODE_CONFIG_DIR=/etc/onlyoffice/documentserver-example,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice -stdout_logfile=/var/log/onlyoffice/documentserver/ds-example_out.log +environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/euro-office/documentserver-example,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice +stdout_logfile=/var/log/euro-office/documentserver/ds-example_out.log stdout_logfile_backups=0 stdout_logfile_maxbytes=0 -stderr_logfile=/var/log/onlyoffice/documentserver/ds-example_err.log +stderr_logfile=/var/log/euro-office/documentserver/ds-example_err.log stderr_logfile_backups=0 stderr_logfile_maxbytes=0 autostart=false diff --git a/build/configs/supervisor/ds-metrics.conf b/build/configs/supervisor/ds-metrics.conf index 98fabc7c09..fe18341c40 100644 --- a/build/configs/supervisor/ds-metrics.conf +++ b/build/configs/supervisor/ds-metrics.conf @@ -1,12 +1,12 @@ [program:metrics] -command=/var/www/onlyoffice/documentserver/server/Metrics/metrics ./config/config.js -directory=/var/www/onlyoffice/documentserver/server/Metrics +command=/var/www/euro-office/documentserver/server/Metrics/metrics ./config/config.js +directory=/var/www/euro-office/documentserver/server/Metrics user=ds -environment=NODE_DISABLE_COLORS=1,LD_LIBRARY_PATH=/var/www/onlyoffice/documentserver/server/FileConverter/bin:/var/www/onlyoffice/documentserver/server/FileConverter/lib -stdout_logfile=/var/log/onlyoffice/documentserver/metrics/out.log +environment=NODE_DISABLE_COLORS=1,LD_LIBRARY_PATH=/var/www/euro-office/documentserver/server/FileConverter/bin:/var/www/euro-office/documentserver/server/FileConverter/lib +stdout_logfile=/var/log/euro-office/documentserver/metrics/out.log stdout_logfile_backups=0 stdout_logfile_maxbytes=0 -stderr_logfile=/var/log/onlyoffice/documentserver/metrics/err.log +stderr_logfile=/var/log/euro-office/documentserver/metrics/err.log stderr_logfile_backups=0 stderr_logfile_maxbytes=0 autostart=true diff --git a/build/docker-bake.hcl b/build/docker-bake.hcl index b5534a239c..0c8ae9c538 100644 --- a/build/docker-bake.hcl +++ b/build/docker-bake.hcl @@ -17,7 +17,7 @@ variable "BUILD_ROOT" { } variable "PACKAGE_BASE" { - default = "finalubuntu" + default = "docsrv-build" } variable "NUGET_CACHE" { @@ -125,16 +125,12 @@ target "example" { cache-to = ["type=local,dest=/tmp/${REGISTRY}/example,mode=max"] } -# ────────────────────────────────────────────── -# BUILD TARGETS -# ────────────────────────────────────────────── - -target "documentserver" { +target "bundle" { inherits = ["_common"] context = ".." - dockerfile = "./build/.docker/docserver.bake.Dockerfile" - target = "finalubuntu" - tags = ["${REGISTRY}/documentserver:${TAG}"] + dockerfile = "./build/.docker/bundle.bake.Dockerfile" + target = "bundle" + tags = ["${REGISTRY}/bundle:${TAG}"] contexts = { core = "target:core" server = "target:server" @@ -142,26 +138,8 @@ target "documentserver" { web-apps = "target:web-apps" example = "target:example" } - cache-from = ["type=local,src=/tmp/${REGISTRY}/documentserver"] - cache-to = ["type=local,dest=/tmp/${REGISTRY}/documentserver,mode=max"] -} - -target "develop" { - inherits = ["_common"] - context = ".." - dockerfile = "./build/.docker/develop.bake.Dockerfile" - target = "develop" - tags = ["${REGISTRY}/documentserver:${TAG}-dev"] - contexts = { - finalubuntu = "target:documentserver" - core = "target:core" - server = "target:server" - sdkjs = "target:sdkjs" - web-apps = "target:web-apps" - example = "target:example" - } - cache-from = ["type=local,src=/tmp/${REGISTRY}/develop"] - cache-to = ["type=local,dest=/tmp/${REGISTRY}/develop,mode=max"] + cache-from = ["type=local,src=/tmp/${REGISTRY}/bundle"] + cache-to = ["type=local,dest=/tmp/${REGISTRY}/bundle,mode=max"] } # ────────────────────────────────────────────── @@ -175,16 +153,41 @@ target "packages" { target = "packages" # points to the FROM scratch stage tags = ["${REGISTRY}/packages:${TAG}"] contexts = { - finalubuntu = "target:documentserver" - core = "target:core" - server = "target:server" - sdkjs = "target:sdkjs" - web-apps = "target:web-apps" - example = "target:example" + bundle = "target:bundle" } # Export the filesystem directly to a local directory instead of an image output = ["type=local,dest=./deploy/packages"] cache-from = ["type=local,src=/tmp/${REGISTRY}/packages"] # reuses builder cache +} + +# ────────────────────────────────────────────── +# BUILD TARGETS +# ────────────────────────────────────────────── + +target "docker" { + inherits = ["_common"] + context = ".." + dockerfile = "./build/.docker/docker.bake.Dockerfile" + target = "finalubuntu" + tags = ["${REGISTRY}/documentserver:${TAG}"] + contexts = { + packages = "target:packages" + } + cache-from = ["type=local,src=/tmp/${REGISTRY}/documentserver"] + cache-to = ["type=local,dest=/tmp/${REGISTRY}/documentserver,mode=max"] +} + +target "develop" { + inherits = ["_common"] + context = ".." + dockerfile = "./build/.docker/develop.bake.Dockerfile" + target = "develop" + tags = ["${REGISTRY}/documentserver:${TAG}-dev"] + contexts = { + finalubuntu = "target:docker" + } + cache-from = ["type=local,src=/tmp/${REGISTRY}/develop"] + cache-to = ["type=local,dest=/tmp/${REGISTRY}/develop,mode=max"] } \ No newline at end of file diff --git a/build/scripts/build-packages.sh b/build/scripts/build-packages.sh index 3f5a280054..138c209890 100644 --- a/build/scripts/build-packages.sh +++ b/build/scripts/build-packages.sh @@ -31,7 +31,7 @@ echo "==> [build-packages] PRODUCT_VERSION=${PRODUCT_VERSION}, BUILD_NUMBER=${BU # --------------------------------------------------------------------------- echo "==> Setting up output directory: ${OUT_DIR}" mkdir -p "${OUT_DIR}" -cp -a /var/www/onlyoffice/documentserver/. "${OUT_DIR}/" +cp -a /build/documentserver/. "${OUT_DIR}/" # Remove the Docker-specific runtime marker (upstream Makefile doesn't expect it) rm -f "${OUT_DIR}/server/Common/config/runtime.json" @@ -68,8 +68,8 @@ cp -a /server-src/license/. "${OUT_DIR}/server/license/" # --------------------------------------------------------------------------- echo "==> Setting up example output directory: ${EXAMPLE_OUT}" mkdir -p "${EXAMPLE_OUT}/config" -cp -f /var/www/onlyoffice/documentserver-example/example "${EXAMPLE_OUT}/" -cp -f /etc/onlyoffice/documentserver-example/*.json "${EXAMPLE_OUT}/config/" 2>/dev/null || true +cp -f /build/documentserver-example/example "${EXAMPLE_OUT}/" +cp -f /config/documentserver-example/*.json "${EXAMPLE_OUT}/config/" 2>/dev/null || true # --------------------------------------------------------------------------- # 6. Run upstream Makefile diff --git a/build/scripts/documentserver-flush-cache.sh b/build/scripts/documentserver-flush-cache.sh deleted file mode 100755 index 77d9f032c6..0000000000 --- a/build/scripts/documentserver-flush-cache.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh - -while [ "$1" != "" ]; do - case $1 in - - -h | --hash ) - if [ "$2" != "" ]; then - HASH=$2 - shift - fi - ;; - - -r | --restart ) - if [ "$2" != "" ]; then - RESTART_CONDITION=$2 - shift - fi - ;; - - esac - shift -done - -HASH=${HASH:-$(date +'%Y.%m.%d' | openssl md5 | awk '{print $2}')} - -# Save the hash to a variable in the configuration file -echo "set \$cache_tag \"$HASH\";" > /etc/nginx/includes/ds-cache.conf - -API_PATH="/var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js" -# Only copy template if it exists, otherwise create from existing api.js if available -if [ -f "${API_PATH}.tpl" ]; then - cp -f ${API_PATH}.tpl ${API_PATH} -elif [ -f "$API_PATH" ]; then - # If no template, use the existing file (first run scenario) - cp -f $API_PATH ${API_PATH}.tpl 2>/dev/null || true -fi -sed -i "s/{{HASH_POSTFIX}}/${HASH}/g" ${API_PATH} 2>/dev/null || true -# Only chown if ds user exists -if id -u ds > /dev/null 2>&1; then - chown ds:ds ${API_PATH} -fi -rm -f ${API_PATH}.gz - -if [ "$RESTART_CONDITION" != "false" ]; then - if (pgrep -x "systemd" > /dev/null) && systemctl is-active --quiet nginx; then - systemctl reload nginx - elif service nginx status > /dev/null 2>&1; then - service nginx reload - fi -fi diff --git a/build/scripts/documentserver-generate-allfonts.sh b/build/scripts/documentserver-generate-allfonts.sh deleted file mode 100755 index 14b0dba3f1..0000000000 --- a/build/scripts/documentserver-generate-allfonts.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/sh - -ONLYOFFICE_DATA_CONTAINER=false -if [ "$1" != "" ]; then - ONLYOFFICE_DATA_CONTAINER=$1 -fi - -DIR="/var/www/onlyoffice/documentserver" - -export LD_LIBRARY_PATH=/var/www/onlyoffice/documentserver/server/FileConverter/bin:/var/www/onlyoffice/documentserver/server/FileConverter/lib:$LD_LIBRARY_PATH - -# Start the ds user if it doesn't exist (for chown commands later) -if ! id -u ds > /dev/null 2>&1; then - useradd -r -s /bin/false ds 2>/dev/null || true -fi - -#Start generate AllFonts.js, font thumbnails and font_selection.bin -echo "Generating AllFonts.js, please wait..." - -# Check if allfontsgen exists before trying to run it -if [ ! -x "$DIR/server/tools/allfontsgen" ]; then - echo "ERROR: allfontsgen not found or not executable at $DIR/server/tools/allfontsgen" - exit 1 -fi - - -"$DIR/server/tools/allfontsgen"\ - --input="$DIR/core-fonts"\ - --allfonts-web="$DIR/sdkjs/common/AllFonts.js"\ - --allfonts="$DIR/server/FileConverter/bin/AllFonts.js"\ - --images="$DIR/sdkjs/common/Images"\ - --selection="$DIR/server/FileConverter/bin/font_selection.bin"\ - --output-web="$DIR/fonts"\ - --use-system="true"\ - --use-system-user-fonts="false" - -echo Done - -echo -n Generating presentation themes, please wait... -"$DIR/server/tools/allthemesgen"\ - --converter-dir="$DIR/server/FileConverter/bin"\ - --src="$DIR/sdkjs/slide/themes"\ - --output="$DIR/sdkjs/common/Images" - -"$DIR/server/tools/allthemesgen"\ - --converter-dir="$DIR/server/FileConverter/bin"\ - --src="$DIR/sdkjs/slide/themes"\ - --output="$DIR/sdkjs/common/Images"\ - --postfix="ios"\ - --params="280,224" - -"$DIR/server/tools/allthemesgen"\ - --converter-dir="$DIR/server/FileConverter/bin"\ - --src="$DIR/sdkjs/slide/themes"\ - --output="$DIR/sdkjs/common/Images"\ - --postfix="android"\ - --params="280,224" - -echo Done - -echo -n Generating js caches, please wait... -"$DIR/server/FileConverter/bin/x2t" -create-js-cache - -echo Done - -# Setting user rights for files created in the previous steps -chown -R ds:ds "$DIR/sdkjs" -chown -R ds:ds "$DIR/server/FileConverter/bin" -chown -R ds:ds "$DIR/fonts" - -#Remove gzipped files -rm -f \ - $DIR/fonts/*.gz \ - $DIR/sdkjs/common/AllFonts.js.gz \ - $DIR/sdkjs/common/Images/*.gz \ - $DIR/sdkjs/slide/themes/themes.js.gz - -#Restart web-site and converter -if [ "$ONLYOFFICE_DATA_CONTAINER" != "true" ]; then - if pgrep -x "systemd" >/dev/null; then - systemctl restart ds-docservice - systemctl restart ds-converter - elif pgrep -x "supervisord" >/dev/null; then - supervisorctl restart ds:docservice - supervisorctl restart ds:converter - fi - documentserver-flush-cache.sh -fi diff --git a/build/scripts/entrypoint.sh b/build/scripts/entrypoint.sh index 0931375cf7..9bc601218f 100644 --- a/build/scripts/entrypoint.sh +++ b/build/scripts/entrypoint.sh @@ -1,8 +1,8 @@ #!/bin/sh update_welcome_page() { - WELCOME_PAGE="/var/www/onlyoffice/documentserver-example/welcome/docker.html" - EXAMPLE_DISABLED_PAGE="/var/www/onlyoffice/documentserver-example/welcome/example-disabled.html" + WELCOME_PAGE="/var/www/euro-office/documentserver-example/welcome/docker.html" + EXAMPLE_DISABLED_PAGE="/var/www/euro-office/documentserver-example/welcome/example-disabled.html" # Replace systemctl placeholder (set at build time) with docker+supervisorctl equivalent sed -i 's|sudo systemctl start ds-example|sudo docker exec $(sudo docker ps -q) supervisorctl start ds:example|g' \ @@ -27,8 +27,8 @@ update_welcome_page() { fi } -# Create symlink for /config -> /etc/onlyoffice/documentserver so tools can find config -ln -sf /etc/onlyoffice/documentserver /config 2>/dev/null || true +# Create symlink for /config -> /etc/euro-office/documentserver so tools can find config +ln -sf /etc/euro-office/documentserver /config 2>/dev/null || true service postgresql start runuser -u rabbitmq -- rabbitmq-server -detached @@ -36,9 +36,9 @@ service redis-server start service nginx start # Ensure the api.js.tpl template exists (required by documentserver-flush-cache.sh) -API_TPL="/var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js.tpl" -if [ ! -f "$API_TPL" ] && [ -f "/var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js" ]; then - cp /var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js "$API_TPL" +API_TPL="/var/www/euro-office/documentserver/web-apps/apps/api/documents/api.js.tpl" +if [ ! -f "$API_TPL" ] && [ -f "/var/www/euro-office/documentserver/web-apps/apps/api/documents/api.js" ]; then + cp /var/www/euro-office/documentserver/web-apps/apps/api/documents/api.js "$API_TPL" fi # Generate all fonts (AllFonts.js, font_selection.bin, presentation themes) @@ -89,7 +89,7 @@ enable_supervisor_program() { [ "${EXAMPLE_ENABLED:-false}" = "true" ] && enable_supervisor_program ds-example # Update example app config with JWT settings -EXAMPLE_CONF_DIR="/etc/onlyoffice/documentserver-example" +EXAMPLE_CONF_DIR="/etc/euro-office/documentserver-example" EXAMPLE_LOCAL="${EXAMPLE_CONF_DIR}/local.json" if [ "${EXAMPLE_ENABLED:-false}" = "true" ] && [ -n "$JWT_SECRET" ]; then jq -n \ @@ -97,6 +97,8 @@ if [ "${EXAMPLE_ENABLED:-false}" = "true" ] && [ -n "$JWT_SECRET" ]; then --arg header "${JWT_HEADER:-Authorization}" \ '{ "server": { + "siteUrl": "/", + "exampleUrl": "http://localhost/example/", "token": { "enable": true, "secret": $secret, diff --git a/document-server-integration b/document-server-integration index 27d0a58105..0b1d9b3ac3 160000 --- a/document-server-integration +++ b/document-server-integration @@ -1 +1 @@ -Subproject commit 27d0a58105bc32c0339b922068eb7dcdfb4b151d +Subproject commit 0b1d9b3ac30d17954ab549b4ca16cacb643c2090 diff --git a/document-server-package b/document-server-package index 5974fe95e2..bacbf2c454 160000 --- a/document-server-package +++ b/document-server-package @@ -1 +1 @@ -Subproject commit 5974fe95e28f543e2b1323ca94222b10acbd6fb5 +Subproject commit bacbf2c45435c6a509d2b5567327a6e7677a6bb6 diff --git a/server b/server index f4afd0efaa..e661f5c752 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit f4afd0efaab0ed64406db3188d4c47d4fe2c6a0a +Subproject commit e661f5c75280f16535ae9d8006987c046a65d902 From 8cc9d5e1d77ae85009256a78b8d24962a29b68da Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Mon, 11 May 2026 15:31:14 -0700 Subject: [PATCH 02/10] fix: github workflow Signed-off-by: Hendrik Leidinger --- .github/workflows/build.yml | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9d5d7a0d41..6aee4959c4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -154,7 +154,7 @@ jobs: with: workdir: ./build files: ./docker-bake.hcl - targets: documentserver + targets: docker push: ${{ steps.meta.outputs.push == 'true' }} set: | core.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }} @@ -175,9 +175,15 @@ jobs: example.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }} example.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }},mode=max example.tags= - documentserver.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-${{ matrix.arch }} - documentserver.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-${{ matrix.arch }},mode=max - documentserver.tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.tag }}-${{ matrix.arch }} + bundle.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }} + bundle.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }},mode=max + bundle.tags= + packages.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }} + packages.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }},mode=max + packages.tags= + docker.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-docker-buildcache-${{ matrix.arch }} + docker.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-docker-buildcache-${{ matrix.arch }},mode=max + docker.tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.tag }}-${{ matrix.arch }} env: REGISTRY: ${{ env.REGISTRY }} TAG: ${{ steps.meta.outputs.tag }}-${{ matrix.arch }} @@ -316,9 +322,15 @@ jobs: example.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }} example.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }},mode=max example.tags= - documentserver.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-${{ matrix.arch }} - documentserver.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-${{ matrix.arch }},mode=max - documentserver.tags= + bundle.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }} + bundle.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }},mode=max + bundle.tags= + packages.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }} + packages.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }},mode=max + packages.tags= + docker.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-docker-buildcache-${{ matrix.arch }} + docker.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-docker-buildcache-${{ matrix.arch }},mode=max + docker.tags= develop.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-develop-buildcache-${{ matrix.arch }} develop.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-develop-buildcache-${{ matrix.arch }},mode=max develop.tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest-dev-${{ matrix.arch }} @@ -423,11 +435,11 @@ jobs: example.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-amd64 example.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-amd64,mode=max example.tags= - documentserver.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-amd64 - documentserver.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-amd64,mode=max - documentserver.tags= - packages.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-amd64 - packages.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-amd64,mode=max + bundle.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }} + bundle.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }},mode=max + bundle.tags= + packages.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }} + packages.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }},mode=max packages.tags= env: REGISTRY: ${{ env.REGISTRY }} From 404bc0021c9f6750d85be4c3c9fa67ea30f881eb Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Mon, 11 May 2026 17:45:27 -0700 Subject: [PATCH 03/10] fix: attempt to fix workflow develop step Signed-off-by: Hendrik Leidinger --- build/.docker/develop.bake.Dockerfile | 2 +- document-server-package | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/.docker/develop.bake.Dockerfile b/build/.docker/develop.bake.Dockerfile index fd6b91d131..55d1d8d2c0 100644 --- a/build/.docker/develop.bake.Dockerfile +++ b/build/.docker/develop.bake.Dockerfile @@ -13,7 +13,7 @@ FROM finalubuntu AS develop RUN apt-get update && \ curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ - apt-get install -y nodejs npm openjdk-21-jdk wget zip brotli && \ + apt-get install -y nodejs openjdk-21-jdk wget zip brotli && \ npm install -g @yao-pkg/pkg grunt-cli && \ rm -rf /var/lib/apt/lists/* diff --git a/document-server-package b/document-server-package index bacbf2c454..dec9f3cac3 160000 --- a/document-server-package +++ b/document-server-package @@ -1 +1 @@ -Subproject commit bacbf2c45435c6a509d2b5567327a6e7677a6bb6 +Subproject commit dec9f3cac3be0438c4c590fabbe0684ef606c72d From e2555985d1919ac9707921719ab8e64a8e57a4e8 Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Mon, 11 May 2026 19:34:41 -0700 Subject: [PATCH 04/10] chore: update subrepos Signed-off-by: Hendrik Leidinger --- server | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server b/server index e661f5c752..67cd41298b 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit e661f5c75280f16535ae9d8006987c046a65d902 +Subproject commit 67cd41298bc7dc3d6265235601ffd32d93935159 From 1d516ecbb46305ca7aa16d5aa10d41880ed98fb2 Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Mon, 11 May 2026 20:51:14 -0700 Subject: [PATCH 05/10] chore: simplify package creation, get rid of build-packages script Signed-off-by: Hendrik Leidinger --- build/.docker/bundle.bake.Dockerfile | 14 +++- build/.docker/packages.bake.Dockerfile | 78 +++++++++++---------- build/scripts/build-packages.sh | 94 -------------------------- 3 files changed, 57 insertions(+), 129 deletions(-) delete mode 100644 build/scripts/build-packages.sh diff --git a/build/.docker/bundle.bake.Dockerfile b/build/.docker/bundle.bake.Dockerfile index 8aed1c835c..e986b557a6 100644 --- a/build/.docker/bundle.bake.Dockerfile +++ b/build/.docker/bundle.bake.Dockerfile @@ -60,4 +60,16 @@ FROM alpine AS bundle /build/documentserver-example/welcome/docker.html \ /build/documentserver-example/welcome/linux.html \ /build/documentserver-example/welcome/linux-rpm.html \ - /build/documentserver-example/welcome/win.html \ No newline at end of file + /build/documentserver-example/welcome/win.html + + + RUN mkdir -p /build/documentserver/server/Common/config/log4js + + COPY server/Common/config/. /build/documentserver/server/Common/config/ + + RUN rm -f /build/documentserver/server/Common/config/runtime.json + + COPY server/schema/. /build/documentserver/server/schema/ + COPY server/license/. /build/documentserver/server/license/ + COPY server/LICENSE.txt /build/documentserver/server/ + COPY server/3rd-Party.txt /build/documentserver/server/ \ No newline at end of file diff --git a/build/.docker/packages.bake.Dockerfile b/build/.docker/packages.bake.Dockerfile index 24ee1fdb2a..3df88ab8fc 100644 --- a/build/.docker/packages.bake.Dockerfile +++ b/build/.docker/packages.bake.Dockerfile @@ -10,43 +10,53 @@ #### PACKAGE #### FROM ubuntu:24.04 AS package -ARG PRODUCT_VERSION -ARG BUILD_NUMBER=0 - -RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ - devscripts dpkg-dev build-essential fakeroot debhelper \ - rpm m4 curl ca-certificates gnupg symlinks && \ - curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ - apt-get install -y nodejs && \ - npm install -g @yao-pkg/pkg && \ - rm -rf /var/lib/apt/lists/* - -#Build files - COPY --from=bundle /build/documentserver /build/documentserver - COPY --from=bundle /build/documentserver-example /build/documentserver-example - COPY --from=bundle /config/documentserver-example /config/documentserver-example - -# Upstream packaging repo -COPY document-server-package/ /document-server-package/ - -# Original server source files required by the upstream Makefile's sed transforms -COPY server/Common/config/ /server-src/Common/config/ -COPY server/schema/ /server-src/schema/ -COPY server/license/ /server-src/license/ -COPY server/LICENSE.txt /server-src/ -COPY server/3rd-Party.txt /server-src/ - -COPY --chmod=755 build/scripts/build-packages.sh /build-packages.sh - -ENV PRODUCT_VERSION=${PRODUCT_VERSION} -ENV BUILD_NUMBER=${BUILD_NUMBER} - -RUN /build-packages.sh + ARG PRODUCT_VERSION + ARG BUILD_NUMBER=0 + ARG OUT_BASE="/build/package/out" + ARG BUNDLE_BASE="/build/bundle" + ARG OUT_DIR="${BUNDLE_BASE}/euro-office/documentserver" + ARG EXAMPLE_OUT="${BUNDLE_BASE}/euro-office/documentserver-example" + + ENV PRODUCT_VERSION=${PRODUCT_VERSION} + ENV BUILD_NUMBER=${BUILD_NUMBER} + ENV OUT_BASE=${OUT_BASE} + ENV BUNDLE_BASE=${BUNDLE_BASE} + ENV OUT_DIR=${OUT_DIR} + ENV EXAMPLE_OUT=${EXAMPLE_OUT} + + RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + devscripts dpkg-dev build-essential fakeroot debhelper \ + rpm m4 curl ca-certificates gnupg symlinks && \ + curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ + apt-get install -y nodejs && \ + npm install -g @yao-pkg/pkg && \ + rm -rf /var/lib/apt/lists/* + + #Build files + COPY --from=bundle /build/documentserver ${OUT_DIR}/ + COPY --from=bundle /build/documentserver-example/example ${EXAMPLE_OUT}/ + COPY --from=bundle /config/documentserver-example/*.json ${EXAMPLE_OUT}/config/ + + # Upstream packaging repo + COPY document-server-package/ /document-server-package/ + + RUN cd document-server-package && \ + mkdir -p ${OUT_BASE} && \ + ln -s ${BUNDLE_BASE} ${OUT_BASE}/linux_64 && \ + ln -s ${BUNDLE_BASE} ${OUT_BASE}/linux_arm64 && \ + make deb rpm \ + BUILD_OUTPUT_DIR="/build/package/out" \ + PRODUCT_VERSION="${PRODUCT_VERSION}" \ + BUILD_NUMBER="${BUILD_NUMBER}" + + RUN mkdir -p /packages && \ + find /document-server-package/deb -name "*.deb" -exec cp -v {} /packages/ \; && \ + find /document-server-package/rpm/builddir -name "*.rpm" -exec cp -v {} /packages/ \; #### PACKAGES OUTPUT #### # Scratch stage so `docker build --target packages -o ` extracts only # the finished .deb and .rpm files. FROM scratch AS packages -COPY --from=package /packages/ / \ No newline at end of file + COPY --from=package /packages/ / \ No newline at end of file diff --git a/build/scripts/build-packages.sh b/build/scripts/build-packages.sh deleted file mode 100644 index 138c209890..0000000000 --- a/build/scripts/build-packages.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env bash -# build-packages.sh — runs inside the Docker `package` stage. -# Populates the build output directory from the finalubuntu-installed files, -# then invokes the upstream document-server-package Makefile to produce -# .deb and .rpm packages, which are placed in /packages/. -set -euo pipefail - -# --------------------------------------------------------------------------- -# Detect architecture → upstream Makefile TARGET convention -# --------------------------------------------------------------------------- -case "$(uname -m)" in - x86_64) TARGET="linux_64" ;; - aarch64) TARGET="linux_arm64" ;; - *) echo "ERROR: Unsupported architecture: $(uname -m)" >&2; exit 1 ;; -esac - -PRODUCT_VERSION="${PRODUCT_VERSION:-0.0.0}" -BUILD_NUMBER="${BUILD_NUMBER:-0}" - -# The upstream Makefile is invoked from /document-server-package/. -# BUILD_OUTPUT_DIR=../build/package/out → /build/package/out/ (absolute) -OUT_BASE="/build/package/out" -OUT_DIR="${OUT_BASE}/${TARGET}/euro-office/documentserver" -EXAMPLE_OUT="${OUT_BASE}/${TARGET}/euro-office/documentserver-example" - -echo "==> [build-packages] TARGET=${TARGET}" -echo "==> [build-packages] PRODUCT_VERSION=${PRODUCT_VERSION}, BUILD_NUMBER=${BUILD_NUMBER}" - -# --------------------------------------------------------------------------- -# 1. Populate documentserver output directory -# --------------------------------------------------------------------------- -echo "==> Setting up output directory: ${OUT_DIR}" -mkdir -p "${OUT_DIR}" -cp -a /build/documentserver/. "${OUT_DIR}/" - -# Remove the Docker-specific runtime marker (upstream Makefile doesn't expect it) -rm -f "${OUT_DIR}/server/Common/config/runtime.json" -# Remove the Docker-generated log4js root file -rm -f "${OUT_DIR}/log4js.json" - -# --------------------------------------------------------------------------- -# 2. Overlay original source configs (unprocessed) -# The upstream Makefile runs sed transforms on these; they must NOT be -# the Docker-specific pre-processed versions from build/configs/onlyoffice/. -# --------------------------------------------------------------------------- -echo "==> Overlaying original server source configs" -mkdir -p "${OUT_DIR}/server/Common/config/log4js" -cp -a /server-src/Common/config/. "${OUT_DIR}/server/Common/config/" -# Ensure runtime.json is absent after the overlay -rm -f "${OUT_DIR}/server/Common/config/runtime.json" - -# --------------------------------------------------------------------------- -# 3. Schema files (upstream runs sed -i on them for DB renaming) -# --------------------------------------------------------------------------- -echo "==> Copying schema files" -cp -a /server-src/schema/. "${OUT_DIR}/server/schema/" - -# --------------------------------------------------------------------------- -# 4. License files (upstream Makefile copies and renames these) -# --------------------------------------------------------------------------- -echo "==> Copying license files" -cp -f /server-src/LICENSE.txt "${OUT_DIR}/server/" -cp -f /server-src/3rd-Party.txt "${OUT_DIR}/server/" -cp -a /server-src/license/. "${OUT_DIR}/server/license/" - -# --------------------------------------------------------------------------- -# 5. Populate documentserver-example output directory -# --------------------------------------------------------------------------- -echo "==> Setting up example output directory: ${EXAMPLE_OUT}" -mkdir -p "${EXAMPLE_OUT}/config" -cp -f /build/documentserver-example/example "${EXAMPLE_OUT}/" -cp -f /config/documentserver-example/*.json "${EXAMPLE_OUT}/config/" 2>/dev/null || true - -# --------------------------------------------------------------------------- -# 6. Run upstream Makefile -# --------------------------------------------------------------------------- -echo "==> Running upstream packaging Makefile (deb rpm)" -cd /document-server-package -make deb rpm \ - BUILD_OUTPUT_DIR="${OUT_BASE}" \ - PRODUCT_VERSION="${PRODUCT_VERSION}" \ - BUILD_NUMBER="${BUILD_NUMBER}" - -# --------------------------------------------------------------------------- -# 7. Collect output packages -# --------------------------------------------------------------------------- -echo "==> Collecting packages" -mkdir -p /packages -find /document-server-package/deb -name "*.deb" -exec cp -v {} /packages/ \; -find /document-server-package/rpm/builddir -name "*.rpm" -exec cp -v {} /packages/ \; - -echo "" -echo "==> Done. Packages:" -ls -lh /packages/ From 1d1bb23c3532bbec7469c86e7bdb5ec620fabd41 Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Mon, 11 May 2026 21:07:39 -0700 Subject: [PATCH 06/10] feat: build packages for arm64 and amd64 Signed-off-by: Hendrik Leidinger --- .github/workflows/build.yml | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6aee4959c4..29a60fa95e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -383,11 +383,17 @@ jobs: # Packages are AMD64-only (no ARM package builds). # ───────────────────────────────────────────────────────────── build-packages: - runs-on: ubuntu-latest + runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} needs: build permissions: contents: read packages: write + strategy: + fail-fast: false + matrix: + arch: + - amd64 + - arm64 steps: - name: Restore cache uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 @@ -417,23 +423,23 @@ jobs: targets: packages push: false set: | - core.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-amd64 - core.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-amd64,mode=max + core.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }} + core.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }},mode=max core.tags= - core-wasm.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-amd64 - core-wasm.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-amd64,mode=max + core-wasm.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-${{ matrix.arch }} + core-wasm.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-${{ matrix.arch }},mode=max core-wasm.tags= - sdkjs.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-amd64 - sdkjs.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-amd64,mode=max + sdkjs.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-${{ matrix.arch }} + sdkjs.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-${{ matrix.arch }},mode=max sdkjs.tags= - web-apps.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-amd64 - web-apps.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-amd64,mode=max + web-apps.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-${{ matrix.arch }} + web-apps.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-${{ matrix.arch }},mode=max web-apps.tags= - server.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-amd64 - server.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-amd64,mode=max + server.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-${{ matrix.arch }} + server.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-${{ matrix.arch }},mode=max server.tags= - example.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-amd64 - example.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-amd64,mode=max + example.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }} + example.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }},mode=max example.tags= bundle.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }} bundle.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }},mode=max From 14877db9f80d3cd98f1db930f9937ed23a6328ba Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Tue, 12 May 2026 11:18:36 -0700 Subject: [PATCH 07/10] chore: cleanup, remove onlyoffice favicons Signed-off-by: Hendrik Leidinger --- build/.docker/bundle.bake.Dockerfile | 30 +++--- build/.docker/docker.bake.Dockerfile | 20 ++-- build/.docker/packages.bake.Dockerfile | 3 +- build/configs/metrics/config/config.js | 130 ------------------------- build/docker-bake.hcl | 2 +- document-server-package | 2 +- server | 2 +- 7 files changed, 29 insertions(+), 160 deletions(-) delete mode 100644 build/configs/metrics/config/config.js diff --git a/build/.docker/bundle.bake.Dockerfile b/build/.docker/bundle.bake.Dockerfile index e986b557a6..52d23f883b 100644 --- a/build/.docker/bundle.bake.Dockerfile +++ b/build/.docker/bundle.bake.Dockerfile @@ -25,7 +25,7 @@ FROM alpine AS bundle # --- Config files COPY build/configs/core/DoctRenderer.config /build/documentserver/server/FileConverter/bin/DoctRenderer.config - COPY build/configs/metrics/config/config.js /build/documentserver/server/Metrics/config/config.js + COPY server/Metrics/config/config.js /build/documentserver/server/Metrics/config/config.js # --- Build stage outputs (change with code) --- @@ -46,21 +46,21 @@ FROM alpine AS bundle COPY --from=example /example/example /build/documentserver-example/example RUN mkdir -p /build/documentserver-example/files - COPY --from=example /example/config/* /config/documentserver-example/ + COPY --from=example /example/config /build/documentserver-example/config - COPY document-server-package/common/documentserver-example/welcome /build/documentserver-example/welcome - RUN YEAR=$(date +"%Y") && \ - sed -i "s|{{OFFICIAL_PRODUCT_NAME}}|Community Edition|g" /build/documentserver-example/welcome/*.html && \ - find /build/documentserver-example/welcome -depth -type f \ - -exec sed -i "s_{{year}}_${YEAR}_g" {} \; && \ - sed -i "s|{{EXAMPLE_DISABLED_COMMANDS}}|sudo systemctl start ds-example|g" \ - /build/documentserver-example/welcome/example-disabled.html && \ - rm -f /build/documentserver-example/welcome/admin-disabled.html && \ - sed -i '//,//d' \ - /build/documentserver-example/welcome/docker.html \ - /build/documentserver-example/welcome/linux.html \ - /build/documentserver-example/welcome/linux-rpm.html \ - /build/documentserver-example/welcome/win.html + #COPY document-server-package/common/documentserver-example/welcome /build/documentserver-example/welcome + #RUN YEAR=$(date +"%Y") && \ + # sed -i "s|{{OFFICIAL_PRODUCT_NAME}}|Community Edition|g" /build/documentserver-example/welcome/*.html && \ + # find /build/documentserver-example/welcome -depth -type f \ + # -exec sed -i "s_{{year}}_${YEAR}_g" {} \; && \ + # sed -i "s|{{EXAMPLE_DISABLED_COMMANDS}}|sudo systemctl start ds-example|g" \ + # /build/documentserver-example/welcome/example-disabled.html && \ + # rm -f /build/documentserver-example/welcome/admin-disabled.html && \ + # sed -i '//,//d' \ + # /build/documentserver-example/welcome/docker.html \ + # /build/documentserver-example/welcome/linux.html \ + # /build/documentserver-example/welcome/linux-rpm.html \ + # /build/documentserver-example/welcome/win.html RUN mkdir -p /build/documentserver/server/Common/config/log4js diff --git a/build/.docker/docker.bake.Dockerfile b/build/.docker/docker.bake.Dockerfile index 9c64cdbb90..b54c14291b 100644 --- a/build/.docker/docker.bake.Dockerfile +++ b/build/.docker/docker.bake.Dockerfile @@ -27,7 +27,7 @@ RUN apt-get -y update && \ rm -rf /var/lib/apt/lists/* # Create the 'ds' user that is required by OnlyOffice scripts -RUN useradd -r -s /bin/false ds || true +#RUN useradd -r -s /bin/false ds || true # --- install euro-office .deb package ARG TARGETARCH @@ -43,24 +43,24 @@ RUN apt-get -y update && \ echo "euro-office-documentserver ds/db-user string eurooffice" | debconf-set-selections && \ echo "euro-office-documentserver ds/db-pwd password eurooffice" | debconf-set-selections && \ echo "euro-office-documentserver ds/db-name string eurooffice" | debconf-set-selections && \ - DS_DOCKER_INSTALLATION=true DEBIAN_FRONTEND=noninteractive apt-get -yq install /tmp/euro-office-documentserver_${PRODUCT_VERSION}-0_${TARGETARCH}.deb && \ - sudo -u postgres bash -c "PGPASSWORD=eurooffice psql -h localhost -U eurooffice -d eurooffice -f ${EO_ROOT}/server/schema/postgresql/createdb.sql" + DS_DOCKER_INSTALLATION=true DEBIAN_FRONTEND=noninteractive apt-get -yq install /tmp/euro-office-documentserver_${PRODUCT_VERSION}-0_${TARGETARCH}.deb + #sudo -u postgres bash -c "PGPASSWORD=eurooffice psql -h localhost -U eurooffice -d eurooffice -f ${EO_ROOT}/server/schema/postgresql/createdb.sql" # --- Final setup --- COPY build/configs/supervisor/ /etc/supervisor/conf.d/ COPY --chmod=755 build/scripts/entrypoint.sh /entrypoint.sh -RUN mkdir -p ${EO_LOG}/docservice ${EO_LOG}/converter \ - ${EO_LOG}/adminpanel ${EO_LOG}/metrics +#RUN mkdir -p ${EO_LOG}/docservice ${EO_LOG}/converter \ +# ${EO_LOG}/adminpanel ${EO_LOG}/metrics -RUN mkdir -p ${EO_ROOT}/documentserver-example/files +#RUN mkdir -p ${EO_ROOT}/documentserver-example/files -RUN mkdir -p ${EO_ROOT}/server/Common/config && \ - echo '{}' > ${EO_ROOT}/server/Common/config/runtime.json +#RUN mkdir -p ${EO_ROOT}/server/Common/config && \ +# echo '{}' > ${EO_ROOT}/server/Common/config/runtime.json -RUN mkdir -p /var/lib/euro-office #&& \ - chown -R ds:ds /var/www/euro-office /var/lib/euro-office /var/log/euro-office +#RUN mkdir -p /var/lib/euro-office #&& \ +# chown -R ds:ds /var/www/euro-office /var/lib/euro-office /var/log/euro-office RUN /usr/bin/documentserver-flush-cache.sh -r false diff --git a/build/.docker/packages.bake.Dockerfile b/build/.docker/packages.bake.Dockerfile index 3df88ab8fc..0602da3ede 100644 --- a/build/.docker/packages.bake.Dockerfile +++ b/build/.docker/packages.bake.Dockerfile @@ -36,8 +36,7 @@ FROM ubuntu:24.04 AS package #Build files COPY --from=bundle /build/documentserver ${OUT_DIR}/ - COPY --from=bundle /build/documentserver-example/example ${EXAMPLE_OUT}/ - COPY --from=bundle /config/documentserver-example/*.json ${EXAMPLE_OUT}/config/ + COPY --from=bundle /build/documentserver-example ${EXAMPLE_OUT}/ # Upstream packaging repo COPY document-server-package/ /document-server-package/ diff --git a/build/configs/metrics/config/config.js b/build/configs/metrics/config/config.js deleted file mode 100644 index 0398becf4f..0000000000 --- a/build/configs/metrics/config/config.js +++ /dev/null @@ -1,130 +0,0 @@ -/* - * (c) Copyright Ascensio System SIA 2010-2024 - * - * This program is a free software product. You can redistribute it and/or - * modify it under the terms of the GNU Affero General Public License (AGPL) - * version 3 as published by the Free Software Foundation. In accordance with - * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect - * that Ascensio System SIA expressly excludes the warranty of non-infringement - * of any third-party rights. - * - * This program is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For - * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html - * - * The interactive user interfaces in modified source and object code versions - * of the Program must display Appropriate Legal Notices, as required under - * Section 5 of the GNU AGPL version 3. - * - * All the Product's GUI elements, including illustrations and icon sets, as - * well as technical writing content are licensed under the terms of the - * Creative Commons Attribution-ShareAlike 4.0 International. See the License - * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - * - */ - -/* - -Required Variables: - - port: StatsD listening port [default: 8125] - -Graphite Required Variables: - -(Leave these unset to avoid sending stats to Graphite. - Set debug flag and leave these unset to run in 'dry' debug mode - - useful for testing statsd clients without a Graphite server.) - - graphiteHost: hostname or IP of Graphite server - graphitePort: port of Graphite server - -Optional Variables: - - backends: an array of backends to load. Each backend must exist - by name in the directory backends/. If not specified, - the default graphite backend will be loaded. - debug: debug flag [default: false] - address: address to listen on over UDP [default: 0.0.0.0] - address_ipv6: defines if the address is an IPv4 or IPv6 address [true or false, default: false] - port: port to listen for messages on over UDP [default: 8125] - mgmt_address: address to run the management TCP interface on - [default: 0.0.0.0] - mgmt_port: port to run the management TCP interface on [default: 8126] - title : Allows for overriding the process title. [default: statsd] - if set to false, will not override the process title and let the OS set it. - The length of the title has to be less than or equal to the binary name + cli arguments - NOTE: This does not work on Mac's with node versions prior to v0.10 - - healthStatus: default health status to be returned and statsd process starts ['up' or 'down', default: 'up'] - dumpMessages: log all incoming messages - flushInterval: interval (in ms) to flush to Graphite - percentThreshold: for time information, calculate the Nth percentile(s) - (can be a single value or list of floating-point values) - negative values mean to use "top" Nth percentile(s) values - [%, default: 90] - flush_counts: send stats_counts metrics [default: true] - - keyFlush: log the most frequently sent keys [object, default: undefined] - interval: how often to log frequent keys [ms, default: 0] - percent: percentage of frequent keys to log [%, default: 100] - log: location of log file for frequent keys [default: STDOUT] - deleteIdleStats: don't send values to graphite for inactive counters, sets, gauges, or timeers - as opposed to sending 0. For gauges, this unsets the gauge (instead of sending - the previous value). Can be individually overriden. [default: false] - deleteGauges : don't send values to graphite for inactive gauges, as opposed to sending the previous value [default: false] - deleteTimers: don't send values to graphite for inactive timers, as opposed to sending 0 [default: false] - deleteSets: don't send values to graphite for inactive sets, as opposed to sending 0 [default: false] - deleteCounters: don't send values to graphite for inactive counters, as opposed to sending 0 [default: false] - prefixStats: prefix to use for the statsd statistics data for this running instance of statsd [default: statsd] - applies to both legacy and new namespacing - - console: - prettyprint: whether to prettyprint the console backend - output [true or false, default: true] - - log: log settings [object, default: undefined] - backend: where to log: stdout or syslog [string, default: stdout] - application: name of the application for syslog [string, default: statsd] - level: log level for [node-]syslog [string, default: LOG_INFO] - - graphite: - legacyNamespace: use the legacy namespace [default: true] - globalPrefix: global prefix to use for sending stats to graphite [default: "stats"] - prefixCounter: graphite prefix for counter metrics [default: "counters"] - prefixTimer: graphite prefix for timer metrics [default: "timers"] - prefixGauge: graphite prefix for gauge metrics [default: "gauges"] - prefixSet: graphite prefix for set metrics [default: "sets"] - globalSuffix: global suffix to use for sending stats to graphite [default: ""] - This is particularly useful for sending per host stats by - settings this value to: require('os').hostname().split('.')[0] - - repeater: an array of hashes of the for host: and port: - that details other statsd servers to which the received - packets should be "repeated" (duplicated to). - e.g. [ { host: '10.10.10.10', port: 8125 }, - { host: 'observer', port: 88125 } ] - - repeaterProtocol: whether to use udp4 or udp6 for repeaters. - ["udp4" or "udp6", default: "udp4"] - - histogram: for timers, an array of mappings of strings (to match metrics) and - corresponding ordered non-inclusive upper limits of bins. - For all matching metrics, histograms are maintained over - time by writing the frequencies for all bins. - 'inf' means infinity. A lower limit of 0 is assumed. - default: [], meaning no histograms for any timer. - First match wins. examples: - * histogram to only track render durations, with unequal - class intervals and catchall for outliers: - [ { metric: 'render', bins: [ 0.01, 0.1, 1, 10, 'inf'] } ] - * histogram for all timers except 'foo' related, - equal class interval and catchall for outliers: - [ { metric: 'foo', bins: [] }, - { metric: '', bins: [ 50, 100, 150, 200, 'inf'] } ] - -*/ -{ - port: 8125 -, flushInterval: 600000 -, backends: [ "./backends/console" ] -} diff --git a/build/docker-bake.hcl b/build/docker-bake.hcl index 0c8ae9c538..4f0fd67c4e 100644 --- a/build/docker-bake.hcl +++ b/build/docker-bake.hcl @@ -41,7 +41,7 @@ variable "CACHE_BUST" { # ────────────────────────────────────────────── group "default" { - targets = ["documentserver"] + targets = ["docker"] } group "develop" { diff --git a/document-server-package b/document-server-package index dec9f3cac3..253d6372f5 160000 --- a/document-server-package +++ b/document-server-package @@ -1 +1 @@ -Subproject commit dec9f3cac3be0438c4c590fabbe0684ef606c72d +Subproject commit 253d6372f521eda03fa0080b9b1cea525fe4f3d3 diff --git a/server b/server index 67cd41298b..efc45f2a46 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit 67cd41298bc7dc3d6265235601ffd32d93935159 +Subproject commit efc45f2a46300ca930336c1aa7eef15a7cc6e581 From 8ac7ebc654f568a9f2406ba90a50837af90e63ad Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Tue, 12 May 2026 12:57:23 -0700 Subject: [PATCH 08/10] chore: simplify workflow, small fix in dockerfile Signed-off-by: Hendrik Leidinger --- build/.docker/packages.bake.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/.docker/packages.bake.Dockerfile b/build/.docker/packages.bake.Dockerfile index 0602da3ede..63dd5ec30f 100644 --- a/build/.docker/packages.bake.Dockerfile +++ b/build/.docker/packages.bake.Dockerfile @@ -46,7 +46,7 @@ FROM ubuntu:24.04 AS package ln -s ${BUNDLE_BASE} ${OUT_BASE}/linux_64 && \ ln -s ${BUNDLE_BASE} ${OUT_BASE}/linux_arm64 && \ make deb rpm \ - BUILD_OUTPUT_DIR="/build/package/out" \ + BUILD_OUTPUT_DIR="${OUT_BASE}" \ PRODUCT_VERSION="${PRODUCT_VERSION}" \ BUILD_NUMBER="${BUILD_NUMBER}" From d947dce18f91a6312223d01148deea0194404842 Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Tue, 12 May 2026 12:58:30 -0700 Subject: [PATCH 09/10] chore: added missing workflow update Signed-off-by: Hendrik Leidinger --- .github/workflows/build.yml | 315 +++++++----------------------------- 1 file changed, 59 insertions(+), 256 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 29a60fa95e..b704485d5b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,27 +53,21 @@ jobs: run: | set -euo pipefail - # Helper that checks out a branch inside a submodule checkout_submodule() { local path=$1 local branch=$2 echo "🔧 Updating $path → $branch" pushd "$path" > /dev/null - git fetch origin "${branch}:${branch}" # ensure the branch exists locally + git fetch origin "${branch}:${branch}" git checkout "$branch" popd > /dev/null } - # Only override if explicitly requested via workflow_dispatch. - # On a normal PR push, use whatever commit the parent repo has pinned — - # this is the correct behaviour: the submodule SHA in fork IS the source - # of truth for which core commit to build. [ -n "$CORE_BRANCH" ] && checkout_submodule core "$CORE_BRANCH" [ -n "$SDKJS_BRANCH" ] && checkout_submodule sdkjs "$SDKJS_BRANCH" [ -n "$WEBAPPS_BRANCH" ] && checkout_submodule web-apps "$WEBAPPS_BRANCH" [ -n "$SERVER_BRANCH" ] && checkout_submodule server "$SERVER_BRANCH" - # These always track main, no pin needed checkout_submodule dictionaries "main" checkout_submodule document-templates "main" @@ -89,25 +83,21 @@ jobs: # ───────────────────────────────────────────────────────────── # BUILD # - # Bake builds documentserver and resolves all named-context - # dependencies (core, core-wasm, sdkjs, web-apps, server, example) - # in a single invocation, in parallel where the graph allows. + # Single job that builds the full target graph in one bake + # invocation per arch: packages → docker → develop. + # Because develop depends on docker which depends on packages, + # bake resolves the shared graph and never rebuilds a layer twice. # - # Cache is switched from type=local to - # type=registry so it survives across ephemeral CI jobs. - # - # Intermediate target tags are cleared via `set` so that only the - # final documentserver image is pushed to GHCR when push=true. - # - # Each architecture is built on a native runner (amd64 → ubuntu-latest, - # arm64 → ubuntu-24.04-arm) and tagged with an arch suffix. - # The manifest job below merges them into a single multi-arch image. + # Pushing per target: + # docker → pushed on default branch (:nightly) and git tags (:latest) + # develop → pushed on default branch only (:latest-dev) + # packages → never pushed; exported to local filesystem for release upload # ───────────────────────────────────────────────────────────── build: runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} needs: clone permissions: - contents: read + contents: write packages: write strategy: fail-fast: false @@ -115,6 +105,7 @@ jobs: arch: - amd64 - arm64 + steps: - name: Restore cache uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 @@ -132,30 +123,46 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Compute ref name, image tag and push flag + - name: Compute tags and push flags id: meta run: | REF_NAME=$(echo '${{ github.ref_name }}' | tr '/' '-') echo "ref_name=${REF_NAME}" >> $GITHUB_OUTPUT - if [[ "${{ github.ref }}" == "refs/heads/${{ github.event.repository.default_branch }}" ]]; then - echo "tag=nightly" >> $GITHUB_OUTPUT - echo "push=true" >> $GITHUB_OUTPUT - elif [[ "${{ github.ref }}" == refs/tags/* ]]; then - echo "tag=latest" >> $GITHUB_OUTPUT - echo "push=true" >> $GITHUB_OUTPUT + IS_DEFAULT=${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }} + IS_TAG=${{ startsWith(github.ref, 'refs/tags/') }} + + # docker target: push on default branch and git tags + if [[ "$IS_DEFAULT" == "true" ]]; then + echo "docker_tag=nightly-${{ matrix.arch }}" >> $GITHUB_OUTPUT + echo "docker_push=true" >> $GITHUB_OUTPUT + elif [[ "$IS_TAG" == "true" ]]; then + echo "docker_tag=latest-${{ matrix.arch }}" >> $GITHUB_OUTPUT + echo "docker_push=true" >> $GITHUB_OUTPUT + else + echo "docker_tag=${REF_NAME}-${{ matrix.arch }}" >> $GITHUB_OUTPUT + echo "docker_push=false" >> $GITHUB_OUTPUT + fi + + # develop target: push on default branch only + if [[ "$IS_DEFAULT" == "true" ]]; then + echo "develop_push=true" >> $GITHUB_OUTPUT else - echo "tag=${REF_NAME}" >> $GITHUB_OUTPUT - echo "push=false" >> $GITHUB_OUTPUT + echo "develop_push=false" >> $GITHUB_OUTPUT fi - - name: Build (and conditionally push) documentserver + - name: Build all targets (packages → docker → develop) uses: docker/bake-action@4a9a8d494466d37134e2bfca2d3a8de8fb2681ad # v5.13.0 with: workdir: ./build files: ./docker-bake.hcl - targets: docker - push: ${{ steps.meta.outputs.push == 'true' }} + # Build the full graph; bake deduplicates shared layers automatically. + # packages is included so its local filesystem export always runs, + # enabling the release upload step below. + targets: develop,packages + # push=false here; per-target pushing is controlled via tags below. + # Targets with empty tags= are not pushed regardless of this flag. + push: false set: | core.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }} core.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }},mode=max @@ -183,21 +190,33 @@ jobs: packages.tags= docker.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-docker-buildcache-${{ matrix.arch }} docker.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-docker-buildcache-${{ matrix.arch }},mode=max - docker.tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.tag }}-${{ matrix.arch }} + docker.tags=${{ steps.meta.outputs.docker_push == 'true' && format('{0}/{1}:{2}', env.REGISTRY, env.IMAGE_NAME, steps.meta.outputs.docker_tag) || '' }} + docker.output=${{ steps.meta.outputs.docker_push == 'true' && format('type=registry') || 'type=cacheonly' }} + develop.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-develop-buildcache-${{ matrix.arch }} + develop.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-develop-buildcache-${{ matrix.arch }},mode=max + develop.tags=${{ steps.meta.outputs.develop_push == 'true' && format('{0}/{1}:latest-dev-{2}', env.REGISTRY, env.IMAGE_NAME, matrix.arch) || '' }} + develop.output=${{ steps.meta.outputs.develop_push == 'true' && 'type=registry' || 'type=cacheonly' }} env: REGISTRY: ${{ env.REGISTRY }} - TAG: ${{ steps.meta.outputs.tag }}-${{ matrix.arch }} + TAG: ${{ steps.meta.outputs.docker_tag }} PRODUCT_VERSION: ${{ env.PRODUCT_VERSION }} BUILD_ROOT: ${{ env.BUILD_ROOT }} NUGET_CACHE: local + - name: Upload packages to GitHub Release + uses: softprops/action-gh-release@v2 + if: startsWith(github.ref, 'refs/tags/') + with: + files: | + build/deploy/packages/*.deb + build/deploy/packages/*.rpm + # ───────────────────────────────────────────────────────────── # MANIFEST # - # Combines the arch-specific documentserver images built above - # into a single multi-arch manifest. Only runs when images were - # actually pushed (default branch → :nightly, git tags → :latest - # and the sanitised ref tag). + # Merges the arch-specific documentserver images into a single + # multi-arch manifest. Runs on default branch (:nightly) and + # git tags (:latest + sanitised ref tag). # ───────────────────────────────────────────────────────────── manifest: runs-on: ubuntu-latest @@ -222,7 +241,7 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Create and push multi-arch manifest + - name: Create and push multi-arch manifests run: | REF="${{ steps.ref.outputs.name }}" REPO="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}" @@ -235,228 +254,12 @@ jobs: "${REPO}:${tag}-arm64" } - # Push :nightly on the default branch if [[ "${{ github.ref_name }}" == "${{ github.event.repository.default_branch }}" ]]; then create_manifest "nightly" + create_manifest "latest-dev" fi - # Push :latest and the sanitised ref tag on git tags if [[ "${{ github.ref }}" == refs/tags/* ]]; then create_manifest "latest" create_manifest "${REF}" fi - - # ───────────────────────────────────────────────────────────── - # BUILD-DEVELOP - # - # The develop target pulls in documentserver + all dep targets - # via named contexts; every dep is a registry-cache hit here, - # so only the thin develop layer actually builds. - # - # Published only on the default branch (no "latest-dev" for tags - # or feature branches). - # ───────────────────────────────────────────────────────────── - build-develop: - runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} - needs: build - permissions: - contents: read - packages: write - strategy: - fail-fast: false - matrix: - arch: - - amd64 - - arm64 - steps: - - name: Restore cache - uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - with: - path: "${{ github.workspace }}" - key: ${{ runner.os }}-build-${{ github.sha }} - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - - - name: Log in to GitHub Container Registry - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Compute ref name and push flag - id: meta - run: | - echo "ref_name=$(echo '${{ github.ref_name }}' | tr '/' '-')" >> $GITHUB_OUTPUT - # Develop image is only published on the default branch - if [[ "${{ github.ref }}" == "refs/heads/${{ github.event.repository.default_branch }}" ]]; then - echo "push=true" >> $GITHUB_OUTPUT - else - echo "push=false" >> $GITHUB_OUTPUT - fi - - - name: Build (and conditionally push) develop - uses: docker/bake-action@4a9a8d494466d37134e2bfca2d3a8de8fb2681ad # v5.13.0 - with: - workdir: ./build - files: ./docker-bake.hcl - targets: develop - push: ${{ steps.meta.outputs.push == 'true' }} - set: | - core.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }} - core.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }},mode=max - core.tags= - core-wasm.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-${{ matrix.arch }} - core-wasm.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-${{ matrix.arch }},mode=max - core-wasm.tags= - sdkjs.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-${{ matrix.arch }} - sdkjs.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-${{ matrix.arch }},mode=max - sdkjs.tags= - web-apps.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-${{ matrix.arch }} - web-apps.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-${{ matrix.arch }},mode=max - web-apps.tags= - server.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-${{ matrix.arch }} - server.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-${{ matrix.arch }},mode=max - server.tags= - example.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }} - example.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }},mode=max - example.tags= - bundle.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }} - bundle.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }},mode=max - bundle.tags= - packages.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }} - packages.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }},mode=max - packages.tags= - docker.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-docker-buildcache-${{ matrix.arch }} - docker.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-docker-buildcache-${{ matrix.arch }},mode=max - docker.tags= - develop.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-develop-buildcache-${{ matrix.arch }} - develop.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-develop-buildcache-${{ matrix.arch }},mode=max - develop.tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest-dev-${{ matrix.arch }} - env: - REGISTRY: ${{ env.REGISTRY }} - TAG: latest-dev-${{ matrix.arch }} - PRODUCT_VERSION: ${{ env.PRODUCT_VERSION }} - BUILD_ROOT: ${{ env.BUILD_ROOT }} - NUGET_CACHE: local - - # ───────────────────────────────────────────────────────────── - # MANIFEST-DEVELOP - # - # Combines the arch-specific develop images into a single - # multi-arch manifest. Only runs on the default branch. - # ───────────────────────────────────────────────────────────── - manifest-develop: - runs-on: ubuntu-latest - needs: build-develop - if: github.ref_name == github.event.repository.default_branch - permissions: - contents: read - packages: write - - steps: - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - - - name: Log in to GitHub Container Registry - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Create and push multi-arch dev manifest - run: | - REPO="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}" - docker buildx imagetools create \ - -t "${REPO}:latest-dev" \ - "${REPO}:latest-dev-amd64" \ - "${REPO}:latest-dev-arm64" - - # ───────────────────────────────────────────────────────────── - # BUILD-PACKAGES - # - # All transitive deps are registry-cache hits at this point; - # only the packages export stage executes fresh. - # - # Packages are AMD64-only (no ARM package builds). - # ───────────────────────────────────────────────────────────── - build-packages: - runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} - needs: build - permissions: - contents: read - packages: write - strategy: - fail-fast: false - matrix: - arch: - - amd64 - - arm64 - steps: - - name: Restore cache - uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - with: - path: "${{ github.workspace }}" - key: ${{ runner.os }}-build-${{ github.sha }} - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - - - name: Log in to GitHub Container Registry - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Compute ref name - id: meta - run: echo "ref_name=$(echo '${{ github.ref_name }}' | tr '/' '-')" >> $GITHUB_OUTPUT - - - name: Build packages (.deb and .rpm) - uses: docker/bake-action@4a9a8d494466d37134e2bfca2d3a8de8fb2681ad # v5.13.0 - with: - workdir: ./build - files: ./docker-bake.hcl - targets: packages - push: false - set: | - core.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }} - core.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }},mode=max - core.tags= - core-wasm.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-${{ matrix.arch }} - core-wasm.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-${{ matrix.arch }},mode=max - core-wasm.tags= - sdkjs.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-${{ matrix.arch }} - sdkjs.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-${{ matrix.arch }},mode=max - sdkjs.tags= - web-apps.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-${{ matrix.arch }} - web-apps.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-${{ matrix.arch }},mode=max - web-apps.tags= - server.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-${{ matrix.arch }} - server.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-${{ matrix.arch }},mode=max - server.tags= - example.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }} - example.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }},mode=max - example.tags= - bundle.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }} - bundle.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }},mode=max - bundle.tags= - packages.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }} - packages.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }},mode=max - packages.tags= - env: - REGISTRY: ${{ env.REGISTRY }} - TAG: latest - PRODUCT_VERSION: ${{ env.PRODUCT_VERSION }} - BUILD_ROOT: ${{ env.BUILD_ROOT }} - NUGET_CACHE: local - - #- name: Upload packages as artifact - # uses: actions/upload-artifact@v4 - # with: - # name: packages-${{ github.sha }} - # path: dist/packages/ - # retention-days: 30 From d8ba6dbc643475f854d29c60f45e913ffcc449e8 Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Tue, 26 May 2026 12:28:34 -0700 Subject: [PATCH 10/10] chore: update submodules to main branch Signed-off-by: Hendrik Leidinger --- document-server-package | 2 +- server | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/document-server-package b/document-server-package index 253d6372f5..4e9df15355 160000 --- a/document-server-package +++ b/document-server-package @@ -1 +1 @@ -Subproject commit 253d6372f521eda03fa0080b9b1cea525fe4f3d3 +Subproject commit 4e9df15355b03e481058c162d3f951f68ce2672d diff --git a/server b/server index efc45f2a46..4d0caf457b 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit efc45f2a46300ca930336c1aa7eef15a7cc6e581 +Subproject commit 4d0caf457bfec8e0380531e0090c3f983b2d5c58