Sha256: ebabc284a5460fc5cf2ec1b7c7e0f73c8fd971f889e1d61e75baecb7899a03f9

Contents?: true

Size: 1.96 KB

Versions: 16

Compression:

Stored size: 1.96 KB

Contents

# typed: strict

module Kuby
  module Docker
    class PackagePhase < Layer
      extend T::Sig

      Operation = T.type_alias { [Symbol, Symbol, T.nilable(String)] }

      sig { returns(T::Array[Operation]) }
      attr_reader :operations

      sig { params(environment: Environment).void }
      def initialize(environment)
        super

        @operations = T.let([], T::Array[Operation])
      end

      sig { params(package_name: Symbol, version: T.nilable(String)).void }
      def add(package_name, version = nil)
        operations << [:add, package_name, version]
      end

      sig { params(package_name: Symbol).void }
      def remove(package_name)
        operations << [:remove, package_name, nil]
      end

      sig { override.params(dockerfile: Dockerfile).void }
      def apply_to(dockerfile)
        packages = distro_spec.default_packages.dup

        operations.each do |operator, package_name, version|
          if operator == :add
            packages << [package_name, version]
          else
            packages.reject! do |pkg_name_to_del, *|
              pkg_name_to_del == package_name
            end
          end
        end

        package_impls = packages.map do |package_name, version|
          get_package(package_name, version)
        end

        distro_spec.install(package_impls, into: dockerfile)
      end

      private

      sig { returns(Distro) }
      def distro_spec
        environment.docker.distro_spec
      end

      sig {
        params(
          package_name: Symbol,
          version: T.nilable(String)
        )
        .returns(Distro::PackageImpl)
      }
      def get_package(package_name, version)
        if package = Kuby.packages[package_name]
          package.with_version(version)
        else
          raise MissingPackageError, "package '#{package_name}' hasn't been registered"
        end
      end

      sig { returns(Metadata) }
      def metadata
        environment.docker.metadata
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

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