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
|
# File 'lib/amitree/heroku_deployer.rb', line 48
def compute_release(options={})
result = ReleaseDetails.new
result.production_release = @heroku.last_promoted_production_release
result.production_promoted_from_staging = @heroku.promoted_from_staging?(result.production_release)
staging_releases = @heroku.staging_releases_since(@heroku.staging_release_name(result.production_release))
prod_commit = result.production_release['commit']
puts "Production release is #{prod_commit}" if options[:verbose]
result.stories = stories_worked_on_between(prod_commit, 'HEAD')
all_stories = Hash[result.stories.map{|story| [story.id, story]}]
staging_releases.reverse.each do |staging_release|
staging_commit = staging_release['commit']
stories = all_stories.values_at(*@git.stories_worked_on_between(prod_commit, staging_commit)).compact
story_ids = stories.map(&:id)
puts "- Trying staging release #{staging_release['name']} with commit #{staging_commit}" if options[:verbose]
puts " - Stories: #{story_ids.inspect}" if options[:verbose]
unaccepted_story_ids = story_ids.select { |story_id| get_tracker_status(story_id) != 'accepted' }
if unaccepted_story_ids.length > 0
stories.each do |story|
story.blocked_by = unaccepted_story_ids
end
puts " - Some stories are not yet accepted: #{unaccepted_story_ids.inspect}" if options[:verbose]
else
story_ids_referenced_later = story_ids & @git.stories_worked_on_between(staging_commit, 'HEAD')
if story_ids_referenced_later.length > 0
puts " - Some stories have been worked on in a later commit: #{story_ids_referenced_later}" if options[:verbose]
else
stories.each do |story|
story.blocked_by = unaccepted_story_ids
end
puts " - This release is good to go!" if options[:verbose]
result.staging_release_to_deploy = staging_release
break
end
end
end
return result
end
|