Skip to content

Sogo server support#581

Merged
tobixen merged 12 commits intomasterfrom
sogo
Dec 2, 2025
Merged

Sogo server support#581
tobixen merged 12 commits intomasterfrom
sogo

Conversation

@tobixen
Copy link
Copy Markdown
Member

@tobixen tobixen commented Dec 2, 2025

I thought I wouldn't be adding more docker containers ... it was a big pain. Indeed, SOGo was also a big pain. I went through lots of docker images before finding one that would work without too much adaptions.

tobixen and others added 10 commits December 2, 2025 08:40
… debug mode

Add a new compatibility feature to detect servers that return events/todos
outside the requested time range. Some servers (like SOGo) incorrectly
return recurring events whose recurrences fall after the search interval
ends, or events with no recurrences in the requested range at all.

Changes to compatibility_hints.py:
- Add "search.time-range.accurate" feature definition with RFC reference
- Add SOGo-specific compatibility hints based on observed behavior
- Document various SOGo limitations (search, sync-token, principal-search, etc.)
- Remove obsolete "inaccurate_datesearch" and "no_search" flags

Changes to test_caldav.py:
- Make testCheckCompatibility debug mode conditional on --pdb flag
- Use "logging" mode by default, "pdb" mode only when pytest --pdb is used
- This prevents tests from hanging on breakpoints during normal CI runs
- Remove unused "no_search" compatibility flag check

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Remove old sync-related compatibility flags and migrate tests to use
the new feature system with is_supported() instead of check_compatibility_flag().

Changes:
- Remove obsolete flags from incompatibility_description:
  - no_sync_token → use sync-token feature
  - time_based_sync_tokens → check sync-token behaviour
  - fragile_sync_tokens → check sync-token support level
  - sync_breaks_on_delete → use sync-token.delete feature

- Update testObjectBySyncToken() and testSync():
  - Replace skip_on_compatibility_flag("no_sync_token") with skip_unless_support("sync-token")
  - Replace check_compatibility_flag("time_based_sync_tokens") with behaviour check
  - Replace check_compatibility_flag("fragile_sync_tokens") with support level check
  - Replace skip_on_compatibility_flag("sync_breaks_on_delete") with skip_unless_support("sync-token.delete")
  - Cache sync_info at start of test to avoid redundant feature lookups

- Fix bug in testSync line 1505: was checking "not is_supported" instead of "is_supported"

The new approach uses the feature system which is checked by caldav-server-tester
and provides better granularity and documentation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add sogo-db service (MariaDB 11) with health check
- Add sogo service (japoch/sogo:latest) with health check
- Add configuration step to copy config files and initialize database
- Add CalDAV access verification
- Add SOGO_URL environment variable for tox

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
SOGo was failing with "Unknown server host 'db'" because GitHub Actions
service containers don't support docker-compose style hostnames. The fix
dynamically replaces the 'db' hostname with the actual database container
IP address before copying the configuration to the SOGo container.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
The SOGo service was failing health checks because it needs database
configuration before it can start properly. GitHub Actions runs health
checks before workflow steps, so we couldn't configure it in time.

Solution: Remove the health check from the SOGo service definition and
handle readiness checking in the configuration step after we've set up
the database connection with the correct hostname.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
The MariaDB 11 container doesn't have 'mysql' in its default PATH,
only 'mariadb'. Changed the database initialization command to use
'mariadb' instead of 'mysql'.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Replace old compatibility flag with new feature system for better
maintainability and automated detection. Feature name includes RFC
number to distinguish from RFC6638 scheduling-based freebusy.

Feature definition:
- Add 'freebusy-query.rfc4791' feature for RFC4791 section 7.10 support
- Default to 'supported' as most servers implement this
- Include RFC reference link and note about RFC6638 difference

Server compatibility updates:
- xandikos v0.2.12: ungraceful (500 internal server error)
- xandikos v0.3: ungraceful (500 internal server error)
- radicale: unsupported (on long-term roadmap)
- robur: unsupported
- gmx: unsupported

Test updates:
- Replace skip_on_compatibility_flag("no_freebusy_rfc4791")
  with skip_unless_support("freebusy-query.rfc4791")

Cleanup:
- Remove 'no_freebusy_rfc4791' from incompatibility_description
- Remove flag from all server old_flags lists

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@tobixen tobixen merged commit e19fffc into master Dec 2, 2025
4 checks passed
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.

1 participant