mirror of
https://github.com/bitwarden/android.git
synced 2025-12-10 00:06:22 -06:00
104 lines
3.7 KiB
Ruby
104 lines
3.7 KiB
Ruby
# Patch Description:
|
|
# Fixes issue where Fastlane 'Supply' doesn't recognize previous builds
|
|
# when promoting to another track.
|
|
#
|
|
# Source: https://github.com/artsy/eigen/pull/10262
|
|
# Author: Brian Beckerle (@brainbicycle)
|
|
#
|
|
|
|
module Supply
|
|
class Uploader
|
|
alias_method :original_promote_track, :promote_track
|
|
|
|
def promote_track
|
|
if Supply.config[:skip_release_verification]
|
|
custom_promote_track
|
|
else
|
|
original_promote_track
|
|
end
|
|
end
|
|
|
|
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
|
|
|
|
releases = track_from.releases
|
|
|
|
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
|
|
release = AndroidPublisher::TrackRelease.new(
|
|
name: Supply.config[:version_name],
|
|
version_codes: [version_code],
|
|
status: Supply.config[:track_promote_release_status] || Supply::ReleaseStatus::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: []
|
|
)
|
|
|
|
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.user_fraction = nil
|
|
end
|
|
|
|
UI.message("Promoting release with version: #{release.name} (#{release.version_codes.first})")
|
|
|
|
if track_to
|
|
UI.message("Using existing 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
|
|
UI.message("Creating new track_to")
|
|
track_to = AndroidPublisher::Track.new(
|
|
track: Supply.config[:track_promote_to],
|
|
releases: [release]
|
|
)
|
|
end
|
|
UI.message("track_to details: #{track_to.inspect}")
|
|
|
|
UI.message("About to promote with release: #{release.inspect}")
|
|
|
|
client.update_track(Supply.config[:track_promote_to], track_to)
|
|
UI.message("confirmed that update_track was reached: #{Supply.config[:track_promote_to]} #{release}")
|
|
end
|
|
end
|
|
end
|