Class: RosettAi::Thor::Tasks::Release
- Inherits:
-
Thor
- Object
- Thor
- RosettAi::Thor::Tasks::Release
- Defined in:
- lib/rosett_ai/thor/tasks/release.rb
Overview
Thor task for managing rai releases.
Provides a repeatable, verified release workflow: prepare — bump version, generate CHANGELOG, create release commit tag — create annotated git tag from current VERSION status — show version, last tag, and unreleased commit count
Design reference: conf/design/release_management.yml
Constant Summary collapse
- VALID_LEVELS =
['major', 'minor', 'patch'].freeze
- VERIFICATION_GATES =
[ ['rspec', ['bundle', 'exec', 'rspec', '--format', 'progress']], ['rubocop', ['bundle', 'exec', 'rubocop', '--format', 'simple']], ['reek', ['bundle', 'exec', 'reek', '--no-color']], ['bundler-audit', ['bundle', 'exec', 'bundler-audit', 'check']], ['ruby-audit', ['bundle', 'exec', 'ruby-audit', 'check']] ].freeze
Instance Method Summary collapse
Instance Method Details
#prepare(level) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rosett_ai/thor/tasks/release.rb', line 54 def prepare(level) validate_level!(level) ensure_clean_working_tree! run_verification_gates! unless [:skip_verify] old_version = current_version new_version = bump_version(old_version, level) write_version!(new_version) changelog_text = generate_changelog(new_version) update_changelog!(new_version, changelog_text) create_release_commit!(new_version) puts puts Rainbow(t('prepare.success', version: new_version)).green puts t('prepare.next_steps', version: new_version) end |
#status ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/rosett_ai/thor/tasks/release.rb', line 111 def status version = current_version last_tag = latest_tag commit_count = commits_since_tag(last_tag) rows = [ [t('status.version_label'), version], [t('status.last_tag_label'), last_tag || t('status.no_tags')], [t('status.commits_label'), commit_count.to_s] ] table = ::Terminal::Table.new( title: Rainbow(t('status.title')).bright, rows: rows, style: { border: :unicode_round } ) puts table end |
#tag ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/rosett_ai/thor/tasks/release.rb', line 88 def tag version = current_version tag_name = "v#{version}" raise ::Thor::Error, t('tag.exists', tag: tag_name) if tag_exists?(tag_name) = extract_changelog_section(version) create_annotated_tag!(tag_name, ) puts Rainbow(t('tag.success', tag: tag_name)).green end |