""" Actions for Ruby dependency resolution with Bundler """ import logging from aws_lambda_builders.actions import ActionFailedError, BaseAction, Purpose from .bundler import BundlerExecutionError LOG = logging.getLogger(__name__) class RubyBundlerInstallAction(BaseAction): """ A Lambda Builder Action which runs bundle install in order to build a full Gemfile.lock """ NAME = "RubyBundle" DESCRIPTION = "Resolving dependencies using Bundler" PURPOSE = Purpose.RESOLVE_DEPENDENCIES def __init__(self, source_dir, subprocess_bundler): super(RubyBundlerInstallAction, self).__init__() self.source_dir = source_dir self.subprocess_bundler = subprocess_bundler def execute(self): try: LOG.debug("Running bundle install in %s", self.source_dir) self.subprocess_bundler.run(["install", "--without", "development", "test"], cwd=self.source_dir) except BundlerExecutionError as ex: raise ActionFailedError(str(ex)) class RubyBundlerVendorAction(BaseAction): """ A Lambda Builder Action which vendors dependencies to the vendor/bundle directory. """ NAME = "RubyBundleDeployment" DESCRIPTION = "Package dependencies for deployment." PURPOSE = Purpose.RESOLVE_DEPENDENCIES def __init__(self, source_dir, subprocess_bundler): super(RubyBundlerVendorAction, self).__init__() self.source_dir = source_dir self.subprocess_bundler = subprocess_bundler def execute(self): try: LOG.debug("Running bundle install --deployment in %s", self.source_dir) self.subprocess_bundler.run( ["install", "--deployment", "--without", "development", "test"], cwd=self.source_dir ) except BundlerExecutionError as ex: raise ActionFailedError(str(ex))