Class: MultiCompress::DBDeployment::DeploymentBundle

Inherits:
Object
  • Object
show all
Defined in:
lib/multi_compress/db_deployment.rb

Defined Under Namespace

Classes: DeterministicTarWriter

Constant Summary collapse

DEFAULT_ARCHIVE_EPOCH =
315_619_200
TARGETS =
{
  "postgres" => {
    source_paths: %w[
      db_core
      postgres_extension
      ext/multi_compress/vendor/zstd
      docs/database-envelope-v1.md
      docs/database-envelope-v2.md
      docs/rfcs/0002-mcdb2-dictionaries.md
      LICENSE.txt
      THIRD_PARTY_NOTICES.md
    ],
    template_path: "db_deployment/postgres"
  },
  "mysql" => {
    source_paths: %w[
      db_core
      mysql_udf
      ext/multi_compress/vendor/zstd
      docs/database-envelope-v1.md
      docs/database-envelope-v2.md
      docs/rfcs/0002-mcdb2-dictionaries.md
      LICENSE.txt
      THIRD_PARTY_NOTICES.md
    ],
    template_path: "db_deployment/mysql"
  }
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(target, output, force:) ⇒ DeploymentBundle

Returns a new instance of DeploymentBundle.



732
733
734
735
736
737
# File 'lib/multi_compress/db_deployment.rb', line 732

def initialize(target, output, force:)
  @target = target
  @output = File.expand_path(output)
  @force = force
  @root_name = "multi_compress-#{target}-#{MultiCompress::VERSION}"
end

Instance Method Details

#write!Object

Raises:



739
740
741
742
743
744
745
746
747
748
749
750
# File 'lib/multi_compress/db_deployment.rb', line 739

def write!
  raise Error, "deployment sources are unavailable from #{ROOT}" unless File.directory?(ROOT)
  raise Error, "#{@output} already exists (use --force to overwrite)" if File.exist?(@output) && !@force

  Dir.mktmpdir("multi-compress-db-package") do |temporary_directory|
    bundle_root = File.join(temporary_directory, @root_name)
    FileUtils.mkdir_p(bundle_root)
    stage_payload!(bundle_root)
    write_metadata!(bundle_root)
    write_tarball!(temporary_directory)
  end
end