Sha256: aa4ab9edeaa691b89af0e5cbfe8f8b87b8d33f39bf6481e2fd891c0df99d60bc

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

module Caco::Rbenv
  class Install < Trailblazer::Operation
    CloneRepo = Class.new(Trailblazer::Activity::Signal)

    step :install_packages!
    step :repo_exist?, Output(CloneRepo, :clone_repo) => Path(connect_to: Id(:make_src)) do
      step :clone_repo
    end

    pass Subprocess(Class.new(Caco::Executer)),
      input: ->(_ctx, **) {{
        command: "[ ! -f /opt/rbenv/libexec/rbenv-realpath.dylib ] && cd /opt/rbenv && src/configure && make -C src; true",
      }},
      Output(:failure) => Track(:success),
      id: :make_src

    step ->(ctx, **) {
        ctx[:profile_content] = Caco::Rbenv::Cell::Profile.().to_s
      },
      id: :build_profile_content

    step Subprocess(Caco::FileWriter),
      input: ->(_ctx, profile_content:, **) {{
        path: "/etc/profile.d/rbenv.sh",
        content: profile_content
      }}

    def install_packages!(ctx, **)
      packages = []
      if Caco::Facter.("os", "distro", "codename") == "stretch"
        packages = %w(git autoconf bison libssl-dev libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev)
      elsif Caco::Facter.("os", "distro", "codename") == "buster"
        packages = %w(git autoconf bison libssl-dev libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev)
      end

      packages.each do |package|
        result = Caco::Debian::PackageInstall.(package: package)
        return false if result.failure?
      end
      true
    end

    def repo_exist?(ctx, **)
      self.class.repo_exist?
    end

    def self.repo_exist?
      File.exist?("/opt/rbenv") ? true : CloneRepo
    end

    def clone_repo(ctx, **)
      result = Caco::Executer.(command: "git clone https://github.com/rbenv/rbenv.git /opt/rbenv")
      result.success?
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
caco-0.1.0 lib/caco/rbenv/install.rb