Circleci branch deployment fix (#32)

- circleci Local testing
- circleci deployment fixed
- submodule circleci fix
This commit is contained in:
2023-08-05 16:39:35 +01:00
committed by GitHub
parent fa7ad37398
commit 4d00545fd3
6 changed files with 100 additions and 30 deletions

View File

@@ -14,23 +14,22 @@ commands:
description: checkout repo and android dependencies description: checkout repo and android dependencies
steps: steps:
- checkout - checkout
# Setup files for build.
- run: - run:
name: Setup subtree for test data name: Setup variables for build
command: | command: |
git config --global user.email "$GIT_EMAIL" echo "$GOOGLE_SERVICES_KEY" > "app/google-services.json"
git config --global user.name "$GIT_EMAIL" - android/restore-gradle-cache
git subtree add --prefix=driver_app_data https://github.com/hmalik144/driver_app_data main build_gradle:
description: Build the gradle
steps:
- android/restore-gradle-cache - android/restore-gradle-cache
- run: - run:
name: Download Dependencies name: Download Dependencies
command: | command: |
sudo chmod +x ./gradlew sudo chmod +x ./gradlew
./gradlew androidDependencies ./gradlew androidDependencies
# Setup files for build. - android/save-gradle-cache
- run:
name: Setup variables for build
command: |
echo "$GOOGLE_SERVICES_KEY" > "app/google-services.json"
run_tests: run_tests:
description: run non-instrumentation tests for flavour specified description: run non-instrumentation tests for flavour specified
parameters: parameters:
@@ -39,6 +38,7 @@ commands:
default: "Driver" default: "Driver"
steps: steps:
# The next step will run the unit tests # The next step will run the unit tests
- build_gradle
- run: - run:
name: Run non-instrumentation unit tests name: Run non-instrumentation unit tests
command: | command: |
@@ -56,6 +56,15 @@ commands:
default: "AtlasWeather" default: "AtlasWeather"
steps: steps:
# Download and cache dependencies # Download and cache dependencies
- build_gradle
- run:
name: Setup subtree for test data
command: |
git stash
git config --global user.email "$GIT_EMAIL"
git config --global user.name "$GIT_EMAIL"
git remote add -f driver_app_data https://github.com/hmalik144/driver_app_data.git
git subtree add --prefix=driver_app_data driver_app_data main --squash
- restore_cache: - restore_cache:
keys: keys:
- emulator-cache-v1- - emulator-cache-v1-
@@ -105,6 +114,28 @@ commands:
# Then publish the results of the Instrumentation tests! # Then publish the results of the Instrumentation tests!
- store_test_results: - store_test_results:
path: app/build/outputs/androidTest-results/connected path: app/build/outputs/androidTest-results/connected
deploy_to_play_store:
description: deploy to playstore based on flavour
parameters:
flavour:
type: string
default: "Driver"
steps:
# The next step will run the unit tests
- android/decode-keystore:
keystore-location: "./app/keystore.jks"
- run:
name: Setup playstore key
command: |
echo "$GOOGLE_PLAY_KEY" > "google-play-key.json"
- build_gradle
- run:
name: Run fastlane command to deploy to playstore
command: |
pwd
bundle exec fastlane deploy<< parameters.flavour >>
- store_test_results:
path: fastlane/report.xml
# Define a job to be invoked later in a workflow. # Define a job to be invoked later in a workflow.
# See: https://circleci.com/docs/2.0/configuration-reference/#jobs # See: https://circleci.com/docs/2.0/configuration-reference/#jobs
jobs: jobs:
@@ -125,10 +156,24 @@ jobs:
steps: steps:
# Checkout the code and its submodule as the first step. # Checkout the code and its submodule as the first step.
- setup_repo - setup_repo
- run_tests: # - run_tests:
flavour: << parameters.flavour >> # flavour: << parameters.flavour >>
- run_ui_tests: - run_ui_tests:
flavour: << parameters.flavour >> flavour: << parameters.flavour >>
deploy-to-playstore:
parameters:
flavour:
type: string
default: "Driver"
docker:
- image: cimg/android:2023.07-browsers
auth:
username: ${DOCKER_USERNAME}
password: ${DOCKER_PASSWORD}
steps:
- setup_repo
- deploy_to_play_store:
flavour: << parameters.flavour >>
# Invoke jobs via workflows # Invoke jobs via workflows
# See: https://circleci.com/docs/2.0/configuration-reference/#workflows # See: https://circleci.com/docs/2.0/configuration-reference/#workflows
workflows: workflows:
@@ -136,30 +181,36 @@ workflows:
build-release-driver: build-release-driver:
jobs: jobs:
- build-and-test: - build-and-test:
context: appttude
flavour: "Driver"
filters:
branches:
ignore:
- main_admin
- deploy-to-playstore:
context: appttude
flavour: "Driver" flavour: "Driver"
- android/deploy-to-play-store:
filters: filters:
branches: branches:
only: only:
- main_driver - main_driver
requires: requires:
- build-and-test - build-and-test
executor:
name: android/android-machine
tag: 2023.05.1
lane-name: deployDriver
build-release-admin: build-release-admin:
jobs: jobs:
- build-and-test: - build-and-test:
context: appttude
flavour: "Admin"
filters:
branches:
ignore:
- main_driver
- deploy-to-playstore:
context: appttude
flavour: "Admin" flavour: "Admin"
- android/deploy-to-play-store:
filters: filters:
branches: branches:
only: only:
- main_driver - main_admin
requires: requires:
- build-and-test - build-and-test
executor:
name: android/android-machine
tag: 2023.05.1
lane-name: deployAdmin

View File

@@ -10,6 +10,9 @@ def relStorePassword = System.getenv("RELEASE_STORE_PASSWORD")
def relKeyPassword = System.getenv("RELEASE_KEY_PASSWORD") def relKeyPassword = System.getenv("RELEASE_KEY_PASSWORD")
def relKeyAlias = System.getenv("RELEASE_KEY_ALIAS") def relKeyAlias = System.getenv("RELEASE_KEY_ALIAS")
def keystorePath = System.getenv('PWD') + "/app/keystore.jks"
def keystore = file(keystorePath).exists() ? file(keystorePath) : null
android { android {
compileSdkVersion 31 compileSdkVersion 31
defaultConfig { defaultConfig {
@@ -40,7 +43,7 @@ android {
storePassword relStorePassword storePassword relStorePassword
keyPassword relKeyPassword keyPassword relKeyPassword
keyAlias relKeyAlias keyAlias relKeyAlias
storeFile file('./keystore') storeFile keystore
} }
} }

2
ci_local.sh Normal file
View File

@@ -0,0 +1,2 @@
circleci config process .circleci/local_config.yml > process.yml
circleci local execute -v $(pwd):/root/repo -c process.yml deploy-to-play-store-1 -e $GIT_EMAIL="h.malik144@gmail.com" -e BASE64_KEYSTORE=$BASE64_KEYSTORE -e RELEASE_KEYSTORE=$RELEASE_KEYSTORE -e RELEASE_STORE_PASSWORD=$RELEASE_STORE_PASSWORD -e RELEASE_KEY_PASSWORD=$RELEASE_KEY_PASSWORD -e RELEASE_KEY_ALIAS=$RELEASE_KEY_ALIAS -e DOCKER_USERNAME=$DOCKER_USERNAME -e DOCKER_PASSWORD=$DOCKER_PASSWORD -e DRIVER_GOOGLE_SERVICES_B64=$DRIVER_GOOGLE_SERVICES_B64

View File

@@ -32,13 +32,20 @@ platform :android do
desc "Deploy a new version of Driver to the Google Play" desc "Deploy a new version of Driver to the Google Play"
lane :deployDriver do lane :deployDriver do
gradle(task: "clean bundle", flavor: "driver", build_type: "Release") gradle(
upload_to_play_store(aab: "app/build/outputs/bundle/driverRelease/app-driver-release.aab", json_key: "google-play-key.json", package_name: "h_mal.appttude.com.driver") task: "clean bundle",
flavor: "Driver",
build_type: "Release",
)
upload_to_play_store(
aab: "app/build/outputs/bundle/driverRelease/app-driver-release.aab",
json_key: "google-play-key.json",
package_name: "h_mal.appttude.com.driver")
end end
desc "Deploy a new version of Admin to the Google Play" desc "Deploy a new version of Admin to the Google Play"
lane :deployAdmin do lane :deployAdmin do
gradle(task: "clean bundle", flavor: "admin", build_type: "Release") gradle(task: "clean bundle", flavor: "Admin", build_type: "Release")
upload_to_play_store(aab: "app/build/outputs/bundle/adminRelease/app-admin-release.aab", json_key: "google-play-key.json", package_name: "h_mal.appttude.com.driver.admin") upload_to_play_store(aab: "app/build/outputs/bundle/adminRelease/app-admin-release.aab", json_key: "google-play-key.json", package_name: "h_mal.appttude.com.driver.admin")
end end
end end

View File

@@ -5,12 +5,19 @@
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.002655"> <testcase classname="fastlane.lanes" name="0: default_platform" time="0.000389544">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="1: clean bundleadminRelease" time="86.6186667"> <testcase classname="fastlane.lanes" name="1: clean bundleDriverRelease" time="5.017797615">
</testcase>
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="21.58948528">
<failure message="/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/actions/actions_helper.rb:67:in `execute_action&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/runner.rb:255:in `block in execute_action&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/runner.rb:229:in `chdir&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/runner.rb:229:in `execute_action&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/fast_file.rb:159:in `method_missing&apos;&#10;Fastfile:40:in `block (2 levels) in parsing_binding&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/lane.rb:33:in `call&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/runner.rb:49:in `block in execute&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/runner.rb:45:in `chdir&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/runner.rb:45:in `execute&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/lane_manager.rb:47:in `cruise_lane&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/command_line_handler.rb:36:in `handle&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/commands_generator.rb:110:in `block (2 levels) in run&apos;&#10;/var/lib/gems/3.0.0/gems/commander-4.6.0/lib/commander/command.rb:187:in `call&apos;&#10;/var/lib/gems/3.0.0/gems/commander-4.6.0/lib/commander/command.rb:157:in `run&apos;&#10;/var/lib/gems/3.0.0/gems/commander-4.6.0/lib/commander/runner.rb:444:in `run_active_command&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:124:in `run!&apos;&#10;/var/lib/gems/3.0.0/gems/commander-4.6.0/lib/commander/delegates.rb:18:in `run!&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/commands_generator.rb:354:in `run&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/commands_generator.rb:43:in `start&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/fastlane/lib/fastlane/cli_tools_distributor.rb:123:in `take_off&apos;&#10;/var/lib/gems/3.0.0/gems/fastlane-2.214.0/bin/fastlane:23:in `&lt;top (required)&gt;&apos;&#10;/usr/local/bin/fastlane:25:in `load&apos;&#10;/usr/local/bin/fastlane:25:in `&lt;top (required)&gt;&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/cli/exec.rb:58:in `load&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/cli/exec.rb:58:in `kernel_load&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/cli/exec.rb:23:in `run&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/cli.rb:484:in `exec&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/cli.rb:31:in `dispatch&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/cli.rb:25:in `start&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/exe/bundle:48:in `block in &lt;top (required)&gt;&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/lib/bundler/friendly_errors.rb:103:in `with_friendly_errors&apos;&#10;/usr/share/rubygems-integration/all/gems/bundler-2.3.5/exe/bundle:36:in `&lt;top (required)&gt;&apos;&#10;/usr/bin/bundle:25:in `load&apos;&#10;/usr/bin/bundle:25:in `&lt;main&gt;&apos;&#10;&#10;Google Api Error: Invalid request - APK specifies a version code that has already been used." />
</testcase> </testcase>

View File

@@ -1,6 +1,6 @@
#Mon Feb 13 21:54:13 GMT 2023 #Mon Feb 13 21:54:13 GMT 2023
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME