Class: Vtasks::Release
- Inherits:
-
Rake::TaskLib
- Object
- Rake::TaskLib
- Vtasks::Release
- Includes:
- Utils::Git, Utils::Output, Utils::Semver
- Defined in:
- lib/vtasks/release.rb
Overview
Release tasks
Constant Summary
Constants included from Utils::Semver
Constants included from Utils::Git
Instance Attribute Summary collapse
-
#bug_labels ⇒ Object
readonly
Returns the value of attribute bug_labels.
-
#enhancement_labels ⇒ Object
readonly
Returns the value of attribute enhancement_labels.
-
#require_pull_request ⇒ Object
readonly
Returns the value of attribute require_pull_request.
-
#wait_for_ci_success ⇒ Object
readonly
Returns the value of attribute wait_for_ci_success.
-
#write_changelog ⇒ Object
readonly
Returns the value of attribute write_changelog.
Instance Method Summary collapse
-
#changelog(config, release: nil) ⇒ Object
Configure the github_changelog_generator/task.
- #define_tasks ⇒ Object
-
#initialize(options = {}) ⇒ Release
constructor
A new instance of Release.
Methods included from Utils::Semver
Methods included from Utils::Output
Methods included from Utils::Git
#git_branch, #git_ci_status, #git_clean_repo, #git_commit, #git_deepen_repo, #git_url
Constructor Details
#initialize(options = {}) ⇒ Release
Returns a new instance of Release.
20 21 22 23 24 25 26 27 |
# File 'lib/vtasks/release.rb', line 20 def initialize( = {}) @write_changelog = .fetch(:write_changelog, false) @require_pull_request = .fetch(:require_pull_request, false) @wait_for_ci_success = .fetch(:wait_for_ci_success, false) @bug_labels = .fetch(:bug_labels, 'bug') @enhancement_labels = .fetch(:enhancement_labels, 'enhancement') define_tasks end |
Instance Attribute Details
#bug_labels ⇒ Object (readonly)
Returns the value of attribute bug_labels.
14 15 16 |
# File 'lib/vtasks/release.rb', line 14 def bug_labels @bug_labels end |
#enhancement_labels ⇒ Object (readonly)
Returns the value of attribute enhancement_labels.
14 15 16 |
# File 'lib/vtasks/release.rb', line 14 def enhancement_labels @enhancement_labels end |
#require_pull_request ⇒ Object (readonly)
Returns the value of attribute require_pull_request.
14 15 16 |
# File 'lib/vtasks/release.rb', line 14 def require_pull_request @require_pull_request end |
#wait_for_ci_success ⇒ Object (readonly)
Returns the value of attribute wait_for_ci_success.
14 15 16 |
# File 'lib/vtasks/release.rb', line 14 def wait_for_ci_success @wait_for_ci_success end |
#write_changelog ⇒ Object (readonly)
Returns the value of attribute write_changelog.
14 15 16 |
# File 'lib/vtasks/release.rb', line 14 def write_changelog @write_changelog end |
Instance Method Details
#changelog(config, release: nil) ⇒ Object
Configure the github_changelog_generator/task
30 31 32 33 34 |
# File 'lib/vtasks/release.rb', line 30 def changelog(config, release: nil) config.bug_labels = bug_labels #'Type: Bug' config.enhancement_labels = enhancement_labels #'Type: Enhancement' config.future_release = "v#{release}" if release end |
#define_tasks ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/vtasks/release.rb', line 36 def define_tasks desc "Release patch version" task release: ['release:patch'] namespace :release do begin require 'github_changelog_generator/task' # Create release:changes task ::GitHubChangelogGenerator::RakeTask.new(:changes) do |config| changelog(config) end rescue LoadError nil # Might be in a group that is not installed end SEM_LEVELS.each do |level| desc "Release #{level} version" task level.to_sym do new_version = bump(level) release = "#{new_version[:major]}.#{new_version[:minor]}.#{new_version[:patch]}" initial_branch = git_branch if require_pull_request == true release_branch = "release_v#{release.gsub(/[^0-9A-Za-z]/, '_')}" else release_branch = initial_branch end info 'Check if the repository is clean' git_clean_repo # Write changelog # Create a separate release branch (works with protected branches as well) if write_changelog == true info 'Generate new changelog' ::GitHubChangelogGenerator::RakeTask.new(:latest_release) do |config| changelog(config, release: release) end task('latest_release').invoke if system 'git diff --quiet HEAD' info 'CHANGELOG has not changed. Skipping...' else if require_pull_request == true info 'Create a new release branch' sh "git checkout -b #{release_branch}" end info 'Commit the new changes' sh "git commit --gpg-sign --message 'Update change log for v#{release}' CHANGELOG.md" if wait_for_ci_success == true info 'Waiting for CI to finish' sleep 5 until git_ci_status(release_branch) == 'success' end if require_pull_request == true info 'Merge release branch' sh "git checkout #{initial_branch}" sh "git merge --gpg-sign --no-ff --message 'Release v#{release}' #{release_branch}" end end end info "Tag #{release}" sh "git tag --sign v#{release} --message 'Release v#{release}'" sh 'git push --follow-tags' end # task end # LEVELS end # namespace :release end |