From 3a41138f3933e44b4a04d02a94cbc5f0968d6418 Mon Sep 17 00:00:00 2001 From: aj-rosado <109146700+aj-rosado@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:36:46 +0000 Subject: [PATCH] [PM-10515] CI build info on version copy (#4456) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Álison Fernandes --- .github/workflows/build.yml | 4 ++ app/build.gradle.kts | 2 +- .../feature/settings/about/AboutViewModel.kt | 29 +++++++++++++- .../settings/about/AboutViewModelTest.kt | 17 ++++++++- scripts/update_app_ci_build_info.sh | 38 +++++++++++++++++++ 5 files changed, 86 insertions(+), 4 deletions(-) create mode 100755 scripts/update_app_ci_build_info.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 58160df4a5..bedb6c4062 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -460,6 +460,10 @@ jobs: distribution: "temurin" java-version: ${{ env.JAVA_VERSION }} + - name: Update app CI Build info + run: | + ./Scripts/update_app_ci_build_info.sh $GITHUB_REPOSITORY $GITHUB_REF_NAME $GITHUB_SHA $GITHUB_RUN_ID $GITHUB_RUN_ATTEMPT + # Start from 11000 to prevent collisions with mobile build version codes - name: Increment version run: | diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 624cd85418..aa070e8f37 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -68,7 +68,7 @@ android { buildConfigField( type = "String", name = "CI_INFO", - value = "\"${ciProperties.getOrDefault("ci.info", "local")}\"" + value = "${ciProperties.getOrDefault("ci.info", "\"local\"")}" ) } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutViewModel.kt index a354e064bc..c345c09e50 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutViewModel.kt @@ -1,5 +1,6 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.about +import android.os.Build import android.os.Parcelable import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope @@ -91,8 +92,34 @@ class AboutViewModel @Inject constructor( } private fun handleVersionClick() { + val buildFlavour = when (BuildConfig.FLAVOR) { + "standard" -> "" + else -> "-${BuildConfig.FLAVOR}" + } + + val buildVariant = when (BuildConfig.BUILD_TYPE) { + "debug" -> "dev" + "release" -> "prod" + else -> BuildConfig.BUILD_TYPE + } + + val deviceBrandModel = "\uD83D\uDCF1 ${Build.BRAND} ${Build.MODEL}" + val osInfo = "\uD83E\uDD16 ${Build.VERSION.RELEASE}@${Build.VERSION.SDK_INT}" + val buildInfo = "\uD83D\uDCE6 $buildVariant$buildFlavour" + val ciBuildInfoString = BuildConfig.CI_INFO + clipboardManager.setText( - text = state.copyrightInfo.concat("\n\n".asText()).concat(state.version), + text = state.copyrightInfo + .concat("\n\n".asText()) + .concat(state.version) + .concat("\n".asText()) + .concat("$deviceBrandModel $osInfo $buildInfo".asText()) + .concat( + "\n$ciBuildInfoString" + .takeUnless { ciBuildInfoString.isEmpty() } + .orEmpty() + .asText(), + ), ) } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutViewModelTest.kt index 075d13c4d9..51efe4c053 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutViewModelTest.kt @@ -1,5 +1,6 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.about +import android.os.Build import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test import com.x8bit.bitwarden.BuildConfig @@ -111,12 +112,24 @@ class AboutViewModelTest : BaseViewModelTest() { fun `on VersionClick should call setText on the ClipboardManager with specific Text`() { val versionName = BuildConfig.VERSION_NAME val versionCode = BuildConfig.VERSION_CODE + + val deviceBrandModel = "\uD83D\uDCF1 ${Build.BRAND} ${Build.MODEL}" + val osInfo = "\uD83E\uDD16 ${Build.VERSION.RELEASE}@${Build.VERSION.SDK_INT}" + val buildInfo = "\uD83D\uDCE6 dev" + val ciInfo = BuildConfig.CI_INFO + val expectedText = "© Bitwarden Inc. 2015-" .asText() .concat(Year.now(fixedClock).value.toString().asText()) .concat("\n\n".asText()) + .concat("Version: $versionName ($versionCode)".asText()) + .concat("\n".asText()) + .concat("$deviceBrandModel $osInfo $buildInfo".asText()) .concat( - "Version: $versionName ($versionCode)".asText(), + "\n$ciInfo" + .takeUnless { ciInfo.isEmpty() } + .orEmpty() + .asText(), ) every { clipboardManager.setText(expectedText, true, null) } just runs @@ -125,7 +138,7 @@ class AboutViewModelTest : BaseViewModelTest() { viewModel.trySendAction(AboutAction.VersionClick) verify(exactly = 1) { - clipboardManager.setText(expectedText, true, null) + clipboardManager.setText(expectedText, ofType(Boolean::class), isNull()) } } diff --git a/scripts/update_app_ci_build_info.sh b/scripts/update_app_ci_build_info.sh new file mode 100755 index 0000000000..07279f0280 --- /dev/null +++ b/scripts/update_app_ci_build_info.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# CI Build Info Updater +# +# Updates the ci.properties file with additional info from the CI build. +# +# Prerequisites: +# - Git command line tools installed +# - Write access to ci.properties file + +if [ $# -ne 5 ]; then + echo "Usage: $0 " + echo "E.g: $0 bitwarden/android main abc123 123 1" + exit 1 +fi + +set -euo pipefail + +repository=$1 +branch=$2 +commit_hash=$3 +ci_run_number=$4 +ci_run_attempt=$5 + +ci_build_info_file="../ci.properties" +git_source="${repository}/${branch}@${commit_hash}" +ci_run_source="${repository}/actions/runs/${ci_run_number}/attempts/${ci_run_attempt}" +emoji_brick="\\ud83e\\uddf1" # 🧱 +emoji_computer="\\ud83d\\udcbb" # 💻 + +echo "🧱 Updating app CI Build info..." +echo "🧱 🧱 commit: ${git_source}" +echo "🧱 💻 build source: ${ci_run_source}" + +cat << EOF > ${ci_build_info_file} +ci.info="${emoji_brick} commit: ${git_source}\\\n${emoji_computer} build source: ${ci_run_source}" +EOF + +echo "✅ CI Build info updated successfully."