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

Version Path
milestoner-17.6.0 lib/milestoner/tags/creator.rb
milestoner-17.5.0 lib/milestoner/tags/creator.rb
milestoner-17.4.0 lib/milestoner/tags/creator.rb
milestoner-17.3.0 lib/milestoner/tags/creator.rb
milestoner-17.2.0 lib/milestoner/tags/creator.rb
milestoner-17.1.0 lib/milestoner/tags/creator.rb
milestoner-17.0.0 lib/milestoner/tags/creator.rb