lib/envirobly/deployment.rb



class Envirobly::Deployment
  def initialize(environment, options)
    commit = Envirobly::Git::Commit.new options.commit

    unless commit.exists?
      $stderr.puts "Commit #{options.commit} doesn't exist in this repository. Aborting."
      exit 1
    end

    config = Envirobly::Config.new(commit)
    config.compile(environment)

    if config.errors.any?
      $stderr.puts "Errors found while parsing #{Envirobly::Config::PATH}:"
      $stderr.puts
      config.errors.each do |error|
        $stderr.puts "  - #{error}"
      end
      $stderr.puts
      $stderr.puts "Please fix these, commit the changes and try again."
      exit 1
    end

    params = config.to_deployment_params

    puts "Deployment config:"
    puts params.to_yaml

    exit if options.dry_run?

    api = Envirobly::Api.new
    response = api.create_deployment params
    deployment_url = response.object.fetch("url")
    response = api.get_deployment_with_delay_and_retry deployment_url
    credentials = Envirobly::Aws::Credentials.new response.object.fetch("credentials")
    bucket = response.object.fetch("bucket")

    puts "Uploading build context, please wait..."
    unless commit.archive_and_upload(bucket:, credentials:)
      $stderr.puts "Error exporting build context. Aborting."
      exit 1
    end

    puts "Build context uploaded."
    api.put_as_json deployment_url

    # TODO: Output URL to watch the deployment progress
  end
end