Sha256: 282cccef0bdaf87ba2806311fdb6ac7f68f7aacb3d34f7ce66edd1c0eda6c3da

Contents?: true

Size: 1.86 KB

Versions: 16

Compression:

Stored size: 1.86 KB

Contents

# typed: strict

module Kuby
  module Docker
    class Alpine < Distro
      SHELL_EXE = T.let('/bin/sh'.freeze, String)

      DEFAULT_PACKAGES = T.let([
        [:ca_certificates, nil],
        [:nodejs, '12.14.1'],
        [:yarn, '1.21.1'],
        [:c_toolchain, nil],
        [:tzdata, nil]
      ].freeze, T::Array[[Symbol, T.nilable(String)]])

      sig { returns(Layer) }
      attr_reader :phase

      sig { override.params(packages: T::Array[Distro::PackageImpl], into: Dockerfile).void }
      def install(packages, into:)
        dockerfile = into
        install_managed(packages, dockerfile)
        install_unmanaged(packages, dockerfile)
      end

      sig { override.returns(T::Array[[Symbol, T.nilable(String)]]) }
      def default_packages
        DEFAULT_PACKAGES
      end

      sig { override.returns(String) }
      def shell_exe
        SHELL_EXE
      end

      private

      sig { params(packages: T::Array[Distro::PackageImpl], dockerfile: Dockerfile).void }
      def install_managed(packages, dockerfile)
        pkgs = T.cast(packages.select(&:managed?), T::Array[Distro::ManagedPackageImpl])

        unless pkgs.empty?
          package_names = pkgs.map { |pkg| pkg.package_name_for(:alpine) }
          dockerfile.run(
            "apk add --no-cache #{package_names.join(' ')}"
          )
        end
      end

      sig { params(packages: T::Array[Distro::PackageImpl], dockerfile: Dockerfile).void }
      def install_unmanaged(packages, dockerfile)
        packages
          .reject(&:managed?)
          .each do |package|
            if package.respond_to?(:install_on_alpine)
              package.send(:install_on_alpine, dockerfile)
            else
              raise UnsupportedDistroError, "Couldn't install #{package.name} "\
                "because alpine is an unsupported distro"
            end
          end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
kuby-core-0.11.16 lib/kuby/docker/alpine.rb
kuby-core-0.11.15 lib/kuby/docker/alpine.rb
kuby-core-0.11.14 lib/kuby/docker/alpine.rb
kuby-core-0.11.13 lib/kuby/docker/alpine.rb
kuby-core-0.11.12 lib/kuby/docker/alpine.rb
kuby-core-0.11.11 lib/kuby/docker/alpine.rb
kuby-core-0.11.10 lib/kuby/docker/alpine.rb
kuby-core-0.11.9 lib/kuby/docker/alpine.rb
kuby-core-0.11.8 lib/kuby/docker/alpine.rb
kuby-core-0.11.7 lib/kuby/docker/alpine.rb
kuby-core-0.11.6 lib/kuby/docker/alpine.rb
kuby-core-0.11.4 lib/kuby/docker/alpine.rb
kuby-core-0.11.3 lib/kuby/docker/alpine.rb
kuby-core-0.11.2 lib/kuby/docker/alpine.rb
kuby-core-0.11.1 lib/kuby/docker/alpine.rb
kuby-core-0.11.0 lib/kuby/docker/alpine.rb