simplified and refactored

This commit is contained in:
gitclonebrian
2025-11-25 18:46:52 -05:00
parent 8542cb81c7
commit d14f0c4b34

View File

@@ -20,106 +20,125 @@ module Supply
def custom_promote_track
UI.message("Using custom promotion logic")
track_from = client.tracks(Supply.config[:track]).first
unless track_from
UI.user_error!("Cannot promote from track '#{Supply.config[:track]}' - track doesn't exist")
end
# track_from = client.tracks(Supply.config[:track]).first
# unless track_from
# UI.user_error!("Cannot promote from track '#{Supply.config[:track]}' - track doesn't exist")
# end
releases = track_from.releases
UI.message("Total releases in track: #{releases.length}")
if releases.length == 1
release = releases.first
UI.message("One release found: name[#{release.name}] status[#{release.status}] code[#{release.version_codes}]")
end
# releases = track_from.releases
# UI.message("Total releases in track: #{releases.length}")
# if releases.length == 1
# release = releases.first
# UI.message("One release found: name[#{release.name}] status[#{release.status}] code[#{release.version_codes}]")
# end
# version_code = Supply.config[:version_code].to_s
# if !Supply.config[:skip_release_verification]
# if version_code != ""
# releases = releases.select do |release|
# release.version_codes.include?(version_code)
# end
# else
# releases = releases.select do |release|
# release.status == Supply.config[:release_status]
# end
# end
# if releases.size == 0
# if version_code != ""
# UI.user_error!("Cannot find release with version code '#{version_code}' to promote in track '#{Supply.config[:track]}'")
# else
# UI.user_error!("Track '#{Supply.config[:track]}' doesn't have any releases")
# end
# elsif releases.size > 1
# UI.user_error!("Track '#{Supply.config[:track]}' has more than one release - use :version_code to filter the release to promote")
# end
# else
# UI.message("Skipping release verification as per configuration.")
# if version_code == ""
# UI.user_error!("Must provide a version code when release verification is skipped.")
# end
# if Supply.config[:version_name].nil?
# UI.user_error!("To force promote a :version_code, it is mandatory to enter the :version_name")
# end
# end
# # release = AndroidPublisher::TrackRelease.new(
# # name: Supply.config[:version_name],
# # version_codes: [version_code],
# # status: Supply.config[:track_promote_release_status] || Supply::ReleaseStatus::COMPLETED
# # )
# # filter only releases that contain the target version code
# releases = releases.select do |release|
# release.version_codes == [version_code]
# end
# if releases.length < 1
# UI.user_error!("No releases match version code #{version_code}.")
# end
# if releases.length > 1
# UI.user_error!("Multiple releases match version code #{version_code}.")
# else
# release = releases.first
# end
# UI.message("Release info: name[#{release.name}] status[#{release.status}] code[#{release.version_codes}]")
# # releases = releases.select do |release|
# # release.name == Supply.config[:version_name] &&
# # release.version_codes == [version_code] &&
# # release.status == 'completed'
# # end
# release = releases.first unless Supply.config[:skip_release_verification]
# track_to = client.tracks(Supply.config[:track_promote_to]).first || AndroidPublisher::Track.new(
# track: Supply.config[:track_promote_to],
# releases: []
# )
# UI.message("Promoting release with version: #{release.name} (#{release.version_codes.first} Track: #{Supply.config[:track_promote_to]})")
# if track_to
# # Its okay to set releases to an array containing the newest release
# # Google Play will keep previous releases there this release is a partial rollout
# track_to.releases = [release]
# else
# track_to = AndroidPublisher::Track.new(
# track: Supply.config[:track_promote_to],
# releases: [release]
# )
# end
# get version code
version_code = Supply.config[:version_code].to_s
if !Supply.config[:skip_release_verification]
if version_code != ""
releases = releases.select do |release|
release.version_codes.include?(version_code)
end
else
releases = releases.select do |release|
release.status == Supply.config[:release_status]
end
end
if releases.size == 0
if version_code != ""
UI.user_error!("Cannot find release with version code '#{version_code}' to promote in track '#{Supply.config[:track]}'")
else
UI.user_error!("Track '#{Supply.config[:track]}' doesn't have any releases")
end
elsif releases.size > 1
UI.user_error!("Track '#{Supply.config[:track]}' has more than one release - use :version_code to filter the release to promote")
end
else
UI.message("Skipping release verification as per configuration.")
if version_code == ""
UI.user_error!("Must provide a version code when release verification is skipped.")
end
if Supply.config[:version_name].nil?
UI.user_error!("To force promote a :version_code, it is mandatory to enter the :version_name")
end
end
# release = AndroidPublisher::TrackRelease.new(
# name: Supply.config[:version_name],
# version_codes: [version_code],
# status: Supply.config[:track_promote_release_status] || Supply::ReleaseStatus::COMPLETED
# )
# filter only releases that contain the target version code
releases = releases.select do |release|
release.version_codes == [version_code]
end
if releases.length < 1
UI.user_error!("No releases match version code #{version_code}.")
end
if releases.length > 1
UI.user_error!("Multiple releases match version code #{version_code}.")
else
release = releases.first
end
UI.message("Release info: name[#{release.name}] status[#{release.status}] code[#{release.version_codes}]")
# releases = releases.select do |release|
# release.name == Supply.config[:version_name] &&
# release.version_codes == [version_code] &&
# release.status == 'completed'
# end
release = releases.first unless Supply.config[:skip_release_verification]
track_to = client.tracks(Supply.config[:track_promote_to]).first || AndroidPublisher::Track.new(
track: Supply.config[:track_promote_to],
releases: []
# build release object
release = AndroidPublisher::TrackRelease.new(
name: Supply.config[:version_name],
version_codes: [version_code],
)
# set release attributes based on the rollout values
rollout = (Supply.config[:rollout] || 0).to_f
if rollout > 0 && rollout < 1
release.status = Supply::ReleaseStatus::IN_PROGRESS
release.user_fraction = rollout
else
release.status = Supply.config[:track_promote_release_status]
release.status = Supply.config[:track_promote_release_status] || Supply::ReleaseStatus::COMPLETED
release.user_fraction = nil
end
UI.message("Promoting release with version: #{release.name} (#{release.version_codes.first} Track: #{Supply.config[:track_promote_to]})")
if track_to
# Its okay to set releases to an array containing the newest release
# Google Play will keep previous releases there this release is a partial rollout
track_to.releases = [release]
else
track_to = AndroidPublisher::Track.new(
track: Supply.config[:track_promote_to],
releases: [release]
)
end
client.update_track(Supply.config[:track_promote_to], track_to)
# build track object, including the release
track = AndroidPublisher::Track.new(
track: Supply.config[:track_promote_to],
releases: [release]
)
# update the track in the Play store
client.update_track(Supply.config[:track_promote_to], track)
UI.message("confirmed that update_track was reached: #{Supply.config[:track_promote_to]} #{release}")
end
end