Skip to content

WIP: Release/3.0.0#251

Draft
tuj wants to merge 552 commits into
developfrom
release/3.0.0
Draft

WIP: Release/3.0.0#251
tuj wants to merge 552 commits into
developfrom
release/3.0.0

Conversation

@tuj
Copy link
Copy Markdown
Contributor

@tuj tuj commented Jun 30, 2025

Link to issue

#249

Description

Release 3.0.0

@tuj tuj added this to the 3.0.0 milestone Jun 30, 2025
@tuj tuj changed the title Release/3.0.0 WIP: Release/3.0.0 Jun 30, 2025
@tuj tuj mentioned this pull request Jun 30, 2025
36 tasks
@tuj tuj added the release label Sep 3, 2025
@tuj tuj self-assigned this Sep 5, 2025
tuj and others added 30 commits May 4, 2026 14:01
Applied changes from release/2.7.0 (admin and templates) to release/3.0.0
The node compose service ran as root, leaving root-owned files in
the bind-mounted node_modules/. The runner-side Cleanup before
packaging step then could not rm them and the release was never
created.

- Add overridable user to the node service (defaults to root so
  local-dev behavior is unchanged).
- Set COMPOSE_NODE_USER to the runner UID:GID and pass HOME=/tmp
  so npm can write its cache when not running as root.
- Align .dockerignore with the workflow's cleanup list
  (phpstan-baseline.neon, /playwright/).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-permissions

Fix Create Github Release workflow node_modules permissions
The 3.0.0-rc1 image rebuild changed WORKDIR from /app to /var/www/html.
That silently broke every existing 2.x deployment: the deploy compose
mounts ./jwt:/app/config/jwt, so the Lexik JWT keys land in a path the
app no longer reads, and login fails on the first OIDC token exchange
with a JWTEncodeFailureException at runtime — no startup error.

Restoring /app aligns the published image with 2.x, with the local
docker-compose.yml / docker-compose.override.yml (already on /app), and
with the os2display-docker-server-v3 deploy compose. Existing JWT and
media volume mounts work without compose changes on upgrade.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fixed Calendar and Colibo feed configuration urls
The committed .env defaults APP_ENV to dev for local development, but
the API image only ships prod dependencies (composer install --no-dev).
Tooling that reads .env directly without our docker-entrypoint.sh would
bootstrap a dev environment that can't resolve its services.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fix: rewrite APP_ENV to prod in baked-in .env
- Replace deprecated LABEL maintainer with org.opencontainers.image.authors.
- Add org.opencontainers.image.{vendor,documentation,base.name} in both
  Dockerfiles' final stages — these aren't emitted by docker/metadata-action.
- Drop redundant LABEL maintainer from builder stages (only the final FROM's
  labels reach the published image).
- Override the Nginx image's title/description in build-images.yml so it
  stops inheriting the source-repo defaults; metadata-action's --label
  flags win over Dockerfile LABELs, hence the workflow rather than the
  Dockerfile.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…age/support

The repository ships under the Mozilla Public License 2.0 (see `LICENSE`)
but `composer.json` still declared `proprietary` — wrong for a published
open-source project and contradicts the bundled license file. Switching to
the SPDX identifier `MPL-2.0` aligns the package metadata with reality.

Also fills in two adjacent fields that downstream tooling (Composer,
Packagist, GitHub dependency graph, SBOM generators) expects on a public
project:
  - `homepage` — points at the canonical repo
  - `support.issues` / `support.source` — the GitHub issue tracker and
    source URL, used by `composer support` and surfaced in dependency
    listings

`authors` and `keywords` are intentionally left out — both want input on
who/what to list and were not the immediate gap.

Verified with `composer validate --strict` (green) and `composer normalize
--dry-run` (already normalised).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Redis 8 GA'd 2025-05 (back to OSI-approved AGPLv3 licensing) and ships
RedisJSON / RediSearch / RedisTimeSeries / RedisBloom in-tree.

No Symfony / phpredis changes needed:
- symfony/cache 6.4 RedisTrait only checks `redis_version >= 2.8` (SCAN)
  and `>= 4.0` (UNLINK); Redis 8 satisfies both.
- itkdev/php8.4-fpm ships phpredis 6.3, which fully supports Redis 8.
- DSN format and `--maxmemory{,-policy}` flags are unchanged.

Verified locally: stack boots on `redis:8.6.3`, all six redis-backed
cache pools clear cleanly via `cache:pool:clear`, full PHPUnit suite
(143 tests, 607 assertions) passes.

Production deployments are unaffected — operators bring their own Redis;
this only touches `docker-compose.override.yml`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
chore: bump local dev redis image to redis:8
framework.session.handler_id now reads from SESSION_HANDLER_DSN, which
defaults to the existing REDIS_CACHE_DSN so dev (and prod that has Redis
available) gets Redis-backed sessions out of the box. Operators can set
SESSION_HANDLER_DSN= (empty) to fall back to PHP's native file handler.

Why move:
- Removes the per-session flock that serialises parallel session-touching
  requests on the file handler (visible as inconsistent tail latency
  when the React admin fires concurrent fetches).
- Sessions survive container restarts without mounting /tmp as a volume.
- Multi-pod deployments share session state without sticky routing —
  the OIDC handshake works regardless of which pod handles the callback.

The new RedisSessionHandler is auto-built by Symfony from the DSN; it
prefixes keys with `sf_s` so they don't collide with cache keys on the
same Redis DB. when@test forces handler_id back to null, since
MockFileSessionStorage doesn't go through a handler and we don't want
the test container to compile a Redis handler against an env that may
not point at a reachable Redis.

Verified locally: HTTP request to /v2/authentication/oidc/urls writes a
`sf_s<id>` key into Redis; full PHPUnit suite (143 tests, 607
assertions) passes with redis DBSIZE=0 after, confirming the test
override works.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The previous rebase commit silently committed CHANGELOG.md with
`<<<<<<<` / `=======` / `>>>>>>>` markers still in place — the Edit
that resolved them lost a race against the git rebase tooling
touching the same file, but `git add CHANGELOG.md` accepted the
broken bytes and `git rebase --continue` succeeded. CI's markdownlint
job (MD032) caught it. Both bullets are kept.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat: move Symfony sessions to Redis, env-configurable
- docker-compose.yml: pin local default to upstream `mariadb:11.4` (LTS
  until 2029-05); override via `MARIADB_IMAGE`. Drops the unused
  `ENCRYPT=1` toggle that only existed on the itkdev/mariadb wrapper.
- .env / .env.test: parametrize Doctrine `serverVersion` via
  `MARIADB_VERSION` (default `11.4.4-MariaDB`). Also fixes the prior
  inconsistency where .env claimed `10.11.5-MariaDB` and .env.test
  claimed the EOL `mariadb-10.5.13`.
- phpunit.yaml + doctrine.yaml: matrix-test on `mariadb:10.11` (LTS until
  2028-02) and `mariadb:11.4`. `fail-fast: false` so a regression on one
  major doesn't mask the other. Both jobs are renamed to
  `... (matrix.mariadb.image)` for clarity in the Checks tab.
- README: document `MARIADB_IMAGE` / `MARIADB_VERSION` overrides.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The previous arrangement put MARIADB_VERSION directly above DATABASE_URL
with no intervening comment, which fails scripts/check-env-coverage.sh's
"every variable in .env has a preceding description comment" rule.
Move MARIADB_VERSION (with its own comment block) above the DATABASE_URL
comment block so both variables retain a comment immediately above them.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat: support MariaDB 10 and 11; default local to 11 LTS, matrix CI
…reen-text

feat: configurable login screen text
fix: align composer.json license with LICENSE (MPL-2.0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release version 3 Issues related to the release of version 3

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants