changelogko 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e7b9995971aca753b65bffc71a01aadee292c46aed27ad716ba8ef492c8f0a1b
4
+ data.tar.gz: a0e464be952384d50313a3e90cf5da8191bd81eb043cb2bfa39270e9158c9000
5
+ SHA512:
6
+ metadata.gz: 5ee4277bc2f2dc2c0f719ebff07c9b0109b070999773aadbbed905eac715bcf5c7b799fab1a1efbcd6cb7abcc7d0532d037b7608d8e7e02afb0acc649a57317d
7
+ data.tar.gz: 27273766de8752067b222baa6cbbee6c26a26310ad5f7f5f0b4f0888a4b9772f420fba279f5f344474f924c0cf3cbc122d2a0f79c0c692d2e7de321ad3c8fbf6
data/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # Changelogs
2
+ ## Added (3 count/s)
3
+ + No archive option for releasing - tieeeeen1994 (tieeeeen1994@gmail.com)
4
+ + To automatically append command options through .changelogko file - tieeeeen1994 (tieeeeen1994@gmail.com)
5
+ + changelogko and releaseko aliases cko and rko - tieeeeen1994 (tieeeeen1994@gmail.com)
6
+ ## Fixed (1 count/s)
7
+ + Help format of changelogko - tieeeeen1994 (tieeeeen1994@gmail.com)
8
+
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Tien
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # Changelogko
2
+
3
+ This gem provides the ability to easily manage your change logs. Commit changes alongside change log files to easily track them without worry, then just release them whenever to automatically create a new CHANGELOG.md file.
4
+
5
+ As an additional feature, *Releaseko is integrated into the gem as it feels like Releaseko is very coupled with Changelogko.* It is also just a simple feature that just automatically updates `metadata/app-version`, releases change logs through Changelogko, then push.
6
+
7
+ ## Installation
8
+
9
+ Use `bundler` to install the gem.
10
+ ```ruby
11
+ gem 'changelogko', git: 'https://github.com/tieeeeen1994/changelogko'
12
+ ```
13
+
14
+ Then:
15
+ ```
16
+ $ bundle install
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ### Changelogko
22
+
23
+ Refer to:
24
+ ```
25
+ $ bundle exec changelogko -h
26
+ ```
27
+ or
28
+ ```
29
+ $ bundle exec cko -h
30
+ ```
31
+
32
+ Adding a `.changelogko` file in the root of the working directory will allow to automatically append the contents of the file as options to every `changelogko` (or `cko`) command. For example, assume the `.changelogko` file contains:
33
+ ```
34
+ --no-archive
35
+ ```
36
+ For every `changelogko` command, it will automatically append `--no-archive`, as such: `bundle exec changelogko -r --no-archive`.
37
+
38
+ Changelogko will create the needed files if they don't exist yet.
39
+
40
+ ### Releaseko
41
+
42
+ Refer to:
43
+ ```
44
+ $ bundle exec releaseko -h
45
+ ```
46
+ or
47
+ ```
48
+ $ bundle exec rko -h
49
+ ```
50
+
51
+ Releaseko looks for `metadata/app-version` for the project's versioning. It will automatically increment this file based on mode.
52
+
53
+ ## Credits
54
+
55
+ The original author of this gem is [@neume](https://github.com/neume), then further enhanced by [@tieeeeen1994](https://github.com/tieeeeen1994).
data/bin/changelogko ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'changelogko'
data/bin/cko ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'changelogko'
data/bin/releaseko ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'releaseko'
data/bin/rko ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'releaseko'
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'changelogko'
5
+ s.version = File.read('metadata/app-version').strip
6
+ s.summary = 'Manage changelogs easily!'
7
+ s.description = 'This is a gem that can manage changelogs very easily.'
8
+ s.authors = ['Joseph Nelson Valeros', 'Jenek Michael Sarte']
9
+ s.email = ['valerosjoseph@gmail.com', 'tieeeeen1994@gmail.com']
10
+ s.files = Dir.chdir(__dir__) do
11
+ `git ls-files -z`.split("\x0").reject do |f|
12
+ (File.expand_path(f) == __FILE__) ||
13
+ f.start_with?(*%w[.git .github Gemfile .vscode]) ||
14
+ f.end_with?(*%w[.gem .yml .gitignore])
15
+ end
16
+ end
17
+ s.homepage = 'https://github.com/tieeeeen1994/changelogko'
18
+ s.license = 'MIT'
19
+ s.executables = %w[changelogko releaseko cko rko]
20
+ s.required_ruby_version = '>= 3.2.2'
21
+ s.metadata['rubygems_mfa_required'] = 'true'
22
+ end
@@ -0,0 +1,6 @@
1
+ # Changelogs
2
+ ## Added (1 count/s)
3
+ + Display help even when no argument is specified - tieeeeen1994 (tieeeeen1994@gmail.com)
4
+ ## Enhanced (1 count/s)
5
+ + Comply to Rubocop - tieeeeen1994 (tieeeeen1994@gmail.com)
6
+
@@ -0,0 +1,6 @@
1
+ # Changelogs
2
+ ## Added (1 count/s)
3
+ + Integrate bin/release in this gem called Releaseko - tieeeeen1994 (tieeeeen1994@gmail.com)
4
+ ## Enhanced (1 count/s)
5
+ + Upgrade bin/changelog into a gem called Changelogko - tieeeeen1994 (tieeeeen1994@gmail.com)
6
+
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Class responsible for creating the file.
4
+ class Changelog::Creator
5
+ def self.call(options)
6
+ changelog = Changelog.new(options, :options)
7
+ changelog.validate!
8
+ changelog.save
9
+ end
10
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Class responsible for parsing options and detecting arguments passed for Changelogko.
4
+ class Changelog::OptionParser
5
+ Options = Struct.new(:release, :title, :type, :no_archive)
6
+
7
+ def self.parse(argv)
8
+ options = Options.new
9
+
10
+ parser = option_parser(options)
11
+
12
+ argv = ['-h'] if argv.empty?
13
+ parser.parse!(argv)
14
+
15
+ options.title = argv.join(' ').strip.squeeze(' ').tr("\r\n", '') unless options.release
16
+ options
17
+ end
18
+
19
+ def self.option_parser(options)
20
+ ::OptionParser.new do |opts|
21
+ opts.banner = "Usage: (changelogko|cko) [options]\nOptions:\n"
22
+
23
+ release_option(opts, options)
24
+ type_option(opts, options)
25
+ types_option(opts)
26
+ no_archive_option(opts, options)
27
+ help_option(opts)
28
+ end
29
+ end
30
+
31
+ def self.release_option(opts, options)
32
+ opts.on('-r', '--release', 'Create release from unreleased directory.') do
33
+ options.release = true
34
+ end
35
+ end
36
+
37
+ def self.type_option(opts, options)
38
+ type_desc = 'Type of changelog. Use -T, --types to display all available types.'
39
+ opts.on('-t', '--type [title]', String, type_desc) do |value|
40
+ options.type = value
41
+ end
42
+ end
43
+
44
+ def self.types_option(opts)
45
+ opts.on('-T', '--types', 'List available types.') do
46
+ TYPES.each do |type|
47
+ $stdout.puts "#{type.name}#{type.description}"
48
+ end
49
+ raise ProcessEnded
50
+ end
51
+ end
52
+
53
+ def self.no_archive_option(opts, options)
54
+ opts.on('-A', '--no-archive', 'Do not archive the release after creating it.') do
55
+ options.no_archive = true
56
+ end
57
+ end
58
+
59
+ def self.help_option(opts)
60
+ opts.on('-h', '--help', 'Show help.') do
61
+ $stdout.puts opts
62
+ $stdout.puts 'Adding a .changelogko file in the root of the working directory will allow to automatically ' \
63
+ 'append the contents of the file as options to every `changelogko` (or `cko`) command. ' \
64
+ 'For example, assume the .changelogko file contains "--no-archive". ' \
65
+ 'For every changelogko command, it will automatically append --no-archive, ' \
66
+ 'as such: bundle exec changelogko -r --no-archive.'
67
+ raise ProcessEnded
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Class responsible for writing the change logs and collating them.
4
+ class Changelog::Writer
5
+ def self.call(collection, no_archive = false)
6
+ generate_change_log(collection)
7
+ archive_old_change_log unless no_archive
8
+ publish_change_log
9
+ clear_unreleased_logs
10
+ end
11
+
12
+ def self.generate_change_log(collection)
13
+ File.open(TEMP_CHANGE_LOG_NAME, 'w') do |file|
14
+ write_title(file)
15
+ TYPES.each do |type|
16
+ write_collection(type, collection, file)
17
+ end
18
+ file.puts ''
19
+ end
20
+ puts "Creating temporary file #{::TEMP_CHANGE_LOG_NAME}"
21
+ end
22
+
23
+ def self.archive_old_change_log
24
+ system('mkdir -p changelogs')
25
+ date_str = Time.now.strftime('%b-%d-%Y-%H-%M-%S')
26
+ old_change_log_location = "changelogs/archive-#{date_str}.md"
27
+ system("mv #{::CHANGE_LOG_NAME} #{old_change_log_location}")
28
+ puts 'Archive old Changelog'
29
+ end
30
+
31
+ def self.publish_change_log
32
+ system("mv #{::TEMP_CHANGE_LOG_NAME} #{::CHANGE_LOG_NAME}")
33
+ puts "Renamed #{::TEMP_CHANGE_LOG_NAME} to #{::CHANGE_LOG_NAME}"
34
+ end
35
+
36
+ def self.clear_unreleased_logs
37
+ puts 'Clearing changelogs/unreleased'
38
+ system('rm changelogs/unreleased/*')
39
+ system('rmdir changelogs/unreleased')
40
+ end
41
+
42
+ def self.write_title(file)
43
+ file.puts("# Changelogs \n")
44
+ end
45
+
46
+ def self.write_collection(type, collection, file)
47
+ lines = collection[type.name]
48
+ size = lines.size
49
+
50
+ return if size.zero?
51
+
52
+ file.puts("## #{type.name.capitalize} (#{size} count/s)\n")
53
+
54
+ write_lines(lines, file)
55
+ end
56
+
57
+ def self.write_lines(lines, file)
58
+ lines.each do |line|
59
+ file.puts(" + #{line.title} - #{line.author}")
60
+ end
61
+ end
62
+ end
data/lib/changelog.rb ADDED
@@ -0,0 +1,128 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Main class that manages the set of actions for managing change logs.
4
+ class Changelog
5
+ attr_reader :file_path, :errors, :type, :title, :options, :source, :author
6
+
7
+ def initialize(params, source = :file)
8
+ @source = source
9
+ @errors = []
10
+ if source == :file
11
+ @file_path = params
12
+ else
13
+ @options = params
14
+ end
15
+
16
+ load_data
17
+ end
18
+
19
+ def valid?
20
+ clear_errors
21
+ load_data
22
+ check_data
23
+
24
+ errors.empty?
25
+ end
26
+
27
+ def validate!
28
+ return true if valid?
29
+
30
+ raise InvalidLogFile, error_full_messages.join(".\n")
31
+ end
32
+
33
+ def file
34
+ @file ||= File.read(file_path)
35
+ end
36
+
37
+ def load_data
38
+ @title = data[:title]
39
+ @type = data[:type]
40
+ @author = data[:author]
41
+ end
42
+
43
+ def check_data
44
+ add_error 'Missing Title' if @title.nil?
45
+ add_error 'Missing Type' if @type.nil?
46
+ validate_type
47
+ end
48
+
49
+ def validate_type
50
+ type = TYPES.find { |t| t.name == @type }
51
+
52
+ add_error "Invalid Type '#{@type}'" unless type
53
+ end
54
+
55
+ def clear_errors
56
+ @errors = []
57
+ end
58
+
59
+ def data
60
+ @data ||= load_from_source
61
+ end
62
+
63
+ def load_from_source
64
+ if source == :file
65
+ yaml = YAML.safe_load(file)
66
+ initialize_props_from_yaml(yaml)
67
+ else
68
+ initialize_props_from_options
69
+ end
70
+ end
71
+
72
+ def initialize_props_from_yaml(yaml)
73
+ {
74
+ title: yaml.fetch('title', nil),
75
+ type: yaml.fetch('type', nil),
76
+ author: yaml.fetch('author', nil)
77
+ }
78
+ end
79
+
80
+ def initialize_props_from_options
81
+ {
82
+ title: options.title,
83
+ type: options.type,
84
+ author: author_name
85
+ }
86
+ end
87
+
88
+ def to_s
89
+ "Title: #{@title} | Type: #{@type}"
90
+ end
91
+
92
+ def author_name
93
+ name = "#{`git config user.name`[0..-2]} (#{`git config user.email`[0..-2]})"
94
+ name = "#{`git config --global user.name`[0..-2]} (#{`git config --global user.email`[0..-2]})" if name =~ /\A\s*\Z/
95
+ name
96
+ end
97
+
98
+ def show_errors
99
+ errors_full_messages.each { |message| puts message }
100
+ end
101
+
102
+ def error_full_messages
103
+ if source == :file
104
+ errors.collect { |error| "#{error} at #{file_path}" }
105
+ else
106
+ errors
107
+ end
108
+ end
109
+
110
+ def add_error(message)
111
+ errors << message
112
+ end
113
+
114
+ def save
115
+ File.open(generate_file_name, 'w') do |file|
116
+ file.puts("title: #{title}")
117
+ file.puts("author: #{author}")
118
+ file.puts("type: #{type}")
119
+ end
120
+ end
121
+
122
+ def generate_file_name
123
+ base_path = 'changelogs/unreleased'
124
+ FileUtils.mkdir_p(base_path)
125
+ safe_name = title.gsub(/[^\w-]/, '-')
126
+ "#{base_path}/#{safe_name}.yml"
127
+ end
128
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+ require 'fileutils'
5
+ require 'optparse'
6
+
7
+ CHANGE_LOGS_PATH = './changelogs'
8
+ CHANGE_LOG_NAME = './CHANGELOG.md'
9
+ TEMP_CHANGE_LOG_NAME = './CHANGELOG.md.temp'
10
+ InvalidLogFile = Class.new(StandardError)
11
+ NoLogsFound = Class.new(StandardError)
12
+ ProcessEnded = Class.new(StandardError)
13
+
14
+ Type = Struct.new(:name, :description)
15
+
16
+ TYPES = [
17
+ Type.new('added', "\t\tAdd something new like a new feature."),
18
+ Type.new('changed', "\t\tAlter something that already exists."),
19
+ Type.new('deprecated', "\tDepreciate an existing feature."),
20
+ Type.new('enhanced', "\tImprove an existing feature."),
21
+ Type.new('fixed', "\t\tFix a bug."),
22
+ Type.new('optimized', "\tRender a feature efficient and effective."),
23
+ Type.new('other', "\t\tEtc."),
24
+ Type.new('removed', "\t\tDelete a feature."),
25
+ Type.new('secured', "\t\tEstablish a security layer.")
26
+ ].freeze
27
+
28
+ require 'changelog'
29
+ require 'changelog/option_parser'
30
+ require 'changelog/writer'
31
+ require 'changelog/creator'
32
+
33
+ begin
34
+ changelogko_command_file_path = "#{FileUtils.pwd}/.changelogko"
35
+ ARGV << File.read(changelogko_command_file_path).strip if File.exist?(changelogko_command_file_path)
36
+ options = Changelog::OptionParser.parse(ARGV)
37
+ if options.release
38
+ log_collection = {}
39
+ TYPES.each do |type|
40
+ log_collection[type.name] = []
41
+ end
42
+ files = 0
43
+ Dir.glob('./changelogs/unreleased/*.yml') do |file|
44
+ changelog = Changelog.new(file, :file)
45
+ changelog.validate!
46
+ log_collection[changelog.type] << changelog
47
+ files += 1
48
+ rescue InvalidLogFile => e
49
+ puts e.message
50
+ exit(1)
51
+ end
52
+ if files.positive?
53
+ Changelog::Writer.call(log_collection, options.no_archive)
54
+ else
55
+ puts 'No logs found at changelogs/unreleased/'
56
+ end
57
+ elsif options.title && options.type
58
+ Changelog::Creator.call(options)
59
+ # Changelog creation
60
+ end
61
+ rescue InvalidLogFile => e
62
+ puts e.message
63
+ exit(1)
64
+ rescue ProcessEnded
65
+ exit
66
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Releaseko
4
+ # Class responsible for managing the file ./metadata/app-version.
5
+ class AppVersion
6
+ METHODS = %w[major minor build].freeze
7
+ FILE_PATH = File.join(Dir.pwd, 'metadata', 'app-version').freeze
8
+
9
+ attr_reader :method, :breakdown
10
+
11
+ def initialize(method)
12
+ @method = method
13
+ validate!
14
+ end
15
+
16
+ def perform
17
+ breakdown_version
18
+ increment_on_method
19
+ build_version!
20
+ end
21
+
22
+ private
23
+
24
+ def validate!
25
+ CustomError.new("Unknown method: #{method}").complain unless METHODS.include?(method)
26
+ CustomError.new("#{FILE_PATH} not found", 2).complain unless File.exist?(FILE_PATH)
27
+ end
28
+
29
+ def app_version
30
+ @app_version ||= File.read(FILE_PATH).strip
31
+ end
32
+
33
+ def build_version!
34
+ puts "Overwriting #{FILE_PATH} with new version"
35
+ new_version = "#{breakdown['major']}.#{breakdown['minor']}.#{breakdown['build']}"
36
+ File.write(FILE_PATH, new_version)
37
+ end
38
+
39
+ def breakdown_version
40
+ puts 'Breaking down version numbers'
41
+ version_numbers = app_version.split('.')
42
+ @breakdown = {
43
+ 'major' => version_numbers[0],
44
+ 'minor' => version_numbers[1],
45
+ 'build' => version_numbers[2],
46
+ 'other' => version_numbers[3..].join('.')
47
+ }
48
+ end
49
+
50
+ def increment_on_method
51
+ puts "Incrementing #{method} number"
52
+ breakdown[method] = breakdown[method].next
53
+ reset_trailing_version_numbers
54
+ end
55
+
56
+ def reset_trailing_version_numbers
57
+ ((METHODS.find_index(method) + 1)..(METHODS.length - 1)).each do |i|
58
+ breakdown[METHODS[i]] = 0
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Releaseko
4
+ # Wrapper for Changelogko.
5
+ class ChangelogWrapper
6
+ def self.perform
7
+ puts 'Running changelogko -r'
8
+ return_value = system("#{'bundle exec ' if defined? Bundler}changelogko -r")
9
+ CustomError.new('changelogko crashed', $CHILD_STATUS.exitstatus).complain unless return_value
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Releaseko
4
+ # Custom Error object for Releaseko
5
+ class CustomError
6
+ attr_reader :message, :code
7
+
8
+ def initialize(message, code = 1)
9
+ @message = message
10
+ @code = code
11
+ end
12
+
13
+ def complain
14
+ puts "Error occurred!\n#{message}\nExit code #{code}"
15
+ exit(code)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Releaseko
4
+ # Class that is responsible for updating the repository.
5
+ class RepositoryUpdater
6
+ def self.perform
7
+ puts 'Updating remote repository'
8
+ system('git add CHANGELOG.md metadata/app-version changelogs/*')
9
+ system('git commit -m "Bump app version and release changelogs"')
10
+ system('git push')
11
+ end
12
+
13
+ def self.set_to_push
14
+ ['-p', '--push'].include?(ARGV[2])
15
+ end
16
+ end
17
+ end
data/lib/releaseko.rb ADDED
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+ require 'fileutils'
5
+ require 'releaseko/custom_error'
6
+ require 'releaseko/app_version'
7
+ require 'releaseko/changelog_wrapper'
8
+ require 'releaseko/repository_updater'
9
+
10
+ begin
11
+ case ARGV[0]
12
+ when '-m', '--method'
13
+ Releaseko::AppVersion.new(ARGV[1]).perform
14
+ Releaseko::ChangelogWrapper.perform
15
+ Releaseko::RepositoryUpdater.perform if Releaseko::RepositoryUpdater.set_to_push
16
+ puts 'Release operation is a success!!!'
17
+ when '-h', '--help'
18
+ puts 'Usage: (releaseko|rko) [options]'
19
+ puts 'Options:'
20
+ puts ' -m, --method [major, minor, build] [-p, --push]'
21
+ puts ' Method of release so app version is updated accordingly.'
22
+ puts ' Extra option -p, --push will automatically commit and push the release to working branch.'
23
+ puts ' It will only push if the branch has a set upstream remote.'
24
+ puts ' -h, --help'
25
+ puts ' Display help. Duh.'
26
+ puts 'Methods:'
27
+ puts ' major Increments major version number'
28
+ puts ' minor Increments minor version number'
29
+ puts ' build Increments build version number'
30
+ else
31
+ puts 'Use --help (-h) option for usage details'
32
+ end
33
+
34
+ exit(0)
35
+ end
@@ -0,0 +1 @@
1
+ 1.4.0
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: changelogko
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Joseph Nelson Valeros
8
+ - Jenek Michael Sarte
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2024-04-03 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: This is a gem that can manage changelogs very easily.
15
+ email:
16
+ - valerosjoseph@gmail.com
17
+ - tieeeeen1994@gmail.com
18
+ executables:
19
+ - changelogko
20
+ - releaseko
21
+ - cko
22
+ - rko
23
+ extensions: []
24
+ extra_rdoc_files: []
25
+ files:
26
+ - CHANGELOG.md
27
+ - LICENSE
28
+ - README.md
29
+ - bin/changelogko
30
+ - bin/cko
31
+ - bin/releaseko
32
+ - bin/rko
33
+ - changelogko.gemspec
34
+ - changelogs/archive-Feb-16-2024-10-21-04.md
35
+ - changelogs/archive-Nov-07-2022-09-15-11.md
36
+ - lib/changelog.rb
37
+ - lib/changelog/creator.rb
38
+ - lib/changelog/option_parser.rb
39
+ - lib/changelog/writer.rb
40
+ - lib/changelogko.rb
41
+ - lib/releaseko.rb
42
+ - lib/releaseko/app_version.rb
43
+ - lib/releaseko/changelog_wrapper.rb
44
+ - lib/releaseko/custom_error.rb
45
+ - lib/releaseko/repository_updater.rb
46
+ - metadata/app-version
47
+ homepage: https://github.com/tieeeeen1994/changelogko
48
+ licenses:
49
+ - MIT
50
+ metadata:
51
+ rubygems_mfa_required: 'true'
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 3.2.2
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubygems_version: 3.4.10
68
+ signing_key:
69
+ specification_version: 4
70
+ summary: Manage changelogs easily!
71
+ test_files: []