[Offline Transfer Exports] Display a list of available offline export history

What does this MR do and why?

Display a list of available offline export history at import/offline/export/history, not just the existing Empty State.

Only shows rows for which a bucket name and export prefix exists.

Follow up to make the list paginated -> #628920. I don't think that is required for beta release of the frontend right now.

References

#587078 (closed)

Screenshots or screen recordings

Before After
Screenshot 2026-09-07 at 6.34.54 PM.png Screenshot 2026-09-14 at 12.34.31 PM.png

How to set up and validate locally

  1. Enable feature flags:

    offline_transfer_imports

    offline_transfer_exports

    offline_transfer_ui

  2. In the app, toggle checkboxes for offline transfer in /admin/application_settings/general#js-import-export-settings

    1. Allow exporting GitLab groups and projects by offline transfer
    2. Allow importing GitLab groups and projects by offline transfer
  3. Navigate to /import/offline/export/history to see the empty state

  4. Create mock data in rails console with the following script

    user = User.find_by_username('root')   # your username
    org  = user.organizations.first || Organizations::Organization.first
    
    statuses = [
      { status: :finished, has_failures: false },  # Complete
      { status: :created,  has_failures: false },  # Pending
      { status: :started,  has_failures: false },  # Exporting…
      { status: :finished, has_failures: true  },  # Partially completed
      { status: :failed,   has_failures: false },  # Failed
    ]
    
    statuses.each_with_index do |attrs, i|
      export = Import::Offline::Export.new(
        user: user,
        organization: org,
        status: attrs[:status],
        has_failures: attrs[:has_failures],
        created_at: (i + 1).days.ago,
        updated_at: (i + 1).days.ago
      )
      export.save!(validate: false)
    
      Import::Offline::Configuration.create!(
        offline_export_id: export.id,
        organization_id: org.id,
        provider: :aws,
        bucket: "gitlab-exports-demo-#{i + 1}",
        source_hostname: 'https://gdk.test',
        object_storage_credentials: {}
      )
    end
    
    puts "Seeded: #{Import::Offline::Export.where(user: user).count} exports"
    
  5. Reload the export history page.

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Oiza Baiye

Merge request reports

Loading
Loading