Compare commits

...

16 Commits

Author SHA1 Message Date
gitclonebrian
4607dad9c5 list bundles. static status 2025-11-25 20:05:08 -05:00
gitclonebrian
759e459165 search for bundle 2025-11-25 19:54:43 -05:00
gitclonebrian
3952bff558 get bundle list before creating release 2025-11-25 19:31:24 -05:00
gitclonebrian
132263a093 get bundle list before creating release 2025-11-25 19:25:19 -05:00
gitclonebrian
6ce65db380 added additional track target option 2025-11-25 19:08:34 -05:00
gitclonebrian
d14f0c4b34 simplified and refactored 2025-11-25 18:46:52 -05:00
gitclonebrian
8542cb81c7 verbosity 2025-11-25 16:29:14 -05:00
gitclonebrian
46b7e07b6c verbosity 2025-11-25 16:27:34 -05:00
gitclonebrian
655a33f5b7 verbosity 2025-11-25 16:25:14 -05:00
gitclonebrian
66c355db35 use existing release, dont make a new one 2025-11-25 16:15:22 -05:00
gitclonebrian
6bb68d7f3e message vs verbose 2025-11-25 14:43:24 -05:00
gitclonebrian
2a014d76f3 custom update_track method 2025-11-25 14:39:53 -05:00
gitclonebrian
05a026cd23 added to print statement 2025-11-25 14:01:26 -05:00
gitclonebrian
858bdebb6c added qa track option 2025-11-25 13:54:21 -05:00
gitclonebrian
f0d3389688 modified publish workflow for testing. again. 2025-11-25 12:42:25 -05:00
gitclonebrian
9736d8532e modified publish workflow for testing 2025-11-25 12:37:56 -05:00
2 changed files with 157 additions and 86 deletions

View File

@@ -37,6 +37,7 @@ on:
type: choice
options:
- internal
- qa
- Fastlane Automation Source
required: true
default: "internal"
@@ -44,8 +45,8 @@ on:
description: "Track to promote to."
type: choice
options:
- production
- Fastlane Automation Target
- Unused
- Unused2
required: true
dry-run:
description: "Dry-Run, Run the workflow without publishing to the store"
@@ -153,11 +154,6 @@ jobs:
decimal=$(echo "scale=2; ${ROLLOUT_PERCENTAGE/\%/} / 100" | bc)
bundle exec fastlane updateReleaseNotes \
releaseNotes:"$RELEASE_NOTES" \
versionCode:"$VERSION_CODE" \
packageName:"$PACKAGE_NAME"
bundle exec fastlane promoteToProduction \
versionCode:"$VERSION_CODE" \
versionName:"$VERSION_NAME" \
@@ -166,17 +162,3 @@ jobs:
releaseNotes:"$RELEASE_NOTES" \
track:"$TRACK_FROM" \
trackPromoteTo:"$TRACK_TARGET"
- name: Enable Publish Github Release Workflow
env:
PRODUCT: ${{ inputs.product }}
run: |
if ${{ inputs.dry-run }} ; then
gh workflow view publish-github-release-bwpm.yml
exit 0
fi
if [ "$PRODUCT" = "Password Manager" ]; then
gh workflow enable publish-github-release-bwpm.yml
elif [ "$PRODUCT" = "Authenticator" ]; then
gh workflow enable publish-github-release-bwa.yml
fi

View File

@@ -20,79 +20,168 @@ 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")
# 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
# 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
version_code = '20274'
bundles = client.list_edit_bundles
bundles.bundles.each do |bundle|
UI.message("Bundle version code: #{bundle.version_code}")
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
target_bundle = bundles.bundles.find { |b| b.version_code.to_s == version_code }
UI.message("Total bundles:#{bundles.bundles.length}")
if target_bundle
UI.message("Found bundle with version code #{version_code}")
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
)
UI.message("Bundle with version code #{version_code} not found in available bundles")
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],
status: 'completed'
)
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
# # 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] || Supply::ReleaseStatus::COMPLETED
# release.user_fraction = nil
# end
UI.message("Promoting release with version: #{release.name} (#{release.version_codes.first})")
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
end
class Client
def list_edit_bundles
ensure_active_edit!
call_google_api do
client.list_edit_bundles(
current_package_name,
current_edit.id
)
end
end
def update_track(track_name, track_object)
UI.message("Using custom `update_track` method.")
ensure_active_edit!
UI.message("name:#{track_name} object:#{track_object} package:#{current_package_name}")
call_google_api do
client.update_edit_track(
current_package_name,
current_edit.id,
track_name,
track_object
)
end
end
end
end