Commit graph

1576 commits

Author SHA1 Message Date
Johannes Millan
044495999b 17.0.0 2026-01-23 22:19:10 +01:00
Johannes Millan
e5708236de fix(e2e): eliminate plugin 404 errors in CI
Root cause: ng serve doesn't reliably detect plugin assets copied to
src/assets/bundled-plugins/ during E2E setup, causing 404s in CI.

Solution: Implement dual-mode E2E testing:
- CI: Build Angular app first (includes plugins), serve with http-server
- Local: Continue using ng serve for fast iteration

Changes:
- Add buildFrontend:e2e script (builds plugins THEN Angular)
- Add serveFrontend:e2e:prod script (http-server with SPA proxy)
- CI workflows now build frontend before running E2E tests
- Global setup skips duplicate plugin builds (saves ~30s)
- Playwright config uses environment-specific server commands
- Added build output verification step

Benefits:
- 100% reliable plugin asset availability in CI
- Faster CI startup (90s vs 180s timeout)
- Better debugging (removed --silent flag)
- Local development unchanged
2026-01-23 21:28:41 +01:00
Johannes Millan
ded6594297 fix(e2e): eliminate race condition causing 404 errors for bundled plugin manifests
Move plugin build from pree2e hook to Playwright global setup to ensure
plugins are built before dev server starts. Previously, plugins:build and
ng serve ran concurrently, causing tests to start before manifests were
available and resulting in 404 errors during the retry window.
2026-01-23 20:39:16 +01:00
Johannes Millan
ab7b4dc91b refactor(e2e): simplify docker:all script with --workers=6
Replace two-phase execution (non-supersync then supersync with
--workers=3) with single-phase execution using --workers=6.

Benefits:
- Simpler script (one line vs. complex phase logic)
- No server overload (0 ECONNREFUSED errors)
- Better parallelism (2x faster than --workers=3)
- 98% test pass rate (355/362 passed)

Testing showed:
- Default 12 workers: 95 ECONNREFUSED errors (nginx overload)
- --workers=6: 0 connection errors, all tests passed
- Total duration: 18.8 minutes

The two-phase approach was designed to prevent ng serve from
crashing. With Docker nginx, --workers=6 provides optimal balance
between parallelism and server capacity.

Note: e2e:supersync script keeps --workers=3 (uses ng serve).
2026-01-23 18:15:33 +01:00
Johannes Millan
0775650e6e 17.0.0-RC.13 2026-01-21 22:12:01 +01:00
Johannes Millan
3a9d35149d feat(e2e): enable SuperSync tests in e2e:docker:all script
Modify e2e:docker:all to run all 360+ E2E tests including @supersync tests.

- Start all required services (app, webdav, db, supersync)
- Add wait-for-supersync.sh for SuperSync health check
- Execute tests in two phases:
  - Phase 1: Non-supersync tests (default workers)
  - Phase 2: SuperSync tests (3 workers to avoid server overload)
- Both phases run independently; exit code reflects first failure
- Previously skipped 131 @supersync tests now included

Resolves complete E2E test coverage for all sync providers.
2026-01-21 19:04:57 +01:00
Johannes Millan
c0fbf5ddd8 fix(icons): update schedule nav icon from early_on SVG to schedule Material Symbol 2026-01-21 15:47:59 +01:00
Johannes Millan
373ba4cf13
Merge pull request #6088 from super-productivity/dependabot/npm_and_yarn/rollup/rollup-linux-x64-gnu-4.55.3
chore(deps): bump @rollup/rollup-linux-x64-gnu from 4.27.4 to 4.55.3
2026-01-21 15:26:20 +01:00
dependabot[bot]
00f3b78dde
chore(deps): bump @rollup/rollup-linux-x64-gnu from 4.27.4 to 4.55.3
Bumps [@rollup/rollup-linux-x64-gnu](https://github.com/rollup/rollup) from 4.27.4 to 4.55.3.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.27.4...v4.55.3)

---
updated-dependencies:
- dependency-name: "@rollup/rollup-linux-x64-gnu"
  dependency-version: 4.55.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 13:43:49 +00:00
dependabot[bot]
a6957bcd52
chore(deps): bump angular-material-css-vars from 9.1.1 to 10.0.0
Bumps [angular-material-css-vars](https://github.com/johannesjo/angular-material-css-vars) from 9.1.1 to 10.0.0.
- [Release notes](https://github.com/johannesjo/angular-material-css-vars/releases)
- [Commits](https://github.com/johannesjo/angular-material-css-vars/compare/v9.1.1...v10.0.0)

---
updated-dependencies:
- dependency-name: angular-material-css-vars
  dependency-version: 10.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 13:42:23 +00:00
Johannes Millan
2d49efaf24 feat(e2e): add npm run e2e:docker:all command for running all E2E tests
Adds a new e2e:docker:all script that runs the complete E2E test suite
(including WebDAV tests) against the Docker production build.

This provides a clearer command name than e2e:docker:webdav for running
the full test suite, making it more discoverable for developers.
2026-01-21 14:30:24 +01:00
Johannes Millan
f2c1c2ab5e fix(ios): remove white frame from app icon by eliminating alpha channel
iOS renders transparent pixels as white, causing a white frame around the
app icon. This fix generates a 1024x1024 RGB PNG (no alpha channel) from
the existing build/icons/sq2160x2160.png source.

Changes:
- Add tools/generate-ios-icon.js script using Sharp to resize and remove alpha
- Add npm script 'generate:ios-icon' for reproducible icon generation
- Update AppIcon-512@2x.png to RGB format (was RGBA)
- Install Sharp as dev dependency for image processing

Icon is now fully opaque with correct brand blue color and white checkmark.
2026-01-20 17:07:24 +01:00
Johannes Millan
6771fa77a2 17.0.0-RC.12 2026-01-18 14:00:52 +01:00
Johannes Millan
0dd33fe4b6 17.0.0-RC.11 2026-01-18 12:29:38 +01:00
Johannes Millan
d9e27a0da7 17.0.0-RC.10 2026-01-18 02:20:51 +01:00
Johannes Millan
7d5bb1a709 17.0.0-RC.9 2026-01-17 16:08:01 +01:00
Johannes Millan
0a7e0c317e 17.0.0-RC.8 2026-01-17 15:47:15 +01:00
Johannes Millan
53324bac08 17.0.0-RC.7 2026-01-17 13:33:56 +01:00
Johannes Millan
ce595ba212 17.0.0-RC.6 2026-01-17 13:32:33 +01:00
Johannes Millan
3c5b441046 17.0.0-RC.5 2026-01-16 22:35:17 +01:00
Johannes Millan
0cd6dfaf43 17.0.0-RC.4 2026-01-16 22:34:50 +01:00
johannesjo
2996aaa361 feat(ios): add GitHub Actions workflow for iOS App Store release
- Create build-ios.yml workflow triggered on releases
- Configure signing keychain with iOS distribution certificate
- Install provisioning profile for App Store distribution
- Sync version from package.json using agvtool
- Build, archive, and export IPA with manual code signing
- Validate and upload to App Store Connect via xcrun altool
- Add sync:ios and dist:ios:prod npm scripts
2026-01-16 15:24:03 +01:00
Johannes Millan
7aee741c1d Merge branch 'feat/ios' into master
Resolves merge conflicts in:
- src/app/core/startup/startup.service.ts: Keep both _store and _platformService injections
- src/app/features/android/store/android.effects.ts: Refactor to use platform-agnostic CapacitorReminderService

The feat/ios branch adds iOS support via Capacitor, introducing platform-agnostic
services for notifications, reminders, and platform detection that work across
web, Android, and iOS.
2026-01-16 13:45:31 +01:00
Johannes Millan
23c6691daa 17.0.0-RC.3 2026-01-14 16:26:13 +01:00
Johannes Millan
aee3b656df 17.0.0-RC.2 2026-01-14 14:26:09 +01:00
Johannes Millan
a046c347d4 feat(ios): add safe area, keyboard, and status bar handling
Add iOS-specific UX improvements:

Safe Areas:
- Add CSS variables for safe area insets (notch, home indicator)
- Add body classes: isNativeMobile, isIOS, isKeyboardVisible
- Apply safe area padding on native mobile platforms

Keyboard Handling:
- Install @capacitor/keyboard plugin
- Track keyboard visibility via keyboardWillShow/Hide events
- Set --keyboard-height CSS variable for layout adjustments
- Remove bottom safe area padding when keyboard is visible

Status Bar:
- Install @capacitor/status-bar plugin
- Sync status bar style with app dark/light theme
- Configure overlaysWebView: false in capacitor.config.ts

These changes ensure proper display on iPhone devices with
notch/Dynamic Island and home indicator.
2026-01-14 13:45:42 +01:00
Johannes Millan
590e1592da feat(ios): add iOS platform support via Capacitor
Add iOS MVP with core functionality using Capacitor-first approach:

Platform Abstraction Layer:
- Add CapacitorPlatformService for unified platform detection
- Add PlatformCapabilities model with per-platform feature flags
- Add CapacitorNotificationService wrapping LocalNotifications plugin
- Add CapacitorReminderService for cross-platform reminder scheduling

iOS Support:
- Add Capacitor iOS project with proper configuration
- Configure Info.plist for notifications and background modes
- Add app icon and splash screen assets
- Enable CapacitorHttp for WebDAV sync (avoids CORS issues)

Refactoring:
- Update android.effects.ts to use CapacitorReminderService
- Update notify.service.ts to support iOS notifications
- Update startup.service.ts with platform-aware initialization
- Update sync-form.const.ts to hide CORS info on native platforms
- Update webdav-http-adapter.ts to use CapacitorHttp on iOS

MVP includes: task management, scheduled notifications, Dropbox sync,
WebDAV sync, share-out, dark mode. Excludes: background tracking,
widgets, local file sync, share-in (post-MVP features).
2026-01-14 13:45:42 +01:00
Johannes Millan
c33f0c496f 17.0.0-RC.1 2026-01-11 16:17:29 +01:00
Johannes Millan
9d77aa2d3f fix(build): add shared-schema to prepare script for CI builds
The shared-schema package was not being built before lint and test
steps in CI, causing "Cannot find module '@sp/shared-schema'" errors.

Changes:
- Add shared-schema:build script to package.json
- Update prepare script to build shared-schema first
- Add shared-schema to build-packages.js for completeness
2026-01-11 16:11:36 +01:00
Johannes Millan
0e92baeb8b 17.0.0-RC.0 2026-01-11 15:29:33 +01:00
Johannes Millan
ce91c8b1dc Merge branch 'master' into feat/operation-logs
Resolve merge conflicts:
- package.json: use @types/node@^22.19.5
- sync-form.const.ts: keep eslint-disable for naming convention
- global-config.effects.ts: remove extra blank line
- unlink-all-tasks-on-provider-deletion.effects.ts: keep deprecation notice
- auto-fix-typia-errors.ts: keep better-typed getValueByPath
- undo-task-delete.meta-reducer.spec.ts: keep getLastDeletePayload import
- Accept deletions for files refactored into operation-logs architecture
2026-01-10 17:08:09 +01:00
Johannes Millan
b69dded9f1 chore(deps): update minor/patch dependencies
- prettier: 3.5.1 → 3.7.4
- pretty-quick: 4.1.1 → 4.2.2
- stylelint: 16.18.0 → 16.26.1
- @playwright/test: 1.56.1 → 1.57.0
- jasmine-core: 5.10.0 → 5.13.0
- eslint-plugin-prettier: 5.2.1 → 5.5.4
- chrono-node: 2.8.3 → 2.9.0
- ical.js: 2.1.0 → 2.2.1
- electron-builder: 26.3.3 → 26.4.0
- core-js: 3.39.0 → 3.47.0
- And other minor updates

Applied prettier formatting changes from v3.7.4.
2026-01-10 16:16:47 +01:00
Johannes Millan
dd57c5d6eb chore(deps): update @types/jasmine to v5
Update from v3.10.2 to v5.1.14 to match jasmine-core v5.10.0.
All tests pass with the new type definitions.
2026-01-10 16:10:26 +01:00
Johannes Millan
e6da7ced37 chore(deps): upgrade ESLint to v9 with flat config
- Upgrade eslint from v8 to v9.39.2
- Upgrade typescript-eslint to v8.52.0 (unified package)
- Add angular-eslint package for flat config support
- Migrate from .eslintrc.json to eslint.config.js (flat config)
- Update package configs for sync-md, automations, boilerplate-solid-js
- Remove unused eslint-disable directives
- Fix lint errors (empty interface, template eqeqeq)

BREAKING: Requires Node.js 18.18+ (ESLint 9 requirement)
2026-01-10 16:08:11 +01:00
Johannes Millan
132947a69b feat(deps): upgrade Angular to v21
- Update @angular/* packages to v21.0.8
- Update @angular/material and @angular/cdk to v21.0.6
- Update @angular-eslint/* to v21.1.0
- Update @ngrx/* to v21.0.1
- Update TypeScript to 5.9.3
- Update ngx-markdown to v21 and marked to v17
- Update typia to v11 for TypeScript 5.9 support
- Update @types/node to v22, chart.js to v4.5.1

Breaking changes addressed:
- Replace deep imports with public API imports (idb, formly, ngrx)
- Update marked-options-factory for marked v17 API changes
- Add custom FormlySliderComponent (formly slider incompatible with Mat v21)
- Update ngx-markdown SANITIZE configuration
- Fix HostListener decorators with unused $event args
- Fix crypto.subtle type compatibility
- Add skipLibCheck for dependency type conflicts
- Update tsconfig module settings for Angular 21

Removed:
- @angular-builders/custom-webpack (unused)
2026-01-10 15:27:20 +01:00
Johannes Millan
3f86044147 chore(deps): update NgRx packages to v21 2026-01-10 14:58:30 +01:00
Johannes Millan
5bed090756 chore(deps): update angular-eslint to v21 2026-01-10 14:57:25 +01:00
Johannes Millan
5c7df8a2a8 chore(deps): update Angular Material and CDK to v21 2026-01-10 14:56:37 +01:00
Johannes Millan
1ce8c0d0c8 chore(deps): update Angular to v21 and TypeScript to 5.9 2026-01-10 14:55:45 +01:00
Johannes Millan
560b691a41 chore(deps): update typia to v11 for TypeScript 5.9 support 2026-01-10 14:54:14 +01:00
Johannes Millan
74fe0c01a0 Merge branch 'master' into feat/operation-logs
* master:
  16.9.4
  docs: add Angular commit message guidelines to CLAUDE.md
  fix(ci): update references for repo migration to super-productivity org
  build(ci): improve android build release upload reliability
  16.9.3
  fix(calendar): display proper error messages instead of [object Object]
  fix(e2e): fix keyboard shortcut delete test and reduce sync test flakiness
  fix(tasks): add subscription cleanup to delete confirmation dialog
  fix(schedule): maintain visibility during task overlap on schedule (#5887)
  16.9.2

# Conflicts:
#	e2e/pages/sync.page.ts
2026-01-10 13:06:20 +01:00
Johannes Millan
f9656ceb70 16.9.4 2026-01-10 12:58:17 +01:00
Johannes Millan
6dcede853f 16.9.3 2026-01-10 12:23:21 +01:00
Johannes Millan
7fcec38476 16.9.2 2026-01-09 18:28:21 +01:00
Johannes Millan
cabe73177a Merge branch 'master' into feat/operation-logs
* master:
  16.9.1
  fix(e2e): handle task deletion confirmation dialog in WebDAV sync test
  fix: resolve build failures from missing translations and unused imports
  16.9.0
  Added Scoop installation instructions
2026-01-09 18:00:51 +01:00
Johannes Millan
79276f3fc7 16.9.1 2026-01-09 17:59:07 +01:00
Johannes Millan
cdf52cc4e5 fix(e2e): split docker-compose files for standalone webdav tests
docker-compose.e2e.yaml was failing when used standalone because the
supersync service only had a port override without a base definition.
Split into separate files so e2e:docker:webdav works without errors.
2026-01-09 17:27:30 +01:00
Johannes Millan
150fd074ab Merge branch 'master' into feat/operation-logs
Integrate master branch updates into operation-logs feature branch:
- Add heatmap components and scheduled date group pipe
- Add task delete confirmation dialog and tests
- Update Android focus mode and sound configuration
- Add GitLab PAT authentication support
- Merge translation keys and i18n updates
2026-01-09 16:57:25 +01:00
Johannes Millan
4919ab188b 16.9.0 2026-01-09 16:41:59 +01:00
Johannes Millan
12d315a703 chore(i18n): add unused translation scanner and remove orphaned keys
Add tools to detect and clean up unused translation keys:
- find-unused-translations.js: scans for T.* and string literal patterns
- cleanup-unused-translations.js: removes specified orphaned sections

Remove 34 orphaned translation keys from all 25 language files:
- ANDROID.* (5 keys) - code removed in previous commits
- THEMES.* (17 keys) - never used, themes use hardcoded names
- F.CALDAV.ISSUE_CONTENT.* (12 keys) - never wired up

Convert string literal translation keys to T.* pattern in:
- dialog-user-profile-management component
- user-profile-button component
- plugin-management component
- config-sound-form component
- lazy-chart component
2026-01-09 14:59:05 +01:00