Compare commits

...

10 Commits

Author SHA1 Message Date
Amy Galles
3f5f5f8baa try printing version codes again 2025-08-21 16:53:47 -07:00
Amy Galles
fcf43a2b4f try printing version codes again 2025-08-21 16:50:24 -07:00
Amy Galles
ee4f67d922 try printing version codes again 2025-08-21 16:41:19 -07:00
Amy Galles
2003d7101d try printing version codes again 2025-08-21 16:39:18 -07:00
Amy Galles
79eb9a6098 try printing version codes again 2025-08-21 16:31:00 -07:00
Amy Galles
26c19c3737 adding a print to see what releases are available 2025-08-21 14:55:18 -07:00
Amy Galles
33ba9b11bd adding a print to see what releases are available 2025-08-21 14:51:11 -07:00
Amy Galles
d6eac58e1d adding a print to see what releases are available 2025-08-21 14:47:54 -07:00
Amy Galles
2f997e0506 adding a print to see what releases are available 2025-08-21 14:45:12 -07:00
Amy Galles
688ec9f04f adding a print to see what releases are available 2025-08-21 14:40:14 -07:00

View File

@@ -1,15 +1,9 @@
# 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 the original promote_track method so we can override it
alias_method :original_promote_track, :promote_track
# Override promote_track to use custom logic if skip_release_verification is set
def promote_track
if Supply.config[:skip_release_verification]
custom_promote_track
@@ -18,16 +12,39 @@ module Supply
end
end
# Custom promotion logic for handling track promotion
def custom_promote_track
UI.message("Using custom promotion logic")
# Fetch the source track to promote from
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
# Gather all releases from the source track and log their version codes
releases = track_from.releases
UI.message(releases.map { |release| "Release: #{release.name}, Version Codes: #{release.version_codes.join(', ')}" }.join("\n"))
version_name = Supply.config[:version_name]
all_tracks = client.tracks(nil) # nil fetches all tracks
all_tracks.each do |track|
track.releases.each do |release|
if release.name == version_name
UI.message("Track '#{track.track}' has release '#{version_name}' with version codes: #{release.version_codes.join(', ')}")
end
end
end
if version_name.nil? || version_name.empty?
UI.message("No version name provided, skipping version code lookup.")
return
end
# Get the version code to promote
version_code = Supply.config[:version_code].to_s
# If release verification is not skipped, filter releases by version code or status
if !Supply.config[:skip_release_verification]
if version_code != ""
releases = releases.select do |release|
@@ -39,6 +56,7 @@ module Supply
end
end
# Error handling for missing or ambiguous releases
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]}'")
@@ -49,6 +67,7 @@ module Supply
UI.user_error!("Track '#{Supply.config[:track]}' has more than one release - use :version_code to filter the release to promote")
end
else
# If skipping verification, require version code and version name
UI.message("Skipping release verification as per configuration.")
if version_code == ""
UI.user_error!("Must provide a version code when release verification is skipped.")
@@ -56,6 +75,7 @@ module Supply
if Supply.config[:version_name].nil?
UI.user_error!("To force promote a :version_code, it is mandatory to enter the :version_name")
end
# Create a new release object for forced promotion
release = AndroidPublisher::TrackRelease.new(
name: Supply.config[:version_name],
version_codes: [version_code],
@@ -63,12 +83,16 @@ module Supply
)
end
# Select the release to promote if verification is not skipped
release = releases.first unless Supply.config[:skip_release_verification]
# Fetch or create the destination track to promote to
track_to = client.tracks(Supply.config[:track_promote_to]).first || AndroidPublisher::Track.new(
track: Supply.config[:track_promote_to],
releases: []
)
# Set rollout fraction and release status for partial rollouts
rollout = (Supply.config[:rollout] || 0).to_f
if rollout > 0 && rollout < 1
release.status = Supply::ReleaseStatus::IN_PROGRESS
@@ -78,11 +102,11 @@ module Supply
release.user_fraction = nil
end
# Log the promotion action
UI.message("Promoting release with version: #{release.name} (#{release.version_codes.first})")
# Assign the release to the destination track
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(
@@ -91,6 +115,7 @@ module Supply
)
end
# Update the destination track with the new release
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