class Bosh::Cli::Command::Release::CreateRelease
Constants
- DEFAULT_RELEASE_NAME
Public Instance Methods
create(manifest_file = nil)
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 22 def create(manifest_file = nil) switch_to_release_dir check_if_release_dir migrate_to_support_multiple_releases if manifest_file && File.file?(manifest_file) if options[:version] err('Cannot specify a custom version number when creating from a manifest. The manifest already specifies a version.'.make_red) end if options[:'timestamp_version'] err('Cannot specify timestamp-version when creating from a manifest. The manifest already specifies a version.'.make_red) end say('Recreating release from the manifest') Bosh::Cli::ReleaseCompiler.compile(manifest_file, cache_dir, release.blobstore, [], release.dir) release_filename = manifest_file else if options[:version] && options[:'timestamp_version'] err('Cannot specify both timestamp-version and version when creating a release.') end version = nil if options[:version] version = options[:version] version = Bosh::Common::Version::ReleaseVersion.parse(version).to_s unless version.nil? end release_filename = create_from_spec(version) end if release_filename release.latest_release_filename = release_filename release.save_config end rescue SemiSemantic::ParseError err("Invalid version: '#{version}'. Please specify a valid version (ex: 1.0.0 or 1.0-beta.2+dev.10).".make_red) rescue Bosh::Cli::ReleaseVersionError => e err(e.message.make_red) end
Private Instance Methods
archive_builder()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 232 def archive_builder @archive_builder ||= Bosh::Cli::ArchiveBuilder.new(archive_repository_provider, :final => final, :dry_run => dry_run) end
archive_repository_provider()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 157 def archive_repository_provider @archive_repository_provider ||= Bosh::Cli::ArchiveRepositoryProvider.new(release.dir, cache_dir, release.blobstore) end
build_jobs(packages)
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 208 def build_jobs(packages) jobs = Bosh::Cli::Resources::Job.discover(release.dir, packages) artifacts = jobs.map do |job| say("Building #{job.name.make_green}...") artifact = archive_builder.build(job) nl artifact end artifacts end
build_licenses()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 220 def build_licenses licenses = Bosh::Cli::Resources::License.discover(release.dir) artifacts = licenses.map do |license| say("Building #{'license'.make_green}...") artifact = archive_builder.build(license) nl artifact end.compact artifacts end
build_packages()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 182 def build_packages packages = Bosh::Cli::Resources::Package.discover(release.dir) artifacts = packages.map do |package| say("Building #{package.name.make_green}...") artifact = archive_builder.build(package) nl artifact end if packages.size > 0 package_index = artifacts.inject({}) do |index, artifact| index[artifact.name] = artifact.dependencies index end sorted_packages = tsort_packages(package_index) header('Resolving dependencies') say('Dependencies resolved, correct build order is:') sorted_packages.each do |package_name| say('- %s' % [package_name]) end nl end artifacts end
build_release(job_artifacts, manifest_only, package_artifacts, license_artifacts, name, version)
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 161 def build_release(job_artifacts, manifest_only, package_artifacts, license_artifacts, name, version) license_artifact = license_artifacts.first release_builder = Bosh::Cli::ReleaseBuilder.new(release, package_artifacts, job_artifacts, license_artifact, name, final: final, commit_hash: commit_hash, version: version, uncommitted_changes: dirty_state?, timestamp_version: options[:'timestamp_version'] ) unless dry_run if manifest_only release_builder.build(:generate_tarball => false) else release_builder.build(:generate_tarball => true) end end release_builder end
commit_hash()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 258 def commit_hash status = Bosh::Exec.sh('git show-ref --head --hash=8 2> /dev/null') status.output.split.first rescue Bosh::Exec::Error '00000000' end
confirm_final_release()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 137 def confirm_final_release confirmed = non_interactive? || agree("Are you sure you want to generate #{'final'.make_red} version? ") if !dry_run && !confirmed say('Canceled release generation'.make_green) exit(1) end end
create_from_spec(version)
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 75 def create_from_spec(version) force = options[:force] name = options[:name] manifest_only = !options[:with_tarball] release.blobstore # prime & validate blobstore config dirty_blob_check(force) raise_dirty_state_error if dirty_state? && !force if final confirm_final_release unless name save_final_release_name if release.final_name.blank? name = release.final_name end header('Building FINAL release'.make_green) else unless name save_dev_release_name if release.dev_name.blank? name = release.dev_name end header('Building DEV release'.make_green) end say("Release artifact cache: #{cache_dir}") header('Building license') license_artifacts = build_licenses header('Building packages') package_artifacts = build_packages header('Building jobs') job_artifacts = build_jobs(package_artifacts.map { |artifact| artifact.name }) header('Building release') release_builder = build_release(job_artifacts, manifest_only, package_artifacts, license_artifacts, name, version) info[:generated_version] = release_builder.version info[:generated_manifest_path] = release_builder.manifest_path header('Release summary') show_summary(release_builder) nl return nil if dry_run say("Release name: #{name.make_green}") say("Release version: #{release_builder.version.to_s.make_green}") say("Release manifest: #{release_builder.manifest_path.make_green}") unless manifest_only say("Release tarball (#{pretty_size(release_builder.tarball_path)}): " + release_builder.tarball_path.make_green) end release.save_config release_builder.manifest_path end
dirty_blob_check(force)
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 145 def dirty_blob_check(force) blob_manager.sync if blob_manager.dirty? blob_manager.print_status if force say("Proceeding with dirty blobs as '--force' is given".make_red) else err("Please use '--force' or upload new blobs") end end end
dry_run()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 265 def dry_run dry_run ||= options[:dry_run] end
final()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 269 def final final ||= options[:final] end
migrate_to_support_multiple_releases()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 66 def migrate_to_support_multiple_releases default_release_name = release.final_name # can't migrate without a default release name return if default_release_name.blank? Bosh::Cli::Versions::MultiReleaseSupport.new(release.dir, default_release_name, self).migrate end
save_dev_release_name()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 246 def save_dev_release_name if interactive? release.dev_name = ask('Please enter development release name: ') do |q| q.default = release.final_name if release.final_name end.to_s err('Canceled release creation, no name given') if release.dev_name.blank? else release.dev_name = release.final_name ? release.final_name : DEFAULT_RELEASE_NAME end release.save_config end
save_final_release_name()
click to toggle source
# File lib/cli/commands/release/create_release.rb, line 237 def save_final_release_name release.final_name = DEFAULT_RELEASE_NAME if interactive? release.final_name = ask('Please enter final release name: ').to_s err('Canceled release creation, no name given') if release.final_name.blank? end release.save_config end