Skip to content

Commit

Permalink
feat: Build and upload both Android OS and Wear OS apps
Browse files Browse the repository at this point in the history
  • Loading branch information
Gimbergsson committed Jan 8, 2025
1 parent 0a3f399 commit 2f8f8d5
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 20 deletions.
39 changes: 26 additions & 13 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ jobs:
EOF
- name: Decode keystore and create jks
run: echo "${{ secrets.KEYSTORE_JKS_BASE64 }}" | base64 --decode > androidos/keystore.jks
run: |
echo "${{ secrets.KEYSTORE_JKS_BASE64 }}" | base64 --decode > androidos/keystore.jks
echo "${{ secrets.KEYSTORE_JKS_BASE64 }}" | base64 --decode > wearosos/keystore.jks
- name: Decode and create service account json
run: echo "${{ secrets.SERVICE_ACCOUNT_JSON_BASE64 }}" | base64 --decode > service-account-fehu-351916-1b4950fa3fb0.json
Expand All @@ -68,11 +70,17 @@ jobs:
echo "Keystore Path: ${{ vars.KEYSTORE_FILE_PATH }}"
ls -la
- name: Bump Version Code
- name: Bump Android OS Version Code
uses: chkfung/[email protected]
with:
gradlePath: androidos/build.gradle.kts
versionCode: ${{ github.run_number }}

- name: Bump Wear OS Version Code
uses: chkfung/[email protected]
with:
gradlePath: wearos/build.gradle.kts
versionCode: ${{ github.run_number }}

- name: Generate file name env var
run: |
Expand All @@ -82,26 +90,31 @@ jobs:
EOF)
echo OUTPUT_NAME=$MESSAGE >> $GITHUB_ENV
- name: Build Android OS release AAB
run: bash ./gradlew androidos:bundleRelease --stacktrace
- name: Build Android OS and Wear OS release AABs
run: bash ./gradlew bundleRelease --stacktrace

- name: Publish AAB artifact to Google Play Store internal track
- name: Publish AAB artifacts to Google Play Store internal tracks
run: bundle exec fastlane deploy_internal

- name: Build Android OS release APK
run: bash ./gradlew androidos:assembleRelease --stacktrace
- name: Build Android OS and Wear OS release APKs
run: bash ./gradlew assembleRelease --stacktrace

- name: Rename APK
run: mv "./androidos/build/outputs/apk/release/androidos-release.apk" "./androidos/build/outputs/apk/release/${{ env.OUTPUT_NAME }}.apk"
- name: Rename APK artifacts
run: |
mv "./androidos/build/outputs/apk/release/androidos-release.apk" "./androidos/build/outputs/apk/release/${{ env.OUTPUT_NAME }}-androidos.apk"
mv "./wearos/build/outputs/apk/release/wearos-release.apk" "./wearos/build/outputs/apk/release/${{ env.OUTPUT_NAME }}-wearos.apk"
- name: Rename AAB
- name: Rename AAB artifacts
run:
mv "./androidos/build/outputs/bundle/release/androidos-release.aab" "./androidos/build/outputs/bundle/release/${{ env.OUTPUT_NAME }}.aab"

- name: Upload release APK and ABB
mv "./androidos/build/outputs/bundle/release/androidos-release.aab" "./androidos/build/outputs/bundle/release/${{ env.OUTPUT_NAME }}-androidos.aab"
mv "./wearos/build/outputs/bundle/release/wearos-release.aab" "./wearos/build/outputs/bundle/release/${{ env.OUTPUT_NAME }}-wearos.aab"

- name: Upload release APK and ABB artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ env.OUTPUT_NAME }}
path: |
./androidos/build/outputs/apk/release/${{ env.OUTPUT_NAME }}.apk
./androidos/build/outputs/bundle/release/${{ env.OUTPUT_NAME }}.aab
./wearos/build/outputs/apk/release/${{ env.OUTPUT_NAME }}-wearos.apk
./wearos/build/outputs/bundle/release/${{ env.OUTPUT_NAME }}-wearos.aab
18 changes: 13 additions & 5 deletions fastlane/Fastfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,19 @@ platform :android do
desc "Deploy internal tracks to Google Play"
lane :deploy_internal do
supply(
track: 'internal',
aab: 'androidos/build/outputs/bundle/release/androidos-release.aab',
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
track: 'internal',
aab: 'androidos/build/outputs/bundle/release/androidos-release.aab',
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
)

supply(
track: 'wear:qa',
aab: 'wearos/build/outputs/bundle/release/wearos-release.aab',
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
)
end
end
67 changes: 65 additions & 2 deletions wearos/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import java.io.FileInputStream
import java.util.Properties

plugins {
id("com.android.application")
id("kotlin-android")
Expand All @@ -7,6 +10,19 @@ plugins {
alias(libs.plugins.compose.compiler)
}

val keystorePropertiesFile = rootProject.file("keystore.properties")
val keystoreProperties = Properties()
keystoreProperties.load(FileInputStream(keystorePropertiesFile))

val apikeyPropertiesFile = rootProject.file("apikey.properties")
val apikeyProperties = Properties()
apikeyProperties.load(FileInputStream(apikeyPropertiesFile))

@Suppress("UnstableApiUsage")
val gitBranchName = providers.exec {
commandLine("git", "rev-parse", "--abbrev-ref", "HEAD")
}.standardOutput.asText.get()

android {
namespace = "se.dennisgimbergsson.tennisscoreboard"
compileSdk = 35
Expand All @@ -16,14 +32,26 @@ android {
minSdk = 28
targetSdk = 35
versionCode = 1
versionName = "1.0"
versionName = "${buildVersionName()} ($versionCode)"
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

signingConfigs {
create("releaseConfig") {
keyAlias = keystoreProperties["KEYSTORE_KEY_ALIAS"] as String?
keyPassword = keystoreProperties["KEYSTORE_KEY_PASSWORD"] as String?
storeFile = file(keystoreProperties["KEYSTORE_FILE_PATH"] as String)
storePassword = keystoreProperties["KEYSTORE_PASSWORD"] as String
}
}

buildTypes {
release {
isMinifyEnabled = false
signingConfig = signingConfigs.getByName("releaseConfig")
isMinifyEnabled = true
isShrinkResources = true
isDebuggable = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
Expand All @@ -48,6 +76,7 @@ android {
}

kotlinOptions {
languageVersion = "2.0"
jvmTarget = "17"
}
}
Expand Down Expand Up @@ -122,4 +151,38 @@ dependencies {
androidTestImplementation(libs.androidx.compose.ui.unit)
// Needed for createComposeRule(), but not for createAndroidComposeRule<YourActivity>():
debugImplementation(libs.androidx.compose.ui.test.manifest)
}

tasks.register("printBuildName") {
val versionName = android.defaultConfig.versionName?.replace(".", "_")
?.replace(" ", "-#")
?.replace("(", "")
?.replace(")", "")
doLast {
println("$versionName")
}
}

private fun buildVersionName(): String {
var versionName = "undefined-version-name"
try {
// Gets the full branch name from Git.
val branchName = gitBranchName.trim()

// Only take the identifier part from the full branch name
// example from "release/1-0-0" to "1-0-0".
val branchIdentifierName = gitBranchName.trim()
.split("/")
.last()

// If it's a release build then replace the strokes with dots.
versionName = if (branchName.startsWith("release")) {
branchIdentifierName.replace("-", ".")
} else {
branchIdentifierName
}
} catch (ignored: Exception) {
println("Failed to get git branch")
}
return versionName
}

0 comments on commit 2f8f8d5

Please sign in to comment.