Compare commits

..

14 Commits

Author SHA1 Message Date
Geoffroy Bonneville
c2c146a28e Fix fastlane gradle path 2025-11-10 12:46:04 -05:00
Geoffroy Bonneville
0b479e10c8 Fix pipeline 2025-11-10 12:38:45 -05:00
Geoffroy Bonneville
0fbdec570a Fix fastlane gradle file read 2025-11-10 12:34:45 -05:00
Geoffroy Bonneville
e44bb99479 Fix fastlane local version retrieval 2025-11-10 12:23:46 -05:00
Geoffroy Bonneville
dcaecbf185 Fix scrolling in menu
Improve pipeline
2025-11-10 12:14:38 -05:00
Geoffroy Bonneville
e6f81fa177 Shrink changelog 2025-11-09 19:18:17 -05:00
Geoffroy Bonneville
b3af094eed Fix key store path 2025-11-09 18:54:08 -05:00
Geoffroy Bonneville
49a58a8977 Sign AAB 2025-11-09 18:42:33 -05:00
Geoffroy Bonneville
af0bb51f01 Bump up Ruby version
Use Bundle in pipeline
2025-11-09 15:33:16 -05:00
Geoffroy Bonneville
5e418211bf Use fastlane for deployment 2025-11-09 15:27:41 -05:00
Geoffroy Bonneville
92dc0ffa2d Use fastlane for deployment 2025-11-09 15:27:11 -05:00
Geoffroy Bonneville
b48655e40a Fix deploy pipeline (ter) 2025-11-08 22:09:54 -05:00
Geoffroy Bonneville
7a453d0d79 Fix deploy pipeline (bis) 2025-11-08 22:07:24 -05:00
Geoffroy Bonneville
2e5970dc97 Fix deploy pipeline 2025-11-08 16:19:56 -05:00
13 changed files with 365 additions and 69 deletions

View File

@@ -5,11 +5,9 @@ on:
branches:
- master
pull_request:
workflow_dispatch:
env:
MODULE: donextv2
BUILD_DIR: donextv2/build/outputs/bundle/release
jobs:
build:
@@ -17,7 +15,7 @@ jobs:
steps:
- name: Checkout repo
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v3
@@ -25,10 +23,6 @@ jobs:
distribution: 'temurin'
java-version: '17'
- name: Replace tokens in build.gradle
run: |
sed -i 's/#{\([^}]*\)}/${\1}/g' donext/build.gradle
- name: Cache Gradle
uses: actions/cache@v3
with:
@@ -39,37 +33,26 @@ jobs:
restore-keys: |
${{ runner.os }}-gradle-
- name: Run unit tests
run: ./gradlew :${{ env.MODULE }}:testDebugUnitTest --stacktrace
- name: Decode signing key
run: echo "${{ secrets.SIGNING_KEY_BASE64 }}" | base64 --decode > ${{ env.MODULE }}/upload.jks
- name: Build AAB
run: ./gradlew :${{ env.MODULE }}:bundleRelease
- name: Upload artifact
uses: actions/upload-artifact@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
name: release-aab
path: ${{ env.BUILD_DIR }}/*release*.aab
ruby-version: 3.4
deploy-google-play:
needs: build
if: github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
- name: Install Fastlane
run: bundle install
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: release-aab
path: release
- name: Configure Google credentials
run: echo '${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}' > service-account.json
- name: Deploy to Google Play (production)
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
packageName: com.wismna.geoffroy.donext
releaseFiles: release/app-release.aab
track: beta
metadataRootDirectory: fastlane/metadata/android
whatsNewDirectory: fastlane/metadata/android/en-US/changelogs
status: completed
- name: Run Fastlane
env:
MODULE: ${{ env.MODULE }}
SUPPLY_JSON_KEY: service-account.json
KEYSTORE_FILE: upload.jks
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
ALIAS_NAME: ${{ secrets.ALIAS_NAME }}
ALIAS_PASSWORD: ${{ secrets.ALIAS_PASSWORD }}
run: bundle exec fastlane internal

2
.gitignore vendored
View File

@@ -1,5 +1,6 @@
*.iml
*.apk
*.jks
.gradle
/local.properties
/.idea/workspace.xml
@@ -8,3 +9,4 @@
/build
/captures
/fastlane/keys/
/donext*/release/

View File

@@ -1,3 +1,4 @@
source "https://rubygems.org"
gem "fastlane"
gem 'abbrev'

230
Gemfile.lock Normal file
View File

@@ -0,0 +1,230 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.7)
base64
nkf
rexml
abbrev (0.1.2)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.4.0)
aws-partitions (1.1181.0)
aws-sdk-core (3.236.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
base64
bigdecimal
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.117.0)
aws-sdk-core (~> 3, >= 3.234.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.203.0)
aws-sdk-core (~> 3, >= 3.234.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.3.0)
bigdecimal (3.3.1)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
declarative (0.0.20)
digest-crc (0.7.0)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.6.20240107)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.112.0)
faraday (1.10.4)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0)
faraday-multipart (~> 1.0)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.0)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
faraday-retry (~> 1.0)
ruby2_keywords (>= 0.0.4)
faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0)
http-cookie (~> 1.0.0)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.1)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.1.1)
multipart-post (~> 2.0)
faraday-net_http (1.0.2)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.1)
faraday (~> 1.0)
fastimage (2.4.0)
fastlane (2.228.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
aws-sdk-s3 (~> 1.0)
babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
colored (~> 1.2)
commander (~> 4.6)
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 4.0)
excon (>= 0.71.0, < 1.0.0)
faraday (~> 1.0)
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
fastlane-sirp (>= 1.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
google-cloud-env (>= 1.6.0, < 2.0.0)
google-cloud-storage (~> 1.31)
highline (~> 2.0)
http-cookie (~> 1.0.5)
json (< 3.0.0)
jwt (>= 2.1.0, < 3)
mini_magick (>= 4.9.4, < 5.0.0)
multipart-post (>= 2.0.0, < 3.0.0)
naturally (~> 2.2)
optparse (>= 0.1.1, < 1.0.0)
plist (>= 3.1.0, < 4.0.0)
rubyzip (>= 2.0.0, < 3.0.0)
security (= 0.1.5)
simctl (~> 1.6.3)
terminal-notifier (>= 2.0.0, < 3.0.0)
terminal-table (~> 3)
tty-screen (>= 0.6.3, < 1.0.0)
tty-spinner (>= 0.8.0, < 1.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.4.1)
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.0.0)
sysrandom (~> 1.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.54.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.3)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
mini_mime (~> 1.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
rexml
google-apis-iamcredentials_v1 (0.17.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.31.0)
google-apis-core (>= 0.11.0, < 2.a)
google-cloud-core (1.8.0)
google-cloud-env (>= 1.0, < 3.a)
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.5.0)
google-cloud-storage (1.47.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.31.0)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (1.8.1)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-cookie (1.0.8)
domain_name (~> 0.5)
httpclient (2.9.0)
mutex_m
jmespath (1.6.2)
json (2.16.0)
jwt (2.10.2)
base64
logger (1.7.0)
mini_magick (4.13.2)
mini_mime (1.1.5)
multi_json (1.17.0)
multipart-post (2.4.1)
mutex_m (0.3.0)
nanaimo (0.4.0)
naturally (2.3.0)
nkf (0.2.0)
optparse (0.8.0)
os (1.1.4)
plist (3.7.2)
public_suffix (6.0.2)
rake (13.3.1)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rexml (3.4.4)
rouge (3.28.0)
ruby2_keywords (0.0.5)
rubyzip (2.4.1)
security (0.1.5)
signet (0.21.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 4.0)
multi_json (~> 1.10)
simctl (1.6.10)
CFPropertyList
naturally
sysrandom (1.0.5)
terminal-notifier (2.0.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
trailblazer-option (0.1.2)
tty-cursor (0.7.1)
tty-screen (0.8.2)
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
unicode-display_width (2.6.0)
word_wrap (1.0.0)
xcodeproj (1.27.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.4.0)
rexml (>= 3.3.6, < 4.0)
xcpretty (0.4.1)
rouge (~> 3.28.0)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS
x64-mingw-ucrt
DEPENDENCIES
abbrev
fastlane
BUNDLED WITH
2.7.2

View File

@@ -42,7 +42,7 @@ dependencies {
implementation "com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}"
// Lifecycle components
def lifecycleVersion = '2.9.3'
def lifecycleVersion = '2.9.4'
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycleVersion"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycleVersion"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"

View File

@@ -1,3 +1,5 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
@@ -18,12 +20,21 @@ android {
applicationId = "com.wismna.geoffroy.donext"
minSdk = 26
targetSdk = 36
versionCode = 34
versionName = "2.0"
versionCode = 35
versionName = "2.0.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
signingConfigs {
create("release") {
storeFile = file(System.getenv("KEYSTORE_FILE") ?: "./upload.jks")
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = System.getenv("ALIAS_NAME")
keyPassword = System.getenv("ALIAS_PASSWORD")
}
}
sourceSets {
getByName("debug").assets.srcDirs(files("$projectDir/schemas"))
}
@@ -38,14 +49,17 @@ android {
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
signingConfig = signingConfigs["release"]
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
kotlin {
compilerOptions {
jvmTarget = JvmTarget.JVM_11
}
}
buildFeatures {
compose = true

View File

@@ -6,6 +6,8 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Checklist
import androidx.compose.material.icons.filled.Delete
@@ -43,7 +45,8 @@ fun MenuScreen(
Column(
modifier = Modifier
.fillMaxHeight()
.padding(vertical = 8.dp),
.padding(vertical = 8.dp)
.verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.SpaceBetween
) {
Column {

View File

@@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CalendarMonth
import androidx.compose.material.icons.filled.Clear
@@ -61,7 +63,7 @@ fun TaskScreen(
titleFocusRequester.requestFocus()
}
Column(Modifier.padding(16.dp)) {
Column(Modifier.padding(16.dp).verticalScroll(rememberScrollState())) {
Text(
stringResource(
if (viewModel.isDeleted) R.string.task_title_deleted

View File

@@ -1,2 +1,2 @@
json_key_file("./fastlane/keys/donext-f9e67-5038064982b0")
json_key_file(ENV["SUPPLY_JSON_KEY"] || "./fastlane/keys/donext-f9e67-5038064982b0")
package_name("com.wismna.geoffroy.donext")

View File

@@ -1,26 +1,30 @@
default_platform(:android)
platform :android do
desc "Run all unit tests"
lane :test do
desc "Build, test, and deploy to Google Play"
lane :internal do
module_name = ENV["MODULE"]
# Read local versionCode
project_root = File.expand_path("..", __dir__)
gradle_path = File.join(project_root, module_name, "build.gradle.kts")
UI.message("Gradle file resolved at: #{gradle_path}")
gradle_file = File.read(gradle_path)
gradle_version = gradle_file[/versionCode\s*=\s*(\d+)/, 1].to_i
# Read Play Store versionCode (track internal)
play_version = google_play_track_version_codes(
track: "internal"
).max.to_i
if gradle_version <= play_version
UI.user_error!("VersionCode #{gradle_version} should be higher than Play Store version (#{play_version}). Aborting upload.")
end
gradle(task: "testDebugUnitTest")
end
desc "Build a release APK or AAB for beta testing"
lane :beta do
gradle(task: "clean bundleRelease")
gradle(task: "clean :#{module_name}:bundleRelease")
upload_to_play_store(
track: "beta",
aab: "app/build/outputs/bundle/release/app-release.aab"
)
end
desc "Deploy the production version to Google Play"
lane :deploy do
gradle(task: "clean bundleRelease")
upload_to_play_store(
track: "production",
aab: "app/build/outputs/bundle/release/app-release.aab"
track: "internal",
aab: "#{module_name}/build/outputs/bundle/release/#{module_name}-release.aab"
)
end
end

40
fastlane/README.md Normal file
View File

@@ -0,0 +1,40 @@
fastlane documentation
----
# Installation
Make sure you have the latest version of the Xcode command line tools installed:
```sh
xcode-select --install
```
For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
# Available Actions
## Android
### android deploy
```sh
[bundle exec] fastlane android deploy
```
Build, test, and deploy the production version to Google Play
### android internal
```sh
[bundle exec] fastlane android internal
```
Build, test, and deploy to Google Play
----
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).

View File

@@ -2,10 +2,7 @@ Complete UI overhaul that gives DoNext a nice, modern look.
Complete code rewrite to Kotlin and Android Jetpack, with a better architecture.
Task lists are now displayed in a navigation menu
Tasks are now ordered by priority and not cycles
Tasks are now ordered by priority and not cycles which were removed
All tasks can be Done or Removed instead of only the first one
A Recycle Bin was added
The whole Next and cycles mechanism was removed
The History page was removed and its features split between the regular task lists and the Recycle Bin
The Today view is not a separate concept now, it's based on the tasks due date
No more Settings page as it's not needed anymore (but it may come back later if required)
Removed History page and split its features between the regular task lists and the new Recycle Bin
Today view is not a separate concept anymore and based on the tasks due date

20
fastlane/report.xml Normal file
View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="fastlane.lanes">
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.0023664">
</testcase>
<testcase classname="fastlane.lanes" name="1: testDebugUnitTest" time="0.0434096">
<failure message="D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/actions/actions_helper.rb:67:in &apos;Fastlane::Actions.execute_action&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/runner.rb:255:in &apos;block in Fastlane::Runner#execute_action&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/runner.rb:229:in &apos;Dir.chdir&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/runner.rb:229:in &apos;Fastlane::Runner#execute_action&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/runner.rb:157:in &apos;Fastlane::Runner#trigger_action_by_name&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/fast_file.rb:159:in &apos;Fastlane::FastFile#method_missing&apos;&#10;Fastfile:16:in &apos;block (2 levels) in Fastlane::FastFile#parsing_binding&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/lane.rb:41:in &apos;Fastlane::Lane#call&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/runner.rb:49:in &apos;block in Fastlane::Runner#execute&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/runner.rb:45:in &apos;Dir.chdir&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/runner.rb:45:in &apos;Fastlane::Runner#execute&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/lane_manager.rb:46:in &apos;Fastlane::LaneManager.cruise_lane&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/command_line_handler.rb:34:in &apos;Fastlane::CommandLineHandler.handle&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/commands_generator.rb:110:in &apos;block (2 levels) in Fastlane::CommandsGenerator#run&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/commander-4.6.0/lib/commander/command.rb:187:in &apos;Commander::Command#call&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/commander-4.6.0/lib/commander/command.rb:157:in &apos;Commander::Command#run&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/commander-4.6.0/lib/commander/runner.rb:444:in &apos;Commander::Runner#run_active_command&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:124:in &apos;Commander::Runner#run!&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/commander-4.6.0/lib/commander/delegates.rb:18:in &apos;Commander::Delegates#run!&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/commands_generator.rb:363:in &apos;Fastlane::CommandsGenerator#run&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/commands_generator.rb:43:in &apos;Fastlane::CommandsGenerator.start&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/fastlane/lib/fastlane/cli_tools_distributor.rb:123:in &apos;Fastlane::CLIToolsDistributor.take_off&apos;&#10;D:/Ruby34-x64/lib/ruby/gems/3.4.0/gems/fastlane-2.228.0/bin/fastlane:23:in &apos;&lt;top (required)&gt;&apos;&#10;D:/Ruby34-x64/bin/fastlane:25:in &apos;Kernel#load&apos;&#10;D:/Ruby34-x64/bin/fastlane:25:in &apos;&lt;main&gt;&apos;&#10;&#10;Exit status of command &apos;D:/source/DoNext/gradlew testDebugUnitTest -p .&apos; was 1 instead of 0.&#10;&#10;ERROR: JAVA_HOME is not set and no &apos;java&apos; command could be found in your PATH.&#10;&#10;Please set the JAVA_HOME variable in your environment to match the&#10;location of your Java installation.&#10;" />
</testcase>
</testsuite>
</testsuites>