Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect bundle is uploaded if gradle action results in UP-TO-DATE build #22009

Open
jameswhiteut opened this issue May 9, 2024 · 0 comments

Comments

@jameswhiteut
Copy link

This one might not entirely be fastlanes fault but I'm reporting it since it will most likely trip someone else up in the future.

As part of our build process we have two lanes, one to upload builds to Google Play (gplay), and one to upload builds to Firebase App Distribution (firebase). These are included in the fastlane environment below.

Our build runs the gplay lane twice first, with the stage and prod flavours specified (in that order). It then runs the firebase lane with the stage flavour specified.

Despite running the gradle action as part of the firebase lane, GRADLE_AAB_OUTPUT_PATH still references the output of the gplay lane from earlier, which is a prod build. This happens because the stage build is completely cached by gradle and the build artifact is not re-written to disk, and based on https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/gradle.rb the modified timestamp of the AAB files are used to determine what ends up in GRADLE_AAB_OUTPUT_PATH.

I'm honestly not sure what fastlane can do to fix this, but it's certainly misleading as you'd expect GRADLE_AAB_OUTPUT_PATH and similar variables to be updated based on the previous builds no matter whether they were cached by gradle or not.

✅ fastlane environment ✅

Stack

Key Value
OS 14.4.1
Ruby 3.3.0
Bundler? true
Git git version 2.45.0
Installation Source ~/.rbenv/versions/3.3.0/bin/fastlane
Host macOS 14.4.1 (23E224)
Ruby Lib Dir ~/.rbenv/versions/3.3.0/lib
OpenSSL Version OpenSSL 3.2.1 30 Jan 2024
Is contained false
Is homebrew false
Is installed via Fabric.app false
Xcode Path /Applications/Xcode.app/Contents/Developer/
Xcode Version 15.3
Swift Version 5.10

System Locale

Variable Value
LANG en_GB.UTF-8
LC_ALL
LANGUAGE

fastlane files:

`./fastlane/Fastfile`
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

ENV['SUPPLY_UPLOAD_MAX_RETRIES']='10'

default_platform(:android)

def gradle_properties
  if ENV["MAVEN_CREDENTIALS_USR"] && ENV["MAVEN_CREDENTIALS_PSW"]
    return {
      "mavenUsername" => ENV["MAVEN_CREDENTIALS_USR"],
      "mavenPassword" => ENV["MAVEN_CREDENTIALS_PSW"]
    }
  else
    return {}
  end
end

platform :android do

  desc "Upload an AAB to Google Play"
  lane :gplay do |options|

    gradle(
      task: "app:bundle",
      flavor: options[:variant].capitalize(),
      build_type: "Release",
      properties: gradle_properties()
    )

    supply(
      track: "production",
      release_status: "draft",
      aab: lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH],
      skip_upload_apk: true,
      skip_upload_screenshots: true,
      skip_upload_images: true,
      skip_upload_metadata: true,
      json_key: ".service_accounts/" + options[:service_account] + ".json",
      package_name: options[:base_app_identifier] + (options[:variant] != "prod" ? "." + options[:variant] : "")
    )
  end

  desc "Upload an AAB or APK to Firebase App Distribution"
  lane :firebase do |options|

    artifact_type = options[:artifact_type] || "AAB"

    gradle(
          task: (artifact_type == "APK" ? "app:assemble" : "app:bundle"),
          flavor: options[:variant].capitalize(),
          build_type: "Release",
          properties: gradle_properties()
    )

    artifact_path = lane_context[artifact_type == "APK" ? lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] : lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH]]

    firebase_app_distribution(
        app: options[:firebase_app_id],
        android_artifact_type: artifact_type,
        android_artifact_path: artifact_path,
        groups: options[:firebase_tester_groups],
        service_credentials_file: ".service_accounts/" + options[:service_account] + ".json"
    )
  end
end

No Appfile found

fastlane gems

Gem Version Update-Status
fastlane 2.220.0 ✅ Up-To-Date

Loaded fastlane plugins:

Plugin Version Update-Status
fastlane-plugin-firebase_app_distribution 0.9.1 ✅ Up-To-Date
Loaded gems
Gem Version
error_highlight 0.6.0
did_you_mean 1.6.3
syntax_suggest 2.0.0
bundler 2.5.9
pathname 0.3.0
rake 13.2.1
base64 0.2.0
nkf 0.2.0
rexml 3.2.6
CFPropertyList 3.0.7
public_suffix 5.0.5
addressable 2.8.6
artifactory 3.0.17
atomos 0.1.3
aws-eventstream 1.3.0
aws-partitions 1.925.0
aws-sigv4 1.8.0
jmespath 1.6.2
aws-sdk-core 3.194.2
aws-sdk-kms 1.80.0
aws-sdk-s3 1.149.1
babosa 1.0.4
claide 1.1.0
colored 1.2
colored2 3.1.2
highline 2.0.3
commander 4.6.0
declarative 0.0.20
digest-crc 0.6.5
domain_name 0.6.20240107
dotenv 2.8.1
emoji_regex 3.2.3
excon 0.110.0
faraday-em_http 1.0.0
faraday-em_synchrony 1.0.0
faraday-excon 1.1.0
faraday-httpclient 1.0.1
multipart-post 2.4.1
faraday-multipart 1.0.4
faraday-net_http 1.0.1
faraday-net_http_persistent 1.2.0
faraday-patron 1.0.0
faraday-rack 1.0.0
faraday-retry 1.0.3
ruby2_keywords 0.0.5
faraday 1.10.3
http-cookie 1.0.5
faraday-cookie_jar 0.0.7
faraday_middleware 1.2.0
fastimage 2.3.1
gh_inspector 1.1.3
jwt 2.8.1
multi_json 1.15.0
os 1.1.4
signet 0.19.0
googleauth 1.8.1
httpclient 2.8.3
mini_mime 1.1.5
trailblazer-option 0.1.2
uber 0.1.0
representable 3.2.0
retriable 3.1.2
google-apis-core 0.11.3
google-apis-androidpublisher_v3 0.54.0
google-apis-playcustomapp_v1 0.13.0
google-cloud-env 1.6.0
google-apis-iamcredentials_v1 0.17.0
google-apis-storage_v1 0.31.0
google-cloud-errors 1.4.0
google-cloud-core 1.7.0
google-cloud-storage 1.47.0
json 2.7.2
mini_magick 4.12.0
naturally 2.2.1
optparse 0.5.0
plist 3.7.1
rubyzip 2.3.2
security 0.1.5
simctl 1.6.10
terminal-notifier 2.0.0
unicode-display_width 2.5.0
terminal-table 3.0.2
tty-screen 0.8.2
tty-cursor 0.7.1
tty-spinner 0.9.3
word_wrap 1.0.0
nanaimo 0.3.0
xcodeproj 1.24.0
rouge 2.0.7
xcpretty 0.3.0
xcpretty-travis-formatter 1.0.1
google-apis-firebaseappdistribution_v1 0.3.0
google-apis-firebaseappdistribution_v1alpha 0.2.0
fastlane-plugin-firebase_app_distribution 0.9.1

generated on: 2024-05-09

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant