Commit Graph
14682 Commits
Author SHA1 Message Date
kevinveenbirkenbach 069030deea Made TLS for OIDC Nextcloud plugin variable 2026-01-20 02:06:56 +01:00
kevinveenbirkenbach c0fdfaa759 fix(nextcloud): stabilize config permissions, loader injection and bootstrap flow
- ensure host-mounted infinito config directory ownership and permissions (recursive)
- ensure includes.php ownership on host before container start
- inject /tmp/includes.php loader into config.php idempotently using printf (no heredoc)
- prepare config directory with correct permissions in Dockerfile to avoid root-owned bootstrap
- add read_only.config.php template (default disabled for installer phase)

This fixes broken config.php injection, prevents root-owned config dir on fresh volumes,
and stabilizes Nextcloud auto-installer and OCC plugin routines.

https://chatgpt.com/share/696ed102-9e74-800f-ad52-f09ad0a9da80
2026-01-20 01:48:46 +01:00
kevinveenbirkenbach f7be4456e6 web-app-mediawiki: add bootstrap installer via one-shot container and fix fresh DB init
- Rename 01_install.yml to 01_configuration.yml
- Add bootstrap installer (03_install.yml) using one-shot mediawiki container
  to initialize empty databases without LocalSettings mount
- Remove legacy update-only task (03_update.yml)
- Always run update after bootstrap/install
- Add MEDIAWIKI_NETWORK_DATABASE variable for DB network binding
- Add administrator_password credential to schema
- Switch admin password to managed application credential

https://chatgpt.com/share/696eb7cc-98dc-800f-82a6-f6236e0c03b7
2026-01-20 00:01:54 +01:00
kevinveenbirkenbach 1216c8526d Restructured DB and activated autologin for testing 2026-01-19 22:54:44 +01:00
kevinveenbirkenbach 5115b36d12 Encapsulated host setting 2026-01-19 22:28:47 +01:00
kevinveenbirkenbach dbdad15d7f **fix(mediawiki): ensure version is treated as string for extension branch resolution**
https://chatgpt.com/share/696e9e38-afdc-800f-944e-ea6a7975e91b
2026-01-19 22:12:21 +01:00
kevinveenbirkenbach 6ff7c45be4 Enabled hostname also in DiD 2026-01-19 22:11:04 +01:00
kevinveenbirkenbach 31d20afbb9 Disable OIDC in CI/CD by requiring TLS for Mastodon and Matrix
OIDC providers (e.g. Keycloak) require a valid https issuer URL, which cannot
be provided in the Docker-in-Docker CI/CD pipeline. Therefore OIDC must only
be enabled when TLS is active.

This change switches OIDC enablement from DOCKER_IN_CONTAINER detection to
TLS_ENABLED for both Mastodon and Matrix services, preventing Synapse startup
failures caused by invalid http issuers.

https://chatgpt.com/share/696e99a6-0e78-800f-8962-0a66127501df
2026-01-19 21:52:44 +01:00
kevinveenbirkenbach 0a85df4f40 Revert "web-app-openproject: install listen gem for development environment in CI"
This reverts commit f2c68d45f7.
2026-01-19 21:39:29 +01:00
kevinveenbirkenbach 242f296b88 web-app-mastodon: seed database after migration to create default roles
Run `bin/rails db:seed` after `db:migrate` to ensure default data such as
user roles (e.g. Owner/Admin) is present. This fixes tootctl failures when
creating the administrator account due to missing roles.

The seed step is idempotent and does not mark the play as changed.

https://chatgpt.com/share/696e94f4-ad2c-800f-aa2a-f4861a1098a5
2026-01-19 21:32:30 +01:00
kevinveenbirkenbach ba4527a8db ruff 2026-01-19 21:17:56 +01:00
kevinveenbirkenbach ab7bb0b6fb feat(mastodon): add HTTP-only override and disable force_ssl via initializer
- Add optional HTTP-only mode for Mastodon deployments
- Inject override initializer to hard-disable force_ssl and ActionDispatch::SSL
- Mount override into Mastodon and Sidekiq containers
- Prevent automatic compose flush before migrations
- Apply overrides before setup phase

Also:
- Remove unconditional HSTS header from ws_generic proxy vhost
- Make OIDC optional for CI (docker-in-docker)
- Fix env.j2 quoting and formatting
- Gate HSTS in Nextcloud behind TLS_ENABLED

https://chatgpt.com/share/696e914c-c758-800f-b16e-6341873c0e0e
2026-01-19 21:17:04 +01:00
kevinveenbirkenbach 4a49954a60 Deactivated JS for akkaunting 2026-01-19 19:53:50 +01:00
kevinveenbirkenbach f56cfa773e **test(unit): add full unittest coverage for sufficient_storage CLI and role_resource_validation**
https://chatgpt.com/share/696e3d20-276c-800f-87a7-a7052989ffe4
2026-01-19 19:29:08 +01:00
kevinveenbirkenbach 5cfa73941d **fix(cli): remove roles_root argument and resolve roles path internally**
https://chatgpt.com/share/696e3d20-276c-800f-87a7-a7052989ffe4
2026-01-19 19:10:20 +01:00
kevinveenbirkenbach e1749f7cb7 **fix(ci): resolve roles directory relative to repo root instead of cwd**
https://chatgpt.com/share/696e3d20-276c-800f-87a7-a7052989ffe4
2026-01-19 18:55:22 +01:00
kevinveenbirkenbach 98e44c2b99 Speed up piepline debugging 2026-01-19 18:39:50 +01:00
kevinveenbirkenbach 5e9a225881 Debugging github workflow pipeline 2026-01-19 18:38:34 +01:00
kevinveenbirkenbach 198b1d0d4b web-app-flowise: allow unsafe-eval for script-src-elem to fix CSP eval blocking
https://chatgpt.com/share/696e63ec-0fb4-800f-8b82-79b7357cd4b3
2026-01-19 18:03:30 +01:00
kevinveenbirkenbach d8c50973bd ci: make discover.sh self-contained by resolving repo root internally
Move repo root detection into scripts/ci/discover.sh so it can be executed
from any working directory. Simplify ci-discover-output to just call the
script and rely on its internal path resolution.

https://chatgpt.com/share/696e3d20-276c-800f-87a7-a7052989ffe4
2026-01-19 17:45:38 +01:00
kevinveenbirkenbach 00a1e4c99c ci: ensure discover runs from git repo root
Change ci-discover-output to resolve the repository root via git and execute
scripts/ci/discover.sh from there so that relative paths (e.g. roles/* and
scripts/tests/*) resolve correctly.

This fixes empty discovery results and "Role directory not found" warnings
caused by running discovery from the wrong working directory.

https://chatgpt.com/share/696e3d20-276c-800f-87a7-a7052989ffe4
2026-01-19 17:23:10 +01:00
kevinveenbirkenbach d2420ab49c ci: run discovery on host and move storage filter into infinito container
Restore discover.sh execution on the host to avoid running Docker Compose
from inside the container, and execute only the storage validation logic
inside the infinito CI container.

This fixes "--profile" errors caused by compose-in-compose and keeps the
Python dependency stack isolated inside the container.

- Run scripts/ci/discover.sh directly on host
- Execute sufficient_storage filter via docker compose exec
- Keep CI output and ONLY_APP override unchanged

https://chatgpt.com/share/696e3d20-276c-800f-87a7-a7052989ffe4
2026-01-19 17:02:52 +01:00
kevinveenbirkenbach 52239062e4 ci: execute discover.sh from repo root resolved via pkgmgr
Ensure ci-discover-output changes into the Infinito repository root (resolved
inside the container via `pkgmgr path infinito`) before executing
scripts/ci/discover.sh so that all relative paths (e.g. scripts/tests/discover-apps.sh)
resolve correctly.

This makes discovery robust against different working directories and future
layout changes.

https://chatgpt.com/share/696e3d20-276c-800f-87a7-a7052989ffe4
2026-01-19 16:18:00 +01:00
kevinveenbirkenbach bcb30ff164 feat(espocrm): run original entrypoint before custom logic and hard-guard bootstrap
Run the upstream EspoCRM docker-entrypoint.sh first to preserve the original
installation and webroot initialization logic. Afterwards apply custom
seed/patch logic with a strict bootstrap.php guard to fail fast on invalid
volume mounts.

Also harden daemon healthcheck to avoid fatal bootstrap crashes.

https://chatgpt.com/share/696e4abd-0478-800f-ba18-7e149502d5c5
2026-01-19 16:15:55 +01:00
kevinveenbirkenbach e8fb081ced ci: resolve discover.sh path via pkgmgr inside infinito container
Update ci-discover-output Make target to dynamically resolve the Infinito
repository path inside the CI container using `pkgmgr path infinito` instead
of relying on a fixed working directory.

This makes app discovery robust against future repo layout changes and
ensures discover.sh is always executed from the correct location.

- Resolve repo root via pkgmgr inside container
- Execute scripts/ci/discover.sh from resolved path
- Keep ONLY_APP override and GITHUB_OUTPUT handling intact

https://chatgpt.com/share/696e3d20-276c-800f-87a7-a7052989ffe4
2026-01-19 15:45:57 +01:00
kevinveenbirkenbach f6005c9daa ci: wrap app discovery into Make target and run inside infinito container
Move the full app discovery step into a dedicated Make target (ci-discover-output)
and execute discover.sh inside the infinito CI container to ensure a consistent
runtime environment.

This removes inline discovery logic from GitHub Actions workflows and prevents
host-side dependency issues (e.g. missing Python modules or jq mismatches).

- Add ci-discover-output Make target
- Run scripts/ci/discover.sh inside infinito container
- Simplify all test-deploy workflows to use the new wrapper
- Keep ONLY_APP override and GITHUB_OUTPUT handling intact

https://chatgpt.com/share/696e3d20-276c-800f-87a7-a7052989ffe4
2026-01-19 15:17:38 +01:00
kevinveenbirkenbach 98e5a46525 test: add local cleanup target with automatic entity purge from app id
- Add test-local-cleanup target that derives entity name from APP using entity_name_utils
- Automatically purge matching /opt/docker/<entity> stack before rapid deploy
- Skip purge gracefully if entity cannot be resolved or stack directory is missing
- Add test-local-rapid-fresh target to run cleanup before rapid deploy

https://chatgpt.com/share/696e37cb-17b4-800f-b6f3-2becd2f61814
2026-01-19 14:55:15 +01:00
kevinveenbirkenbach 18ebefa18d Added correct mailu loading condition 2026-01-19 14:38:08 +01:00
kevinveenbirkenbach 0fa4454599 fix(admin): purge_entity.sh also removes docker volumes
Use `docker compose down -v` to ensure named and anonymous volumes
belonging to the stack are removed during purge.

https://chatgpt.com/share/696e2523-77d8-800f-bc3d-b81d628e1e2a
2026-01-19 13:35:40 +01:00
kevinveenbirkenbach 81a42bee8d Added correct Status Codess for CI/CD pipeline test passing 2026-01-19 12:30:51 +01:00
kevinveenbirkenbach 5906f32588 Downgraded akaunting to alpha due to missing SSO implementation 2026-01-19 12:09:51 +01:00
kevinveenbirkenbach 2b061cd352 fix(akaunting): use DB_NAME instead of DB_DATABASE for installer compatibility
https://chatgpt.com/share/696e1023-0e38-800f-a11d-813feaa57622
2026-01-19 12:05:54 +01:00
kevinveenbirkenbach f2c68d45f7 web-app-openproject: install listen gem for development environment in CI
Enable Rails development environment in CI by conditionally adding the `listen`
gem and ensuring Bundler does not exclude development groups during image build.
This prevents crashes caused by the missing evented file watcher.

The production image remains unchanged.

https://chatgpt.com/share/696e0ea2-7a70-800f-9a15-1dafb453ab37
2026-01-19 11:59:37 +01:00
kevinveenbirkenbach c92aff464b feat(ci): add min_storage validation and CI filtering with warnings
- Add sufficient_storage CLI for validating docker.services.<entity>.min_storage
- Introduce role_resource_validation utility with human-friendly size parsing
- Filter CI app discovery by available runner storage (default: 12GB)
- Emit GitHub Actions warnings for:
  - missing min_storage metadata (treated as 0GB)
  - roles exceeding available runner storage
- Add BigBlueButton min_storage metadata (50GB)
- Add unit tests for validation logic and CLI behavior
- Add humanfriendly dependency for size parsing

https://chatgpt.com/share/696e097b-1038-800f-b8fc-23e9dadfa021
2026-01-19 11:37:28 +01:00
kevinveenbirkenbach 485726904f Cleaned up revert 2026-01-19 09:13:03 +01:00
kevinveenbirkenbach 3889fd30dc Ignore errors in handler 2026-01-19 09:00:33 +01:00
kevinveenbirkenbach d6a7b4767c Revert "ports: move oauth2-proxy listener ports to reserved 16480-16499 range"
This reverts commit 58e1adf244.
2026-01-19 08:58:25 +01:00
kevinveenbirkenbach edd6a933d7 Flush handlers before leaving Keycloak scope to prevent variable overwritting 2026-01-19 02:04:37 +01:00
kevinveenbirkenbach 58e1adf244 ports: move oauth2-proxy listener ports to reserved 16480-16499 range
Avoid conflict with ManageSieve (4190) and other well-known services by
moving internal oauth2-proxy callback/listener ports from 418x to the
reserved 16480-16499 range and documenting the block.

https://chatgpt.com/share/696d8034-2b80-800f-99d1-8939bd1236eb
2026-01-19 01:51:57 +01:00
kevinveenbirkenbach 11b5fff850 web-app-mediawiki: pin MediaWiki to 1.44 and derive extension branch automatically
- Pin MediaWiki image version to 1.44 (avoid unsafe `latest` upgrades)
- Derive MEDIAWIKI_EXT_BRANCH dynamically from MEDIAWIKI_VERSION (REL<major>_<minor>)
- Keep core and extension branches in sync

https://chatgpt.com/share/696d7c38-d0c8-800f-8aa0-3219b026ba44
2026-01-19 01:34:57 +01:00
kevinveenbirkenbach 76cf25e527 Implemented required validation pattern 2026-01-19 01:26:01 +01:00
kevinveenbirkenbach 385c563b4f fix(web-app-keycloak): make LDAP group sync handler idempotent by enforcing admin login
Ensure kcadm is always authenticated before triggering LDAP group sync.
Refactor login logic into reusable KEYCLOAK_COMMAND_PERMANENT_ADMIN_LOGIN
and reuse it in login tasks and sync handler.

https://chatgpt.com/share/696d76ba-50f0-800f-8ec3-2ca9e27adcc8
2026-01-19 01:11:32 +01:00
kevinveenbirkenbach 0495dfcfb0 Optimized logging output 2026-01-19 00:56:28 +01:00
kevinveenbirkenbach 772c2f44ee Solved tab error 2026-01-19 00:53:31 +01:00
kevinveenbirkenbach 99af14ead7 web-app-snipe-it: add installation phase with migrations and seeding before LDAP setup
- introduce installation procedure (container wait, login check, migrate, seed)
- move LDAP configuration into dedicated post-install step
- make service name configurable via SNIPE_IT_SERVICE
- unify artisan execution via service variable
- adjust oauth2 origin host to snipe-it service
- remove obsolete Administration.md

https://chatgpt.com/share/696d6d57-8c3c-800f-9ac9-9578ff2e2491
2026-01-19 00:31:29 +01:00
kevinveenbirkenbach daab131b71 ci: auto-detect storage constraints and enable aggressive docker cleanup
- add storage detection utility for CI (DockerRootDir free space check)
- automatically set STORAGE_CONSTRAINED in cli.deploy.test when disk < 100 GiB
- forward STORAGE_CONSTRAINED into generated CI inventory via --vars
- introduce global STORAGE_CONSTRAINED default in group_vars
- run aggressive docker prune handler only in storage constrained mode
- mark CI inventory environment as development

https://chatgpt.com/share/696d6a11-2d90-800f-83e8-a30f6229e2e0
2026-01-19 00:17:31 +01:00
kevinveenbirkenbach 660596bb75 web-app-keycloak: fix ldap group sync handler by removing async
The ldap group sync handler relies on rc-based retries with `until`.
Using async/poll breaks this logic because async results do not expose `rc`
unless fully polled.

This change removes async execution to ensure reliable retry and error
handling during ldap group synchronization.

https://chatgpt.com/share/696d63e9-0e3c-800f-8107-adf747e4ffe5
2026-01-18 23:51:11 +01:00
kevinveenbirkenbach 72929e83fc feat(shopware,credentials): add strong OpenSearch admin password generation
- add strong_password generator with special characters
- introduce opensearch_initial_admin_password credential
- wire OpenSearch admin password via env template
- decouple OpenSearch admin password from Shopware admin user
- minor formatting cleanup in service resolver
2026-01-18 23:33:19 +01:00
kevinveenbirkenbach fab38c18a0 fix(nextcloud): remove unsafe config chown and align host file permissions
- pass application_id to sys-stk-full for proper app context
- remove recursive chown on /var/www/html/config (breaks with read-only infinito mount)
- set correct ownership and permissions for host config and include files
- normalize file modes for generated Nextcloud config snippets

https://chatgpt.com/share/696d5a7c-f248-800f-b228-b26afd8c24bf
2026-01-18 23:10:59 +01:00
kevinveenbirkenbach 160a3a3233 feat(services): resolve shared onlyoffice provider role
- add onlyoffice enabled+shared → web-svc-onlyoffice service resolution
- enable shared onlyoffice for Nextcloud
- fix missing trailing newlines

https://chatgpt.com/share/696d54a1-9dbc-800f-8507-088bad56bc48
2026-01-18 22:50:45 +01:00