Skip to content

feat(discord): add discord changelog workflows#1

Merged
zachyale merged 79 commits into
developfrom
feat/add-discord-changelog-workflows
Apr 17, 2026
Merged

feat(discord): add discord changelog workflows#1
zachyale merged 79 commits into
developfrom
feat/add-discord-changelog-workflows

Conversation

@zachyale

Copy link
Copy Markdown
Owner

Description

Linked Issue: Fixes #

Changes

balazs-szucs and others added 30 commits April 4, 2026 23:04
…ding of wasm PDFium workers (grimmory-tools#333)

* refactor(pdf-viewer): improve worker and blob handling for better loading of wasm PDFium workers

* feat(doc-viewer): add dismissible info banner for saved changes
…mory-tools#331)

Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.69.10 to 2.71.0.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](taiki-e/install-action@7627fb4...a1df912)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.71.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…mory-tools#344)

Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](lodash/lodash@4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…rimmory-tools#342)

Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](lodash/lodash@4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…immory-tools#339)

Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](lodash/lodash@4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(api): fix typing for kobo sync service

* feat(api): add more paths for grimmory/kobo API

* fix(api): disable kobo features if kobo is unavailable

* feat(api): add proxy flag to kobo setting

* feat(api): adhere to kobo proxy enabled flag

* feat(ui): add forward requests toggle

* fix(ui): load setting

* style: use assertNotNull

* fix: reduce advertised routes

this cuts down the advertised routes - in particular to reduce the
number of auth-related requests we will be taking on.  we may eventually
want to do this but I want to reduce the amount of change in this PR

* fix: undo disable of kobo features

This reverts commit 1b242fa.
… authenticated (grimmory-tools#385)

* fix(frontend): library health pings even not authenticated

* test

* authInitialized guard

* subscription
* fix(api): use CBX Extractor in the CBX processor

instead of implementing a separate cover detection algorithm in CBX
processor, this uses the CBXMetadataExtractor to fetch the cover image.
this means we now will take into account expected file names,
`ComicInfo.xml` definitions, and fall back to correctly sorted files

* style(api): drop unused imports

* fix(api): drop placeholder for cbx

this brings the CBX metadata extractor in line
with the other metadata extractors that return
null when no cover can be found

* fix: handle no cover
…outes (grimmory-tools#361)

* see pr message

* fix:
+	use PathPattern for request matching
+	include common public route to whitelist
+	logging for failed queryjwt

* forgot to remove debug code
…ycle (grimmory-tools#322)

* refactor(threads): replace manual thread management with Spring lifecycle

- Convert LibraryWatchService, LibraryFileEventProcessor,
  BookdropMonitoringService, BookdropEventHandlerService to SmartLifecycle
  for proper startup/shutdown ordering
- Replace Executors.newCachedThreadPool() in FilenamePatternExtractor
  with Spring-managed ExecutorService bean
- Delete SecurityContextVirtualThread utility class
- Add DelegatingSecurityContextRunnable task decorator to TaskExecutorConfig
  for automatic security context propagation
- Replace SecurityContextVirtualThread.runWithSecurityContext() calls in
  TaskService, BookCoverService, SendEmailV2Service, LibraryService
  with injected Executor
- Fix CbxReaderService pre-existing compile error (transferEntryTo)

* refactor(threads): improve thread management with ThreadPoolTaskExecutor and improve shutdown handling

* fix: fix broken test
…ding position across devices (grimmory-tools#358)

* fix(reader): add fetchFreshBookDetail method to ensure up-to-date reading position across devices

* test(audiobook): enhance tests to verify queryClient interactions for progress updates

* fix(audiobook): include audiobookProgress and fileProgress in progress payload
…ogress (grimmory-tools#247)

* fix: use ISBN to match the edition to sync

* fix: optimize fallback to default editions when ISBN is not present

* chore: added tests for hardcover sync

* fix: handle cases where hardcover does not have page count

* fix: initial fix to hardcover sync

* added some additional logic to cover the hardcover API

* feat: added tests for hardcover progress sync

* chore: code cleanup

* fix: check if the progress insert and update are actually successful before logging

* fix: ensure book edition id is being updated

* fix: updateUserBookRead returned true even if there was an error
…erations (grimmory-tools#397)

* fix(cache): improve cache handling by checking availability before operations

* fix(cache): improve cache handling and improve error management
* feat: add Unraid community app template

* Fix missing EOF NL

* Remove Duplicate TZ & Use PNG Icon

* Use Dockerhub for image & registry

* Revert to GHCR
…end (grimmory-tools#419)

Bumps [@hono/node-server](https://github.com/honojs/node-server) from 1.19.11 to 1.19.13.
- [Release notes](https://github.com/honojs/node-server/releases)
- [Commits](honojs/node-server@v1.19.11...v1.19.13)

---
updated-dependencies:
- dependency-name: "@hono/node-server"
  dependency-version: 1.19.13
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…r improved readability (grimmory-tools#359)

* refactor(regex): replace string manipulation with Pattern matching for improved readability

* refactor(duplicate-detection): improve filename normalization using regex patterns for clarity

* refactor(oidc): replace regex trailing slash handling with utility method

* refactor(isbn): enhance ISBN extraction by normalizing case in cleaned output
…rimmory-tools#390)

* feat(cbx-viewer): add (back) infinite and long-strip modes, fixed.

* feat(reader): improve strip width controls and improve continuation affordance

* fix(cbx-reader): clear debounce timer on layout generation changes
…df.js stuff (grimmory-tools#393)

* feat(pdf): move ebook reader to embedpdf, add bookmarks, remove old pdf.js stuff

* feat(pdf): add page number support for bookmarks and enhance mobile navigation

* feat(pdf): implement document ID tracking for search functionality

* feat(pdf): add page number column to book marks and update unique index

* feat(pdf): enhance annotation handling and improve search result scrolling

* feat(pdf): improve layout handling and enhance resize observer functionality

* feat(pdf): improve document viewer initialization and improve close button styling

* fix(pdf): remove 'form' from disabled categories

* feat(pdf): add pan mode functionality and enhance sidebar layout

* feat(pdf): improve book viewer initialization with enhanced element detection

* feat(pdf): add link handling to text selection and improve popup actions

* feat(pdf): enhance link detection and improve selection handling in event service

* feat(pdf): improve accessibility and improve resource management in PDF viewer

* feat(pdf): add resize observer for improved layout handling

* feat(pdf): error handling and improve navigation in PDF reader
…tools#422)

Bumps [hono](https://github.com/honojs/hono) from 4.12.9 to 4.12.12.
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](honojs/hono@v4.12.9...v4.12.12)

---
updated-dependencies:
- dependency-name: hono
  dependency-version: 4.12.12
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…eration with event handling (grimmory-tools#329)

* refactor(library): implement asynchronous book addition and cover generation with event handling

* fix(bookcover): handle null metadata before updating audiobook and ebook cover information

* fic(library): add library processing service and task executor
…ions (grimmory-tools#348)

* fix(metadata): add support for audible fields in metadata refresh options

* fix(metadata): add support for Lubimyczytac and Audible ratings in scoring

* fix(metadata): update default audible ratings and review counts to zero

* fix(metadata): add reRenderOnLangChange to TranslocoService provider in tests

* fix(tests): update MetadataProviderFieldSelectorComponent tests for async setup and translation
balazs-szucs and others added 14 commits April 15, 2026 21:47
…mmory-tools#512)

* fix(streaming): rewrite file streaming with NIO and HTTP caching

* fix(streaming): improve file transfer handling and enhance client disconnect detection

* fix(streaming): improve If-None-Match header evaluation for improved caching

* fix(streaming): improve chapter tracking and loading in audiobook player

* fix(streaming): remove unused imports in audiobook player component

* fix(streaming): improve chapter tracking and state management in audiobook player (again)

* fix: fix merge conflict errors and update code
* refactor(user): optimize detail fetching with custom repository implementation

* refactor(fonts): fix font loading and improve custom font handling

* refactor(user-data): update userSettings to use input() for better reactivity

* refactor(fonts): improve font loading logic and improve readi ness state management again

* refactor(user-data): simplify user fetching logic and improve batch loading

* refactor(custom-fonts): improve font loading logic with run ID for better state management
…rimmory-tools#531)

* chore(ui): scale down placeholder text sizes

* chore(ui): switch to inline-size
…gic (grimmory-tools#506)

* fix(pdf): improve PDF blob handling and improve viewer destruction logic

* fix(pdf):  PDF annotation saving logic and improve responsive design for mobile

* fix(pdf): improve PDF fetching (once again) and caching logic to improve performance and reduce network requests

* fix(pdf): hide footer and notification elements in PDF viewer

* fix(pdf): improve loading behavior and improve annotation persistence logic

* fix(pdf): improve PDF annotation persistence with retry mechanism and logging

* fix(pdf): improve PDF annotation saving with raw fetch and improved error handling

* fix(pdf): cap highlight opacity and adjust rendering for small viewports
…-tools#535)

Bumps [hono](https://github.com/honojs/hono) from 4.12.12 to 4.12.14.
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](honojs/hono@v4.12.12...v4.12.14)

---
updated-dependencies:
- dependency-name: hono
  dependency-version: 4.12.14
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…s#545)

* docs: add DEVELOPMENT.md

* docs: dedupe application project development guides

* docs: update junit version target
…y-tools#536)

Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.3.3 to 3.4.0.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](cure53/DOMPurify@3.3.3...3.4.0)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-version: 3.4.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Apr 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 300 files, which is 150 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5a5e5364-3d23-43c3-a14a-32ed0d911f88

📥 Commits

Reviewing files that changed from the base of the PR and between 36005e5 and e5488c6.

📒 Files selected for processing (300)
  • .github/ISSUE_TEMPLATE/bug_report.yml
  • .github/workflows/angular-lint-threshold.yml
  • .github/workflows/notify-discord-release-notes.yml
  • .github/workflows/release-candidate.yml
  • .github/workflows/release-main.yml
  • .github/workflows/release-preview.yml
  • .github/workflows/test-suite.yml
  • AI_POLICY.md
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • DEVELOPMENT.md
  • Dockerfile
  • README.md
  • booklore-api/CONTRIBUTING.md
  • booklore-api/DEVELOPMENT.md
  • booklore-api/README.md
  • booklore-api/build.gradle.kts
  • booklore-api/src/main/java/org/booklore/BookloreApplication.java
  • booklore-api/src/main/java/org/booklore/app/controller/AppAuthorController.java
  • booklore-api/src/main/java/org/booklore/app/controller/AppBookController.java
  • booklore-api/src/main/java/org/booklore/app/controller/AppFilterController.java
  • booklore-api/src/main/java/org/booklore/app/controller/AppLibraryController.java
  • booklore-api/src/main/java/org/booklore/app/controller/AppNotebookController.java
  • booklore-api/src/main/java/org/booklore/app/controller/AppSeriesController.java
  • booklore-api/src/main/java/org/booklore/app/controller/AppShelfController.java
  • booklore-api/src/main/java/org/booklore/app/controller/AppUserController.java
  • booklore-api/src/main/java/org/booklore/app/dto/AppBookProgressResponse.java
  • booklore-api/src/main/java/org/booklore/app/dto/AppBookSummary.java
  • booklore-api/src/main/java/org/booklore/app/dto/AppFilterOptions.java
  • booklore-api/src/main/java/org/booklore/app/dto/BookListRequest.java
  • booklore-api/src/main/java/org/booklore/app/dto/UpdateProgressRequest.java
  • booklore-api/src/main/java/org/booklore/app/mapper/AppBookMapper.java
  • booklore-api/src/main/java/org/booklore/app/service/AppBookService.java
  • booklore-api/src/main/java/org/booklore/app/specification/AppBookSpecification.java
  • booklore-api/src/main/java/org/booklore/config/HttpClientConfig.java
  • booklore-api/src/main/java/org/booklore/config/TaskExecutorConfig.java
  • booklore-api/src/main/java/org/booklore/config/openapi/OpenApiConfig.java
  • booklore-api/src/main/java/org/booklore/config/security/SecurityConfig.java
  • booklore-api/src/main/java/org/booklore/config/security/filter/AudiobookStreamingJwtFilter.java
  • booklore-api/src/main/java/org/booklore/config/security/filter/AuthenticationCheckFilter.java
  • booklore-api/src/main/java/org/booklore/config/security/filter/CoverJwtFilter.java
  • booklore-api/src/main/java/org/booklore/config/security/filter/CustomFontJwtFilter.java
  • booklore-api/src/main/java/org/booklore/config/security/filter/EpubStreamingJwtFilter.java
  • booklore-api/src/main/java/org/booklore/config/security/filter/JwtAuthenticationFilter.java
  • booklore-api/src/main/java/org/booklore/config/security/filter/KoboAuthFilter.java
  • booklore-api/src/main/java/org/booklore/config/security/filter/KoreaderAuthFilter.java
  • booklore-api/src/main/java/org/booklore/config/security/filter/QueryParameterJwtFilter.java
  • booklore-api/src/main/java/org/booklore/config/security/oidc/OidcTokenValidator.java
  • booklore-api/src/main/java/org/booklore/controller/AdditionalFileController.java
  • booklore-api/src/main/java/org/booklore/controller/AudiobookReaderController.java
  • booklore-api/src/main/java/org/booklore/controller/AuthenticationController.java
  • booklore-api/src/main/java/org/booklore/controller/AuthorController.java
  • booklore-api/src/main/java/org/booklore/controller/BookCoverController.java
  • booklore-api/src/main/java/org/booklore/controller/EpubReaderController.java
  • booklore-api/src/main/java/org/booklore/controller/KoboController.java
  • booklore-api/src/main/java/org/booklore/controller/LogoutController.java
  • booklore-api/src/main/java/org/booklore/controller/MetadataController.java
  • booklore-api/src/main/java/org/booklore/controller/OidcAuthController.java
  • booklore-api/src/main/java/org/booklore/controller/OidcGroupMappingController.java
  • booklore-api/src/main/java/org/booklore/controller/OpdsController.java
  • booklore-api/src/main/java/org/booklore/controller/ReadingSessionController.java
  • booklore-api/src/main/java/org/booklore/controller/TaskController.java
  • booklore-api/src/main/java/org/booklore/controller/UserStatsController.java
  • booklore-api/src/main/java/org/booklore/model/dto/BookLoreUser.java
  • booklore-api/src/main/java/org/booklore/model/dto/BookMark.java
  • booklore-api/src/main/java/org/booklore/model/dto/BookTimelineDto.java
  • booklore-api/src/main/java/org/booklore/model/dto/CreateBookMarkRequest.java
  • booklore-api/src/main/java/org/booklore/model/dto/FavoriteReadingDayDto.java
  • booklore-api/src/main/java/org/booklore/model/dto/ListeningHeatmapDto.java
  • booklore-api/src/main/java/org/booklore/model/dto/MonthlyListeningDurationDto.java
  • booklore-api/src/main/java/org/booklore/model/dto/PeakReadingHourDto.java
  • booklore-api/src/main/java/org/booklore/model/dto/ReadingSessionCountDto.java
  • booklore-api/src/main/java/org/booklore/model/dto/SessionScatterDto.java
  • booklore-api/src/main/java/org/booklore/model/dto/SessionTimestampDto.java
  • booklore-api/src/main/java/org/booklore/model/dto/UpdateBookMarkRequest.java
  • booklore-api/src/main/java/org/booklore/model/dto/WeeklyListeningTrendDto.java
  • booklore-api/src/main/java/org/booklore/model/dto/request/MetadataRefreshOptions.java
  • booklore-api/src/main/java/org/booklore/model/dto/response/FavoriteReadingDaysResponse.java
  • booklore-api/src/main/java/org/booklore/model/dto/settings/KoboSettings.java
  • booklore-api/src/main/java/org/booklore/model/dto/settings/MetadataMatchWeights.java
  • booklore-api/src/main/java/org/booklore/model/entity/BookMarkEntity.java
  • booklore-api/src/main/java/org/booklore/model/entity/BookMetadataEntity.java
  • booklore-api/src/main/java/org/booklore/model/entity/LibraryEntity.java
  • booklore-api/src/main/java/org/booklore/model/entity/NotebookEntryView.java
  • booklore-api/src/main/java/org/booklore/model/enums/BookFileType.java
  • booklore-api/src/main/java/org/booklore/repository/BookAdditionalFileRepository.java
  • booklore-api/src/main/java/org/booklore/repository/BookMarkRepository.java
  • booklore-api/src/main/java/org/booklore/repository/BookOpdsRepository.java
  • booklore-api/src/main/java/org/booklore/repository/BookRepository.java
  • booklore-api/src/main/java/org/booklore/repository/NotebookEntryRepository.java
  • booklore-api/src/main/java/org/booklore/repository/ReadingSessionRepository.java
  • booklore-api/src/main/java/org/booklore/repository/UserRepository.java
  • booklore-api/src/main/java/org/booklore/repository/UserRepositoryCustom.java
  • booklore-api/src/main/java/org/booklore/repository/UserRepositoryImpl.java
  • booklore-api/src/main/java/org/booklore/service/ArchiveService.java
  • booklore-api/src/main/java/org/booklore/service/AuthorMetadataService.java
  • booklore-api/src/main/java/org/booklore/service/BookRuleEvaluatorService.java
  • booklore-api/src/main/java/org/booklore/service/FileStreamingService.java
  • booklore-api/src/main/java/org/booklore/service/IconService.java
  • booklore-api/src/main/java/org/booklore/service/ReadingSessionService.java
  • booklore-api/src/main/java/org/booklore/service/appsettings/AppSettingService.java
  • booklore-api/src/main/java/org/booklore/service/appsettings/SettingPersistenceHelper.java
  • booklore-api/src/main/java/org/booklore/service/book/BookCreatorService.java
  • booklore-api/src/main/java/org/booklore/service/book/BookDownloadService.java
  • booklore-api/src/main/java/org/booklore/service/book/BookMarkService.java
  • booklore-api/src/main/java/org/booklore/service/book/DuplicateDetectionService.java
  • booklore-api/src/main/java/org/booklore/service/book/PdfAnnotationPersistenceHandler.java
  • booklore-api/src/main/java/org/booklore/service/book/PdfAnnotationService.java
  • booklore-api/src/main/java/org/booklore/service/book/PhysicalBookService.java
  • booklore-api/src/main/java/org/booklore/service/bookdrop/BookDropService.java
  • booklore-api/src/main/java/org/booklore/service/bookdrop/BookdropEventHandlerService.java
  • booklore-api/src/main/java/org/booklore/service/bookdrop/BookdropMetadataService.java
  • booklore-api/src/main/java/org/booklore/service/bookdrop/BookdropMonitoringService.java
  • booklore-api/src/main/java/org/booklore/service/bookdrop/FilenamePatternExtractor.java
  • booklore-api/src/main/java/org/booklore/service/customfont/CustomFontService.java
  • booklore-api/src/main/java/org/booklore/service/email/SendEmailV2Service.java
  • booklore-api/src/main/java/org/booklore/service/event/BookAddedEvent.java
  • booklore-api/src/main/java/org/booklore/service/event/BookAddedEventListener.java
  • booklore-api/src/main/java/org/booklore/service/file/AdditionalFileService.java
  • booklore-api/src/main/java/org/booklore/service/file/FileFingerprint.java
  • booklore-api/src/main/java/org/booklore/service/file/FileMoveService.java
  • booklore-api/src/main/java/org/booklore/service/file/PathService.java
  • booklore-api/src/main/java/org/booklore/service/fileprocessor/Azw3Processor.java
  • booklore-api/src/main/java/org/booklore/service/fileprocessor/CbxProcessor.java
  • booklore-api/src/main/java/org/booklore/service/fileprocessor/EpubProcessor.java
  • booklore-api/src/main/java/org/booklore/service/fileprocessor/Fb2Processor.java
  • booklore-api/src/main/java/org/booklore/service/fileprocessor/MobiProcessor.java
  • booklore-api/src/main/java/org/booklore/service/fileprocessor/PdfProcessor.java
  • booklore-api/src/main/java/org/booklore/service/hardcover/HardcoverSyncService.java
  • booklore-api/src/main/java/org/booklore/service/kobo/CbxConversionService.java
  • booklore-api/src/main/java/org/booklore/service/kobo/KoboEntitlementService.java
  • booklore-api/src/main/java/org/booklore/service/kobo/KoboInitializationService.java
  • booklore-api/src/main/java/org/booklore/service/kobo/KoboLibrarySyncService.java
  • booklore-api/src/main/java/org/booklore/service/kobo/KoboResourcesComponent.java
  • booklore-api/src/main/java/org/booklore/service/library/BookCoverGenerator.java
  • booklore-api/src/main/java/org/booklore/service/library/BookGroupProcessor.java
  • booklore-api/src/main/java/org/booklore/service/library/FileAsBookProcessor.java
  • booklore-api/src/main/java/org/booklore/service/library/LibraryFileHelper.java
  • booklore-api/src/main/java/org/booklore/service/library/LibraryProcessingService.java
  • booklore-api/src/main/java/org/booklore/service/library/LibraryScanListener.java
  • booklore-api/src/main/java/org/booklore/service/library/LibraryScanRequestedEvent.java
  • booklore-api/src/main/java/org/booklore/service/library/LibraryService.java
  • booklore-api/src/main/java/org/booklore/service/metadata/BookCoverProvider.java
  • booklore-api/src/main/java/org/booklore/service/metadata/BookCoverService.java
  • booklore-api/src/main/java/org/booklore/service/metadata/BookMetadataService.java
  • booklore-api/src/main/java/org/booklore/service/metadata/DuckDuckGoCoverService.java
  • booklore-api/src/main/java/org/booklore/service/metadata/MetadataMatchService.java
  • booklore-api/src/main/java/org/booklore/service/metadata/extractor/CbxMetadataExtractor.java
  • booklore-api/src/main/java/org/booklore/service/metadata/extractor/EpubMetadataExtractor.java
  • booklore-api/src/main/java/org/booklore/service/metadata/parser/AmazonBookParser.java
  • booklore-api/src/main/java/org/booklore/service/metadata/parser/AudibleParser.java
  • booklore-api/src/main/java/org/booklore/service/metadata/parser/BookParser.java
  • booklore-api/src/main/java/org/booklore/service/metadata/parser/GoodReadsParser.java
  • booklore-api/src/main/java/org/booklore/service/metadata/writer/CbxMetadataWriter.java
  • booklore-api/src/main/java/org/booklore/service/metadata/writer/EpubMetadataWriter.java
  • booklore-api/src/main/java/org/booklore/service/migration/migrations/GenerateCoverHashMigration.java
  • booklore-api/src/main/java/org/booklore/service/migration/migrations/MoveIconsToDataFolderMigration.java
  • booklore-api/src/main/java/org/booklore/service/migration/migrations/PopulateSearchTextMigration.java
  • booklore-api/src/main/java/org/booklore/service/monitoring/LibraryWatchService.java
  • booklore-api/src/main/java/org/booklore/service/oidc/OidcDiagnosticService.java
  • booklore-api/src/main/java/org/booklore/service/opds/MagicShelfBookService.java
  • booklore-api/src/main/java/org/booklore/service/opds/OpdsBookService.java
  • booklore-api/src/main/java/org/booklore/service/opds/OpdsFeedService.java
  • booklore-api/src/main/java/org/booklore/service/reader/AudioFileUtilityService.java
  • booklore-api/src/main/java/org/booklore/service/reader/AudioMetadataService.java
  • booklore-api/src/main/java/org/booklore/service/reader/AudiobookReaderService.java
  • booklore-api/src/main/java/org/booklore/service/reader/CbxReaderService.java
  • booklore-api/src/main/java/org/booklore/service/reader/ChapterCacheService.java
  • booklore-api/src/main/java/org/booklore/service/reader/EpubReaderService.java
  • booklore-api/src/main/java/org/booklore/service/reader/PdfReaderService.java
  • booklore-api/src/main/java/org/booklore/service/task/TaskService.java
  • booklore-api/src/main/java/org/booklore/service/upload/FileUploadService.java
  • booklore-api/src/main/java/org/booklore/service/user/DefaultSettingInitializer.java
  • booklore-api/src/main/java/org/booklore/service/user/DefaultUserSettingsProvider.java
  • booklore-api/src/main/java/org/booklore/service/watcher/LibraryFileEventProcessor.java
  • booklore-api/src/main/java/org/booklore/task/TaskCancellationManager.java
  • booklore-api/src/main/java/org/booklore/util/ArchiveUtils.java
  • booklore-api/src/main/java/org/booklore/util/FileUtils.java
  • booklore-api/src/main/java/org/booklore/util/MimeDetector.java
  • booklore-api/src/main/java/org/booklore/util/SecurityContextVirtualThread.java
  • booklore-api/src/main/java/org/booklore/util/epub/EpubContentReader.java
  • booklore-api/src/main/java/org/booklore/util/kobo/KoboUrlBuilder.java
  • booklore-api/src/main/java/org/booklore/util/koreader/CfiConvertor.java
  • booklore-api/src/main/java/org/booklore/util/koreader/EpubCfiService.java
  • booklore-api/src/main/java/org/booklore/util/koreader/JsoupDocumentNavigator.java
  • booklore-api/src/main/resources/application.yaml
  • booklore-api/src/main/resources/banner.txt
  • booklore-api/src/main/resources/db/migration/V136__Add_page_number_to_book_marks.sql
  • booklore-api/src/main/resources/db/migration/V137__Add_filter_column_indexes.sql
  • booklore-api/src/main/resources/db/migration/V138__Add_reading_session_booktype_index.sql
  • booklore-api/src/main/resources/static/scalar.html
  • booklore-api/src/test/java/org/booklore/app/controller/AppFilterControllerTest.java
  • booklore-api/src/test/java/org/booklore/app/service/AppBookServiceFilterOptionsTest.java
  • booklore-api/src/test/java/org/booklore/app/service/AppBookServiceProgressTest.java
  • booklore-api/src/test/java/org/booklore/config/openapi/OpenApiConfigIntegrationTest.java
  • booklore-api/src/test/java/org/booklore/config/openapi/OpenApiDocsDisabledIntegrationTest.java
  • booklore-api/src/test/java/org/booklore/controller/MetadataControllerTest.java
  • booklore-api/src/test/java/org/booklore/service/AdditionalFileServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/BookdropMetadataServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/FileStreamingServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/IconServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/KoboEntitlementServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/OpdsBookServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/Rar5IntegrationTest.java
  • booklore-api/src/test/java/org/booklore/service/book/BookDownloadServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/bookdrop/BookDropServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/bookdrop/FilenamePatternExtractorTest.java
  • booklore-api/src/test/java/org/booklore/service/email/SendEmailV2ServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/file/FileMoveServiceOrderingTest.java
  • booklore-api/src/test/java/org/booklore/service/file/FileMoveServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/hardcover/HardcoverSyncServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/kobo/KoboInitializationServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/library/FileAsBookProcessorTest.java
  • booklore-api/src/test/java/org/booklore/service/library/LibraryProcessingServiceRegressionTest.java
  • booklore-api/src/test/java/org/booklore/service/library/LibraryProcessingServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/library/LibraryServiceIconTest.java
  • booklore-api/src/test/java/org/booklore/service/metadata/BookCoverServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/metadata/DuckDuckGoCoverServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/metadata/MetadataMatchServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/metadata/extractor/CbxMetadataExtractorTest.java
  • booklore-api/src/test/java/org/booklore/service/metadata/extractor/PdfMetadataExtractorTest.java
  • booklore-api/src/test/java/org/booklore/service/metadata/parser/AmazonBookParserTest.java
  • booklore-api/src/test/java/org/booklore/service/metadata/parser/AudibleParserTest.java
  • booklore-api/src/test/java/org/booklore/service/monitoring/LibraryWatchServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/reader/AudioFileUtilityServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/reader/AudiobookReaderServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/reader/CbxReaderServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/reader/ChapterCacheServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/reader/EpubReaderServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/reader/PdfReaderServiceTest.java
  • booklore-api/src/test/java/org/booklore/service/watcher/LibraryFileEventProcessorTest.java
  • booklore-api/src/test/java/org/booklore/util/SecurityContextVirtualThreadTest.java
  • booklore-api/src/test/java/org/booklore/util/epub/EpubContentReaderTest.java
  • booklore-api/src/test/java/org/booklore/util/kobo/KoboUrlBuilderTest.java
  • booklore-api/src/test/java/org/booklore/util/koreader/CfiConverterTest.java
  • booklore-api/src/test/java/org/booklore/util/koreader/EpubCfiServiceTest.java
  • deploy/compose/docker-compose.yml
  • dev.docker-compose.yml
  • docs/plans/ci-cd-rebrand-main-nightly.md
  • docs/plans/frontend-90-coverage-plan.md
  • docs/plans/frontend-coverage-phase-2-supervised-swarm.md
  • docs/plans/frontend-coverage-phase-3-lieutenants-swarm.md
  • docs/plans/frontend-grimmory-migration.md
  • docs/plans/frontend-post-cutover-cleanup-ledger.md
  • docs/plans/frontend-stub-fill-log.md
  • docs/plans/semantic-release-migration.md
  • docs/plans/ui-api-two-service-split.md
  • frontend/CONTRIBUTING.md
  • frontend/DEVELOPMENT.md
  • frontend/README.md
  • frontend/angular.json
  • frontend/ngsw-config.json
  • frontend/package.json
  • frontend/playwright.config.ts
  • frontend/src/app/app.component.spec.ts
  • frontend/src/app/app.component.ts
  • frontend/src/app/core/custom-reuse-strategy.spec.ts
  • frontend/src/app/core/custom-reuse-strategy.ts
  • frontend/src/app/core/security/auth-interceptor.service.ts
  • frontend/src/app/core/security/oauth2-management/authentication-settings.component.html
  • frontend/src/app/core/security/oauth2-management/authentication-settings.component.ts
  • frontend/src/app/core/security/secure-src.directive.spec.ts
  • frontend/src/app/core/testing/query-testing.ts
  • frontend/src/app/features/author-browser/components/author-browser/author-browser.component.html
  • frontend/src/app/features/author-browser/components/author-browser/author-browser.component.ts
  • frontend/src/app/features/author-browser/components/author-card/author-card.component.scss
  • frontend/src/app/features/author-browser/components/author-card/author-card.component.ts
  • frontend/src/app/features/author-browser/components/author-detail/author-detail.component.html
  • frontend/src/app/features/author-browser/components/author-detail/author-detail.component.scss
  • frontend/src/app/features/author-browser/components/author-detail/author-detail.component.ts
  • frontend/src/app/features/author-browser/components/author-photo-search/author-photo-search.component.spec.ts
  • frontend/src/app/features/author-browser/components/author-photo-search/author-photo-search.component.ts
  • frontend/src/app/features/author-browser/service/author.service.ts
  • frontend/src/app/features/book/components/book-browser/book-browser-scroll.service.spec.ts
  • frontend/src/app/features/book/components/book-browser/book-browser-scroll.service.ts
  • frontend/src/app/features/book/components/book-browser/book-browser.component.html
  • frontend/src/app/features/book/components/book-browser/book-browser.component.scss
  • frontend/src/app/features/book/components/book-browser/book-browser.component.spec.ts
  • frontend/src/app/features/book/components/book-browser/book-browser.component.ts
  • frontend/src/app/features/book/components/book-browser/book-card/book-card.component.html
  • frontend/src/app/features/book/components/book-browser/book-card/book-card.component.scss
  • frontend/src/app/features/book/components/book-browser/book-card/book-card.component.spec.ts
  • frontend/src/app/features/book/components/book-browser/book-card/book-card.component.ts
  • frontend/src/app/features/book/components/book-browser/book-filter/book-filter.component.html
  • frontend/src/app/features/book/components/book-browser/book-filter/book-filter.component.ts
  • frontend/src/app/features/book/components/book-browser/book-filter/book-filter.config.spec.ts
  • frontend/src/app/features/book/components/book-browser/book-filter/book-filter.config.ts
  • frontend/src/app/features/book/components/book-browser/book-filter/book-filter.service.ts
  • frontend/src/app/features/book/components/book-browser/book-table/book-table.component.ts
  • frontend/src/app/features/book/components/book-browser/deferred-render-state.ts
  • frontend/src/app/features/book/components/book-browser/filters/sidebar-filter.spec.ts
  • frontend/src/app/features/book/components/book-browser/filters/sidebar-filter.ts
  • frontend/src/app/features/book/components/book-card-lite/book-card-lite-component.html
  • frontend/src/app/features/book/components/book-card-lite/book-card-lite-component.spec.ts
  • frontend/src/app/features/book/components/book-card-lite/book-card-lite-component.ts
  • frontend/src/app/features/book/components/book-notes/book-notes-component.ts
  • frontend/src/app/features/book/components/book-searcher/book-searcher.component.ts
  • frontend/src/app/features/book/components/series-page/series-page.component.html
  • frontend/src/app/features/book/components/series-page/series-page.component.scss
  • frontend/src/app/features/book/components/series-page/series-page.component.ts

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/add-discord-changelog-workflows

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 and usage tips.

@zachyale zachyale merged commit e5488c6 into develop Apr 17, 2026
9 checks passed
Comment on lines +46 to +103
name: Notify Discord
runs-on: ubuntu-latest

steps:
- name: Compose Message
id: compose
env:
CHANNEL: ${{ inputs.channel }}
CANDIDATE_SHA: ${{ inputs.candidate_sha }}
BASE_TAG: ${{ inputs.base_tag }}
PREDICTED_VERSION: ${{ inputs.predicted_version }}
RELEASE_NOTES: ${{ inputs.release_notes }}
COMPARE_URL: ${{ inputs.compare_url }}
IMAGE_TAG: ${{ inputs.image_tag }}
run: |
set -eu

short_sha="$(printf '%s' "$CANDIDATE_SHA" | cut -c1-7)"
display_version="${PREDICTED_VERSION:-N/A}"

if [ "$CHANNEL" = "rc" ]; then
header="🧪 **Release Candidate Ready for Regression Testing**"
body="${header}\n- Candidate SHA: \`${short_sha}\`\n- Predicted stable version: \`v${display_version}\`\n- Base stable tag: \`${BASE_TAG:-N/A}\`"

if [ -n "$IMAGE_TAG" ]; then
body="${body}\n- Docker tag: \`${IMAGE_TAG}\`"
fi

if [ -n "$COMPARE_URL" ]; then
body="${body}\n- Compare: ${COMPARE_URL}"
fi
else
header="📦 **Build Notification**"
body="${header}\n- Candidate SHA: \`${short_sha}\`\n- Predicted stable version: \`v${display_version}\`"
fi

if [ -n "$RELEASE_NOTES" ]; then
body="${body}\n\n**Conventional Commit Changelog**\n${RELEASE_NOTES}"
else
body="${body}\n\n_No release-relevant commits detected for this candidate._"
fi

{
echo 'message<<EOF'
printf '%b\n' "$body"
echo 'EOF'
} >> "$GITHUB_OUTPUT"

- name: Send Discord Webhook
env:
DISCORD_WEBHOOK: ${{ secrets.discord_webhook }}
MESSAGE: ${{ steps.compose.outputs.message }}
run: |
set -eu
payload="$(jq -n --arg content "$MESSAGE" '{content: $content}')"
curl -sS -X POST "$DISCORD_WEBHOOK" \
-H 'Content-Type: application/json' \
-d "$payload"
Comment on lines +28 to +78
name: Resolve Candidate Ref
runs-on: ubuntu-latest

outputs:
candidate_sha: ${{ steps.resolve.outputs.candidate_sha }}
rc_tag: ${{ steps.resolve.outputs.rc_tag }}
base_tag: ${{ steps.resolve.outputs.base_tag }}
compare_url: ${{ steps.resolve.outputs.compare_url }}

steps:
- name: Checkout Repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
ref: ${{ inputs.candidate_ref }}

- name: Resolve Candidate Metadata
id: resolve
run: |
set -eu

git fetch origin main --tags --force

if ! git merge-base --is-ancestor origin/main HEAD; then
echo "Selected ref does not contain origin/main and cannot be promoted cleanly to main" >&2
exit 1
fi

candidate_sha="$(git rev-parse HEAD)"
short_sha="$(git rev-parse --short HEAD)"
build_date="$(date -u +%Y%m%d)"
rc_tag="rc-${build_date}-${short_sha}"
base_tag="$(git describe --tags --abbrev=0 --match 'v*' origin/main)"
compare_url="https://github.com/${GITHUB_REPOSITORY}/compare/${base_tag}...${candidate_sha}"

echo "candidate_sha=${candidate_sha}" >> "$GITHUB_OUTPUT"
echo "rc_tag=${rc_tag}" >> "$GITHUB_OUTPUT"
echo "base_tag=${base_tag}" >> "$GITHUB_OUTPUT"
echo "compare_url=${compare_url}" >> "$GITHUB_OUTPUT"

{
echo "## Release Candidate Candidate"
echo
echo "- Candidate ref input: \`${{ inputs.candidate_ref }}\`"
echo "- Candidate SHA: \`${candidate_sha}\`"
echo "- Base stable tag: \`${base_tag}\`"
echo "- Compare: ${compare_url}"
echo "- RC image tag: \`${rc_tag}\`"
} >> "$GITHUB_STEP_SUMMARY"

test-suite:
Comment on lines +233 to +246
name: Notify Discord (RC)
if: ${{ needs.generate-notes.result == 'success' && (needs.build-and-push.result == 'success' || needs.build-and-push.result == 'skipped') }}
needs: [resolve_ref, build-and-push, generate-notes]
uses: ./.github/workflows/notify-discord-release-notes.yml
secrets:
discord_webhook: ${{ secrets.DISCORD_RELEASE_WEBHOOK }}
with:
channel: rc
candidate_sha: ${{ needs.resolve_ref.outputs.candidate_sha }}
base_tag: ${{ needs.resolve_ref.outputs.base_tag }}
predicted_version: ${{ needs.generate-notes.outputs.predicted_version }}
release_notes: ${{ needs.generate-notes.outputs.release_notes }}
compare_url: ${{ needs.resolve_ref.outputs.compare_url }}
image_tag: ${{ needs.build-and-push.outputs.image_tag }}

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e5488c6bf9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

case "publisher" -> "metadata.publisher";
case "language" -> "metadata.language";
case "publisheddate" -> "metadata.publishedDate";
case "lastreadtime" -> "lastReadTime";

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Map last-read sorting to a valid JPA property

The new lastreadtime branch maps to "lastReadTime", but BookEntity has no such property (last-read timestamps live on user progress entities). When clients request sort=lastReadTime, bookRepository.findAll(spec, pageable) will fail resolving the sort path and return a 500 instead of results. This is a regression from the previous fallback mapping and will break app book listing for that sort option.

Useful? React with 👍 / 👎.

return ResponseEntity.ok(mobileBookService.getBooks(
page, size, sort, dir, libraryId, shelfId, status, search,
fileType, minRating, maxRating, authors, language));
@ModelAttribute BookListRequest request) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Validate BookListRequest model attributes

BookListRequest now defines many @Size(max = 20) guards for multi-value filters, but this endpoint binds it via @ModelAttribute without @Valid, so Bean Validation is never triggered. A client can submit arbitrarily large repeated query params (e.g., hundreds of authors/tags), bypassing the intended limits and generating very large predicate/IN trees that can degrade query performance.

Useful? React with 👍 / 👎.

Comment on lines +101 to +103
curl -sS -X POST "$DISCORD_WEBHOOK" \
-H 'Content-Type: application/json' \
-d "$payload"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Fail workflow on Discord webhook HTTP errors

The Discord notification step posts with curl -sS but does not use --fail/--fail-with-body, so HTTP 4xx/5xx responses are still treated as success by curl. If Discord rejects the payload (for example, invalid webhook or oversized content), this job will appear green while no notification is delivered, making release signaling unreliable.

Useful? React with 👍 / 👎.

zachyale pushed a commit that referenced this pull request Apr 17, 2026
grimmory-tools#79)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(archive): infer archive type via Magic Numbers instead of filename

* fix(archive): improve archive type detection and improve logging for cover image retrieval

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
zachyale pushed a commit that referenced this pull request Apr 17, 2026
…hints to supported versions (grimmory-tools#76)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* docs(security): update security policy with reporting guidelines and hints to supported versions

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
zachyale pushed a commit that referenced this pull request Apr 17, 2026
…tead of better fields like ISBN in Goodreads/Bookdrop (grimmory-tools#85)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(metadata): fix metadata fetching relying for filename "first" instead of better fields like ISBN in Goodreads/Bookdrop

* perf(ci): speed up image builds and centralize cache writes

- Image builds:
  - pin frontend and backend Docker build stages to the build platform so multi-arch packaging can reuse architecture-independent work
  - add an Angular build cache mount and move dynamic version metadata to the end of the runtime stage so static layers stay reusable across tags
  - reduce image workflow checkout depth and keep preview builds on `linux/amd64` only to avoid unnecessary QEMU and history overhead

- Cache policy:
  - make CI packaging smoke builds consume the shared image cache without writing new BuildKit cache state
  - make normal preview builds consume shared GHA and registry caches without mutating the canonical cache
  - keep nightly and stable release builds as the workflows that refresh the shared image cache in both GHA and registry backends

- Preview override:
  - add a `refresh_shared_cache` input to the preview workflow for an explicit no-cache rebuild that repopulates the shared cache when maintainers need to bust and refresh it
  - keep the default preview behavior optimized for fast disposable builds rather than cache churn

- Validation:
  - keep workflow YAML parsing clean after the cache-policy changes
  - keep `git diff --check` clean for the touched Docker and workflow files

* docs: Add a note about how to make a release

* chore: remove unncesary comments

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: James Cox <james@imaj.es>
zachyale pushed a commit that referenced this pull request Apr 17, 2026
grimmory-tools#79)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(archive): infer archive type via Magic Numbers instead of filename

* fix(archive): improve archive type detection and improve logging for cover image retrieval

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
zachyale pushed a commit that referenced this pull request Apr 17, 2026
…hints to supported versions (grimmory-tools#76)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* docs(security): update security policy with reporting guidelines and hints to supported versions

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
zachyale pushed a commit that referenced this pull request Apr 17, 2026
…tead of better fields like ISBN in Goodreads/Bookdrop (grimmory-tools#85)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(metadata): fix metadata fetching relying for filename "first" instead of better fields like ISBN in Goodreads/Bookdrop

* perf(ci): speed up image builds and centralize cache writes

- Image builds:
  - pin frontend and backend Docker build stages to the build platform so multi-arch packaging can reuse architecture-independent work
  - add an Angular build cache mount and move dynamic version metadata to the end of the runtime stage so static layers stay reusable across tags
  - reduce image workflow checkout depth and keep preview builds on `linux/amd64` only to avoid unnecessary QEMU and history overhead

- Cache policy:
  - make CI packaging smoke builds consume the shared image cache without writing new BuildKit cache state
  - make normal preview builds consume shared GHA and registry caches without mutating the canonical cache
  - keep nightly and stable release builds as the workflows that refresh the shared image cache in both GHA and registry backends

- Preview override:
  - add a `refresh_shared_cache` input to the preview workflow for an explicit no-cache rebuild that repopulates the shared cache when maintainers need to bust and refresh it
  - keep the default preview behavior optimized for fast disposable builds rather than cache churn

- Validation:
  - keep workflow YAML parsing clean after the cache-policy changes
  - keep `git diff --check` clean for the touched Docker and workflow files

* docs: Add a note about how to make a release

* chore: remove unncesary comments

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: James Cox <james@imaj.es>
zachyale pushed a commit that referenced this pull request Apr 18, 2026
grimmory-tools#79)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(archive): infer archive type via Magic Numbers instead of filename

* fix(archive): improve archive type detection and improve logging for cover image retrieval

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
zachyale pushed a commit that referenced this pull request Apr 18, 2026
…hints to supported versions (grimmory-tools#76)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* docs(security): update security policy with reporting guidelines and hints to supported versions

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
zachyale pushed a commit that referenced this pull request Apr 18, 2026
…tead of better fields like ISBN in Goodreads/Bookdrop (grimmory-tools#85)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(metadata): fix metadata fetching relying for filename "first" instead of better fields like ISBN in Goodreads/Bookdrop

* perf(ci): speed up image builds and centralize cache writes

- Image builds:
  - pin frontend and backend Docker build stages to the build platform so multi-arch packaging can reuse architecture-independent work
  - add an Angular build cache mount and move dynamic version metadata to the end of the runtime stage so static layers stay reusable across tags
  - reduce image workflow checkout depth and keep preview builds on `linux/amd64` only to avoid unnecessary QEMU and history overhead

- Cache policy:
  - make CI packaging smoke builds consume the shared image cache without writing new BuildKit cache state
  - make normal preview builds consume shared GHA and registry caches without mutating the canonical cache
  - keep nightly and stable release builds as the workflows that refresh the shared image cache in both GHA and registry backends

- Preview override:
  - add a `refresh_shared_cache` input to the preview workflow for an explicit no-cache rebuild that repopulates the shared cache when maintainers need to bust and refresh it
  - keep the default preview behavior optimized for fast disposable builds rather than cache churn

- Validation:
  - keep workflow YAML parsing clean after the cache-policy changes
  - keep `git diff --check` clean for the touched Docker and workflow files

* docs: Add a note about how to make a release

* chore: remove unncesary comments

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: James Cox <james@imaj.es>
zachyale pushed a commit that referenced this pull request Jun 10, 2026
grimmory-tools#79)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(archive): infer archive type via Magic Numbers instead of filename

* fix(archive): improve archive type detection and improve logging for cover image retrieval

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
zachyale pushed a commit that referenced this pull request Jun 10, 2026
…hints to supported versions (grimmory-tools#76)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* docs(security): update security policy with reporting guidelines and hints to supported versions

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
zachyale pushed a commit that referenced this pull request Jun 10, 2026
…tead of better fields like ISBN in Goodreads/Bookdrop (grimmory-tools#85)

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1)

Dependabot couldn't find the original pull request head commit, ea510f4.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (grimmory-tools#2)

Dependabot couldn't find the original pull request head commit, faed6bf.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (grimmory-tools#3)

Dependabot couldn't find the original pull request head commit, f110823.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (grimmory-tools#6)

Dependabot couldn't find the original pull request head commit, 9a8d7a1.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(metadata): fix metadata fetching relying for filename "first" instead of better fields like ISBN in Goodreads/Bookdrop

* perf(ci): speed up image builds and centralize cache writes

- Image builds:
  - pin frontend and backend Docker build stages to the build platform so multi-arch packaging can reuse architecture-independent work
  - add an Angular build cache mount and move dynamic version metadata to the end of the runtime stage so static layers stay reusable across tags
  - reduce image workflow checkout depth and keep preview builds on `linux/amd64` only to avoid unnecessary QEMU and history overhead

- Cache policy:
  - make CI packaging smoke builds consume the shared image cache without writing new BuildKit cache state
  - make normal preview builds consume shared GHA and registry caches without mutating the canonical cache
  - keep nightly and stable release builds as the workflows that refresh the shared image cache in both GHA and registry backends

- Preview override:
  - add a `refresh_shared_cache` input to the preview workflow for an explicit no-cache rebuild that repopulates the shared cache when maintainers need to bust and refresh it
  - keep the default preview behavior optimized for fast disposable builds rather than cache churn

- Validation:
  - keep workflow YAML parsing clean after the cache-policy changes
  - keep `git diff --check` clean for the touched Docker and workflow files

* docs: Add a note about how to make a release

* chore: remove unncesary comments

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: James Cox <james@imaj.es>
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.