mirror of
https://github.com/gitlabhq/gitlabhq.git
synced 2025-08-16 17:13:01 +00:00
78 lines
2.5 KiB
Ruby
78 lines
2.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Backup
|
|
class Metadata
|
|
# Fullpath for the manifest file
|
|
# @return [Pathname] full path for the manifest file
|
|
attr_reader :manifest_filepath
|
|
|
|
# Information present in the manifest file shipped along with the backup
|
|
# @return [BackupInformation]
|
|
attr_reader :backup_information
|
|
|
|
YAML_PERMITTED_CLASSES = [
|
|
ActiveSupport::TimeWithZone, ActiveSupport::TimeZone, Symbol, Time
|
|
].freeze
|
|
|
|
# Backup Manifest content, describing what the backup contains and the environment in which it was created
|
|
# Includes versions information, timestamp, installation type and other data required to restore or to
|
|
# keep incremental backups working
|
|
BackupInformation = Struct.new(
|
|
:db_version, # ActiveRecord::Migrator.current_version.to_s,
|
|
:backup_created_at, # Time.current,
|
|
:gitlab_version, # Gitlab::VERSION,
|
|
:tar_version, # tar_version,
|
|
:installation_type, # Gitlab::INSTALLATION_TYPE,
|
|
:skipped, # ENV['SKIP']
|
|
:repositories_storages, # ENV['REPOSITORIES_STORAGES'],
|
|
:repositories_paths, # ENV['REPOSITORIES_PATHS'],
|
|
:skip_repositories_paths, # ENV['SKIP_REPOSITORIES_PATHS'],
|
|
:repositories_server_side, # Gitlab::Utils.to_boolean(ENV['REPOSITORIES_SERVER_SIDE'], default: false)
|
|
:backup_id, # ENV['BACKUP'] or calculated based on backup_created_at and Gitlab::VERSION
|
|
:full_backup_id, # full_backup_id,
|
|
keyword_init: true
|
|
)
|
|
|
|
def initialize(manifest_filepath)
|
|
@manifest_filepath = Pathname.new(manifest_filepath)
|
|
end
|
|
|
|
# Load #BackupInformation from a YAML manifest file on disk
|
|
def load!
|
|
return @backup_information unless @backup_information.nil?
|
|
|
|
manifest_data = load_from_file
|
|
|
|
@backup_information = BackupInformation.new(**manifest_data)
|
|
end
|
|
|
|
# Save content from #BackupInformation into a manifest YAML file on disk
|
|
def save!
|
|
Dir.chdir(File.dirname(manifest_filepath)) do
|
|
File.open(manifest_filepath, 'w+') do |file|
|
|
file << backup_information.to_h.to_yaml.gsub(/^---\n/, '')
|
|
end
|
|
end
|
|
end
|
|
|
|
# Update backup information with provided data
|
|
#
|
|
# @param [Hash] data arguments matching #BackupInformation keyword arguments
|
|
def update(**data)
|
|
@backup_information ||= BackupInformation.new
|
|
|
|
data.each_pair do |key, value|
|
|
backup_information[key] = value
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def load_from_file
|
|
YAML.safe_load_file(
|
|
manifest_filepath,
|
|
permitted_classes: YAML_PERMITTED_CLASSES)
|
|
end
|
|
end
|
|
end
|