Add Grails 8 JobRunr guide - #534
Conversation
Assisted-by: opencode:gpt-5.6-sol
Assisted-by: opencode:gpt-5.6-sol
Assisted-by: opencode:gpt-5.6-sol
Assisted-by: opencode:gpt-5.6-sol
Assisted-by: opencode:gpt-5.6-sol
Assisted-by: opencode:gpt-5.6-sol
There was a problem hiding this comment.
Pull request overview
Adds a new production-oriented Grails 8 guide for durable background jobs using JobRunr OSS, including a complete/sample application with synchronized snippets and improved shared guide UX (accessibility, responsive layout, and branch-aware downloads).
Changes:
- Publish the new
grails-jobrunrGrails 8 guide with full chapter content and metadata wiring inconf/guides.yml. - Add “initial” and “complete” Gradle-based sample application snippets (code + tests) for the guide.
- Improve guide templates/CSS for accessibility (focus-visible styling, ARIA labels), responsive navigation/containment, and branch-aware ZIP downloads.
Reviewed changes
Copilot reviewed 41 out of 41 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
guides/resources/style/layout.html |
Adds ARIA labels to “Get the Code” controls and makes ZIP downloads branch-aware. |
guides/resources/style/guideItem.html |
Improves standalone chapter pages with viewport meta, keyboard-friendly TOC behavior, clipboard support, and branch-aware ZIP link. |
guides/resources/css/guide.css |
Adds focus-visible styling, responsive chapter layout improvements, dropdown TOC behavior, and print/code containment adjustments. |
guides/grails-jobrunr/v8/snippets/initial/gradle.properties |
Introduces Gradle properties for the “initial” sample app. |
guides/grails-jobrunr/v8/snippets/initial/build.gradle |
Adds the baseline Grails 8 build for the “initial” sample app. |
guides/grails-jobrunr/v8/snippets/complete/src/test/groovy/example/grails/JobRunrIntegrationSpec.groovy |
Adds an integration test covering JobRunr execution + dedicated datasource separation. |
guides/grails-jobrunr/v8/snippets/complete/src/test/groovy/example/grails/jobrunr/JobRunrStorageConfigSpec.groovy |
Adds a unit test validating storage provider table prefix + skip-create behavior. |
guides/grails-jobrunr/v8/snippets/complete/src/test/groovy/example/grails/jobrunr/JobRequestSpec.groovy |
Adds a unit test for JobRequest deserialization + handler mapping. |
guides/grails-jobrunr/v8/snippets/complete/src/test/groovy/example/grails/DeliveryJobEnqueuerSpec.groovy |
Adds a unit test for after-commit enqueue semantics and request scheduling. |
guides/grails-jobrunr/v8/snippets/complete/src/test/groovy/example/grails/DeliveryHttpApiSpec.groovy |
Adds HTTP integration tests for delivery creation routing and validation response behavior. |
guides/grails-jobrunr/v8/snippets/complete/src/main/groovy/example/grails/jobrunr/RetryDeliveryJobRequestHandler.groovy |
Adds a retry demo JobRequestHandler that intentionally fails to show retry behavior. |
guides/grails-jobrunr/v8/snippets/complete/src/main/groovy/example/grails/jobrunr/RetryDeliveryJobRequest.groovy |
Adds a retry demo JobRequest type mapping to its handler. |
guides/grails-jobrunr/v8/snippets/complete/src/main/groovy/example/grails/jobrunr/ProcessDeliveryJobRequest.groovy |
Adds the primary JobRequest type used for durable processing. |
guides/grails-jobrunr/v8/snippets/complete/src/main/groovy/example/grails/jobrunr/JobRunrStorageConfig.groovy |
Adds explicit StorageProvider wiring for the dedicated JobRunr datasource. |
guides/grails-jobrunr/v8/snippets/complete/src/main/groovy/example/grails/jobrunr/DeliveryJobRequestHandler.groovy |
Adds the transactional job handler that updates delivery state/progress and preserves interrupts. |
guides/grails-jobrunr/v8/snippets/complete/src/main/groovy/example/grails/DeliveryJobEnqueuer.groovy |
Adds a transactional event listener that enqueues after commit. |
guides/grails-jobrunr/v8/snippets/complete/src/main/groovy/example/grails/DeliveryCreatedEvent.groovy |
Adds a lightweight domain event carrying only the delivery ID. |
guides/grails-jobrunr/v8/snippets/complete/grails-app/services/example/grails/JobExamplesService.groovy |
Adds service methods demonstrating immediate/delayed/recurring/retry JobRunr APIs. |
guides/grails-jobrunr/v8/snippets/complete/grails-app/services/example/grails/DeliveryService.groovy |
Adds a transactional delivery creation service that publishes the event. |
guides/grails-jobrunr/v8/snippets/complete/grails-app/init/example/grails/Application.groovy |
Adds Grails app bootstrap importing storage config and scanning components. |
guides/grails-jobrunr/v8/snippets/complete/grails-app/domain/example/grails/Delivery.groovy |
Adds the Delivery domain model used in the sample/guide. |
guides/grails-jobrunr/v8/snippets/complete/grails-app/controllers/example/grails/UrlMappings.groovy |
Adds URL mappings for delivery and job example endpoints. |
guides/grails-jobrunr/v8/snippets/complete/grails-app/controllers/example/grails/JobExamplesController.groovy |
Adds JSON endpoints returning job IDs for async operations. |
guides/grails-jobrunr/v8/snippets/complete/grails-app/controllers/example/grails/DeliveryController.groovy |
Adds delivery create/show JSON endpoints with 201/404/422 behavior. |
guides/grails-jobrunr/v8/snippets/complete/grails-app/conf/spring/resources.groovy |
Registers TransactionalEventListenerFactory so after-commit listeners work. |
guides/grails-jobrunr/v8/snippets/complete/grails-app/conf/application.yml |
Adds application + JobRunr configuration including separate datasource and environment overrides. |
guides/grails-jobrunr/v8/snippets/complete/gradle.properties |
Defines Grails/JobRunr versions and Gradle performance properties for the complete sample. |
guides/grails-jobrunr/v8/snippets/complete/build.gradle |
Adds JobRunr starter + Jackson Databind dependency and a dev bootRun configuration. |
guides/grails-jobrunr/v8/guide/testing.adoc |
Documents the sample’s unit/integration testing strategy with snippet includes. |
guides/grails-jobrunr/v8/guide/storageConfiguration.adoc |
Documents dedicated JobRunr storage wiring and production schema ownership guidance. |
guides/grails-jobrunr/v8/guide/runningTheApp.adoc |
Documents running the sample, exercising endpoints, and using the dashboard. |
guides/grails-jobrunr/v8/guide/requirements.adoc |
Lists requirements (Java 21, Gradle wrapper) and constraints for learning vs production. |
guides/grails-jobrunr/v8/guide/operations.adoc |
Adds production operations guidance (storage, dashboard, idempotency, metrics, OSS/Pro boundary). |
guides/grails-jobrunr/v8/guide/jobRequests.adoc |
Explains why not to enqueue Groovy closures and how to use JobRequest/Handler properly. |
guides/grails-jobrunr/v8/guide/jobApis.adoc |
Documents immediate/delayed/recurring/retry APIs and ties them to sample endpoints. |
guides/grails-jobrunr/v8/guide/howto.adoc |
Provides “how to complete the guide” instructions and repo clone steps. |
guides/grails-jobrunr/v8/guide/helpWithGrails.adoc |
Includes shared “help with Grails” content. |
guides/grails-jobrunr/v8/guide/gettingStarted.adoc |
Introduces JobRunr in Grails 8, versions used, and what the reader will build. |
guides/grails-jobrunr/v8/guide/durableEnqueue.adoc |
Documents after-commit enqueue pattern and OSS limitations/outbox guidance. |
guides/grails-jobrunr/v8/guide/dependencySetup.adoc |
Documents adding JobRunr + Jackson and contrasts initial vs complete builds. |
conf/guides.yml |
Registers the new guide (metadata, tags, toc, sample repo/branch). |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
The concern regarding layout shifts caused by To avoid this, consider using non-layout-shifting alternatives for focus styling, such as:
Since the file |
|
@sanjana2505006 Please review this guide for me. The companion app: https://github.com/grails-guides/grails-jobrunr |
Assisted-by: opencode:gpt-5.6-sol
|
@jamesfredley Thank you for asking me to review this, I've learned a lot from your feedback on my guides, so I tried to be as careful here. Overall this looks solid. The sample design is clear (JobRequest over Groovy closures, AFTER_COMMIT enqueue, dedicated dataSource_jobrunr, OSS vs Pro called out), and the vendored snippets match grails-guides/grails-jobrunr@grails8 for the files I diffed. Branch-aware ZIP download is a nice fix too. A few notes:
Companion looks good: grails-jobrunr |
Summary
Verification
validateGuides -PvalidationMode=both: 98 guides, 0 errorsverifyAllGuides: 3,723 rendered HTML files, JobRunr crawlVERIFIEDwith 0 broken referencestest integrationTestpassed on Java 21Sample