lib/milestoner/builders/manifest.rb
# frozen_string_literal: true require "dry/monads" module Milestoner module Builders # Builds JSON manifest. class Manifest include Dry::Monads[:result] include Milestoner::Dependencies[:settings, :git, :logger] def initialize(writer: Tags::Manifest.new, path_resolver: PathResolver, **) super(**) @writer = writer @path_resolver = path_resolver end def call return Success writer.build_path unless settings.build_manifest git.tags.either -> tags { write tags }, -> message { failure message } end private attr_reader :writer, :path_resolver def write tags path_resolver.call writer.build_path, logger: do versions = tags.map(&:version) writer.write latest: versions.last, versions: end end def failure message logger.error { message } Failure message end end end end