diff --git a/.github/actions/common-steps/action.yml b/.github/actions/common-steps/action.yml index 9f2aa5c..025e84e 100644 --- a/.github/actions/common-steps/action.yml +++ b/.github/actions/common-steps/action.yml @@ -6,9 +6,9 @@ runs: using: composite steps: - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: zulu java-version: 11 - name: Setup Gradle - uses: gradle/gradle-build-action@v2 \ No newline at end of file + uses: gradle/gradle-build-action@v3 \ No newline at end of file diff --git a/.github/workflows/tfc.yml b/.github/workflows/tfc.yml index 7de9e6f..6e9e703 100644 --- a/.github/workflows/tfc.yml +++ b/.github/workflows/tfc.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Cancel Stale Jobs - uses: styfle/cancel-workflow-action@0.11.0 + uses: styfle/cancel-workflow-action@0.12.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -30,18 +30,18 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Validate Gradle wrapper - uses: gradle/wrapper-validation-action@v1 + uses: gradle/wrapper-validation-action@v3 assemble: name: Assembling runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Common Steps @@ -55,7 +55,7 @@ jobs: - name: Assemble TFC run: ./gradlew assembleDebug --no-daemon --scan - name: Upload compose reports artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: compose-reports @@ -72,7 +72,7 @@ jobs: security-events: write steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Common Steps @@ -86,7 +86,7 @@ jobs: - name: Run detekt run: ./gradlew detektAll lintDebug --no-daemon - name: Upload static reports artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: static-report path: | @@ -94,7 +94,7 @@ jobs: **/build/reports/lint-results-debug.xml retention-days: 1 - name: Analyze detekt report - uses: github/codeql-action/upload-sarif@v2 + uses: github/codeql-action/upload-sarif@v3 with: sarif_file: build/reports/detekt/detekt.sarif checkout_path: ${{ github.workspace }} @@ -104,7 +104,7 @@ jobs: runs-on: macos-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Common Steps @@ -118,14 +118,14 @@ jobs: - name: Run unit tests run: ./gradlew unitTests koverXmlReport koverMergedReport koverMergedVerify --no-daemon --scan - name: Upload tests reports artifact (success) - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: success() with: name: tests-reports path: build/reports/allTests retention-days: 7 - name: Upload tests reports artifact (failure) - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: tests-reports @@ -134,13 +134,13 @@ jobs: **/build/reports/tests/testDebugUnitTest retention-days: 7 - name: Upload coverage reports artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: coverage-reports path: '**/build/reports/kover/xml/report.xml' retention-days: 1 - name: Upload report to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} files: build/reports/kover/merged/xml/report.xml @@ -153,7 +153,7 @@ jobs: needs: [ static-analysis, unit-tests ] steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Common Steps @@ -165,12 +165,12 @@ jobs: touch app/google-services.json echo $GOOGLE_SERVICES >> app/google-services.json - name: Download static report artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: static-report path: . - name: Download coverage artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: coverage-reports path: . @@ -194,7 +194,7 @@ jobs: needs: [ assemble, static-analysis, unit-tests ] steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Common Steps @@ -223,7 +223,7 @@ jobs: needs: [ assemble, static-analysis, unit-tests ] steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Common Steps @@ -263,7 +263,7 @@ jobs: environment: production version: ${{ github.ref }} - name: Create Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: diff --git a/build.gradle.kts b/build.gradle.kts index 2984bcf..395744e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,12 +22,12 @@ buildscript { maven(url = "https://jitpack.io") } dependencies { - classpath("com.android.tools.build:gradle:7.3.1") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10") - classpath("com.google.dagger:hilt-android-gradle-plugin:2.44.2") - classpath("org.jetbrains.kotlin:kotlin-serialization:1.7.10") - classpath("com.google.gms:google-services:4.3.14") - classpath("com.google.firebase:firebase-crashlytics-gradle:2.9.2") + classpath("com.android.tools.build:gradle:8.6.0") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.20") + classpath("com.google.dagger:hilt-android-gradle-plugin:2.52") + classpath("org.jetbrains.kotlin:kotlin-serialization:2.0.20") + classpath("com.google.gms:google-services:4.4.2") + classpath("com.google.firebase:firebase-crashlytics-gradle:3.0.2") classpath("org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.5.0.2730") } } @@ -35,9 +35,9 @@ buildscript { val liba = extensions.getByType().named("libs") plugins { - id("org.jetbrains.kotlinx.kover") version "0.6.1" - id("io.gitlab.arturbosch.detekt") version "1.22.0" - id("org.sonarqube") version "3.5.0.2730" + id("org.jetbrains.kotlinx.kover") version "0.8.3" + id("io.gitlab.arturbosch.detekt") version "1.23.7" + id("org.sonarqube") version "5.1.0.4882" } val Test.isDev get() = name.contains("debug", ignoreCase = true) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ff6dbb4..3034bd7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,60 +1,60 @@ [versions] # Plugins -detekt = "1.22.0" -androidGradle = "7.3.1" +detekt = "1.23.7" +androidGradle = "8.6.0" sonarqube = "3.2.0" -ktlint = "0.47.1" +ktlint = "0.51.0-FINAL" junit = "4.13.2" -ksp = "1.7.10-1.0.6" -firebaseCrashlyticsPlugin = "2.9.2" -googleServices = "4.3.14" -gmsAuthService = "20.4.0" +ksp = "2.0.20-1.0.25" +firebaseCrashlyticsPlugin = "3.0.2" +googleServices = "4.4.2" +gmsAuthService = "21.2.0" coverage-engine = "1.0.686" # production libraries -coreKtx = "1.9.0" -androidxAppCompat = "1.5.1" -lifecycleRuntime = "2.5.1" -coil = "2.2.2" +coreKtx = "1.13.1" +androidxAppCompat = "1.7.0" +lifecycleRuntime = "2.8.5" +coil = "2.7.0" compose = "1.3.2" -composeAccompanist = "0.28.0" +composeAccompanist = "0.36.0" androidxComposeBom = "2022.12.00" androidxComposeCompiler = "1.3.2" androidxComposeRuntimeTracing = "1.0.0-alpha01" composeCompiler = "1.3.0" composeNavigation = "2.5.2" -composeNavigationHilt = "1.0.0" -androidxActivity = "1.6.1" +composeNavigationHilt = "1.2.0" +androidxActivity = "1.9.2" composePaging = "1.0.0-alpha16" composeSwipeRefresh = "0.24.0-alpha" composeMaterial3 = "1.0.0-beta03" -desugar = "1.1.6" -hilt = "2.44.2" -kotlin = "1.7.10" -kotlinCoroutines = "1.6.4" -kotlinSerialization = "1.4.1" -kotlinSerializationConverter = "0.8.0" -kotlinCoroutinePlayServices = "1.6.4" -lifecycle = "2.5.1" - -firebaseBoM = "31.1.1" -appCheckDebug = "16.1.0" +desugar = "2.1.2" +hilt = "2.52" +kotlin = "2.0.20" +kotlinCoroutines = "1.8.1" +kotlinSerialization = "1.7.2" +kotlinSerializationConverter = "1.0.0" +kotlinCoroutinePlayServices = "1.8.1" +lifecycle = "2.8.5" + +firebaseBoM = "33.2.0" +appCheckDebug = "18.0.0" # test libraries testJunit = "5.9.0" -testMockk = "1.13.2" +testMockk = "1.13.12" testTurbine = "0.9.0" testKotest = "5.4.2" # android test libraries -testAndroidRunner = "1.5.1" -androidxTestCore = "1.5.0" -androidxTestExt = "1.1.4" -androidxTestRunner = "1.5.1" -androidxTestRules = "1.5.0" -androidxUiAutomator = "2.2.0" -androidxEspresso = "3.5.0" +testAndroidRunner = "1.6.2" +androidxTestCore = "1.6.1" +androidxTestExt = "1.2.1" +androidxTestRunner = "1.6.2" +androidxTestRules = "1.6.1" +androidxUiAutomator = "2.3.0" +androidxEspresso = "3.6.1" @@ -93,10 +93,10 @@ compose-material = { group = "androidx.compose.material", name = "material" } compose-material3 = { group = "androidx.compose.material3", name = "material3" } compose-material3-windowSizeClass = { group = "androidx.compose.material3", name = "material3-window-size-class" } compose-runtime = { group = "androidx.compose.runtime", name = "runtime" } -compose-paging3 = { module = "androidx.paging:paging-compose", version = "1.0.0-alpha17" } -compose-navigation = { module = "androidx.navigation:navigation-compose", version = "2.5.3" } +compose-paging3 = { module = "androidx.paging:paging-compose", version = "3.3.2" } +compose-navigation = { module = "androidx.navigation:navigation-compose", version = "2.8.0" } compose-navigationHilt = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "composeNavigationHilt" } -lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version = "2.5.1" } +lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version = "2.8.5" } compose-runtime-livedata = { group = "androidx.compose.runtime", name = "runtime-livedata" } compose-runtime-tracing = { group = "androidx.compose.runtime", name = "runtime-tracing", version.ref = "androidxComposeRuntimeTracing" } compose-ui-test = { group = "androidx.compose.ui", name = "ui-test-junit4" } @@ -127,7 +127,7 @@ firebase-appCheckDebug = { module = "com.google.firebase:firebase-appcheck-debug # test libraries test-junit = { module = "junit:junit", version.ref = "junit" } test-kotlin = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -test-kotest = { module = "io.kotest:kotest-assertions-core", version = "5.5.4" } +test-kotest = { module = "io.kotest:kotest-assertions-core", version = "5.9.1" } androidx-test-core = { group = "androidx.test", name = "core", version.ref = "androidxTestCore" } androidx-test-ext = { group = "androidx.test.ext", name = "junit-ktx", version.ref = "androidxTestExt" } androidx-test-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "androidxEspresso" } @@ -149,7 +149,7 @@ ktlint = { module = "com.pinterest:ktlint", version.ref = "ktlint" } # Detekt detekt-compose = { module = "com.twitter.compose.rules:detekt", version = "0.0.26" } -detekt-compose2 = { module = "ru.kode:detekt-rules-compose", version = "1.2.2" } +detekt-compose2 = { module = "ru.kode:detekt-rules-compose", version = "1.4.0" } detekt-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } gradle-hilt = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "hilt" } gradle-detekt = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cb..a4b76b9 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f398c33..9355b41 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68..f5feea6 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -83,10 +85,9 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,10 +134,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -144,7 +148,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +156,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,11 +201,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 6689b85..9b42019 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail