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 =
Returns Allowed release version bump levels.
['major', 'minor', 'patch'].freeze
- VERIFICATION_GATES =
Returns Release verification gate definitions.
[ ['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
-
#prepare(level) ⇒ void
Prepare the release artifacts.
-
#status ⇒ String
Return the current status.
- #tag ⇒ Object
Instance Method Details
#prepare(level) ⇒ void
This method returns an undefined value.
Prepare the release artifacts.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/rosett_ai/thor/tasks/release.rb', line 60 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 ⇒ String
Return the current status.
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/rosett_ai/thor/tasks/release.rb', line 119 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
94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/rosett_ai/thor/tasks/release.rb', line 94 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 |