Releases: Shopify/job-iteration
Releases · Shopify/job-iteration
v1.12.0
v1.11.0
Security fixes
- 595 [CVE-2025-53623] Fixes a security issue in the
CSVEnumeratorwhere the filename was directly interpolated into a bash command.
Bug fixes
- 590 Fix a compatibilty issue between the Sorbet DSL compiler and the latest Tapioca.
- 593 Properly support required and optional positional arguments in the Sorbet DSL compiler.
- 594 Clean up the size calculation in the
CSVEnumerator.
Full Diff: v1.10.0...v1.11.0
v1.10.0
Breaking Changes
- 544 - Drop support for Ruby 2.6 and 2.7, and Rails 5.2 and 6.0. The minimum supported Ruby version is now 3.0, and the minimum supported Rails version is 6.1.
Features
- 547 Add interruption adapter for DelayedJob.
- 556 Add support for generic job classes in the Tapioca Sorbet compiler.
Full Diff: v1.9.0...v1.10.0
v1.9.0
v1.8.0
Changes
- 513 Deprecate returning enumerators from
build_enumeratorthat are not wrapped withenumerator_builder.wrap. The built-in enumerator builders now always wrap.
Features
- 340 Add
cursor.iterationinstrumentation for the query to fetch the next batch of records for the Active Record cursor. - 523 Add interruption adapter for aws-activejob-sqs.
Bug fixes
- 515 Fix size of array enumerators.
Full Diff: v1.7.0...v1.8.0
v1.7.0
Features
- 509 - Added CSV batching functionality to
EnumeratorBuilderwithbuild_csv_enumerator_on_batchesmethod andcsv_on_batchesalias. - 512 - Added support for custom timezones on
ActiveRecordEnumeratorandActiveRecordBatchEnumerator. This allows for using cursors with datetime columns whereActiveRecord.default_timezoneis set to:localand Active Record is not using the same timezone as the database.
Full Diff: v1.6.0...v1.7.0
v1.6.0
Features
- 464 - Add interruption adapter for GoodJob.
- 505 - Add interruption adapter for Solid Queue.
Full Diff: v1.5.1...v1.6.0
v1.5.1
v1.5.0
Changes
- 437 - Use minimum between per-class
job_iteration_max_job_runtimeandJobIteration.max_job_runtime, instead of enforcing only setting decreasing values.
Because it is possible to change the global or parent values after setting the value on a class, it is not possible to truly enforce the decreasing value constraint. Instead, we now use the minimum between the global value and per-class value. This is considered a non-breaking change, as it should not break any existing code, it only removes the constraint on new classes. - 443 - Use Sidekiq
:quitcallback to detect graceful shutdown. This makes job-iteration compatible with Sidekiq run in embedded mode. - 445 - Add the
around_iteratecallback, which runs around each call ofeach_iteration. This adds extensibility to build some generic handlers, such as metrics collection and logging. - 450 - Infer which interruption adapter to use from the queue adapter of the job. This deprecates setting
JobIteration.interruption_adapter = <callable>, in favor ofJobIteration.register_interruption_adapter(<queue adapter name>, <callable>).JobIteration.interruption_adapterwill be removed in a future release.
Bug fixes
- 437 - Defer reading
JobIteration.max_job_runtimeuntil runtime, instead of closing around the value at the time of job definition. - 431 - Use
#id_valueinstead ofsend(:id)
when generating position for cursor based on:idcolumn (Rails 7.1 and above, where composite
primary models are now supported). This ensures we grab the value of the id column, rather than a
potentially composite primary key value. - 456 - Use Arel to generate SQL that's type compatible for the
cursor pagination conditionals in ActiveRecord cursor. Previously, the cursor would coerce numeric ids to a string value
(e.g.:... AND id > '1')
Full Diff: v1.4.1...v1.5.0
v1.4.1
Bug fixes
- 427 - Use the Rails application logger. Changes from 338 resulted in logging to the original value of ActiveJob.logger, not the one configured by the Rails application.
Full diff: v1.4.0...v1.4.1