Class: Rock::CLI::Release
- Inherits:
-
Thor
- Object
- Thor
- Rock::CLI::Release
- Defined in:
- lib/rock/cli/release.rb
Overview
Management of releases from the point of view of the user
The Rock scheme here is to store all release info in the common buildconf repository. Each release has its own tag, and within the commit pointed-to by the tag the files overrides.d/80-release.* contain the necessary information:
overrides.d/80-release.md: release notes (in markdown format)
overrides.d/80-release.package_sets.yml: version information for the package sets
overrides.d/80-release.packages.yml: version information for the packages
Defined Under Namespace
Classes: InvalidReleaseName
Constant Summary collapse
- ROCK_RELEASE_INFO =
VCS information where the Rock release information is stored
Hash[ 'github' => 'rock-core/buildconf', 'branch' => 'releases']
- RELEASE_NOTES =
"RELEASE_NOTES.md"
- RELEASE_VERSIONS =
"overrides.d/25-release.yml"
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#importer ⇒ Object
readonly
Returns the value of attribute importer.
-
#package ⇒ Object
readonly
Returns the value of attribute package.
Instance Method Summary collapse
- #freeze(*names) ⇒ Object
- #list ⇒ Object
- #notes(release_name) ⇒ Object
- #switch(release_name) ⇒ Object
- #unfreeze(*names) ⇒ Object
- #versions(release_name) ⇒ Object
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config
29 30 31 |
# File 'lib/rock/cli/release.rb', line 29 def config @config end |
#importer ⇒ Object (readonly)
Returns the value of attribute importer
31 32 33 |
# File 'lib/rock/cli/release.rb', line 31 def importer @importer end |
#package ⇒ Object (readonly)
Returns the value of attribute package
30 31 32 |
# File 'lib/rock/cli/release.rb', line 30 def package @package end |
Instance Method Details
#freeze(*names) ⇒ Object
195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/rock/cli/release.rb', line 195 def freeze(*names) release_name = @ws.config.get('current_rock_release', false) if !release_name Autoproj.error "currently not on any release, use rock-release switch first" return end version_file = fetch_version_file(release_name) versions = YAML.load(version_file) pkgs = match_names_to_packages_in_versions(names, versions) ops = Autoproj::Ops::Snapshot.new(@ws.manifest) ops.save_versions(pkgs.values, File.join(config_dir, RELEASE_VERSIONS), replace: false) end |
#list ⇒ Object
140 141 142 143 144 145 146 147 148 |
# File 'lib/rock/cli/release.rb', line 140 def list = importer.(package, only_local: [:local]) releases = .find_all do |tag_name, _| begin verify_release_name(tag_name, only_local: true) rescue InvalidReleaseName end end puts releases.map(&:first).sort.join("\n") end |
#notes(release_name) ⇒ Object
158 159 160 |
# File 'lib/rock/cli/release.rb', line 158 def notes(release_name) puts fetch_release_notes(release_name) end |
#switch(release_name) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/rock/cli/release.rb', line 163 def switch(release_name) if release_name == "master" FileUtils.rm_f File.join(config_dir, RELEASE_VERSIONS) @ws.config.set("ROCK_SELECTED_FLAVOR", "master") @ws.config.set('current_rock_release', false) @ws.save_config Autoproj. "successfully setup flavor #{release_name}" elsif release_name == "stable" FileUtils.rm_f File.join(config_dir, RELEASE_VERSIONS) @ws.config.set("ROCK_SELECTED_FLAVOR", "stable") @ws.config.set('current_rock_release', false) @ws.save_config Autoproj. "successfully setup flavor #{release_name}" else versions = fetch_version_file(release_name) ensure_overrides_dir_present File.open(File.join(config_dir, RELEASE_VERSIONS), 'w') do |io| io.write versions end @ws.config.set("ROCK_SELECTED_FLAVOR", "stable") @ws.config.set('current_rock_release', release_name) @ws.save_config Autoproj. "successfully setup release #{release_name}" end Autoproj. " autoproj status will tell you what has changed" Autoproj. " aup --all will attempt to include the new release changes to your working copy" Autoproj. " aup --all --reset will (safely) reset your working copy to the release's state" Autoproj. " aup --all --force-reset will UNSAFELY reset your working copy to the release's state" end |
#unfreeze(*names) ⇒ Object
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 |
# File 'lib/rock/cli/release.rb', line 211 def unfreeze(*names) release_name = @ws.config.get('current_rock_release', false) if !release_name Autoproj.error "currently not on any release, use rock-release switch first" return end release_versions_path = File.join(config_dir, RELEASE_VERSIONS) if !File.file?(release_versions_path) Autoproj.error "#{release_versions_path} not present on disk, use autoproj switch to restore it first" return end versions = YAML.load(File.read(release_versions_path)) pkgs = match_names_to_packages_in_versions(names, versions, ignore_missing: true) versions.delete_if do |vcs| pkgs.has_key?(vcs.keys.first) end ops = Autoproj::Ops::Snapshot.new(@ws.manifest) ops.save_versions(versions, release_versions_path, replace: true) Autoproj. "updated #{release_versions_path}" end |
#versions(release_name) ⇒ Object
152 153 154 |
# File 'lib/rock/cli/release.rb', line 152 def versions(release_name) puts fetch_version_file(release_name) end |