Skip to content

Improve image processing reliability, caching and admin workflows - #142

Open
MiranoVerhoef wants to merge 2 commits into
fabiodalez-dev:mainfrom
MiranoVerhoef:feat/combined-fork-improvements
Open

MiranoVerhoef wants to merge 2 commits into
fabiodalez-dev:mainfrom
MiranoVerhoef:feat/combined-fork-improvements

Conversation

@MiranoVerhoef

@MiranoVerhoef MiranoVerhoef commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Uploads and administrative edits need reliable background processing and cache invalidation, while large libraries make the current navigation, polling and repeated filesystem checks costly. This consolidates the remaining tested fork improvements on top of current main, including the first performance batch. Existing upstream lifecycle tests are retained.

Changes

  • Retry interrupted image jobs with capped backoff, serialize processing of each image, retry SQLite contention safely, and propagate CLI generation failures. Cover Apache, PHP-FPM and restricted process execution.
  • Show upload/variant progress and notify visitors when enhanced image versions become available. Add original-image details/downloads, keyboard navigation and collapsible media filters.
  • Revalidate changed pages and settings, invalidate affected page caches, preserve gallery previews after album deletion, and avoid cached public content bypassing maintenance mode.
  • Group admin navigation into sections and tabs; refine login branding and category navigation. Add album storage totals, uncategorized albums, independent hero text controls, a Classic homepage per-album limit, theme-specific logos, editable About navigation/permalink and local font uploads. Avoid duplicate Analytics Pro navigation.
  • Batch settings writes in one retried transaction, back off idle polling, and cache filesystem storage totals with database-change detection and timed reconciliation.
  • Pin the PHP 8.5.12 Apache runtime and Imagick source, preserve binary/text SQLite backup values, apply numeric migrations for prereleases, and keep prerelease Docker tags from replacing stable aliases.

Compatibility

Existing settings and single-setting callers remain supported. No external cron job or changed volume mapping is required. This keeps upstream's version and release history; fork-only release metadata and upgrade-image dependencies are excluded.

Validation

  • PHPStan and production frontend build.
  • Deterministic adaptive-polling and SQLite backup round-trip regression tests.
  • Full PHPUnit suite, including fresh installation and packaged updater lifecycle.
  • Docker/Apache and PHP-FPM HTTP uploads, restart recovery, restricted process execution, SQLite contention, queue retries and CLI failure handling.
  • Chromium admin/control checks and a retained-volume upgrade from the published upstream Docker baseline.

Verified runs: integrated fork suite (280 tests, 1,291 assertions; 13 environment-dependent skips) and this contribution branch, including the published upstream Docker upgrade. Both full integration workflows passed. Upstream CI also runs on this PR. Live-site deployment is left to the maintainer.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 107 files, which is 7 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 917ae805-5b78-4462-9e79-5ab2f00ea4cd
📥 Commits

Reviewing files that changed from the base of the PR and between 30d6acc and f99a683.

⛔ Files ignored due to path filters: 1
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing: 107
  • .dockerignore
  • .github/workflows/docker-publish.yml
  • .github/workflows/image-jobs.yml
  • .github/workflows/verify-published-image.yml
  • .gitignore
  • CHANGELOG.md
  • DOCKER.md
  • Dockerfile
  • app/Config/routes.php
  • app/Controllers/Admin/AlbumsController.php
  • app/Controllers/Admin/AuthController.php
  • app/Controllers/Admin/MediaController.php
  • app/Controllers/Admin/PagesController.php
  • app/Controllers/Admin/SettingsController.php
  • app/Controllers/Admin/TypographyController.php
  • app/Controllers/Admin/UploadController.php
  • app/Controllers/Frontend/DownloadController.php
  • app/Controllers/Frontend/PageController.php
  • app/Middlewares/AuthMiddleware.php
  • app/Middlewares/CacheMiddleware.php
  • app/Services/AlbumStorageService.php
  • app/Services/AnalyticsService.php
  • app/Services/CacheWarmService.php
  • app/Services/ContainerMigrationService.php
  • app/Services/HomeImageService.php
  • app/Services/ImageGenerationRevision.php
  • app/Services/ImageJobQueue.php
  • app/Services/SettingsService.php
  • app/Services/TwigGlobalsCache.php
  • app/Services/TypographyService.php
  • app/Services/UploadService.php
  • app/Support/Database.php
  • app/Support/ImageProcessingLock.php
  • app/Support/SqliteRetry.php
  • app/Support/Updater.php
  • app/Tasks/ImagesGenerateCommand.php
  • app/Tasks/ImagesGenerateVariantsCommand.php
  • app/Tasks/ImagesWorkCommand.php
  • app/Views/admin/_layout.twig
  • app/Views/admin/_navigation.twig
  • app/Views/admin/albums/create.twig
  • app/Views/admin/albums/edit.twig
  • app/Views/admin/albums/index.twig
  • app/Views/admin/categories/index.twig
  • app/Views/admin/login.twig
  • app/Views/admin/media/_filters.twig
  • app/Views/admin/media/_grid.twig
  • app/Views/admin/media/index.twig
  • app/Views/admin/pages/about.twig
  • app/Views/admin/pages/home.twig
  • app/Views/admin/settings.twig
  • app/Views/admin/typography/index.twig
  • app/Views/frontend/_download_runtime.twig
  • app/Views/frontend/_gallery_runtime.twig
  • app/Views/frontend/_layout.twig
  • app/Views/frontend/_layout_modern.twig
  • app/Views/frontend/_pwa_runtime.twig
  • app/Views/frontend/_site_logo.twig
  • app/Views/frontend/album.twig
  • app/Views/frontend/galleries.twig
  • app/Views/frontend/home/_hero.twig
  • app/Views/frontend/home/_preloader.twig
  • app/Views/frontend/home_modern.twig
  • bin/build-release.sh
  • bin/console
  • docker/entrypoint.sh
  • package.json
  • phpstan-baseline.neon
  • plugins/cimaise-analytics-pro/plugin.php
  • plugins/custom-templates-pro/plugin.php
  • plugins/maintenance-mode/templates/maintenance.php
  • public/assets/image-job-progress.js
  • public/assets/js/admin-navigation.js
  • public/assets/js/image-version-notice.js
  • public/index.php
  • public/sw.js
  • resources/admin-app.css
  • resources/admin.js
  • resources/app.css
  • storage/translations/en.json
  • storage/translations/en_admin.json
  • storage/translations/fr_admin.json
  • storage/translations/it.json
  • storage/translations/it_admin.json
  • tests/Controllers/AlbumDeletionCacheTest.php
  • tests/Docker/EntrypointMigrationsTest.php
  • tests/Docker/ImageWorkerTest.php
  • tests/Lifecycle/UpdateTest.php
  • tests/Services/AlbumStorageCacheTest.php
  • tests/Services/AlbumStorageServiceTest.php
  • tests/Services/AnalyticsDeviceDetectionTest.php
  • tests/Services/ContainerMigrationServiceTest.php
  • tests/Services/ImageJobQueueTest.php
  • tests/Services/OriginalImageTest.php
  • tests/Services/SettingsBatchTest.php
  • tests/Services/SettingsPostWriteCacheTest.php
  • tests/Support/UpdaterPrereleaseMigrationTest.php
  • tests/Support/UpdaterSqliteBackupTest.php
  • tests/Views/AdminSidebarTranslationsTest.php
  • tests/integration/Dockerfile.fpm
  • tests/integration/admin-options.php
  • tests/integration/admin-ui.cjs
  • tests/integration/image-job-polling.cjs
  • tests/integration/image-jobs.php
  • tests/integration/prime-template-cache.php
  • tests/integration/setup-web.php
  • tests/integration/web-upload.sh

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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