CI update for ER
This commit is contained in:
parent
e6444fe9c0
commit
cb4720f6d5
|
@ -0,0 +1,37 @@
|
||||||
|
name: ER APK Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request: { }
|
||||||
|
push:
|
||||||
|
branches: [ develop ]
|
||||||
|
|
||||||
|
# Enrich gradle.properties for CI/CD
|
||||||
|
env:
|
||||||
|
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
|
||||||
|
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
debug:
|
||||||
|
name: Build debug APKs ER
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.ref != 'refs/heads/main'
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
target: [ Gplay, Fdroid ]
|
||||||
|
# Allow all jobs on develop. Just one per PR.
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref == 'refs/heads/develop' && format('integration-tests-develop-{0}-{1}', matrix.target, github.sha) || format('build-debug-{0}-{1}', matrix.target, github.ref) }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.gradle/caches
|
||||||
|
~/.gradle/wrapper
|
||||||
|
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-gradle-
|
||||||
|
- name: Assemble ${{ matrix.target }} debug apk
|
||||||
|
run: ./gradlew assemble${{ matrix.target }}RustCryptoDebug $CI_GRADLE_ARG_PROPERTIES
|
|
@ -38,7 +38,7 @@ jobs:
|
||||||
yes n | towncrier build --version nightly
|
yes n | towncrier build --version nightly
|
||||||
- name: Build and upload Gplay Nightly APK
|
- name: Build and upload Gplay Nightly APK
|
||||||
run: |
|
run: |
|
||||||
./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES
|
./gradlew assembleGplayKotlinCryptoNightly appDistributionUploadGplayKotlinCryptoNightly $CI_GRADLE_ARG_PROPERTIES
|
||||||
env:
|
env:
|
||||||
ELEMENT_ANDROID_NIGHTLY_KEYID: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYID }}
|
ELEMENT_ANDROID_NIGHTLY_KEYID: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYID }}
|
||||||
ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD }}
|
ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD }}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
name: Build and release Element R nightly APK
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# Every nights at 4
|
||||||
|
- cron: "0 4 * * *"
|
||||||
|
|
||||||
|
env:
|
||||||
|
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
|
||||||
|
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
nightly:
|
||||||
|
name: Build and publish ER nightly Gplay APK to Firebase
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Python 3.8
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: 3.8
|
||||||
|
- uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.gradle/caches
|
||||||
|
~/.gradle/wrapper
|
||||||
|
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-gradle-
|
||||||
|
- name: Install towncrier
|
||||||
|
run: |
|
||||||
|
python3 -m pip install towncrier
|
||||||
|
- name: Prepare changelog file
|
||||||
|
run: |
|
||||||
|
mv towncrier.toml towncrier.toml.bak
|
||||||
|
sed 's/CHANGES\.md/CHANGES_NIGHTLY\.md/' towncrier.toml.bak > towncrier.toml
|
||||||
|
rm towncrier.toml.bak
|
||||||
|
yes n | towncrier build --version nightly
|
||||||
|
- name: Build and upload Gplay Nightly APK
|
||||||
|
run: |
|
||||||
|
./gradlew assembleGplayRustCryptoNightly appDistributionUploadGplayRustCryptoNightly $CI_GRADLE_ARG_PROPERTIES
|
||||||
|
env:
|
||||||
|
ELEMENT_ANDROID_NIGHTLY_KEYID: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYID }}
|
||||||
|
ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD }}
|
||||||
|
ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD }}
|
||||||
|
FIREBASE_TOKEN: ${{ secrets.ELEMENT_R_NIGHTLY_FIREBASE_TOKEN }}
|
|
@ -48,7 +48,7 @@ mv towncrier.toml towncrier.toml.bak
|
||||||
sed 's/CHANGES\.md/CHANGES_NIGHTLY\.md/' towncrier.toml.bak > towncrier.toml
|
sed 's/CHANGES\.md/CHANGES_NIGHTLY\.md/' towncrier.toml.bak > towncrier.toml
|
||||||
rm towncrier.toml.bak
|
rm towncrier.toml.bak
|
||||||
yes n | towncrier build --version nightly
|
yes n | towncrier build --version nightly
|
||||||
./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES
|
./gradlew assembleGplayKotlinCryptoNightly appDistributionUploadGplayKotlinCryptoNightly $CI_GRADLE_ARG_PROPERTIES
|
||||||
```
|
```
|
||||||
|
|
||||||
Then you can reset the change on the codebase.
|
Then you can reset the change on the codebase.
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
configurations.maybeCreate("default")
|
||||||
|
artifacts.add("default", file('matrix-rust-sdk-crypto.aar'))
|
Binary file not shown.
|
@ -236,7 +236,8 @@ dependencies {
|
||||||
implementation libs.google.phonenumber
|
implementation libs.google.phonenumber
|
||||||
|
|
||||||
// rustCryptoImplementation 'org.matrix.rustcomponents:crypto-android:0.2.1-SNAPSHOT'
|
// rustCryptoImplementation 'org.matrix.rustcomponents:crypto-android:0.2.1-SNAPSHOT'
|
||||||
rustCryptoImplementation files('libs/matrix-rust-sdk-crypto.aar')
|
// rustCryptoImplementation files('libs/matrix-rust-sdk-crypto.aar')
|
||||||
|
rustCryptoApi project(":library:rustCrypto")
|
||||||
|
|
||||||
testImplementation libs.tests.junit
|
testImplementation libs.tests.junit
|
||||||
// Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281
|
// Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281
|
||||||
|
|
|
@ -12,5 +12,6 @@ include ':library:external:jsonviewer'
|
||||||
include ':library:external:diff-match-patch'
|
include ':library:external:diff-match-patch'
|
||||||
include ':library:external:dialpad'
|
include ':library:external:dialpad'
|
||||||
|
|
||||||
|
include ':library:rustCrypto'
|
||||||
include ':matrix-sdk-android'
|
include ':matrix-sdk-android'
|
||||||
include ':matrix-sdk-android-flow'
|
include ':matrix-sdk-android-flow'
|
||||||
|
|
|
@ -65,6 +65,27 @@ def getVersionCode() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def getNightlyUniversalApkPath() {
|
||||||
|
def taskNames = gradle.getStartParameter().taskNames.toString()
|
||||||
|
if(taskNames.contains("RustCryptoNightly")) {
|
||||||
|
return "vector-app/build/outputs/apk/gplayRustCrypto/nightly/vector-gplay-rustCrypto-universal-nightly.apk"
|
||||||
|
} else if (taskNames.contains("KoltinCryptoNightly")) {
|
||||||
|
return "vector-app/build/outputs/apk/gplayKotlinCrypto/nightly/vector-gplay-kotlinCrypto-universal-nightly.apk"
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def getFirebaseAppId() {
|
||||||
|
def taskNames = gradle.getStartParameter().taskNames.toString()
|
||||||
|
if(taskNames.contains("RustCryptoNightly")) {
|
||||||
|
return "1:912726360885:android:94fb99347eaa36d100427c"
|
||||||
|
} else if (taskNames.contains("KoltinCryptoNightly")) {
|
||||||
|
return "1:912726360885:android:efd8545af52a9f9300427c"
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
static def gitRevision() {
|
static def gitRevision() {
|
||||||
def cmd = "git rev-parse --short=8 HEAD"
|
def cmd = "git rev-parse --short=8 HEAD"
|
||||||
return cmd.execute().text.trim()
|
return cmd.execute().text.trim()
|
||||||
|
@ -115,8 +136,6 @@ project.android.buildTypes.all { buildType ->
|
||||||
// 64 bits have greater value than 32 bits
|
// 64 bits have greater value than 32 bits
|
||||||
ext.abiVersionCodes = ["armeabi-v7a": 1, "arm64-v8a": 2, "x86": 3, "x86_64": 4].withDefault { 0 }
|
ext.abiVersionCodes = ["armeabi-v7a": 1, "arm64-v8a": 2, "x86": 3, "x86_64": 4].withDefault { 0 }
|
||||||
|
|
||||||
apply from: '../flavor.gradle'
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace "im.vector.application"
|
namespace "im.vector.application"
|
||||||
// Due to a bug introduced in Android gradle plugin 3.6.0, we have to specify the ndk version to use
|
// Due to a bug introduced in Android gradle plugin 3.6.0, we have to specify the ndk version to use
|
||||||
|
@ -230,8 +249,6 @@ android {
|
||||||
debug {
|
debug {
|
||||||
applicationIdSuffix ".debug"
|
applicationIdSuffix ".debug"
|
||||||
signingConfig signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
resValue "string", "app_name", "Element dbg"
|
|
||||||
resValue "color", "launcher_background", "#0DBD8B"
|
|
||||||
|
|
||||||
if (project.hasProperty("coverage")) {
|
if (project.hasProperty("coverage")) {
|
||||||
testCoverageEnabled = coverage.enableTestCoverage
|
testCoverageEnabled = coverage.enableTestCoverage
|
||||||
|
@ -239,8 +256,6 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
release {
|
release {
|
||||||
resValue "string", "app_name", "Element"
|
|
||||||
resValue "color", "launcher_background", "#0DBD8B"
|
|
||||||
postprocessing {
|
postprocessing {
|
||||||
removeUnusedCode true
|
removeUnusedCode true
|
||||||
removeUnusedResources true
|
removeUnusedResources true
|
||||||
|
@ -257,7 +272,6 @@ android {
|
||||||
applicationIdSuffix ".nightly"
|
applicationIdSuffix ".nightly"
|
||||||
versionNameSuffix "-nightly"
|
versionNameSuffix "-nightly"
|
||||||
// Just override the background color of the launcher icon for the nightly build.
|
// Just override the background color of the launcher icon for the nightly build.
|
||||||
resValue "color", "launcher_background", "#07007E"
|
|
||||||
// We need to copy paste this block, this is not done automatically by `initWith release`
|
// We need to copy paste this block, this is not done automatically by `initWith release`
|
||||||
postprocessing {
|
postprocessing {
|
||||||
removeUnusedCode true
|
removeUnusedCode true
|
||||||
|
@ -274,13 +288,13 @@ android {
|
||||||
// We upload the universal APK to fix this error:
|
// We upload the universal APK to fix this error:
|
||||||
// "App Distribution found more than 1 output file for this variant.
|
// "App Distribution found more than 1 output file for this variant.
|
||||||
// Please contact firebase-support@google.com for help using APK splits with App Distribution."
|
// Please contact firebase-support@google.com for help using APK splits with App Distribution."
|
||||||
artifactPath = "$rootDir/vector-app/build/outputs/apk/gplay/nightly/vector-gplay-universal-nightly.apk"
|
artifactPath = "$rootDir/${getNightlyUniversalApkPath()}"
|
||||||
// This file will be generated by the GitHub action
|
// This file will be generated by the GitHub action
|
||||||
releaseNotesFile = "CHANGES_NIGHTLY.md"
|
releaseNotesFile = "CHANGES_NIGHTLY.md"
|
||||||
groups = "external-testers"
|
groups = "external-testers"
|
||||||
// This should not be required, but if I do not add the appId, I get this error:
|
// This should not be required, but if I do not add the appId, I get this error:
|
||||||
// "App Distribution halted because it had a problem uploading the APK: [404] Requested entity was not found."
|
// "App Distribution halted because it had a problem uploading the APK: [404] Requested entity was not found."
|
||||||
appId = "1:912726360885:android:efd8545af52a9f9300427c"
|
appId = "${getFirebaseAppId()}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -323,12 +337,26 @@ android {
|
||||||
}
|
}
|
||||||
rustCrypto {
|
rustCrypto {
|
||||||
dimension "crypto"
|
dimension "crypto"
|
||||||
|
applicationIdSuffix ".corroded"
|
||||||
|
versionNameSuffix "-R"
|
||||||
|
resValue "string", "app_name", "ER"
|
||||||
|
|
||||||
// // versionName "${versionMajor}.${versionMinor}.${versionPatch}${getFdroidVersionSuffix()}"
|
// // versionName "${versionMajor}.${versionMinor}.${versionPatch}${getFdroidVersionSuffix()}"
|
||||||
buildConfigField "String", "CRYPTO_FLAVOR_DESCRIPTION", "\"rust-crypto\""
|
buildConfigField "String", "CRYPTO_FLAVOR_DESCRIPTION", "\"rust-crypto\""
|
||||||
// buildConfigField "String", "FLAVOR_DESCRIPTION", "\"RustCrypto\""
|
// buildConfigField "String", "FLAVOR_DESCRIPTION", "\"RustCrypto\""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variantFilter { variant ->
|
||||||
|
def names = variant.flavors*.name
|
||||||
|
def buildType = variant.buildType.name
|
||||||
|
// There is no nightly for fdroid
|
||||||
|
if (names.contains("fdroid") && buildType == "nightly") {
|
||||||
|
// Gradle ignores any variants that satisfy the conditions above.
|
||||||
|
setIgnore(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lintOptions {
|
lintOptions {
|
||||||
lintConfig file("../tools/lint/lint.xml")
|
lintConfig file("../tools/lint/lint.xml")
|
||||||
|
|
||||||
|
@ -422,4 +450,3 @@ dependencies {
|
||||||
debugImplementation libs.androidx.fragmentTesting
|
debugImplementation libs.androidx.fragmentTesting
|
||||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1'
|
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="debug_rationale">Rationale!</string>
|
<string name="debug_rationale">Rationale!</string>
|
||||||
</resources>
|
<string name="app_name">Element dbg</string>
|
||||||
|
</resources>
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="launcher_background">#FF5964</color>
|
||||||
|
</resources>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">ER</string>
|
||||||
|
</resources>
|
|
@ -0,0 +1,40 @@
|
||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "912726360885",
|
||||||
|
"firebase_url": "https://vector-alpha.firebaseio.com",
|
||||||
|
"project_id": "vector-alpha",
|
||||||
|
"storage_bucket": "vector-alpha.appspot.com"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:912726360885:android:94fb99347eaa36d100427c",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "im.vector.app.corroded.debug"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "912726360885-e87n3jva9uoj4vbidvijq78ebg02asv2.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyAFZX8IhIfgzdOZvxDP_ISO5WYoU7jmQ5c"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "912726360885-e87n3jva9uoj4vbidvijq78ebg02asv2.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "912726360885",
|
||||||
|
"firebase_url": "https://vector-alpha.firebaseio.com",
|
||||||
|
"project_id": "vector-alpha",
|
||||||
|
"storage_bucket": "vector-alpha.appspot.com"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:912726360885:android:94fb99347eaa36d100427c",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "im.vector.app.corroded.nightly"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "912726360885-e87n3jva9uoj4vbidvijq78ebg02asv2.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyAFZX8IhIfgzdOZvxDP_ISO5WYoU7jmQ5c"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "912726360885-e87n3jva9uoj4vbidvijq78ebg02asv2.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="launcher_background">#FF5964</color>
|
||||||
|
</resources>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">ER</string>
|
||||||
|
</resources>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="launcher_background">#0DBD8B</color>
|
||||||
|
</resources>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="launcher_background">#07007E</color>
|
||||||
|
</resources>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">Element Nightly</string>
|
||||||
|
</resources>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">Element</string>
|
||||||
|
</resources>
|
Loading…
Reference in New Issue