Sha256: 1ba2e44f56a9b0bde4b9ec9228137bc472d8f7bfa9d530eba3a67e3322de7408
Contents?: true
Size: 1.51 KB
Versions: 7
Compression:
Stored size: 1.51 KB
Contents
# frozen_string_literal: true require "gitt" require "refinements/string_io" require "versionaire" module Milestoner module Tags # Handles the creation of project repository tags. class Creator include Import[:input, :git, :logger] using Refinements::StringIO using Versionaire::Cast def initialize( collector: Commits::Collector.new, builder: Builders::Stream.new(kernel: StringIO.new), ** ) @collector = collector @builder = builder super(**) end def call override = nil version = compute_version override return false if local? version fail Error, "Unable to tag without commits." if collector.call.value_or([]).empty? create version end private attr_reader :collector, :builder def compute_version value Version value || input.project_version rescue Versionaire::Error => error raise Error, error end def local? version if git.tag_local? version logger.warn { "Local tag exists: #{version}. Skipped." } true else false end end def create version build(version).fmap { |body| git.tag_create version, body } .or { |error| fail Error, error } .bind { true } end def build version builder.call.fmap do |body| "Version #{version}\n\n#{body.reread}\n\n" end end end end end
Version data entries
7 entries across 7 versions & 1 rubygems