Sha256: b51cdb374552e164964a923d4dcfb4212acc3860a34fad418880a89ee3de3922

Contents?: true

Size: 1.01 KB

Versions: 4

Compression:

Stored size: 1.01 KB

Contents

require "open3"

module Utilities
  module Docker
    Error = Class.new(StandardError)

    class << self
      def run_and_rm_container(*args)
        build_image_if_needed
        system(
          "docker", "run",
          "-t", "--rm",
          "--volume", "#{Shellwords.escape(root_dir)}:/usr/src/app",
          image_tag,
          *args
        ) || abort
      end

      private

      def root_dir
        File.expand_path("..", __dir__)
      end

      def build_image_if_needed
        unless image_exists?(image_tag)
          system("docker", "build", root_dir, "-t", image_tag) || abort
        end
      end

      def image_tag
        gemfile_lock_path = File.expand_path("./Gemfile.lock", root_dir)
        image_sha = Digest::SHA256.hexdigest(File.read(gemfile_lock_path))
        "shopify-cli-#{image_sha}"
      end

      def image_exists?(tag)
        _, stat = Open3.capture2(
          "docker", "inspect",
          "--type=image",
          tag
        )
        stat.success?
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
shopify-cli-2.6.3 utilities/docker.rb
shopify-cli-2.6.2 utilities/docker.rb
shopify-cli-2.6.1 utilities/docker.rb
shopify-cli-2.6.0 utilities/docker.rb