diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1eacd7b5..2e8124f5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,10 +43,11 @@ jobs: run: bundle exec rake spec - name: Upload coverage results - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4.4.0 with: name: coverage-report-${{ matrix.ruby }} - path: coverage + path: coverage/** + include-hidden-files: true coverage: runs-on: ubuntu-latest @@ -56,7 +57,7 @@ jobs: steps: - name: Download coverage report - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4.1.8 with: name: coverage-report-2.7 path: coverage diff --git a/app/assets/javascripts/bulkrax/datatables.js b/app/assets/javascripts/bulkrax/datatables.js index 9e80d348..e5d2af1a 100644 --- a/app/assets/javascripts/bulkrax/datatables.js +++ b/app/assets/javascripts/bulkrax/datatables.js @@ -67,7 +67,7 @@ Blacklight.onLoad(function() { { "data": "name" }, { "data": "status_message" }, { "data": "created_at" }, - { "data": "download" }, + { "data": "download", "orderable": false }, { "data": "actions", "orderable": false } ], initComplete: function () { diff --git a/app/models/bulkrax/importer.rb b/app/models/bulkrax/importer.rb index 4ef79f2e..3e5d0196 100644 --- a/app/models/bulkrax/importer.rb +++ b/app/models/bulkrax/importer.rb @@ -18,6 +18,9 @@ class Importer < ApplicationRecord # rubocop:disable Metrics/ClassLength delegate :create_parent_child_relationships, :valid_import?, :write_errored_entries_file, :visibility, to: :parser + after_save :set_last_imported_at_from_importer_run + after_save :set_next_import_at_from_importer_run + attr_accessor :only_updates, :file_style, :file attr_writer :current_run @@ -247,5 +250,27 @@ def path_string rescue "#{self.id}_#{self.created_at.strftime('%Y%m%d%H%M%S')}" end + + private + + # Adding this here since we can update the importer without running the importer. + # When we simply save the importer (as in just updating the importer from the options), + # it does not trigger the after_save callback in the importer_run. + def set_last_imported_at_from_importer_run + return if @skip_set_last_imported_at # Prevent infinite loop + + @skip_set_last_imported_at = true + importer_runs.last&.set_last_imported_at + @skip_set_last_imported_at = false + end + + # @see #set_last_imported_at_from_importer_run + def set_next_import_at_from_importer_run + return if @skip_set_next_import_at # Prevent infinite loop + + @skip_set_next_import_at = true + importer_runs.last&.set_next_import_at + @skip_set_next_import_at = false + end end end diff --git a/app/models/bulkrax/importer_run.rb b/app/models/bulkrax/importer_run.rb index 132cdd1d..e9e139b6 100644 --- a/app/models/bulkrax/importer_run.rb +++ b/app/models/bulkrax/importer_run.rb @@ -6,6 +6,9 @@ class ImporterRun < ApplicationRecord has_many :statuses, as: :runnable, dependent: :destroy has_many :pending_relationships, dependent: :destroy + after_save :set_last_imported_at + after_save :set_next_import_at + def parents pending_relationships.pluck(:parent_id).uniq end @@ -15,5 +18,13 @@ def user # fallback to the configured user. importer.user || Bulkrax.fallback_user_for_importer_exporter_processing end + + def set_last_imported_at + importer.update(last_imported_at: importer.last_imported_at) + end + + def set_next_import_at + importer.update(next_import_at: importer.next_import_at) + end end end diff --git a/db/migrate/20240916182737_add_last_imported_at_to_bulkrax_importers.rb b/db/migrate/20240916182737_add_last_imported_at_to_bulkrax_importers.rb new file mode 100644 index 00000000..24374800 --- /dev/null +++ b/db/migrate/20240916182737_add_last_imported_at_to_bulkrax_importers.rb @@ -0,0 +1,5 @@ +class AddLastImportedAtToBulkraxImporters < ActiveRecord::Migration[5.1] + def change + add_column :bulkrax_importers, :last_imported_at, :datetime unless column_exists?(:bulkrax_importers, :last_imported_at) + end +end diff --git a/db/migrate/20240916182823_add_next_import_at_to_bulkrax_importers.rb b/db/migrate/20240916182823_add_next_import_at_to_bulkrax_importers.rb new file mode 100644 index 00000000..8d62c2bc --- /dev/null +++ b/db/migrate/20240916182823_add_next_import_at_to_bulkrax_importers.rb @@ -0,0 +1,5 @@ +class AddNextImportAtToBulkraxImporters < ActiveRecord::Migration[5.1] + def change + add_column :bulkrax_importers, :next_import_at, :datetime unless column_exists?(:bulkrax_importers, :next_import_at) + end +end diff --git a/lib/tasks/bulkrax_tasks.rake b/lib/tasks/bulkrax_tasks.rake index e32d4b89..18b5b8e1 100644 --- a/lib/tasks/bulkrax_tasks.rake +++ b/lib/tasks/bulkrax_tasks.rake @@ -141,4 +141,25 @@ namespace :bulkrax do rescue => e puts "(#{e.message})" end + + desc "Resave importers" + task resave_importers: :environment do + if defined?(::Hyku) + Account.find_each do |account| + next if account.name == "search" + switch!(account) + puts "=============== updating #{account.name} ============" + + resave_importers + + puts "=============== finished updating #{account.name} ============" + end + else + resave_importers + end + end + + def resave_importers + Bulkrax::Importer.find_each(&:save!) + end end