Modify order of file in ZIP

I want to add my repository’s file to a zip file (when downloaded or released) in a specific order.

To get a MWE I was trying a repo with the XML files of an XLSX file. The [Concent_Types].xml has to be added first to the .ZIP, so that when I rename to .XLSX, it will open correctly.

This is on an instance that I run.

Any ideas on how to do this? From reading I thought a file hook might be best, but I’m not sure.

Like with everything, I tried ChatGPT, it suggesed to create a file export_hook.rb in a folder that doesn’t exist.

I tried adding it in the file hooks folder, but that didn’t work.

This the Rub file from ChatGTP (GPT-4):

#!/usr/bin/env ruby
#
# GitLab export hook to modify the ZIP archive to include the [Content_Types].xml file
# as the first file in the archive.
#

require 'zip'

def rearrange_zip_entry_order(zip_file)
  # get the names of all files in the ZIP archive
  filenames = []
  Zip::InputStream.open(zip_file.path) do |io|
    while (entry = io.get_next_entry)
      filenames << entry.name
    end
  end

  # rearrange the order of the files in the ZIP archive
  Zip::File.open(zip_file.path, Zip::File::CREATE) do |zip|
    filenames.each do |filename|
      entry = zip.find_entry(filename)
      zip.remove(filename)
      zip.add(filename, entry.get_input_stream) unless entry.nil?
    end
  end

  # move the [Content_Types].xml file to the front of the ZIP archive
  Zip::File.open(zip_file.path, Zip::File::CREATE) do |zip|
    entry = zip.find_entry('[Content_Types].xml')
    zip.remove('[Content_Types].xml')
    zip.add('[Content_Types].xml', entry.get_input_stream) unless entry.nil?
  end
end

# modify the ZIP archive before it is downloaded
before_export do |project, bundle_path, params|
  # create a temporary file to hold the modified ZIP archive
  tmp_zip_file = Tempfile.new('repo.zip')

  # copy the original ZIP archive to the temporary file
  FileUtils.cp(bundle_path, tmp_zip_file.path)

  # rearrange the order of the files in the ZIP archive
  rearrange_zip_entry_order(tmp_zip_file)

  # overwrite the original ZIP archive with the modified ZIP archive
  FileUtils.cp(tmp_zip_file.path, bundle_path)
end