diff --git a/Jenkinsfile b/Jenkinsfile index 8678bf2..b91703c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -58,11 +58,8 @@ def workingBranch = 'master' def deployBranches = [ 'acceptance', 'production', ] -// Define the directory where the package (bundle) will be build -def buildDir = 'app/build/outputs/bundle' -// Define the directory where the package (apk) will be build. -// Fabric Crashlytics / Firebase App Distribution only support APKs as of June 2020 -def buildDirApk = 'app/build/outputs/apk' +// Define the parent directory where the apk or bundle will be build +def buildDir = 'app/build/outputs' // Initialize lazyConfig for this pipeline lazyConfig( @@ -73,6 +70,7 @@ ANDROID_HOME: '/opt/android/sdk', GRADLE_USER_HOME: '/opt/android/gradle', GRADLE_OPTS: '-XX:MaxMetaspaceSize=256m -Xmx1792m -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -Dme.jenkins -Dorg.gradle.daemon=false -Dkotlin.compiler.execution.strategy=in-process', + ANDROID_BUNDLE: 'true', ANDROID_KEYALIAS: 'upload', ANDROID_KEYSTORE_CID: 'dummy-android', GOOGLE_API_CID: 'dappre-google-api', @@ -136,11 +134,7 @@ currentBuild.displayName = "#${env.BUILD_NUMBER} ${currentVersion.string}-${currentVersion.number}" }, run: { - // Fabric Crashlytics / Firebase App Distribution only support APKs as of June 2020 - if (env.ANDROID_KEYALIAS != 'upload') - fastLane('android', 'build_apk') - else - fastLane('android', 'build') + fastLane('android', 'build') }, args: "-v /opt/android:/opt/android" + " -v /opt/certificates:/opt/certificates" @@ -149,13 +143,10 @@ in: [ 'centos7' ], on: 'android', post: { + // Process Unitest reports junit(testResults: 'fastlane/report.xml,**/build/test-results/*/*.xml', allowEmptyResults: true) - - // Fabric Crashlytics / Firebase App Distribution only support APKs as of June 2020 - if (env.ANDROID_KEYALIAS != 'upload') - archiveArtifacts(artifacts: "${buildDirApk}/**", allowEmptyArchive: false) - else - archiveArtifacts(artifacts: "${buildDir}/**", allowEmptyArchive: false) + // Archive apk/aab and mapping to publish in later stage + archiveArtifacts(artifacts: "${buildDir}/**/*.apk,${buildDir}/**/*.aab,${buildDir}/**/mapping.txt", allowEmptyArchive: false) }, ] } @@ -165,10 +156,7 @@ onlyif = (! deployBranches.contains(lazyConfig['branch']) && lazyConfig['branch'] != workingBranch && lazyConfig.env.RELEASE ) tasks = [ pre: { - if (env.ANDROID_KEYALIAS != 'upload') - unarchive(mapping:["${buildDirApk}/" : '.']) - else - unarchive(mapping:["${buildDir}/" : '.']) + unarchive(mapping:["${buildDir}/" : '.']) }, run: { if ( !lazyConfig.env.DRYRUN ) { @@ -240,10 +228,7 @@ input = 'Deploy to internal testers?' tasks = [ pre: { - if (env.ANDROID_KEYALIAS != 'upload') - unarchive(mapping:["${buildDirApk}/" : '.']) - else - unarchive(mapping:["${buildDir}/" : '.']) + unarchive(mapping:["${buildDir}/" : '.']) }, run: { if ( !lazyConfig.env.DRYRUN ) { @@ -267,10 +252,7 @@ input = 'Deploy to alpha users?' tasks = [ pre: { - if (env.ANDROID_KEYALIAS != 'upload') - unarchive(mapping:["${buildDirApk}/" : '.']) - else - unarchive(mapping:["${buildDir}/" : '.']) + unarchive(mapping:["${buildDir}/" : '.']) }, run: { if ( !lazyConfig.env.DRYRUN ) { @@ -297,10 +279,7 @@ input = 'Promote to beta users?' tasks = [ pre: { - if (env.ANDROID_KEYALIAS != 'upload') - unarchive(mapping:["${buildDirApk}/" : '.']) - else - unarchive(mapping:["${buildDir}/" : '.']) + unarchive(mapping:["${buildDir}/" : '.']) }, run: { if ( !lazyConfig.env.DRYRUN ) { diff --git a/fastlane/Fastfile b/fastlane/Fastfile index b2434dd..226c6ad 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -171,19 +171,11 @@ ) end - desc "Build the apk" - lane :build_apk do |options| - gradle( - task: "clean assemble", - build_type: 'Release', - flavor: "#{getFlavorName(options)}", - ) - end - - desc "Build the bundle" + desc "Build the apk or the bundle depending of the environment" lane :build do |options| + build_task = ENV['ANDROID_BUNDLE'] == 'true' ? 'bundle' : 'assemble' gradle( - task: "clean bundle", + task: "clean #{build_task}", build_type: 'Release', flavor: "#{getFlavorName(options)}", ) @@ -193,6 +185,7 @@ lane :deploy_metadata do |options| supply( skip_upload_aab: true, + skip_upload_apk: true, skip_upload_metadata: false, skip_upload_images: false, skip_upload_screenshots: false, @@ -222,16 +215,27 @@ desc "Deploy a new internal version to the Google Play" lane :internal do |options| - supply( - aab: "app/build/outputs/bundle/#{getFlavorName(options)}Release/app-#{getFlavorName(options)}-release.aab", - mapping: "app/build/outputs/mapping/#{getFlavorName(options)}/release/mapping.txt", - track: 'internal', - skip_upload_aab: false, - skip_upload_metadata: false, - skip_upload_images: false, - skip_upload_screenshots: false, - package_name: "#{getPackageName(options)}", - ) + # Define general options + options = { + :track => 'internal', + :mapping => "app/build/outputs/mapping/#{getFlavorName(options)}Release/mapping.txt", + :skip_upload_metadata => false, + :skip_upload_images => false, + :skip_upload_screenshots => false, + :package_name => "#{getPackageName(options)}", + } + + # Add specific options for bundle or apk + if ENV['ANDROID_BUNDLE'] == 'true' + options[:aab] = "app/build/outputs/bundle/#{getFlavorName(options)}Release/app-#{getFlavorName(options)}-release.aab" + options[:skip_upload_aab] = false + else + options[:apk] = "app/build/outputs/apk/#{getFlavorName(options)}/release/app-#{getFlavorName(options)}-release.apk" + options[:skip_upload_apk] = false + end + + # Call supply with the final options + supply(options) end desc "Deploy a new alpha version to the Google Play" @@ -240,6 +244,7 @@ track: 'internal', track_promote_to: 'alpha', skip_upload_aab: true, + skip_upload_apk: true, skip_upload_metadata: true, skip_upload_images: true, skip_upload_screenshots: true, @@ -254,6 +259,7 @@ track: 'alpha', track_promote_to: 'beta', skip_upload_aab: true, + skip_upload_apk: true, skip_upload_metadata: true, skip_upload_images: true, skip_upload_screenshots: true, @@ -268,6 +274,7 @@ track: 'beta', track_promote_to: 'production', skip_upload_aab: true, + skip_upload_apk: true, skip_upload_metadata: true, skip_upload_images: true, skip_upload_screenshots: true,