Commit Graph
8 Commits
Author SHA1 Message Date
Patrick Niebeling 85b42d84c9 Fix unusable personal settings form: v8 Vue idioms and Deck relations
Build package / package (push) Successful in 50s
Lint info.xml / xml-lint (push) Successful in 20s
Lint PHP / php-lint (8.2) (push) Successful in 58s
Lint PHP / php-lint (8.3) (push) Successful in 57s
Lint PHP / php-lint (8.4) (push) Successful in 55s
PHPUnit / unit-tests (push) Successful in 1m7s
The settings page rendered, but nothing in it worked:

- All NcSelect dropdowns showed "undefined" for every option. In
  @nextcloud/vue 9 the `label` prop is vue-select's option display *key*,
  not a caption, so `label="Board"` read `option.Board`. Use `input-label`.
- Saving always failed with "Bitte einen Titel angeben". Vue 3 dropped
  `.sync`; NcTextField and NcCheckboxRadioSwitch bind via `modelValue`, so
  `:value.sync` / `:checked.sync` never wrote back. Use `v-model`.
- NcButton's style prop is now `variant`, `type` is the native button type
  and `native-type` is gone. `type="tertiary"` rendered
  `<button type="tertiary">`, which HTML falls back to `submit` for, making
  the cancel button submit the form.
- The user dropdown was always empty. Deck's RelationalEntity replaces
  resolved relations with a RelationalObject once an entity is enriched, so
  `$acl->getParticipant()` returns that wrapper and the uid lives in
  `getPrimaryKey()` -- probing for `getUID()` yielded null. This also broke
  the background job's assigned-user filter, which shares the extractor.
- A board's ACL never contains its owner (a private board has an empty
  ACL), so participants are now seeded with the owner, group ACL entries
  are expanded via IGroupManager and display names resolved via
  IUserManager.
- One board appeared twice: getUserBoards() merges own/group/circle boards
  and includes archived and trashed ones. Deduplicate by id and drop those.

Also keep one failing lookup in onBoardChange from taking the other two
dropdowns down with it, and document all of the above in CLAUDE.md.
2026-08-13 14:13:11 +02:00
Patrick Niebeling 9a8e4e47f0 Use the built-in GITEA_TOKEN instead of a hand-made RELEASE_TOKEN secret
Build package / package (push) Successful in 59s
Lint info.xml / xml-lint (push) Successful in 13s
Lint PHP / php-lint (8.2) (push) Successful in 43s
Lint PHP / php-lint (8.3) (push) Successful in 36s
Lint PHP / php-lint (8.4) (push) Successful in 34s
PHPUnit / unit-tests (push) Successful in 40s
Gitea injects a token into every Actions job as secrets.GITEA_TOKEN, so the
manually created PAT was never necessary. Declare permissions: contents:
write on the job, which Gitea maps to Code: write (deleting the latest-main
tag) and Releases: write (creating the release, uploading the asset) - the
full set the publish step needs.

Removes a secret that had to be created by hand, could expire, and was a
single point of failure the workflow had no fallback for.
2026-08-13 13:54:38 +02:00
Patrick Niebeling e06e382147 Merge release workflow into the main build workflow
Build package / package (push) Successful in 58s
Lint info.xml / xml-lint (push) Successful in 13s
Lint PHP / php-lint (8.2) (push) Successful in 45s
Lint PHP / php-lint (8.3) (push) Successful in 41s
Lint PHP / php-lint (8.4) (push) Successful in 34s
PHPUnit / unit-tests (push) Successful in 42s
build-release.yml and build-main.yml ran identical steps (checkout, node,
npm install, npm run build, make appstore) and differed only in where the
package landed. Fold the v* tag trigger into build-main.yml and branch on
gitea.ref in the publishing step: main keeps the rolling latest-main
pre-release, tags get a normal release on the tag that was just pushed.

Tag deletion is now guarded - only latest-main is recreated, since deleting
a version tag would destroy the ref that triggered the run. A stale release
is still removed in both cases so moved tags republish cleanly.

Side effects: version builds are published as durable release assets with a
stable URL instead of expiring workflow artifacts, which drops the last
actions/upload-artifact usage and with it the @v3 pin forced by the GHES
restriction; and the setup-php step goes away, since make appstore only
shells out to mkdir/tar/rm.
2026-08-13 13:46:34 +02:00
Patrick Niebeling d2f6640d3d Fix blank personal settings page from mismatched bundle names
Build main artifact / package (push) Successful in 1m11s
Lint info.xml / xml-lint (push) Successful in 14s
Lint PHP / php-lint (8.2) (push) Successful in 48s
Lint PHP / php-lint (8.3) (push) Successful in 39s
Lint PHP / php-lint (8.4) (push) Successful in 34s
PHPUnit / unit-tests (push) Successful in 37s
@nextcloud/vite-config prefixes every entry name with the app id, so the
entry "workflow-deck-automation-personal-settings" was emitted as
js/workflow_deck_automation-workflow-deck-automation-personal-settings.mjs
while Util::addScript() was still asking for the unprefixed name. Nextcloud
found neither the script nor the style, so only the empty mount div rendered
and the settings page stayed blank.

Shorten the entry to "personal-settings" and pass the full on-disk basename
(APP_ID . '-personal-settings') to addScript()/addStyle(). Document the
prefix rule and the intentionally near-empty CSS entry stub in CLAUDE.md.
2026-08-13 13:38:38 +02:00
Patrick Niebeling c5bf6f8f0d Add rolling main-branch build workflow for manual server deploys
Build main artifact / package (push) Successful in 1m2s
Lint info.xml / xml-lint (push) Successful in 15s
Lint PHP / php-lint (8.2) (push) Successful in 46s
Lint PHP / php-lint (8.3) (push) Successful in 45s
Lint PHP / php-lint (8.4) (push) Successful in 37s
PHPUnit / unit-tests (push) Successful in 42s
Publishes the appstore package as a Gitea release asset on every push
to main, so a deployable build can be grabbed without cutting a
version tag first.
2026-08-13 12:52:29 +02:00
Patrick Niebeling 086c8c06f3 Pin actions/upload-artifact back to v3
Lint info.xml / xml-lint (push) Successful in 15s
Lint PHP / php-lint (8.2) (push) Successful in 42s
Lint PHP / php-lint (8.3) (push) Successful in 43s
Lint PHP / php-lint (8.4) (push) Successful in 41s
PHPUnit / unit-tests (push) Successful in 48s
Build release artifact / package (push) Successful in 1m49s
v4+ uses the @actions/artifact v2 backend, which this self-hosted
Gitea instance rejects as unsupported since it identifies as GHES to
the action's GHES-detection check. checkout/setup-node don't have
this issue and stay on v7.
2026-08-13 12:13:52 +02:00
Patrick Niebeling 09d59d936d Add missing typescript devDependency to fix vite-plugin-dts crash
Lint info.xml / xml-lint (push) Successful in 12s
Lint PHP / php-lint (8.2) (push) Successful in 45s
Lint PHP / php-lint (8.3) (push) Successful in 39s
Lint PHP / php-lint (8.4) (push) Successful in 42s
PHPUnit / unit-tests (push) Successful in 39s
Build release artifact / package (push) Failing after 1m34s
vite-plugin-dts peer-depends on typescript: "*" but nothing installed
it, so it crashed at module-load time before tsconfig.json was ever
consulted. The earlier tsconfig.json fix alone was insufficient.
2026-08-13 11:26:48 +02:00
Patrick Niebeling f530b8e487 Track CLAUDE.md, keep only CLAUDE.local.md ignored
Lint info.xml / xml-lint (push) Successful in 14s
Lint PHP / php-lint (8.2) (push) Successful in 46s
Lint PHP / php-lint (8.3) (push) Successful in 1m0s
Lint PHP / php-lint (8.4) (push) Successful in 50s
PHPUnit / unit-tests (push) Successful in 49s
CLAUDE.md is now committed project guidance for future Claude Code
sessions; CLAUDE.local.md stays gitignored for machine-local notes.
2026-08-13 11:08:21 +02:00