Sha256: c4d410e4702d01ebbbbbd6558ee9392c7ed529f0f95b49f108e23e7d420ca2dc

Contents?: true

Size: 1.54 KB

Versions: 3

Compression:

Stored size: 1.54 KB

Contents

# frozen_string_literal: true

require_relative 'config'
require 'thor'
require 'json'
require_relative 'commands/preview'
require_relative 'commands/up'
require_relative 'commands/destroy'
require_relative 'pulumi'
require_relative '../application'

module Bauble
  module Cli
    # Bauble CLI
    class BaubleCli < Thor
      include Commands::Preview
      include Commands::Up
      include Commands::Destroy

      attr_accessor :app, :config

      def initialize(*args)
        super
        require_entrypoint
        @app = ObjectSpace.each_object(Bauble::Application).first
        raise 'No App instance found' unless @app

        build_config
      end

      def self.exit_on_failure?
        true
      end

      private

      def pulumi
        @pulumi ||= Bauble::Cli::Pulumi.new(config: config)
      end

      def build_config
        @config = Config.configure do |c|
          c.app_name = @app.name
          c.skip_gem_layer = @app.skip_gem_layer
        end
        @app.config = @config
      end

      def write_stack_template(stack)
        create_directory
        # TODO: this can probably be put into something smarter, maube a file writing class?
        File.write("#{config.pulumi_home}/Pulumi.#{stack.name}.yaml", stack.template)
      end

      def create_directory
        FileUtils.mkdir_p(config.pulumi_home)
      end

      def bauble_json
        @bauble_json ||= JSON.parse(File.read('bauble.json'))
      end

      def require_entrypoint
        Kernel.require "#{Dir.pwd}/#{bauble_json['entrypoint']}"
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bauble_core-0.4.0 lib/bauble/cli/cli.rb
bauble_core-0.3.0 lib/bauble/cli/cli.rb
bauble_core-0.2.0 lib/bauble/cli/cli.rb