Skip to content

HDNEXT-1604: backport nc-server IONOS changes onto NC33 (v33.0.6) - #278

Closed
printminion-co wants to merge 38 commits into
nextcloud-v33.0.6from
ionos-dev-v33
Closed

HDNEXT-1604: backport nc-server IONOS changes onto NC33 (v33.0.6)#278
printminion-co wants to merge 38 commits into
nextcloud-v33.0.6from
ionos-dev-v33

Conversation

@printminion-co

Copy link
Copy Markdown

HDNEXT-1604 — Backport nc-server IONOS changes onto NC33 (v33.0.6)

Creates the NC33 "ground slate" branch: vanilla v33.0.6 with the IONOS
customisations cherry-picked on top as new commits.

Base: nextcloud-v33.0.6 (vanilla v33.0.6 tag) — PR diff is exactly the IONOS delta.
38 commits replayed from ionos-dev-v32.0.6 (the 47-commit v32 stack, minus net-zero/empty — see below).

Method

Fresh branch off v33.0.6, then git cherry-pick -x v32.0.6..ionos-dev-v32.0.6. New commit SHAs; -x records provenance.

Faithfulness vs the v32 line

IONOS change-set is identical to v32.0.6..ionos-dev-v32.0.6 except two expected NC33 adaptations:

  • apps/files/src/views/Navigation.vueFilesNavigation.vue — NC33 renamed the file; the SidebarQuota wiring (replace NavigationQuota) was re-ported to the renamed component.
  • lib/private/Template/Template.php fix dropped — already present upstream in v33.0.6 (cherry-pick was empty).

Resolved conflicts

  • apps/files/src/views/FilesNavigation.vue — ported SidebarQuota wiring (rename adaptation).
  • core/src/components/UnifiedSearch/UnifiedSearchModal.vue — kept v-if="peopleSearchEnabled" over v33's reformat.
  • apps/files_sharing/src/mixins/SharesMixin.js — merged DialogBuilder import (v33 already imports ShareType).
  • config/config.sample.php — appended the redirects block before the closing ];.

Skipped (net-zero / redundant — matches v32 line's net state)

  • IONOS(deps): alias @mdi/@nextcloud/vue + its Revert → package.json/package-lock.json untouched from v33 base.
  • IONOS(frontend): custom MDI icon mappings + its Revert.
  • fix(lib): templates core path detection — already in v33.0.6.

Verified

  • All IONOS submodule pointers & .gitmodules identical to the v32 line; 3rdparty → v33.0.6's.
  • version.php[33,0,6,2] / '33.0.6', upgrade-from 32.0+33.0, IONOS build-injection block intact.
  • php -l clean on all changed PHP files.

Out of scope (dependency tickets)

  • Submodule pointers stay at v32-era targets — advancing to NC33 is HDNEXT-1605.
  • App NC33 releases: HDNEXT-1585 (viewer), HDNEXT-1593 (richdocuments), HDNEXT-1586/1594/1599/1607 (app compat).
  • Config: HDNEXT-1589. Staging/UX: HDNEXT-1602/1603.
  • No rc/** build branch in this ticket (deferred to HDNEXT-1602).

Draft until autotest.sh sqlite / check_release.sh pass.

git range-diff v32.0.6..ionos-dev-v32.0.6 → v33.0.6..ionos-dev-v33
 1:  cbf32d86e82 !  1:  ef78c199e2d IONOS(infra): add IONOS app directory stubs and .gitignore entries
    @@ Commit message
         IONOS(infra): add IONOS app directory stubs and .gitignore entries

         Backports: 03aff15c540 add663753f5
    +    (cherry picked from commit cbf32d86e82d5ef5daa44f4b9753b6175f24f8d9)

      ## .gitignore ##
    -@@
    +@@ .gitignore: node_modules/
      /translationfiles
      /translationtool.phar

    @@ .gitignore
      # ignore all apps except core ones
      /apps*/*
      !/apps/cloud_federation_api
    -@@
    +@@ .gitignore: node_modules/
      /apps/files_external/3rdparty/irodsphp/prods/tutorials
      /apps/files_external/3rdparty/irodsphp/prods/test*
      /apps/files_external/tests/config.*.php
    @@ .gitignore
     +!/apps-external/files_downloadlimit
     +!/apps-custom/*

    - # apps modules
    - /apps/*/node_modules
    + # ignore themes except the example and the README
    + /themes/*
     @@ .gitignore: nbproject
      # nodejs
      /build/bin
 2:  dc702108cdb !  2:  29ebd927e9b IONOS(custom-npms): add custom npm submodules
    @@ Commit message
         file: paths by custom apps (simplesettings) and external apps (viewer).

         Backports: b03973e4914 404d21ecaa7 3a458be45aa 6ffe694744b
    +    (cherry picked from commit dc702108cdbcdca31852d48f5ea45f7999b4bdb2)

      ## .gitmodules ##
     @@
 3:  87a344b9a6c !  3:  12753b2128f IONOS(apps): add custom app submodules
    @@ Commit message
         the preceding commit.

         Backports: 12632cba80b fbf27b927ff 6ab55ca66db
    +    (cherry picked from commit 87a344b9a6c95bd08970a055b173d6e9335c0b50)

      ## .gitmodules ##
     @@
 4:  3f834b15458 !  4:  b4c64276dad IONOS(theme): add nc-ionos-theme
    @@ Commit message
         submodule dependencies.

         Backports: 5906a4373a5
    +    (cherry picked from commit 3f834b15458ebd5bfd6d193947bb6893d955549a)

      ## .gitmodules ##
     @@
 5:  392bf731a8d !  5:  a75f91daacb IONOS(apps): add IONOS-forked external apps
    @@ Commit message
         registered in commit 2.

         Backports: 759ff45f9da 9a77eee2506
    +    (cherry picked from commit 392bf731a8d363189f7cf701885c2a2ab5ce5d7f)

      ## .gitmodules ##
     @@
 6:  62e29003cc4 !  6:  9f83dcad434 IONOS(apps): add original Nextcloud external apps
    @@ Commit message
         Apps: user_oidc, serverinfo, groupquota, files_downloadlimit

         Backports: 5b7102e6273 c92fd7d3c08 91e97e35005 03aff15c540
    +    (cherry picked from commit 62e29003cc404d7f49545912d0311ccc13a68179)

      ## .gitmodules ##
     @@
 7:  6b6192cfb05 !  7:  46aa850989c IONOS(config): add IONOS config submodule
    @@ Commit message

printminion-co and others added 30 commits July 13, 2026 10:51
nc-mdi-js, nc-mdi-svg, nc-nextcloud-vue, nc-vue-material-design-icons
are IONOS forks of upstream MDI and Nextcloud Vue packages, consumed via
file: paths by custom apps (simplesettings) and external apps (viewer).

Backports: b03973e 404d21e 3a458be 6ffe694
(cherry picked from commit dc70210)
simplesettings, googleanalytics, nc_theming, nc_ionos_processes are
IONOS-specific Nextcloud apps loaded from apps-custom/. simplesettings
depends on custom-npms (nc-mdi-js, nc-nextcloud-vue) registered in
the preceding commit.

Backports: 12632cb fbf27b9 6ab55ca
(cherry picked from commit 87a344b)
IONOS brand theme for Nextcloud Workspace. Standalone — no npm or
submodule dependencies.

Backports: 5906a43
(cherry picked from commit 3f834b1)
viewer (nc-viewer) and richdocuments (nc-richdocuments) are
IONOS-Productivity forks of upstream Nextcloud apps with IONOS-specific
patches. viewer depends on custom-npms (nc-mdi-svg, nc-nextcloud-vue)
registered in commit 2.

Backports: 759ff45 9a77eee
(cherry picked from commit 392bf73)
Adds unmodified upstream apps pinned at specific commits. Kept in a
separate commit from the IONOS-forked apps so each can be upgraded
independently (bump submodule pointer without touching forked apps).

Apps: user_oidc, serverinfo, groupquota, files_downloadlimit

Backports: 5b7102e c92fd7d 91e97e3 03aff15
(cherry picked from commit 62e2900)
easystorage-config holds deployment configuration that spans all IONOS
apps. Registered last in the submodule group so it follows the full set
of app pointers it references.

Backports: 640f389
(cherry picked from commit 6b6192c)
hidrive-next-build.yml: triggers GitLab image build pipeline on push to
ionos-stable and on PRs; uploads dev artifacts to Artifactory.
sbom-matrix.yaml: generates Software Bill of Materials for compliance.

Backports: cbca0ad c9c4048 10ad22c ad12b67 6a5f40d
           e226cd1 f54a8a3 840fb85
(cherry picked from commit 3596906)
Blocks login for clients not listed in the system config allow-list.
Handles the case where a request carries multiple User-Agent values.

Config key: core.login_flow_v2.allowed_user_agents (array of strings)

Backports: 9391822 30df636
(cherry picked from commit 1c29182)
Provides the sharing.enable_share_accept system config value as an initial
state so the frontend can hide the pending-share menu when the feature is on.

  # hide pending menu (feature enabled):
  ./occ config:system:set --value true --type boolean -- sharing.enable_share_accept

  # show pending menu (feature disabled):
  ./occ config:system:set --value false --type boolean -- sharing.enable_share_accept

Backports: cb78926
(cherry picked from commit 8a297ab)
Replaces the upstream NavigationQuota widget with a custom IONOS SidebarQuota
component that better fits the IONOS UI layout and theming.

Backports: 091e90f 96495fb 64f5ea8 e8c8112
(cherry picked from commit e3d6404)
font awesome folder icon is smaller then MDI icon

Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
Co-authored-by: Tatjana Kaschperko Lindt <kaschperko-lindt@strato.de>
(cherry picked from commit e739552)
Sets peopleSearchEnabled default to false, disabling the contacts/people
provider in UnifiedSearch for IONOS deployments. Also gates the SearchableList
people-filter behind the prop (the v-if was removed upstream in v32).

Backports: bacad6d
(cherry picked from commit 874bf1d)
Shows a DialogBuilder confirmation before executing share deletion to prevent
accidental removal.

Backports: 82f9dfa
(cherry picked from commit 25e04f7)
…cc output

Adds 'redirects' system config key: maps URL path regexps to app route
locators, configured entirely in config.php rather than Apache/nginx.

  Example: "redirects" => ["^/path/regexp" => "an.apps.controller.route"]

Note: the <sensitive> masking in config:app:set was already upstreamed to v32.

Backports: 959dcc0 c64d946
(cherry picked from commit e7137a7)
Implements build number injection system for production traceability:
- Modified version.php to read .buildnumber file and append build ID as $OC_Version[4]
- Updated hidrive-next-build.yml workflow to create .buildnumber file with GitHub run_number
- Added .buildnumber to .gitignore for CI/CD generated files

This preserves the original semantic version while adding build metadata
for tracking specific CI/CD runs in production environments.

Ported from IONOS-Productivity/ncw-server commit 0f2d429

Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
(cherry picked from commit add6637)
(cherry picked from commit f70ad2f)
…atible)

https://github.com/IONOS-Productivity/nc-viewer/releases/tag/v32.0.6

Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
(cherry picked from commit e382723)
…ersion with NC32)

https://github.com/IONOS-Productivity/nc-theming/releases/tag/v32.0.6-a06a89f

Signed-off-by: Tatjana Kaschperko Lindt <kaschperko-lindt@strato.de>
(cherry picked from commit 8bf393f)
…argets)

https://github.com/IONOS-Productivity/nc-config/releases/tag/cce9a71

Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
(cherry picked from commit 6a880ac)
hidrive-next-build.yml: remove custom-npms/** path trigger and
FONTAWESOME_PACKAGE_TOKEN from the build step.

sbom-matrix.yaml: remove FONTAWESOME_PACKAGE_TOKEN secret requirement
and custom-npm pre-install steps from the npm install job.

Signed-off-by: Tatjana Kaschperko Lindt <kaschperko-lindt@strato.de>
(cherry picked from commit 4160515)
This reverts commit e739552.

(cherry picked from commit 410e25f)
Remove all four custom-npm submodules to support FA icon embedding pipeline:
  - nc-mdi-svg: FA-to-MDI SVG embedding (primary FA integration point)
  - nc-mdi-js: thin wrapper over @mdi/js, only customized to use nc-mdi-svg
  - nc-nextcloud-vue: thin fork of @nextcloud/vue, only wired custom icon packages
  - nc-vue-material-design-icons: FA mapping logic, now redundant without FA

Signed-off-by: Tatjana Kaschperko Lindt <kaschperko-lindt@strato.de>
(cherry picked from commit 82872c7)
…e drift)

https://github.com/IONOS-Productivity/nc-simplesettings/releases/tag/v32.0.6-373db5b

Picks up nc-simplesettings PR #176 which regenerates package-lock.json
with upstream registry.npmjs.org resolutions for @mdi/js and
vue-material-design-icons. Without this, the cached-matrix CI on
this PR cannot build simplesettings from scratch on a runner — the
prior lockfile (`d87bf5b`) still pointed those packages at
`../../custom-npms/...` file: links that only exist on dev machines.

Unblocks the `build-apps (simplesettings, ...)` matrix leg of this PR.

Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
(cherry picked from commit 9910bd8)
Bumps IONOS submodule cce9a71..797b3c7 (now hosted at
IONOS-Productivity/nc-config; rename also reflected in .gitmodules) to
introduce the build targets and helpers consumed by the new cached
parallel matrix CI pipeline.

Brings in nc-config master since cce9a71 (REUSE/SPDX compliance,
workflow cleanups, configure.sh refactors) and the consolidated
nc-config#109 series:

  - feat(Makefile): add generate_apps_matrix_json with dynamic app list
  - feat(Makefile): introduce dynamic build rules via define macros + common vars
  - feat(Makefile): add .precheck target and gate IO-side targets on it
  - feat(Makefile): two-phase patch_shipped_json with APP_FOLDERS_TO_SHIP
  - feat(Makefile): exclude apps via REMOVE_UNWANTED_APPS from removed-apps.txt
  - feat(Makefile): add pipeline targets build_after_external_apps + package_after_build
  - feat(scripts): add validate_app_list_uniqueness + validate_external_apps + validate_all umbrella
  - chore(Makefile): update copyright header to 2025 STRATO GmbH

The Makefile now drops the legacy custom-npm build targets entirely
(see nc-config#109) — generate_apps_matrix_json always emits
"needs_custom_npms":false. Subsequent commits in this PR add the
workflow and helper script that consume these targets.

Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
(cherry picked from commit 629d8d5)
printminion-co and others added 8 commits July 13, 2026 11:02
Helper script consumed by the cached parallel matrix CI pipeline (added in
the next commit). For each app emitted by IONOS/Makefile's
generate_apps_matrix_json target, it computes a per-app cache key from the
submodule SHA, probes JFrog Artifactory first, falls back to a GitHub
Actions cache lookup via gh cache list, and writes three JSON outputs:

- apps_to_build:   apps whose artifact is missing and must be built
- apps_to_restore: apps whose artifact exists in JFrog or GH cache
- apps_sha_map:    full {name: SHA} map for traceability

Cache-key shape is uniform: \${CACHE_VERSION}-app-build-\${APP_NAME}-\${SHORT_SHA}
(8-char short SHA). The custom-npms compound-key branch from PR #226's
earlier iterations is gone — custom-npms submodules no longer exist and
generate_apps_matrix_json always emits needs_custom_npms:false.

JFrog setup is idempotent (jf config show short-circuits the add) and
gracefully degrades to GH-cache-only when JF_URL/JF_USER/JF_ACCESS_TOKEN
are absent.

Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
(cherry picked from commit b2b36d1)
Composite action that fetches the GitHub Actions job HTML URL via the
REST API and exposes it as an output. Used by subsequent steps to
attach job.html_url to JFrog artifact properties for traceability
between an Artifactory artifact and the run/job that produced it.

Uses a temp netrc file to keep the GH token off the curl command line,
and trap-cleans both the netrc and the curl-error temp file on exit.
Returns an empty output (not a failure) when the API call or job
lookup fails, so callers can include it with continue-on-error: true.

Copied from sister ncw-server (.github/actions/get-job-data/action.yml).

(cherry picked from commit f020fce)
Replaces the single monolithic build job with a per-app matrix:

- prepare-matrix: discover apps and decide cache-hit vs rebuild via
  detect-app-cache.sh (JFrog + GitHub cache probe), emit a build matrix,
  preflight summary + gh cache list for diagnostics.
- build-apps: parallel matrix that restores cached artifacts or rebuilds,
  validates appinfo/info.xml after restore, uploads to JFrog with secrets
  preflight + retry + post-upload verification, and uses JFrog props
  arrays embedding job.html_url.
- hidrive-next-build: rewired to consume per-app cached artifacts.

Hardening: concurrency group for push + pull_request runs, PHP pinned to
8.3, npm cache bypassed when force_rebuild is set, per-app completion
summary, per-app debug artifact upload.

(cherry picked from commit e997d4e)
- actions/checkout       -> v5.0.1
- actions/setup-node     -> v6.4.0
- actions/download-artifact -> v5.0.0
- docker/login-action    -> v3.7.0
- docker/metadata-action -> v5.10.0

(cherry picked from commit c35ac84)
Enables push-build for rc/** and */dev/* branches, triggers the remote
GitLab workflow for both, and routes their artifacts to nested JFrog
paths that include NC_VERSION and short SHA so every build is preserved.

JFrog layout (consolidated):

  | Branch/Event  | Path                                                               |
  |---------------|--------------------------------------------------------------------|
  | Pull Request  | pr/hidrive-next-pr-<n>.zip                                         |
  | ionos-dev     | dev/hidrive-next-<ver>/<sha>/hidrive-next-<ver>.zip                |
  | ionos-stable  | stable/hidrive-next-<ver>/<sha>/hidrive-next-<ver>.zip             |
  | rc/*          | rc/<branch>/hidrive-next-<ver>/<sha>/hidrive-next-<ver>.zip        |
  | */dev/*       | devs/<prefix>/hidrive-next-<ver>/<sha>/hidrive-next-<ver>.zip      |

Changes vs. previous behavior:
- PR uploads move from dev/pr/... to top-level pr/...
- */dev/* uploads change from dev-<prefix>/... to devs/<prefix>/...
  (folder instead of dash-suffix)

GitLab BUILD_TYPE (consumer-facing) keeps dev-<prefix> — it is a
separate naming contract from the JFrog path.

(cherry picked from commit 74e8b76)
…SER_DEV

The remote GitLab pipeline does not yet handle the BUILD_TYPE=dev-<prefix>
payload produced for the */dev/* developer-branch class, so every push to
a developer branch currently fires a remote run the consumer cannot
service.

Add an opt-in repository variable ENABLE_REMOTE_TRIGGER_USER_DEV which
must be set to 'true' for the trigger-remote-dev-workflow job to run on
*/dev/* branches. The other three branch classes (ionos-dev, ionos-stable,
rc/*) are unaffected and continue to trigger as before. The existing
DISABLE_REMOTE_TRIGGER kill-switch keeps its current semantics and layers
on top of the new opt-in.

The "Check configuration" diagnostic step in prepare-matrix now prints
the new variable and surfaces an explicit ❌/✅ line for */dev/* branches
so the expected-outcome line ("WILL RUN" / "WILL BE SKIPPED") reflects
the opt-in state.

upload-to-artifactory and the ghcr image push are unchanged — */dev/*
builds still land in devs/<prefix>/... in Artifactory.

(cherry picked from commit e3e638e)
…anch for submodule trigger)

https://github.com/IONOS-Productivity/nc-config/releases/tag/6dedd72

Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
(cherry picked from commit 0e14ce3)
…e user oicd bearer auth)

https://github.com/IONOS-Productivity/nc-config/releases/tag/ecde9e2

Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
(cherry picked from commit 3e70495)
@printminion-co

Copy link
Copy Markdown
Author

Superseded by restructuring: ionos-dev-v33 now holds vanilla v33.0.6 (PR target), and the IONOS backport moves to mk/poc/HDNEXT-1604-ionos-dev-v33 (PR source). A new PR (base ionos-dev-v33 ← head mk/poc/HDNEXT-1604-ionos-dev-v33) follows with the same diff.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants